Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Probleme mit PostMessage(WM_KEYDOWN) (https://www.delphipraxis.net/77991-probleme-mit-postmessage-wm_keydown.html)

Periander 27. Sep 2006 18:53


Probleme mit PostMessage(WM_KEYDOWN)
 
Hallo ich habe folgendes Problem:
Ich will ein Programm schreiben, dass die ausgewählte Taste einem beliebigen andern Programm simuliert. Dazu habe ich eine Combobox eingerichtet, in der man die Tasten wählen kann.
Dieses erkennt dann das Programm:

Delphi-Quellcode:
 ch := ar[i].var1;
     Case ch of

           0 :begin c:=vk_F1; end;
           1 :begin c:=vk_F2; end;
           2 :begin c:=vk_F3; end;
           3 :begin c:=vk_F4; end;
                    (...)
           26 :begin c:=Ord('a'); end;
           27 :begin c:=Ord('b'); end;
           28 :begin c:=Ord('c'); end;
                    (...)
und soll diese dann simulieren:
Delphi-Quellcode:
       if ar[i].var1 < 26 then
       begin
       PostMessage(w,WM_KEYDOWN,c,1);
       pause(ar[i].zeit,i);
       PostMessage(w,WM_KEYUP,c,1);
       end;
       if ar[i].var1 > 25 then
       begin
       PostMessage(w,WM_KEYDOWN,c,0);
       pause(ar[i].zeit,i);
       PostMessage(w,WM_KEYUP,c,0);
       end;
Das klappt soweit mit allen "vk_" tasten auch wunderbar, allerdings funktioniert es mit den chars nicht! Ich habe schon soviel ausprobiert...

Ich hoffe ihr könnt mir weiterhelfen.

xaromz 27. Sep 2006 19:13

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
Hallo,

ich würde vermuten, Du musst Großbuchstaben senden (65 = A, 66 = B usw.). Ob ein Großbuchstabe oder ein Kleinbuchstabe gemeint ist, hängt ja vom Status der Shifttaste ab. Und die sendet ebenfalls ein KEYDOWN/KEYUP-Paar.

Gruß
xaromz

Periander 27. Sep 2006 20:08

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
Danke für dir schnelle antwort.

du meinst, sowas hier: (ohne die Variable)

Delphi-Quellcode:
       begin
       PostMessage(w,WM_KEYDOWN,66,0);
       pause(ar[i].zeit,i);
       PostMessage(w,WM_KEYUP,66,0);
       end;
Das funktioniert nicht, oder wie genau meinst du das?
Verzeiht, wenn mir teilweise Grundkenntnisse fehlen.

SirThornberry 27. Sep 2006 20:13

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
bei der Keymessage bekommst du (soweit ich mich erinnere) nicht das Zeischen sondern die Taste. Du musst zu der Taste also auch noch weitere Dinge mit schicken (Keydown, keydown-count etc.)

Christian Seehase 27. Sep 2006 21:49

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
Moin Periander,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Bei WM_KEYDOWN kann der letzte Wert 0 sein, bei WM_KEYUP solltest Du aber mindestens $C0000000 für lParam angeben.
(siehe MSDN-Library durchsuchenWM_KEYUP)

Periander 30. Sep 2006 08:57

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
Hmm... leider hat nichts davon funktioniert.

Könntet ihr vielleicht einen Beispielcode posten, der mit der PostMessage einen Buchstaben schickt? Ich habe die Vorahnung, dass ich etwas ganz kleines falsch mache.

Danke

SirThornberry 30. Sep 2006 08:59

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
für Buchstaben kannst du übrigens wm_char nehmen.

Periander 30. Sep 2006 09:41

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
also folgendes funktioniert jetzt:

Delphi-Quellcode:
postmessage(form2.Efname.Handle, wm_char, ord('\'), 0);
will ich das zeichen aber an ein anderes fenster schicken, mit:

Delphi-Quellcode:
w := FindWindow(NIL,('Name des Fensters'));

sendmessage(w,wm_char,ord('\'),0);
geht es nichtmehr (auch nicht mit postmessage)

EWeiss 30. Sep 2006 10:05

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
Zitat:

Zitat von Periander
also folgendes funktioniert jetzt:

Delphi-Quellcode:
postmessage(form2.Efname.Handle, wm_char, ord('\'), 0);
will ich das zeichen aber an ein anderes fenster schicken, mit:

Delphi-Quellcode:
w := FindWindow(NIL,('Name des Fensters'));

sendmessage(w,wm_char,ord('\'),0);
geht es nichtmehr (auch nicht mit postmessage)

Ich denke das Sendmessage nicht die geeignete API dafür ist.
Versuchs mal mit SendKeys ;)

SendKeys('{ENTER}', True)
Simuliert den druck auf die Enter Taste und sendet sie an die andere anwendung

Alternativ ginge dies vielleicht auch noch.
SendMessageByNum(hWnd, WM_CHAR, 13, 0) 13 ist das ASC zeichen für ENTER.

Text wird so gesendet
SendMessageByString(hWnd, WM_SETTEXT, 0, '\')


gruß

Periander 30. Sep 2006 10:39

Re: Probleme mit PostMessage(WM_KEYDOWN)
 
was für "uses" brauche ich dafür?
Er erkennt diese art von API nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Seite 1 von 2  1 2      

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