Key abfangen, auch wenn Fenster keinen Fokus hat

Alles rund um die Programmierung mit Qt
Antworten
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Key abfangen, auch wenn Fenster keinen Fokus hat

Beitrag von nexus »

Hallo,

mein Problem steht ja schon oben. Wie kann ich gedrückte tasten abfragen, auch wenn mein Programm gerade nicht den Fokus hat?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du willst einen Key-Logger programmieren? => Nicht mit Qt
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Wer hat denn was von Keylogger gesagt? Will ein Tool programmieren welches einen Screenshot macht und diesen sofort speichert. Funktioniert auch soweit, allerdings funktioniert das Abfragen der Druck-Taste nur, wenn das Programm auch den Fokus hat...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Niemand. Aber wenn man nur die Hälfte der Informationen bekommt, muß man halt ein bisschen raten.

Und das was du vorhast, ist Sache des Fenstermanagers und must du mit diesem ausmachen => keine Qt-Sache...
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Wer hat denn was von Keylogger gesagt?
Spätestens wenn du nen gescheites Virenprogramm laufen hasst, wird das hoffentlich sowas behaupten :-) Also zumindest wenn du mit SetWindowsHookEx arbeitest.

ALso generell geht sowas, ist halt nur kein Standardverhalten für Apps. Also wirst sowas kaum in der Qt finden.

Ciao ...
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

So habs jetzt mal Versucht umzusetzen. Allerdings bekomme ich es nicht hin.
Zum einen funktioniert der HotKey trotzdem nur, wenn das Programm den Fokus hat oder es kommt dann einfach keine Event an. Und zum anderen bekomme ich keine WM_HOTKEY Message, wenn meine definierte Taste gedrückt wurde.

Mein Code sieht gekürzt so aus:

Code: Alles auswählen

#include <windows.h>

MultiShot::MultiShot() {
    [...]
    RegisterHotKey(winId(), 1, 0, VK_PRINT);
    [...]
}

bool MultiShot::winEvent(MSG *message, long *result) {
    qDebug() << "Win Event";
    *result = 0;
    if(message->message == WM_HOTKEY) {
        qDebug() << "Hotkey";
         if(message->wParam == 1) {
             qDebug() << "Print";
              makeScreenShot();
         }
         return true;
    }
    return false;
}
Hab auch schon versucht, das Ganze über den QApplication::winEventFilter zu implementieren. Hatte dort jedoch das selbe Resultat.
Ich weiß jetzt auch nicht, ob das Problem bei der Windows API oder bei Qt zu suchen ist...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Wie installiert man qxt unter windows?

In der Readme steht ganz normal mit configure.bat && make && make install. Das Kompilieren scheint zu funktionieren, aber das make install installiert qxt nicht.

Edit: Hat sich erledigt, gab anscheinend irgendwelche Konflikte mit der make Version von WinAVR.

Edit: Danke. Der globale Shortcut funktioniert jetzt. Problem ist jetzt nur noch, dass es nicht über die Print Taste funktioniert. Entsprechender Key wurde mit "Qt::Key_Print" angegeben...
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Also scheinbar kommen manche Keys nicht bei meinem Programm an, bspw. die Print oder Windows Taste. Woran könnte das liegen?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Vermutlich werden die vorher gekidnapped. Ich würde auf BS tippen ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Kann man was dagegen tun?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich hatte schon mal geschrieben, daß dies Sache des Fensermanagers ist. Und auch dieser hat eine Doku.
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Dann kannst du mir ja auch sicher einen Link schicken, wo dies dokumentiert ist. Ich hab bisher nichts gefunden, sonst würd ich nicht fragen.

Edit: Habs nun anders gelöst.
Antworten