Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastatureingabe senden (https://www.delphipraxis.net/106056-tastatureingabe-senden.html)

Wotan89 4. Jan 2008 13:39


Tastatureingabe senden
 
Ich wollte den Befehl KeyBd_Event() mit Messages "nachbauen", z.B. mit Postmessage. Da dieß nicht geklappt hat und ich vieles ausprobiert habe, was alles nicht perfekt war möchte ich nur den Code zeigen, welcher gar nicht klappt und bei nur auf Verwunderung stößt:
Delphi-Quellcode:
var hwnd:cardinal;
begin
hwnd:=getfocus;
postmessage(hwnd,WM_KEYUP,13,0);
postmessage(hwnd,WM_KEYUP,13,0);
end;
Natürlich wollte ich erteinmal mit einer einfachen Enter-Eingabe beginnen. Wie ich Lparam später noch zusammensetzen muss weiß ich jetzt noch gar nicht. Wär toll wenn ihr da was fändet. Eigentlich müsste ich doch das Handle vom Fenster erhalten, welches den Fokus für Tastatureingaben hat:http://msdn2.microsoft.com/en-us/library/ms646294.aspx
Trotzdem passiert garn nichts oder wenn ganz wenig. :( Ich hoffe ihr könnt mir helfen.

DeddyH 4. Jan 2008 13:48

Re: Tastatureingabe senden
 
Meine Win32API-Hilfe sagt dazu:
Zitat:

The GetFocus function retrieves the handle of the window that has the keyboard focus, if the window is associated with the calling thread's message queue.

Wotan89 4. Jan 2008 13:51

Re: Tastatureingabe senden
 
Ich hab ja uch das Ziel ein Window mit den Messages zu "erreichen", welches überhaupt Tastendrücke verarbeiten kann. _Oder hab ich da was falsch übersetzt?

DeddyH 4. Jan 2008 14:03

Re: Tastatureingabe senden
 
Du meinst vermutlich eine andere Anwendung, oder? Diese dürfte im Normalfall kaum mit Deiner MessageQueue verknüpft sein ;) Unter "Remarks" heißt es in meiner Hilfe weiter:
Zitat:

Remarks

Even if GetFocus returns NULL, another thread's queue may be associated with a window that has the keyboard focus.
Use the GetForegroundWindow function to retrieve the handle to the window with which the user is currently working. You can associate your thread's message queue with the windows owned by another thread by using the AttachThreadInput function.

Wotan89 4. Jan 2008 14:13

Re: Tastatureingabe senden
 
Ah ok ;) danke. Mit GetForeGroundWindow hab ich es auch schon versucht. Trotzdem erreicht die "Enter-Eingabe" nicht jedes Fenster z.B. mein Delphi, da GetForeGroundWindow das ChildWindow nicht wiedergibt. Zumindest so hab ich mir das erklärt.

Wotan89 5. Jan 2008 11:19

Re: Tastatureingabe senden
 
Um es nocheinmal zu verdeutlichen: Ich brüchte eine GetForeGround-Function für ChildWindows, damit ich das ChildWindow erhalte, welches gerade bearbeitet wird oder mit welchem ich arbeite... Bis jetzt hab ich keine Lösung gefunden, wär echt super, wenn noch jemand was dazu weiß. :-D

DeddyH 5. Jan 2008 12:22

Re: Tastatureingabe senden
 
Ich habe das zwar noch nie gemacht, aber die Reihenfolge müsste wohl so sein:
- mit GetForegroundWindow aktives Fenster ermitteln
- mit AttachThreadInput in dessen MessageQueue einklinken
- mit GetFocus das aktive Eingabefenster ermitteln

Falls das falsch ist, möge man mich bitte korrigieren.

Wotan89 5. Jan 2008 12:30

Re: Tastatureingabe senden
 
Danke ich werde es mal ausprobieren, allerdings muss ich mich mehr mit AttachThreadInput beschäftigen, da ich es wahrscheinlich dreimal falsch übersetze und dann nur die hälfte lese :-D . Nochmal danke.

Wotan89 5. Jan 2008 13:53

Re: Tastatureingabe senden
 
Es hat geklappt! Danke für die Hilfe :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz