Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute.

Ich hab mittels SetWindowsHookEx einen Keyboard Hook....

Das ganze funktioniert auch schon perfekt...

Jetzt möchte ich bei einer Bestimmten Tastenkombination (z.B. Strg + 1) die Markierten Daten in den Zwischenspeicher kopieren (also das gleiche wie bei Strg+C) und dann gleich danach noch einen bestimmten quellcode ausführen.

also hätte ich folgendes bei der Tastenkombination Strg + 1 versucht

keybd_event(17, 0, 0, 0); // Strg down

keybd_event(67, 0, 0, 0); // c down

keybd_event(17, 0, 0x02, 0); // Strg up

keybd_event(67, 0, 0x02, 0); // c up

<-- und hier dann noch zusätzlichen Quellcode.

Das Problem ist dass die keybd_events irgendwie erst später abgehandelt werden! (also nach meinem zusätzlichen Quellcode)

Ich denke, dass es daran liegt, weil ich ja zu dem zeitpunkt noch mitten in der Behandlung von "Strg" + "1" bin. Also liegt das simulierte Strg+c in einer art warteschleifen...

Habt ihr eine Lösung für mich?

Geschrieben

weil ich nicht weiß was gerade markiert ist.

Die Tastenkombination gilt systemweit.

Man kann sich also theoretich im MSPaint, Word, Editor oder in irgendwelchen anderen X-Beliebigen Programmen befinden.

und wenn ich die Daten selbst in die Zwischenablage kopieren würde, müsste ich ja immer erst herrausfinden welche Anwendung gerade läuft, und welche daten Markiert sind.... usw.

:-(

Geschrieben

Zuerst ganz allgemein: Ich wäre ziemlich sauer, wenn irgendein Hook mir den Inhalt der Zwischenablage ersetzt, wenn ich Strg-1 drücke. Je nach Programm mache ich das häufiger.

also hätte ich folgendes bei der Tastenkombination Strg + 1 versucht
Wie erkennst du denn diese Tastenkombination? Hast du getestet, ob das funktioniert?

keybd_event(17, 0, 0, 0); // Strg down

keybd_event(67, 0, 0, 0); // c down

keybd_event(17, 0, 0x02, 0); // Strg up

keybd_event(67, 0, 0x02, 0); // c up

Also ich lasse immer zuerst C los, dann Strg. Aber Strg sollte doch gerade sowieso gedrückt sein. Oder legst du erst nach dem Up-Event der Strg-Taste los?

Das Problem ist dass die keybd_events irgendwie erst später abgehandelt werden! (also nach meinem zusätzlichen Quellcode)
Natürlich. Dein Hook läuft erst mal weiter. Das Programm hatte noch gar keine Gelegenheit, auf die Events zu reagieren, die du ausgelöst hast.

Die Tastenkombination gilt systemweit.

Eben nicht. Strg-C und Co. sind keine "systemweiten" Tastenkombinationen, sondern einfach nur in praktisch jedem Programm drin. Wenn es da windowsseitig einen Automatismus gäbe, könntest du den ja anstatt dieser Events nutzen.

Landen die Events eigentlich auch wieder in deinem Hook?

Geschrieben

Eben nicht. Strg-C und Co. sind keine "systemweiten" Tastenkombinationen, sondern einfach nur in praktisch jedem Programm drin. Wenn es da windowsseitig einen Automatismus gäbe, könntest du den ja anstatt dieser Events nutzen.

Naja es gibt schon einen Automatismus von Windows. Wenn ich einfach ein Fenster mit einem Editfeld erstelle kann ich da per Strg+C was rauskopieren bzw. mit Strg+V was einfügen ohne das ich das selber programmieren muss. Das ist also schon im Steuerelement verankert.

Bei komplexeren Sachen hast du natürlich recht.

Geschrieben
Zuerst ganz allgemein: Ich wäre ziemlich sauer, wenn irgendein Hook mir den Inhalt der Zwischenablage ersetzt, wenn ich Strg-1 drücke. Je nach Programm mache ich das häufiger.

Da hast du natürlich recht. aber das Programm werde nur ich verwenden. und ich MÖCHTE auch dass der markierte teil in der zwischenablage landen, nur dass noch zusätzlicher quellcode ausgeführt wird.

Wie erkennst du denn diese Tastenkombination? Hast du getestet, ob das funktioniert?

Ja die Tastenkombination erkenne ich bereits richtig. und der hook funktioniert. Habs einmal ganz einfach getestet in dem ich einfach "MessageBox" in meinem hook geschrieben habe. und dann erschien die messagebox immer bei strg+1. also der hook, läuft einwandfrei.

Also ich lasse immer zuerst C los, dann Strg. Aber Strg sollte doch gerade sowieso gedrückt sein. Oder legst du erst nach dem Up-Event der Strg-Taste los?

nein ich lege beim Down-Event los. => hast recht, Strg müßte noch gedrückt sein.

Natürlich. Dein Hook läuft erst mal weiter. Das Programm hatte noch gar keine Gelegenheit, auf die Events zu reagieren, die du ausgelöst hast.

Ja sowas in der Art hab ich mir gedacht. Das Strg+C liegt also in der Warteschleife bis ich mein Strg+1 abgearbeitet habe....

Die frage ist, kann ich wärend ich im Strg+1-hook bin, diese Warteschleife abarbeiten lassen?

ich habe mal sowas ähnliches in einem anderen programm gehabt. da konnte ich mit

while(PeekMessage(&msg, NULL, 0,0,PM_NOREMOVE))

AfxGetApp()->PumpMessage();

die Warteschleife meines eigenen programms abarbeiten. Aber gibt es sowas auch für mein jetziges problem?

Landen die Events eigentlich auch wieder in deinem Hook?

die events landen zwar im hook, aber der hook reagiert nur bei Strg+1 und hat keinen quellcode oder so für Strg+C. Das lasse ich ganz normal vorbei...

Geschrieben
Ja sowas in der Art hab ich mir gedacht. Das Strg+C liegt also in der Warteschleife bis ich mein Strg+1 abgearbeitet habe....

Die frage ist, kann ich wärend ich im Strg+1-hook bin, diese Warteschleife abarbeiten lassen?

Das halte ich für den falschen Ansatz. Ich glaube auch nicht, dass das überhaupt geht.

Wie wäre es denn, wenn du einfach bei Strg-1 ein Flag setzt, und wenn dann kurze Zeit später dein Strg-C in deinem Hook aufschlägt, prüfst du das Flag und legst gegebenenfalls los?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...