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.