Entwickler-Ecke

Windows API - Statt Doppelstart unterdruecken - Programm nach vorn holen


Maatin - Mo 17.06.02 18:46
Titel: Statt Doppelstart unterdruecken - Programm nach vorn holen
Moin,

den FAQ-Eintrag zum Doppelstart von Programmen habe ich bereits gelesen und ausprobiert - klappt soweit.
Nur was mache ich, wenn ich statt sang- und klanglos nichts zu tun, lieber eine Fehlermeldung ausgeben will oder noch besser: Das bereits aktive Programm in den Vordergrund holen moechte?

danke,
gruss, Maatin


DieHardMan - Mo 17.06.02 19:19

ja da machst du einfach


Quelltext
1:
2:
3:
4:
5:
  if GetLastError=ERROR_ALREADY_EXISTS then
  begin
    showmessage('Pech ghabt, läuft scho!');
    Halt;
  end;


dann wegen in den Vordergrund holen


Quelltext
1:
2:
3:
4:
5:
6:
  if GetLastError=ERROR_ALREADY_EXISTS then
  begin
    h := findwindowbytitle('fenstername deines programmes');
    setforeground(h);
    Halt;
  end;


die API setforeground wird glaub anders aufgerufen, musst nachschauen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function FindWindowByTitle(WindowTitle: String): Hwnd;
var
  NextHandle: HWND;
  NextTitle: array[0..255] of Char;
begin
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    GetWindowText(NextHandle, NextTitle, 255);
    if pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
    end;
  Result := 0;
end;


Maatin - Di 18.06.02 10:18

Moin,

danke, klappt super :)

SetForeGroundWindow(Hwnd); ist uebrigens der Aufruf ...

gruss, Maatin


Burgpflanze - Do 25.07.02 02:35

Noch besser so:


Quelltext
1:
2:
3:
 
if IsIconic(Handle) then ShowWindow(Handle, SW_RESTORE)
else SetForegroundWindow(Handle);




Gruss
Burgpflanze


Delete - Do 25.07.02 08:35

Die Abfrage

Quelltext
1:
if IsIconic(Handle) then                    

kann man sich auch sparen.