Zwei Programme - ein Speicher
Zwei Programme - ein Speicher
Hallo allesam!
ich habe zwei programme geschrieben und ich möchte, dass beide auf ein und denselben Speicherbereich zugreifen. Es geht darum, text Informationen von ab nach b zu kriegen. geht das und wenn ja, wie?
ich habe zwei programme geschrieben und ich möchte, dass beide auf ein und denselben Speicherbereich zugreifen. Es geht darum, text Informationen von ab nach b zu kriegen. geht das und wenn ja, wie?

- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Guckt dir mal im Platform SDK die Speicher Referenz an. Soweit ich weiss kann man einen globalen Speicher Block erstellen der von jedem Programm benutzt werden kann.
Du kannst aber auch, wie Leonhard erwähnte, DDE benutzen und den Pointer zum Speicher Block zwischen den Progammen hin und her senden um gemeinsam auf ihn zuzugreifen.
Du kannst aber auch, wie Leonhard erwähnte, DDE benutzen und den Pointer zum Speicher Block zwischen den Progammen hin und her senden um gemeinsam auf ihn zuzugreifen.
> Es geht darum, text Informationen von ab nach b zu kriegen
Dazu gibt es schon viele andere Threads.
Die "bekanntesten" Ideen:
Dazu gibt es schon viele andere Threads.
Die "bekanntesten" Ideen:
- Network-Befehle (Verbindung zum eigenen COmputer (127.0.0.1))
- Über Dateien
- DDE
- Zwischenablage (Clipboard)
- ProgramParameter()
- Envirenment-Variablen (siehe Process-Lib)

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
nee, es geht darum, dass ich jett geradse meinen wichtiaplayer (hatt ich mal inner laberecke angesprochen) weiterbaue (die aktion mit den geisterfenster war, damit der klein-modus nicht son riesen platz in der leiste wegnimmt. das ist nämlich wie n riesen blumentopf für nen butterstecker
Ich will einfach nur, dass wenn ich eine mp3 anklicke, nicht nochmal ein ganzer wichtiaplayer geladen wird, sondern der dateiname (auch mehrere dateien!!!) an die bereits geöffnete version übergeben werden soll, da a) der player nur einmal laufen darf und b) das ein ziemliches gewusel geben wurde, vor allem lädt er zulange!) ich probiere mal die datei-lösung aus! wenns schief geht, melde ich mich wieder
thx

Ich will einfach nur, dass wenn ich eine mp3 anklicke, nicht nochmal ein ganzer wichtiaplayer geladen wird, sondern der dateiname (auch mehrere dateien!!!) an die bereits geöffnete version übergeben werden soll, da a) der player nur einmal laufen darf und b) das ein ziemliches gewusel geben wurde, vor allem lädt er zulange!) ich probiere mal die datei-lösung aus! wenns schief geht, melde ich mich wieder
thx

Ganz Simpel : Mutex + Sendmessage - Rest ueber Sufu.
Edit: 2 x starten
Edit: 2 x starten
Code: Alles auswählen
#WM_MYOPENMESSAGE = #WM_USER + 1
Mutex = CreateMutex_(#Null,0,"MeinTollerPlayer")
If GetLastError_() = #ERROR_ALREADY_EXISTS
MessageRequester("","schon offen")
hwnd = FindWindow_(#Null,"player")
If hwnd
SendMessage_(hwnd,#WM_MYOPENMESSAGE,"MSG","MSG2")
EndIf
End
EndIf
Procedure Callback(h,m,w,l)
If m = #WM_MYOPENMESSAGE
MessageRequester(PeekS(w),PeekS(l))
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
hwnd = OpenWindow(0,0,0,300,300,"player")
SetWindowCallback(@Callback(),0)
Repeat
event = WaitWindowEvent()
Until event = #WM_CLOSE
CloseHandle_(Mutex)
Zuletzt geändert von edel am 30.12.2006 00:39, insgesamt 1-mal geändert.
- 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
Oder PBOSL_GlobalSharedmemory, ist ja extra für sowas geschaffen. Oder den Source der Lib verwenden, ist nicht viel.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
öhm... ganzganzganz simpel:
zwei threads derselben prozessstruktur öffnen die beiden fenster....
ok, wenn dein erstprozess ein fremdprozess ist, den du nicht einfach
zu einem zusätzlichen thread veranlassen kannst, geht das nicht....
zwei threads derselben prozessstruktur öffnen die beiden fenster....
ok, wenn dein erstprozess ein fremdprozess ist, den du nicht einfach
zu einem zusätzlichen thread veranlassen kannst, geht das nicht....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- 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
Code: Alles auswählen
Procedure AllocateMemoryGlobal(Name.s,Size.l)
Shared HandleMap.l
HandleMap.l = CreateFileMapping_($FFFFFFFF, 0, 402653188, 0, Size, @Name)
If HandleMap
ProcedureReturn MapViewOfFile_(HandleMap, 983071, 0, 0 ,0)
EndIf
EndProcedure
Procedure FreeMemoryGlobal(MemoryAddress.l)
Shared HandleMap.l
UnmapViewOfFile_(MemoryAddress)
CloseHandle_(HandleMap)
EndProcedure
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

TS-Soft: Kann ich mit deinen Befehlen jetzt einen Speicher anlegen, die Addresse dazu zum anderen Prozess 'durchschleifen' (callback..und sendmessage... die schleife ist schon ziemlich am anfang der produktion eingebaut worden, damit ein zweitstart abgeblockt wird und der erste task aktiviert wird.), sodass ich beide programee drauf loslassen kann, ohne dass windows quängelt???
