Skywalker hat geschrieben:Leider ist mir das zu komplex.
Du brauchst nur eine Window Message zu registrieren, und kannst
dann mit PostMessage_() an andere Fenster senden.
Das Handle des Fensters, an das Du senden möchtest, kannst
Du mit z.B. FindWindow_() bekommen, wenn Du den eindeutigen
Fenstername kennst.
Oder Du nimmst dafür #HWND_BROADCAST, dann geht die Nachricht
an alle Fenster. Aber nur Deine Programme reagieren darauf, da Du
Deine Nachricht ja im System registriert hast.
Kleines Beispiel:
Programm 1, öffnet ein unsichtbares Fenster und wartet auf
eine Nachricht. Trifft eine Nachricht ein, zeigt es das Fenster
wieder an und sendet eine Bestätigung zurück.
Wenn Programm 1 sich beendet, meldet es sich noch bei
Programm 2 ab, falls Programm 2 sich schonmal gemeldet
hatte.
Code: Alles auswählen
MYMESSAGE = RegisterWindowMessage_("Skywalker-Message")
Enumeration
#MSG_PING = 1
#MSG_RECEIVED
#MSG_EXIT
EndEnumeration
If OpenWindow(0,200,200,200,200,#PB_Window_SystemMenu|#PB_Window_Invisible,"Skywalker Prog 1")
CreateGadgetList(WindowID())
ListViewGadget(1,0,0,200,170)
ButtonGadget(2,50,175,100,20,"Verstecken")
; AddSystrayIcon etc...
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If Absender
; Exit-Nachricht schicken
PostMessage_(Absender,MYMESSAGE,WindowID(),#MSG_EXIT)
EndIf
Break
Case #PB_Event_Gadget
If EventGadgetID()=2
If EventType()=#PB_EventType_LeftClick
HideWindow(0,1)
EndIf
EndIf
Case MYMESSAGE
Absender = EventwParam()
Nachricht = EventlParam()
AddGadgetItem(1,-1,"Nachricht eingetroffen:")
AddGadgetItem(1,-1," Absender-Fenster: "+StrU(Absender,#LONG))
Select Nachricht
Case #MSG_PING : A$ = "PiNG!"
Case #MSG_RECEIVED : A$ = "Nachricht erhalten"
Case #MSG_EXIT : A$ = "Programm beendet"
Default : A$ = "Unbekannt"
EndSelect
AddGadgetItem(1,-1," Nachricht: "+A$)
AddGadgetItem(1,-1,"----------")
; Bestaetigung, Message erhalten
PostMessage_(Absender,MYMESSAGE,WindowID(),#MSG_RECEIVED)
While WindowEvent():Wend
HideWindow(0,0)
SetWindowPos_(WindowID(0),#HWND_TOP,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
EndSelect
ForEver
EndIf
Programm 2 pingt Programm 1 an:
Code: Alles auswählen
MYMESSAGE = RegisterWindowMessage_("Skywalker-Message")
Enumeration
#MSG_PING = 1
#MSG_RECEIVED
#MSG_EXIT
EndEnumeration
If OpenWindow(0,450,200,200,200,#PB_Window_SystemMenu,"Skywalker Prog 2")
CreateGadgetList(WindowID())
ListViewGadget(1,0,0,200,170)
ButtonGadget(2,50,175,100,20,"Broadcast Message")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadgetID()=2
If EventType()=#PB_EventType_LeftClick
; Ping senden
PostMessage_(#HWND_BROADCAST,MYMESSAGE,WindowID(),#MSG_PING)
EndIf
EndIf
Case MYMESSAGE
Absender = EventwParam()
If Absender <> WindowID()
Nachricht = EventlParam()
AddGadgetItem(1,-1,"Nachricht eingetroffen:")
AddGadgetItem(1,-1," Absender-Fenster: "+StrU(Absender,#LONG))
Select Nachricht
Case #MSG_PING : A$ = "PiNG!"
Case #MSG_RECEIVED : A$ = "Nachricht erhalten"
Case #MSG_EXIT : A$ = "Programm beendet"
Default : A$ = "Unbekannt"
EndSelect
AddGadgetItem(1,-1," Nachricht: "+A$)
AddGadgetItem(1,-1,"----------")
EndIf
EndSelect
ForEver
EndIf
Mach am besten 2 EXEn daraus und probiere es mal.