[GELÖST] Auf Keyevents reagieren auch ohne Fokus?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] Auf Keyevents reagieren auch ohne Fokus?

BeitragDi, Jan 28, 2014 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe da ein Problemchen: Ich schreibe momentan eine Anwendung, das auf benutzte Hotkeys reagieren soll (Strg + C, Strg + V, etc.). Dieses Programm hat nicht unbedingt den Fokus. Das Problem dabei ist, wenn es den Fokus verliert, reagiert das Programm auch nicht mehr auf die Hotkeys. Die Frage ist jetzt: Kann man das irgendwie machen, dass das Programm auch bei Verlust des Fokuses weiterhin auf Hotkeys reagiert? Wenn ja, wie?

Edit: Noch eine kurze Frage, das betrifft aber eher Windows: Wenn ich eine Datei rechtsklicke und dann im Kontextmenü "kopieren" oder "ausschneiden" auswähle, wie kann ich das in BMax erfassen? Geht das überhaupt? Oder gibt es eine Möglichkeit durch "analysieren" des RAMs einen solchen Klick zu ermitteln (weil die Datei dann ja im RAM steht...)?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mi, Jan 29, 2014 19:46, insgesamt einmal bearbeitet

count-doku

BeitragDi, Jan 28, 2014 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

zu ersterem solltest du dir GetKeyState und GetAsyncKeyState von der Winapi mal anschauen das gibts per pub.Win32 auch in Blitzmax und damit kannst du Systemweit alle Tasten abfragen.
Einfach mal das Pub.Win32 Modul und die Msdn befragen.

Ungefähr:
BlitzMax: [AUSKLAPPEN]
Extern "Win32"
Function GetAsyncKeyState:Int(vKey:Int)
End Extern
Function isKeyDown(i)
Return (GetAsyncKeyState(i) Shl 16 Shr 31)
End Function

Gibt dann 1 zurück, wenn die Taste i gedrückt wurde.


lg,
Count-Doku
 

CO2

ehemals "SirMO"

BeitragDi, Jan 28, 2014 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, auf welches Event muss ich dann bei der MaxGUI warten? Wenn ich es mit EVENT_KEYDOWN oder EVENT_KEYHIT probiere, funktioniert es nicht...
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Jan 28, 2014 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
MaxGUI hat damit nichts mehr am Hut - du benutzt die WinAPI um die Tastenabfrage zu machen. Mit den Funktionen die count-doku nannte.

Edit: Du könntest auf ein Timer-Event lauschen, um die Tasten zu prüfen, falls das die Frage beantwortet.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ZEVS

BeitragDi, Jan 28, 2014 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu deiner zweiten Frage: Siehe die Clipboard Operations Dokumentation. Ich habe einen Code ausgegraben, der einen in der Zwischenablage befindlichen Text ausliest; für Dateien müsstest du wahrscheinlich einiges ändern:
BlitzMax: [AUSKLAPPEN]
Extern "Win32"
Function OpenClipboard%(hwnd:Int)
Function CloseClipboard()
Function GetClipboardData:Byte Ptr(Format:Int)
End Extern

Const CF_TEXT% = $01


Function TextFromClipboard:String()
If Not OpenClipboard(0) Then
DebugLog "failed to open clipbord for read"
Return ""
EndIf
Local TextBuf:Byte Ptr
TextBuf = GetClipboardData(CF_TEXT)
CloseClipboard()
Local result$ = String.FromCString(TextBuf)
Return result
End Function


Zu beiden Fragen: Ich finde es allgemein beängstigend, wenn ein im Hintergrund laufendes Programm die kopierten Dateien auswertet oder - schlimmer noch - die Tastatur überwacht (die benutze ich z.B. dazu, meine Passwörter einzugeben). Meines Erachtens reicht die Hotkey-Funktion Alt-Tab völlig aus, um schnell auf nicht fokussierte Fenster zu wechseln.

ZEVS

count-doku

BeitragDi, Jan 28, 2014 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@ ZEVS Bedenken:
Stimme dir zwar zu, es gibt aber einige Fälle wo ich es verwende:
- Auto AFK Modus für einen Chat
- Mediacontroller, also Musikplayer auf anderen Programmen per Hotkey steuern
- TaskKiller, ein Programm, welches das aktive Fenster per Hotkey schließt.

Somit dürfte jedes Programm, welches windowsweit Tasten abfragen kann ein potentieller Keylogger sein, leider ;(

lg,
Count-Doku

DAK

BeitragDi, Jan 28, 2014 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
count-doku hat Folgendes geschrieben:
Somit dürfte jedes Programm, welches windowsweit Tasten abfragen kann ein potentieller Keylogger sein, leider ;(


Da es unter Windows kein ausgereiftes Berechtigungssystem gibt kann jedes Programm unter Windows windowsweit Tasten abfragen.
Gewinner der 6. und der 68. BlitzCodeCompo
 

CO2

ehemals "SirMO"

BeitragDi, Jan 28, 2014 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zunächst vielen Dank für die bisherigen Antworten!

Ich habe es jetzt soweit hinbekommen mit dem Erkennen der Tastenanschläge (Dank der Funktion von ZEVS Wink).

@ ZEVS: Keine Sorge Wink Es läuft nicht so weit im Hintergrund, dass es nur noch ein Prozess von 100 ist... Es ging jetzt nur darum, dass ich die Hotkeys erkennen kann...

Ich habe mich auch mal bei http://msdn.microsoft.com/en-u...85%29.aspx schlaugemacht, welche möglichen Formate es für die Funktion GetClipboardData() gibt. Erstaunlicherweise trifft ja keins von den angegeben richtig zu: Das eine ist nur für Bilder, das andere nur für Ton-Dateien und ein drittes ist (so wie ich es verstanden habe) nur dann "aktiv", wenn ein Programm Drag-and-Drop benutzt... Ich frage mich, warum es nicht DAS Format für Dateien gibt?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Thunder

BeitragMi, Jan 29, 2014 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
CO2 hat Folgendes geschrieben:
Oder gibt es eine Möglichkeit durch "analysieren" des RAMs einen solchen Klick zu ermitteln (weil die Datei dann ja im RAM steht...)?

CO2 hat Folgendes geschrieben:
Ich habe mich auch mal bei http://msdn.microsoft.com/en-u...85%29.aspx schlaugemacht, welche möglichen Formate es für die Funktion GetClipboardData() gibt. Erstaunlicherweise trifft ja keins von den angegeben richtig zu: Das eine ist nur für Bilder, das andere nur für Ton-Dateien und ein drittes ist (so wie ich es verstanden habe) nur dann "aktiv", wenn ein Programm Drag-and-Drop benutzt... Ich frage mich, warum es nicht DAS Format für Dateien gibt?


Nun, wenn ich das richtig verstanden habe, findest du deswegen nichts, weil Windows bei einem Klick auf Kopieren oder Ausschneiden nicht die ganze Datei in den RAM lädt Wink Ich könnte mit meinen 4 GB Speicher also nur Dateien mit ~ 3 GB bewegen, wenns gut geht.
Nein, wie ich das jetzt ergoogelt habe, wird ein Datei-Handle ins Clipboard kopiert (ich hatte vermutet, es ist der Pfad).

http://stackoverflow.com/quest...-clipboard
http://www.autohotkey.com/boar...clipboard/

Der ganze Vorgang beschrieben auf msdn
(Dateien kopieren zählt also laut msdn zu Drag'n'Drop)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group