Seite 1 von 1
Button eines fremden Programmes drücken
Verfasst: 25.12.2005 21:57
von Glow
Hi
Ich hab mal eine Frage: Wie kann ich einen Button eines anderen Programmes aus meiner Anwendung herraus drücken ? Der Button hat keinen Shortcut (sonst wärs ja einfach :P). Die HWND des Fensters habe ich bereits, und kann auch Text schreiben, aber wie komme ich an den Handle des Buttons ? Irgendwie müsste das doch über den Text des Buttons gehen, oder ?
Gruss
Glow
Verfasst: 25.12.2005 22:16
von edel
Code: Alles auswählen
Handle = FindWindow_(0,"HALLO")
Procedure MAKELONG(low,high)
ProcedureReturn low | (high<<16)
EndProcedure
Procedure ListChild(hwnd, Parameter)
WindowClass.s = Space(255)
GetClassName_(hwnd, WindowClass, 255)
If WindowClass = "Button"
Laenge = SendMessage_(hwnd,#WM_GETTEXTLENGTH,0,0) + 1
String.s = Space(Laenge)
SendMessage_(hwnd,#WM_GETTEXT,Laenge,@String)
If String = "Testbutton"
SendMessage_(GetParent_(hwnd),#WM_COMMAND, MAKELONG(GetDlgCtrlID_(hwnd),0) ,hwnd)
Else ;<--------------
ProcedureReturn #True ;<--------------
EndIf
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
EnumChildWindows_(Handle,@ListChild(), 0)
Code: Alles auswählen
OpenWindow(0,0,0,400,400,1|#WS_SYSMENU,"HALLO")
CreateGadgetList(WindowID())
ButtonGadget(666,10,10,100,20,"Testbutton")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadgetID() = 666
MessageRequester("","Bingo")
EndIf
EndIf
Until event = #WM_CLOSE
Verfasst: 26.12.2005 01:31
von Glow
Hi
zuerst mal Danke für den Tip. Allerdings funktioniert das nicht bei mir. Deine Test-Anwendung schon, aber nich wenn ich das auf andere Programme probiere. Scheint daran zu liegen, daß bei dir nur das erste Gadget ausgelesen wird, und wenn das nicht direkt das richtige ist, dann gehts nicht

Da müsste dann wohl eine Schleife rein, um zu überprüfen wie viele Gadgets es überhaupt auf dem anderen Programm gibt, und dann erst das spezifische ansteuern. Werd mal versuchen ob ich das hinbekomme

Verfasst: 26.12.2005 01:49
von edel
Oups, da ist mir ne Abfrage entgangen , sollte jetzt gehen .
Da muss keine Schleife rein . ListChild wird solange aufgerufen
bis man 0 zurueck gibt.