In fremdes Fenster Gadget einsetzten und Ereignisse abfragen

Anfängerfragen zum Programmieren mit PureBasic.
manunidi
Beiträge: 109
Registriert: 12.04.2006 22:44

In fremdes Fenster Gadget einsetzten und Ereignisse abfragen

Beitrag 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 !!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.....?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Kann man sich eigentlich gegen außere Einflüsse wehren?
Ja, Firewall, Patchday usw.
>> Nützt das was?
Meist (manchmal?) :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
manunidi
Beiträge: 109
Registriert: 12.04.2006 22:44

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Geht das über ein Callback?
Nein
Sag mal, heute angemeldet und solche Fragen. Um welches Program geht es
denn?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag 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
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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 
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ts-soft hat geschrieben:Um welches Program geht es
denn?
...das würde mich auch mal interessieren...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
manunidi
Beiträge: 109
Registriert: 12.04.2006 22:44

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