Seite 1 von 2
In fremdes Fenster Gadget einsetzten und Ereignisse abfragen
Verfasst: 12.04.2006 22:48
von manunidi
Hallo!!!
Ich setze in ein fremdes Fenster ein Gadget ein, nur kann ich die Ereignisse nicht abfragen? Wie kann ich dieses Problem lösen?
PS: Die FensterID Lese ich von der Commandozeile ein !!
Verfasst: 12.04.2006 23:00
von ts-soft
Hier ist ein entsprechender Thread, ohne Lösung:
http://www.purebasic.fr/german/viewtopi ... er&start=0
Das EventHandling fremder Fenster wird von Windows geschützt. Wenn das
fremde Fenster auch von Dir programmiert wurde, sollte es aber kein
Problem sein, dort die entsprechenden Messages weiterzuleiten.
Verfasst: 13.04.2006 00:04
von AND51
TS-Soft, du müsstest das doch vielleicht wissen:
Kann man sich eigentlich gegen außere Einflüsse wehren? Alle reden davon, wie horche ich die Events fremder Fenster abhört, sie Hookt oder ein gadget in sie einsetzt.
Kann ich mich auch dagegen "wehren", also unterbrinden, dass meine Events und AKtivitäten abgehlrt werden, sei es das WindowEvent() oder das, was ich an (m)einem Port empfange/sende, etc.....?
Verfasst: 13.04.2006 00:17
von ts-soft
>> Kann man sich eigentlich gegen außere Einflüsse wehren?
Ja, Firewall, Patchday usw.
>> Nützt das was?
Meist (manchmal?)

Verfasst: 13.04.2006 00:33
von manunidi
in dem verlinkten post ist von einem callback die rede!!!
Geht das über ein Callback?
Ich kann in das "fremde Fenster" die Gadgets schon einsetzten, nur leider nicht abfragen!! Eine Lösung wäre ja vielleicht von pb erzeugtest fenster mit gadget und dieses fenster als child von dem anderen fenster!! Wie kann ich aber per id auf das andere fenster zeugreifen? Geht das überhaupt?
Verfasst: 13.04.2006 00:51
von ts-soft
>> Geht das über ein Callback?
Nein
Sag mal, heute angemeldet und solche Fragen. Um welches Program geht es
denn?
Verfasst: 13.04.2006 01:14
von 125
Hi,
Die einzige möglichkeit ist ein C-DLL inject.
Hab mich damit ma aueinander gesetzt als ich STRG ALT ENTF diasblen wollte hatte ne CDLL irgendwo ausm inet die das Callback vom Windows SAS ersetzt hat
mfg
125
Verfasst: 13.04.2006 06:41
von Macros
Gerade ist das in der Lounge aufgetaucht:
Code: Alles auswählen
; 2006 Hroudtwolf
; PureBasic-Lounge.de
; PB 4.00
Declare ExecuteAndWait (Programmname.s,Parameter.s, WorkDir.s)
ExecuteAndWait ("charmap.exe","",""):Delay (500)
If OpenWindow(0, 0, 0,70,20, "PureBasic Window",#WS_POPUP|#PB_Window_Invisible)
hWnd.l=FindWindow_(0,"Zeichentabelle")
If hWnd.l
GetWindowRect_(hWnd.l,wrc.RECT)
ResizeWindow (0,wrc\right-wrc\left-80,wrc\bottom-wrc\top-85,70,20)
SetParent_(WindowID(0),hWnd.l)
CreateGadgetList (WindowID(0))
ButtonGadget (0,0,0,70,20,"PureBasic")
HideWindow(0,0)
Else
End
EndIf
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
If EventGadget () =0
MessageRequester ("Hallo","PureBasic ist super.",0)
SendMessage_(hWnd.l,#WM_CLOSE,0,0)
CloseWindow(0)
End
EndIf
EndSelect
Until Quit = 1
EndIf
End
Procedure ExecuteAndWait (Programmname.s,Parameter.s, WorkDir.s)
Ergebnis = RunProgram(Programmname.s,Parameter.s, WorkDir.s)
Repeat
Event.l=WaitForInputIdle_(Ergebnis, 1000)
Select Event.l
Case $FFFFFFFF
ProcedureReturn GetLastError_()
Case 258
ProcedureReturn 0
EndSelect
Until Event.l=0
ProcedureReturn 1
EndProcedure
edit: für 3.94
Code: Alles auswählen
; 2006 Hroudtwolf
; PureBasic-Lounge.de
; PB 4.00
Declare ExecuteAndWait (Programmname.s,Parameter.s, WorkDir.s)
ExecuteAndWait ("charmap.exe","",""):Delay (500)
If OpenWindow(0, 0, 0,170,120,#WS_POPUP|#PB_Window_Invisible,"PureBasic Window")
hWnd.l=FindWindow_(0,"Zeichentabelle")
If hWnd.l
GetWindowRect_(hWnd.l,wrc.RECT)
ResizeWindow (170,120)
SetParent_(WindowID(0),hWnd.l)
CreateGadgetList (WindowID(0))
ButtonGadget (0,0,0,170,120,"PureBasic")
HideWindow(0,0)
Else
End
EndIf
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
If EventGadgetID() =0
MessageRequester ("Hallo","PureBasic ist super.",0)
SendMessage_(hWnd.l,#WM_CLOSE,0,0)
CloseWindow(0)
End
EndIf
EndSelect
Until Quit = 1
EndIf
End
Procedure ExecuteAndWait (Programmname.s,Parameter.s, WorkDir.s)
Ergebnis = RunProgram(Programmname.s,Parameter.s, WorkDir.s)
Repeat
Event.l=WaitForInputIdle_(Ergebnis, 1000)
Select Event.l
Case $FFFFFFFF
ProcedureReturn GetLastError_()
Case 258
ProcedureReturn 0
EndSelect
Until Event.l=0
ProcedureReturn 1
EndProcedure
Verfasst: 13.04.2006 07:09
von Kaeru Gaman
ts-soft hat geschrieben:Um welches Program geht es
denn?
...das würde mich auch mal interessieren...
Verfasst: 13.04.2006 10:45
von manunidi
Das ist ganz einfach!!!
Ich bin angehender Fachinformatiker, und irgendwie für kleinere aufgaben liebe ich CLICKEXE (
www.clickexe.de)!!! Nur da die anzahl an anzeige-elementen nicht gerade die beste ist, möchte ich mir mit purebasic helfen
Eine Frage wäre auch noch: Wie kann ich in PureBasic eine DDE "Empfang" abfragen? Senden geht über PBOSL das weiß ich, aber empfangen?