Entwickler-Ecke
Windows API - Handle vom Button bekommen
Swordooo - Fr 31.07.09 10:03
Titel: Handle vom Button bekommen
Gute Morgen ;)
Ich Möchte von einer Fremdanwendung das Handle von einem Button bekommen, wie mach ich das am besten?
Wär echt nett, wenn Ihr mir helfen könnt.
MfG Swordooo
Delete - Fr 31.07.09 10:08
Schau Dir mal WinSpy an, das generiert Dir auf Wunsch sogar den Code.
Swordooo - Fr 31.07.09 10:25
Danke werde ich testen
Lg
.50AE - Fr 07.08.09 23:40
Durch so was ähnliches habe ich mich auch gerade durchgekämpft :D
Ich gehe mal davon aus, dass du das Handle des Programms schon hast.
Dann benutzt du EnumChildWindows um alle Komponenten in dem Fenster zu finden.
Delphi-Quelltext
1:
| EnumChildWindows(FensterHandle, @EnumProc, 0); |
Den bestimmten Button kannst du nun entweder über die ControlID oder den Titel herausfinden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function EnumProc(wnd: HWND; Lines: TStrings): BOOL; stdcall; var ControlID: integer; Caption: string; begin Result := True; ControlID:= GetDlgCtrlID(wnd); Caption := GetWindowCaption(wnd); if (Caption = 'Speichern') then ButtonHandle := wnd; end; |
Um den Button zu drücken:
Delphi-Quelltext
1:
| SendMessage(GetParent(ButtonHandle),WM_COMMAND,MAKEWPARAM(GetWindowLong(ButtonHandle, GWL_ID), BN_CLICKED),ButtonHandle); |
Lg
//Edit: Achja, was mir auch noch schwierigkeiten bereitet hat: Wenn du den Button gleich beim Erstellen des Fensters drücken willst kann es passieren dass EnumChildWindows das Handle des Buttons noch nicht auflistet.
EnumChildWindows (MSDN) [
http://msdn.microsoft.com/en-us/library/ms633494(VS.85).aspx]
| Zitat: |
| The function does not enumerate a child window that is destroyed before being enumerated or that is created during the enumeration process. |
Ich habe deshalb ein Sleep(50) eingefügt was bisher ganz gut funktioniert. Bei kleineren Werten als ~50ms ist das Problem weiterhin aufgetreten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!