Autor Beitrag
DeadlyAppearance
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 10.12.02 11:21 
wie wärs mit
ausblenden 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 user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.
DeadlyAppearance Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: Di 10.12.02 12:05 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  hnd : HWND;

begin
  hnd := findwindow('Microsoft Word');
  if hnd <> 0 then
  begin
    setforegroundwindow(hnd);
    sendkeys('{1}');
  end;
end;


Also in der Zeile, wo hnd das zu gewiesen wird, wird noch etwas erwartet, aber was?

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.

_________________
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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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



BeitragVerfasst: Mi 11.12.02 12:30 
Du willst nicht zufälligerweise auf einen Button klicken? :roll:
DeadlyAppearance Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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



BeitragVerfasst: Mi 11.12.02 13:04 
Wie reagiert denn das Programm auf Shift+s?
DeadlyAppearance Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 16.12.02 18:12 
ausblenden volle Höhe Delphi-Quelltext
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..3of 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), 00);
End{ For } 
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{ For }
End{ PostKeyEx32 }

ausblenden Delphi-Quelltext
1:
PostKeyEx32((ord('S')), [ssShift], FALSE);					


Meinst du so?

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.