Ma ne... Ti si se dobro izrazio, nego ja nisam dobro citao :)
Evo ti deo nekog mog starog programa, pa probaj nesto da uklopis.
Dakle, ja sam imao neki program (bio je servis) koji treba da u nekom
trenutku pokrene neki drugi program (ako nije pokrenut), ili da ga
maksimizuje i postavi na vrh, ako je bio spusten.
Valjda nisam nesto 'ispustio'...
--- PROGRAM KOJI POZIVA ---
--- CPP ---
Code:
HANDLE lanmsg = FindWindow( C(IDS_SER_MAIN_NT_SERVICE_INVOKING_CLASS).c_str(), NULL );
// dakle, ti samo zameni string (kao prosli put)
// IDS_SER_MAIN_NT_SERVICE_INVOKING_CLASS,
// "TLanMsgMainForm"; // <--- OVO TI JE NAZIV KLASE, A NE EXE-A, ONOG PROGRAMA KOGA POZIVAS, POGLEDAJ HELP !!!
// Ako je program vec pokrenut - podigni ga i postavi u prvi plan!
if ( lanmsg != NULL )
{
PostMessage ( lanmsg, WM_USER + 1010, 0, 0 );// < --- POSTOJAO JE NEKI RAZLOG ZASTO SAM SVE OVO RAZLOZIO U TRI KORAKA, A NE SAMO U JEDAN !!!
PostMessage ( lanmsg, WM_USER + 1011, 0, 0 );
PostMessage ( lanmsg, WM_USER + 1012, 0, 0 );
}
// ako nije pokrenut - pokreni ga!
else
{
AnsiString Exe = ExtractFilePath( ParamStr(0) ) + C(IDS_SER_MAIN_NT_SERVICE_INVOKING_EXE_FILE);
// IDS_SER_MAIN_NT_SERVICE_INVOKING_EXE_FILE,
// "lanmsg.exe";
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
memset(&ProcInfo, 0, sizeof(ProcInfo));
memset(&StartInfo, 0 , sizeof(StartInfo));
StartInfo.cb = sizeof(StartInfo);
if ( ! CreateProcess( Exe.c_str(),NULL, NULL, NULL, NULL, NULL, NULL, NULL, // <--- POSTOJAO JE RAZLOG ZASTO NISAM KORISTIO ShellExecute(), mozda zatosto
&StartInfo, &ProcInfo ) )
{
// ovo izbaci, jer je deo nekog mog starog programa
// SystemOk = false;
// GoSendMessageToLog( SERVICE_CREATE_PROCESS_FAILED );
}
}
--- PROGRAM KOJI SE POKRECE/PODIZE ---
--- H ---
Code:
private: // User declarations
// ...
void __fastcall WndProc( TMessage & );
// ...
--- CPP ---
Code:
void __fastcall TLanMsgMainForm::WndProc( TMessage &Msg )
{
switch ( Msg.Msg )
{
// ...
case WM_USER + 1010:
ReloadView(); // <--- OVO JE BILO SPECIFICNO ZA MOJ PROGRAM, PA MOZES IZBACITI CEO case BLOK
break;
case WM_USER + 1011:
Application->Restore();
break;
case WM_USER + 1012:
Application->BringToFront();
break;
// ...
}
TForm::WndProc( Msg );
}