Autor |
Beitrag |
DeadlyAppearance
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Di 10.12.02 10:33
Hiho, mal ne Frage:
Ich brauche ein Programm, was mit einem Timer alle 60 sec den Tastendruck 1 vortäuscht. Also ich möchte, dass das Programm im Hintergrund läuft(nicht ausgewählt) und eine andere Software, z.B. Word nun denkt, das die Taste 1 gedrückt wurde und eine 1 Schreibt.
Ich glaube es könnte irgend wie SendMessage functionieren, habe aber leider noch nicht so die Ahnung von Delphi, plz help.
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Di 10.12.02 11:21
wie wärs mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var hnd:= HWND; hnd := findwindow('Microsoft Word'); if hnd <> 0 then begin setforegroundwindow(hnd); sendkeys('{1}'); end; |
um den befehl sendkeys benutzen zu können musst du die Unit sndkey32.pas zu deinem Projekt hinzufügen (ist auf der Delphi-CD, aber auch mit google leicht zu finden)
gruss retnyg
Moderiert von Klabautermann: Code- durch Delphi-Tags ersetzt.
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Di 10.12.02 11:53
Schin mal big Thx, nur noch ne Frage, wo her weis ich, wie son Fenster heißt?
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Di 10.12.02 12:05
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 10.12.02 12:06
FindWindow brauch zwei Parameter: 1. Klassennamen, 2. Fenstertext. Nutzt du nur eins von beiden übergib bei dem ungenutzen nil.
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Di 10.12.02 13:42
Cool, danke es funzt, thx @ all.
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Mi 11.12.02 12:27
So, also hab es nun hinbekommen, funktioniert wunder bar. Doch nun stehe ich vor de Problem, dass ich die Tasten "Shift + s" vortäuschen muss. Hab aber in keiner ASCII Tabelle gefunden, wie ich die Shifttaste anspreche. Plz help.
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 11.12.02 12:30
Du willst nicht zufälligerweise auf einen Button klicken? 
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Mi 11.12.02 13:00
Nein möchte ich nicht. Aber ich möchte einer Software vortäuschen, als ob man die beidem Tasten Shift + s drücken würde.
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 11.12.02 13:04
Wie reagiert denn das Programm auf Shift+s?
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Mi 11.12.02 13:26
Ist halt wie ein Shortcut, nir wie man halt ne Zahl vortäuscht, weis ich nun. Für was ich es brauche, sollte ja un wichtig sein, ich möchte jediglich wissen, wich ich einem Programm das gleiche übermittel, wie wenn ich die Shift Taste gedrück hätte.
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 11.12.02 13:35
Für was du das brauchst ist nicht unbedingt unwichtig, eventuell findet sich ja eine besser Lösung.
Ist der Shortcut einem Menüeintrag zugeordnet oder einem Button oder sonst einem Control?
Wenn ich eine fremde Anwendung "fernsteuern" will, dann ist es meist einfacher, wenn man sich von der Vorstellung löst es so machen zu wollen, als wenn man es selber bedient. Besser ist es man macht es so, wie es Windows im Endeffekt macht. Also statt versuchen zu wollen einen Mausklick zu simulieren, ist es einfacher, wenn man an das Programm die Message schickt, die auch Windows an das Programm bei einem Mausklick schickt. Bei einem Button wäre das zum Beispiel BM_CLICK. Das ist sehr viel einfachher, als wenn ich jetzt den Shortcut an das Programm sende, auf den der Button normalerweise reagiert.
|
|
DeadlyAppearance 
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Mi 11.12.02 14:09
Wenn es auch mit so einer Message geht, isses ja k, dann wäre ein Beispiel sehr net. Das Programm soll halt einfach glauben, ich würde Shift + s drücken.
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
Ghost
      
Beiträge: 17
|
Verfasst: Mo 16.12.02 18:12
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| Procedure PostKeyEx32(key: Word; Const shift: TShiftState; specialkey: Boolean); Type TShiftKeyInfo = Record shift: Byte; vkey : Byte; End; byteset = Set of 0..7; Const shiftkeys: Array [1..3] of TShiftKeyInfo = ((shift: Ord(ssCtrl); vkey: VK_CONTROL), (shift: Ord(ssShift); vkey: VK_SHIFT) , (shift: Ord(ssAlt); vkey: VK_MENU)); Var flag: DWORD; bShift: ByteSet absolute shift; i: Integer; Begin For i := 1 To 3 Do Begin If shiftkeys[i].shift In bShift Then keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0); End; if specialkey Then flag := KEYEVENTF_EXTENDEDKEY Else flag := 0;
keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 ); flag := flag or KEYEVENTF_KEYUP; keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );
For i := 3 DownTo 1 Do Begin If shiftkeys[i].shift In bShift Then keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), KEYEVENTF_KEYUP, 0); End; End; |
Delphi-Quelltext 1:
| PostKeyEx32((ord('S')), [ssShift], FALSE); |
Meinst du so?
Moderiert von Klabautermann: Code- durch Delphi-Tags ersetzt.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 16.12.02 18:19
Das wird immer schlimmer.
Mein Ansatz wäre, den Wert direkt in der Registry zu ändern. Und dann hoffen, dass man mit WM_SETTINGCHANGE ohne Neustart auskommt. Wenn doch ein Neustart erforderlich wäre, dann einen ähnlichen Weg gehen wie du, nur dass man keine Tastatureingaben simuliert, sondern das ganze über SendMessage macht.
|
|
|