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?) :mrgreen:

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 :D :D


Eine Frage wäre auch noch: Wie kann ich in PureBasic eine DDE "Empfang" abfragen? Senden geht über PBOSL das weiß ich, aber empfangen?