Entwickler-Ecke

Windows API - Mutex & Fesnter in Vordergrund drängen


R4Y - Mo 06.10.08 08:49
Titel: Mutex & Fesnter in Vordergrund drängen
Hallo,

Ich habe im moment folgendes problem.
Wenn mein Programm startet wird, ein mutex erstellt und geprüft ob mein Programm schon läuft.
wenn ja, soll sich das "neue" Programm wieder schließen.
Das funktioniert wunderbar.

Nun hätte ich aber gerne das sich das andere Programm in den vordergrund setzt.

Leider klappt das nicht so wie ich es mir erhofft hatte.

Vielleicht liegt es daran, das ich die CoolTryIcon komponente benutze?

mein code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
unit mutex;

interface

uses Windows,messages;

implementation

var
 mHandle:THandle;

initialization

 mHandle := CreateMutex(nil,true,'Client.exe'); //einen mutex erstellen

 if getlasterror = ERROR_ALREADY_EXISTS then //wenn fenster schon existiert
  begin
   SendMessage(mHandle,WM_SYSCOMMAND,0,SC_RESTORE);
   Halt; //programm sofort anhalten
  end;

 finalization
  if mHandle <> 0 then
   CloseHandle(mHandle);

end.


ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen
Maurice

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 06.10.2008 um 12:05


R4Y - Mo 06.10.08 10:28

Okay ich habe mich mittlerweile von der CoolTrayIcon verabschiedet.
Ich benötige sie nicht wirklich.

Ich habe es mittlerweile geschafft das mein fenster sich auch öffnet.
Aber ... Ich kann es danach nicht wieder minimieren ^^

Wenn das jetzt noch klappt, bin ich zufrieden.

Hat jemand ne idee?

neuer code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
unit mutex;  

 
interface  

 
uses Windows,messages;  

 
implementation  

 
var  
 mHandle:THandle;  

 
initialization  

 
 mHandle := CreateMutex(nil,true,'Client.exe'); //einen mutex erstellen  

 
 if getlasterror = ERROR_ALREADY_EXISTS then //wenn fenster schon existiert  
  begin  
   SendMessage(findwindow(nil,'Chat'),WM_SYSCOMMAND,SC_RESTORE,0); //hier war der fehler .. SC_RESTORE und 0 waren vertauscht ...  und ich habe mhandle durch findwindow ersetzt. mhandle macht warum auch immer probleme ...
   Halt; //programm sofort anhalten  
  end;  

 
 finalization  
  if mHandle <> 0 then  
   CloseHandle(mHandle);  

 
end.


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Narses - Mo 06.10.08 11:06

Moin!

Schau mal hier [http://www.delphi-forum.de/viewtopic.php?p=199576#199576], da sollte sich was für dich ableiten lassen. ;) Ach ja, das mit dem Halt; solltest du dringend lassen, einfach das Programm nicht in die MessageLoop laufen lassen, sondern normal beenden. :idea:

cu
Narses