Button eines fremden Programmes drücken

Für allgemeine Fragen zur Programmierung mit PureBasic.
Glow
Beiträge: 45
Registriert: 31.01.2005 01:36

Button eines fremden Programmes drücken

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Zuletzt geändert von edel am 26.12.2005 01:50, insgesamt 2-mal geändert.
Glow
Beiträge: 45
Registriert: 31.01.2005 01:36

Beitrag 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 :)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Antworten