Seite 1 von 1

Key abfangen, auch wenn Fenster keinen Fokus hat

Verfasst: 24. Februar 2011 03:22
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?

Verfasst: 24. Februar 2011 09:04
von upsala
Du willst einen Key-Logger programmieren? => Nicht mit Qt

Verfasst: 24. Februar 2011 19:40
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...

Verfasst: 24. Februar 2011 20:40
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...

Verfasst: 25. Februar 2011 09:28
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 ...

Verfasst: 26. Februar 2011 20:25
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...

Verfasst: 26. Februar 2011 20:46
von Christian81

Verfasst: 26. Februar 2011 21:58
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...

Verfasst: 27. Februar 2011 18:12
von nexus
Also scheinbar kommen manche Keys nicht bei meinem Programm an, bspw. die Print oder Windows Taste. Woran könnte das liegen?

Verfasst: 28. Februar 2011 13:11
von padreigh
Vermutlich werden die vorher gekidnapped. Ich würde auf BS tippen ...

Verfasst: 28. Februar 2011 17:49
von nexus
Kann man was dagegen tun?

Verfasst: 28. Februar 2011 19:49
von upsala
Ich hatte schon mal geschrieben, daß dies Sache des Fensermanagers ist. Und auch dieser hat eine Doku.

Verfasst: 28. Februar 2011 21:18
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.