[ reiser @ 10.06.2004. 13:03 ] @
Imam program koji koristi mutekse kako bi ogranicio broj instanci.
E sad, ako je vec jedna instanca startovana, zelim da kad user startuje opet program da se ona prethodna instanca maximizuje/dobije fokus...
Kako to uraditi ?
Pretpostavljam da ima veze sa FindWindow i SendMessage...
[ bancika @ 11.06.2004. 01:30 ] @
moze tako, samo ne znam tacne parametre za sendmessage, mozda mozes da napravis malu client\server komunikaciju i da kad mu ovaj drugi "kaze" ovaj stariji da se maximizuje :) mozda je glupo, ali lako za implementaciju, mozes sa dde, nesto novije ili najobicniji WinSock, neka se konektuje sa 127.0.0.1 i posalje komandicu...drugo ne mogu da se setim bas :)
[ neor @ 11.06.2004. 08:54 ] @
Evo kako to mozes da uradis. Moras samo da zaobidjes problem s time sto je to isti program pa su ti obicno klasa i naslov prozora isti (na primer promeni naslov u runtime ili nemoj da koristis main form).
Code:

var h:HWND;
begin
  h := FindWindow('TForm1','Form1');
  SetForegroundWindow(h);
end;
[ reiser @ 11.06.2004. 11:06 ] @
Uradio sam ovako kako neor kaze, kod sam stavio pre Application.Initialize i Application.CreateForm, ali mi FindWindow funkcija vraca result 0...
Glavna forma mi se zove MainWindow i stavio sam
h := FindWindow('TMainWindow', 'MainWindow')
Iako imam startovanu vec jednu instancu programa (u kojoj je kreiran MainWindow), FindWindow iz druge, mladje instance ne nalazi nista...
[ neor @ 11.06.2004. 12:18 ] @
Moralo bi da radi. Da li ti je naslov sigurno MainWindow?
Takodje posle SetForegroundWindow potpuno preskoci deo sa inicijalizacijom i kreiranjem forme. Na primer
Code:

  h := FindWindow('TForm1','Form1');
  if h <> 0 then
    SetForegroundWindow(h)
  else begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
[ reiser @ 11.06.2004. 13:48 ] @
Ma znam sve to, ali ipak nece.

Evo koda :

Code:

  If WaitForSingleObject(CreateMutex(nil, FALSE, PChar('CDClub v' + MainWindow.Version + 'M00T3X by Ex3cut0r')), 0) = wait_TimeOut Then
  Begin
    SetForegroundWindow(FindWindow('TMainWindow', 'MainWindow'));
    Exit;
  End;

  With Application Do
  Begin
    Initialize;
    CreateTables;
    CreateForm(TMainWindow, MainWindow);
    Title := 'CDClub v' + MainWindow.Version;
    ShowIntro;
    Run;
  End;


Naravno, probao sam i da promenljivoj tipa HWND dodelim result funkcije FindWindow pa da onda pozovem SetForegroundWindow, ali nece...
[ neor @ 11.06.2004. 17:34 ] @
Jedino sta mi je sumljivo je sto koristis MainWindow.Version pre CreateForm.
Proveri jos jednom sta ti je naslov prozora. Da li si siguran da je MainWindow.Caption = 'MainWindow'?
Ako je source isti onaj za koji si link ostavio na temi o CD klubu onda tamo pise da je MainWindow.Caption = 'CDClub v1.0 by MarkoSoft' pa bi to trebalo da je drugi parametar u FindWindow.
[ reiser @ 12.06.2004. 00:08 ] @
xexe, ja sam mislio da govorimo o MainWindow.Name
Evo sad cu da probam.

Poz, Marko.