Autor |
Beitrag |
MSC
      
Beiträge: 63
Win XP Home, Win Vista Buisiness
Delphi 7 Enterprise
|
Verfasst: Do 28.12.06 12:48
Hallo
Ich habe durch die Suchfunktion eine recht gute Möglichkeit gefunden, um Tasten zu "drücken".
Jetz habe ich das Problem, das ich auch Tastenkombinationen brauche, wie z.B.: Strg+C und Strg+V
Strg:
Delphi-Quelltext 1: 2: 3: 4:
| keybd_event(vk_shift,0,0,0); keybd_event(ord($11),0,0,0); keybd_event(ord($11),0,keyeventf_keyup,0); keybd_event(vk_shift,0,keyeventf_keyup,0); | V:
Delphi-Quelltext 1: 2: 3: 4:
| keybd_event(vk_shift,0,0,0); keybd_event(ord($56),0,0,0); keybd_event(ord($56),0,keyeventf_keyup,0); keybd_event(vk_shift,0,keyeventf_keyup,0); |
Das ineinaderschachteln und Zahlen ändern hat irgendwie nichts gebracht, in der Delphi Hilfe habe ich den Befehl nicht gefunden.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| keybd_event(vk_shift,0,0,0); keybd_event(ord($11),0,0,0); keybd_event(ord($11),0,keyeventf_keyup,0); keybd_event(vk_shift,0,0,0); keybd_event(ord($56),0,0,0); keybd_event(ord($56),1,keyeventf_keyup,1); keybd_event(vk_shift,1,keyeventf_keyup,1); keybd_event(vk_shift,0,keyeventf_keyup,0); |
Nun ist die Frage, ist das mit dieser Art und Weise überhaupt möglich, oder gibt es vordeffinerte "Kopier" und "Einfügen" Tasten, bzw. gibt es bessere Methoden für Tasten?
(brauche Tab, Enter, Pfeiltasten, Leertaste, Kopieren & Einfügen)
Dieses Programm soll in einem anderen Programm Abläufe steuern.
Die Tastencodes habe ich von dort: www.delphipraxis.net...&highlight=vk%2A
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 28.12.06 13:22
MSC hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| keybd_event(vk_shift,0,0,0); keybd_event(ord($11),0,0,0); keybd_event(ord($11),0,keyeventf_keyup,0); keybd_event(vk_shift,0,0,0); keybd_event(ord($56),0,0,0); keybd_event(ord($56),1,keyeventf_keyup,1); keybd_event(vk_shift,1,keyeventf_keyup,1); keybd_event(vk_shift,0,keyeventf_keyup,0); |
Nun ist die Frage, ist das mit dieser Art und Weise überhaupt möglich, oder gibt es vordeffinerte "Kopier" und "Einfügen" Tasten, bzw. gibt es bessere Methoden für Tasten?
(brauche Tab, Enter, Pfeiltasten, Leertaste, Kopieren & Einfügen)
Dieses Programm soll in einem anderen Programm Abläufe steuern.
Die Tastencodes habe ich von dort: www.delphipraxis.net...&highlight=vk%2A |
Also einiges hast du noch falsch verstanden: ord(chr) ist dafür da, um den Ordinalen Wert eines Characters zurückzuliefern. Es hat keinen sinn, als Parameter einen Ordinalen Wert einzugeben, weil dann genau das selbe wieder herauskommt.
Also ist der Wert für Strg: VK_CONTROL = 17; VK_CONTROL = $11;
diese Konstanten sind in Windows deklariert, und diese hier hat also Dezimal den wert 17 und Hexadezimal den wert $11.
Wenn der dritte parameter der Procedure KeyBd_Event = 0 ist, dann heißt dass, das die Taste gedrückt wurde (das Ereignis OnKeyDown ausgelöst wurde). Wenn der dritte parameter = KEYEVENTF_KEYUP oder 2 ist, dann heißt das, dass die taste losgelassen wurde (Das Ereignis OnKeyUp wurde ausgelöst).
Also musst du zuerst die Strg-Taste drücken, dann die C-Taste (für Kopieren zb) drücken, dann die C-Taste loslassen und dann die Strg-Taste loslassen.
Die Shifttaste darfst du nicht drücken. Wenn du etwas kopieren willst, dann drückst du sie auch nicht. In manchen programmen bedeutet Shift+Strg+C vllt was ganz was anderes als kopieren.
Zuletzt bearbeitet von Jakob Schöttl am Do 28.12.06 14:27, insgesamt 1-mal bearbeitet
|
|
MSC 
      
Beiträge: 63
Win XP Home, Win Vista Buisiness
Delphi 7 Enterprise
|
Verfasst: Do 28.12.06 13:53
Das was du geschrieben hast mit dem Shift leuchtet mir ein, aber bei "VK_CTRL = $11;" sagt mir Delphi [Fehler] Unit1.pas(57): Undefinierter Bezeichner: 'VK_CTRL'
Muss ich dazu extra etwas deklarieren, oder hab ich etwas falsch gemacht?
Oder muss es so in richtung "keybd_event(VK_CTRL = $11);" gehen, aber da macht Delphi die selbe Fehlerausschrift.
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Do 28.12.06 14:26
Ah, Sorry, ich hab falsch geraten. Die Konstante heißt VK_CONTROL (der Wert braucht dich nicht zu interessieren).
Du drückst sie also durch KeyBd_Event(VK_CONTROL,0,0,0) und lässt sie los durch KeyBd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0). Das gleich eben auch bei allen anderen Tasten, nur das du VK_CONTROL durch einen anderen Tasten-Code ersetzt.
Du kannst aber nicht einfach Tastendrücke an andere Anwendungen schicken. Mit KeyBd_Event geht das nur an die eigene Anwendung. Schau dir dazu das hier an!
|
|
MSC 
      
Beiträge: 63
Win XP Home, Win Vista Buisiness
Delphi 7 Enterprise
|
Verfasst: Do 28.12.06 15:02
OK!
THX klappt
Ich habe gemerkt, das ich auch " KeyBd_Event(ord($11),0,0,0);" verwenden kann. Das geht ebenfalls.
Vielen Dank
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 25.06.07 20:34
MSC hat folgendes geschrieben: | Jetz habe ich das Problem, das ich auch Tastenkombinationen brauche, wie z.B.: Strg+C und Strg+V |
Und warum kein WM_COPY und WM_PASTE an des betreffende Edit senden? Oder Wenn man den Inhalt der Zwischenablage nicht kaputt machen will WM_GETTEXT.
|
|
|