Forum: Win32/Win64 API (native code)
Delphi
by RSE,
6. Mär 2013
Letzter Stand (2. Instanz bringt die erste nach vorn):
const
ProgUID = 'geheim :-p';
WM_AnswerToSecondInstance = WM_USER + 1;
var
HMutex: THandle = 0;
PBroadcastRecipients: PDWORD;
WM_CCCSingleInstanceBroadcast: UINT = 0;
Forum: Win32/Win64 API (native code)
Delphi
by RSE,
6. Mär 2013
@Uwe Raabe: Ich war davon ausgegangen, dass das während der Verarbeitung der Message mit BSF_ALLOWSFW erlaubt sei, denn genau so ist diese Option definiert. Damit ist sie also komplett sinnfrei. Darf ich fragen, auf welcher Windows-Version du getestet hast? Bei mir läuft es unter Win7 32bit und 64bit gleichermaßen wie gewünscht.
Ich werde also nochmals umbauen (never ending story...) und der...
Forum: Win32/Win64 API (native code)
Delphi
by RSE,
6. Mär 2013
@Uwe Raabe: Könntest du mir noch einen Hinweis geben, was genau ich mir dort ansehen sollte? Bei einem groben Überfliegen ist mir noch nichts speziell aufgefallen.
Forum: Win32/Win64 API (native code)
Delphi
by RSE,
5. Mär 2013
Um die offenen Fragen aus meinem letzten Post zu umgehen, habe ich nun umgebaut:
var
PID: ULONG; // Process-ID von 1. Instanz
HPipe: THandle = INVALID_HANDLE_VALUE; // wird für Server (= 1. Instanz, CreateNamedPipe) und für Client (= 2. Instanz, CreateFile) verwendet
function GetNamedPipeServerProcessId(hNamedPipe: THandle;
out ServerProcessId: ULONG): BOOL; stdcall;
external...
Forum: Win32/Win64 API (native code)
Delphi
by RSE,
5. Mär 2013
Also das mit den Pipes habe ich jetzt implementiert. Selbst ohne Kommunikation durch die Pipes kann ich folgendes erreichen:
Nur die Erste Instanz startet normal - nur dann ist CreateNamedPipe mit FILE_FLAG_FIRST_PIPE_INSTANCE erfolgreich - Jede weitere Instanz erkennt, dass bereits eine andere Instanz läuft und kann darauf reagieren
Eine zweite Instanz kann die erste Instanz folgendermaßen...
Forum: Win32/Win64 API (native code)
Delphi
by RSE,
4. Mär 2013
@mjustin:
TJclAppInstances war prinzipiell eine gute Idee zum Nachforsten, aber ich steige da überhaupt nicht durch. Da wird irgendetwas mit File Mapping gemacht - kenne ich bisher nicht, scheint aber eine gemeinsame Datei vorauszusetzen, die von mehreren Prozessen gleichzeitig benutzt wird und in der dann Informationen gesammelt werden. Das Ganze erscheint mir zu aufwendig für meinen...