Bei Fremdprogramm Checkboxgadget Status Set/Get oder Hide ?
Verfasst: 29.07.2012 20:14
Hallo, da bin ich mal wieder ... und wiedermal muss ich den DAU beschützen.
In einem benötigten Fremdprogramm gibt es eine Checkbox die nicht irrtümlich verstellt werden darf, der Haken ist per Default gesetzt und soll es auch bleiben. Leider liegt ein oft genutzter Button im selben Fenster (was die ganze Zeit auf dem Desktop liegt), und nach soundsovielen Arbeitswiederholungen wird da jemand danebengeklickt haben.
Wir fangen nicht bei Null an, ich hab da mal was vorbereitet:
Und um das Folgende gehts jetzt .... Wie man sieht kann ich Fenster und Gadget finden, und "klicke" dann das Gadget, der Ursprungscode zeigte zusätzlich auch das Ändern der Gadgettexte.
Ich möchte aber die Checkbox definiert setzen, und nicht durch simuliertes Klicken nur togglen.
Das Sahnehäubchen wäre ein Hide-Gadget und/oder ein Getgadgetstate des fremden Gadgets.
Könnte mir da bitte jemand helfen ? Bei den hunderten #WM_XXXX komm ich einfach nicht drauf.

In einem benötigten Fremdprogramm gibt es eine Checkbox die nicht irrtümlich verstellt werden darf, der Haken ist per Default gesetzt und soll es auch bleiben. Leider liegt ein oft genutzter Button im selben Fenster (was die ganze Zeit auf dem Desktop liegt), und nach soundsovielen Arbeitswiederholungen wird da jemand danebengeklickt haben.
Wir fangen nicht bei Null an, ich hab da mal was vorbereitet:
Code: Alles auswählen
;Das hier ist nur ein Dummyprogramm zum "spielen", bitte .EXE draus machen und starten
OpenWindow(0, #PB_Ignore, #PB_Ignore, 270, 100, "Fremdprogramm-Checkbox", #PB_Window_SystemMenu)
CheckBoxGadget(0, 20, 20, 150, 20, "Option1")
CheckBoxGadget(1, 20, 40, 150, 20, "Option2")
TextGadget(2, 20, 70, 250, 20, "Die Checkboxen sollen extern gesteuert werden.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 0
EndIf
If EventGadget() = 1
EndIf
If EventGadget() = 2
EndIf
EndSelect
ForEver
End
Code: Alles auswählen
; Codebasis: Ligatur
; http://forums.purebasic.com/german/viewtopic.php?f=3&t=14851&hilit=fremde+gadgets&sid=1a3309d6a4f7a105bce6c104befafc8f
Declare.l EnumChilds(hwnd, lParam)
ft.s = "Fremdprogramm-Checkbox"
Inhalt.s = "Option1"
hwnd = OpenWindow(0, 20, 20, 300, 150, "Fremdes Stringgadget")
TextGadget(102, 015, 60, 40, 15, "Handle")
StringGadget(3, 060, 60, 80, 20, "", #PB_String_ReadOnly)
TextGadget(103, 155, 60, 40, 15, "Gadget")
StringGadget(4, 200, 60, 80, 20, "", #PB_String_ReadOnly)
;Fenster suchen
fhwnd = FindWindow_(#Null, @ft)
If fhwnd
; Fenster existiert
SetGadgetText(3, Hex(fhwnd))
; Nach Gadget mit bestimmten Inhalt(Text) suchen
If EnumChildWindows_(fhwnd, @EnumChilds(), @Inhalt) = #False ; Negierte Logik hier !
MessageRequester("Prima", "Gadget gefunden. :-)", #MB_OK)
PostMessage_(GetGadgetData(4),#WM_LBUTTONDOWN,0,0) ; Button press
PostMessage_(GetGadgetData(4),#WM_LBUTTONUP,0,0) ; Button release
Else
MessageRequester("Fehler", "Gadget existiert nicht!", #MB_ICONERROR)
EndIf
Else
MessageRequester("Fehler", "Fenster existiert nicht!", #MB_ICONERROR)
EndIf
End
Procedure.l EnumChilds(hwnd, lParam)
;Fenstertext besorgen
SendMessage_(hwnd, #WM_GETTEXT, 255, @wt.s{255})
vt.s = PeekS(lParam)
If vt = wt ; Vorgegebenen mit gefundenen Text vergleichen
WID = GetWindowLong_(hwnd, #GWL_ID)
SetGadgetText(4, Hex(hwnd) + " / " + Str(WID))
SetGadgetData(4, hwnd)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Ich möchte aber die Checkbox definiert setzen, und nicht durch simuliertes Klicken nur togglen.
Das Sahnehäubchen wäre ein Hide-Gadget und/oder ein Getgadgetstate des fremden Gadgets.
Könnte mir da bitte jemand helfen ? Bei den hunderten #WM_XXXX komm ich einfach nicht drauf.
