Geht schon, eine Datei shared zu öffnen. Dazu musst Du allerdings ein wenig WIN-API bemühen.
Über eine registrierte Message kannst Du dann auch die Position und Anzahl der Bytes in der Datei übermitteln,
an der eine Änderung eintrat, und dann darauf reagieren.
Versteht sich von selbst, dass das nur mit Deinen Programmen funktionieren kann !
Zum Testen hier mal 2 Programme die zur selben Zeit auf eine Textdatei zugreifen können.
Programm 1:
Code: Alles auswählen
Global message.l
Procedure WCB(wnd,msg,wparam,lparam)
Result = #PB_ProcessPureBasicEvents
Select Msg
Case message
Debug "geändert"
Debug "Position : "+Str(wparam)
Debug "Bytes : "+Str(lparam)
EndSelect
ProcedureReturn Result
EndProcedure
hFile.l = CreateFile_("Test.txt", #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0,#OPEN_ALWAYS,#FILE_FLAG_OVERLAPPED,0)
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10,10,80,24,"OK")
EndIf
SetWindowCallback(@WCB())
Message = RegisterWindowMessage_("aha")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
ol.OVERLAPPED
ol\Offset = 0
WriteFile_(hFile,@"Shared1",7,@bw.l,ol)
SendMessage_(#HWND_BROADCAST,Message,0,7)
EndSelect
Case #PB_Event_CloseWindow
CloseHandle_(hFile)
Quit = 1
EndSelect
Until Quit = 1
EndIf
End
Programm 2:
Code: Alles auswählen
Global message.l
Procedure WCB(wnd,msg,wparam,lparam)
Result = #PB_ProcessPureBasicEvents
Select Msg
Case message
Debug "geändert"
Debug "Position : "+Str(wparam)
Debug "Bytes : "+Str(lparam)
EndSelect
ProcedureReturn Result
EndProcedure
hFile.l = CreateFile_("Test.txt", #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0,#OPEN_ALWAYS,#FILE_FLAG_OVERLAPPED,0)
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10,10,80,24,"OK")
EndIf
SetWindowCallback(@WCB())
Message = RegisterWindowMessage_("aha")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
ol.OVERLAPPED
ol\Offset = 12
WriteFile_(hFile,@"Shared2",7,@bw.l,ol)
SendMessage_(#HWND_BROADCAST,Message,12,7)
EndSelect
Case #PB_Event_CloseWindow
CloseHandle_(hFile)
Quit = 1
EndSelect
Until Quit = 1
EndIf
End