Groups | Search | Server Info | Login | Register
Groups > it.comp.lang.delphi > #18135
| From | Daniele <daniele.xxxx@yyyyy.ww> |
|---|---|
| Newsgroups | it.comp.lang.delphi |
| Subject | Re: Richiamare un programma "minimizzato" da un altro programma |
| Date | 2025-06-25 12:07 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <103ghpg$2ms3t$1@dont-email.me> (permalink) |
| References | <1036jpb$14suq$1@dont-email.me> |
Il 21/06/2025 17:40, Daniele ha scritto:
> Ciao a tutti,
> come posso fare per rendere visibile un programma minimizzato nella
> barra delle applicazioni o nella traybar da un altro programma?
>
> Qualsiasi tentativo non va a buon fine ...
>
> situazione:
> Nella onshow della form del programma chiamante controllo che le
> condizioni per la visualizzazione siano coerenti.
> Se no, controllo se il secondo programma e' in esecuzione, se si lo mostro.
>
> Ecco il codice che uso per capire se il programma e' in esecuzione e poi
> per visualizzare la sua form.
>
> if ProcessExists('Applicazione.EXE',False) then
> begin
> ProgramHandle:=FindWindowByTitle('Titolo form');
> If ProgramHandle>0 Then ShowWindow(ProgramHandle, WM_ACTIVATEAPP);
> // WM_SHOW, WM_RESTORE ecc.. non funzionano ...
> End;
>
> Ma non viene mai visualizzata.
>
> Dove
>
> function ProcessExists(exeFileName: string; FullString: Boolean = True):
> Boolean;
> var
> ContinueLoop: BOOL;
> FSnapshotHandle: THandle;
> FProcessEntry32: TProcessEntry32;
> S1, S2 : String;
> begin
> FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
> FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
> ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
> Result := False;
> while Integer(ContinueLoop) <> 0 do
> begin
> if fullstring then
> begin
> if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
> UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
> UpperCase(ExeFileName))) then
> begin
> Result := True;
> end;
> ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
> end
> else
> begin
> S1:=UpperCase(ExtractFileName(FProcessEntry32.szExeFile));
> S2:=UpperCase(FProcessEntry32.szExeFile);
> if ( (Pos(UpperCase(ExeFileName), S1)>0) or
> (Pos(UpperCase(ExeFileName), S2)>0) )then
> begin
> Result := True;
> end;
> ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
> end;
> end;
> CloseHandle(FSnapshotHandle);
> end;
>
> function FindWindowByTitle(WindowTitle: string): Hwnd;
> var
> NextHandle: Hwnd;
> NextTitle: array[0..260] of char;
> begin
> // Get the first window
> NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
> while NextHandle > 0 do
> begin
> // retrieve its text
> GetWindowText(NextHandle, NextTitle, 255);
> if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
> begin
> Result := NextHandle;
> Exit;
> end
> else
> // Get the next window
> NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
> end;
> Result := 0;
> end;
>
> Qualche idea ??
>
> Grazie
>
> Ciao
> Daniele
Ciao Alessandro,
sembra che sia proprio cosi' ....
Nel senso che se l'handle e' preso con il nome del titolo della form
(form caption) allora quell'handle e' valido e funziona il tutto.
Se invece l'handle vie preso dal suo processo, allora non fuonziona
niente. Ho provato a guardare il valore dell'handle ottenuto che il
processexist e con il tiitolo della form; Sono diversi e quello che
funziona (pe questa necessita') e' quello ottenuto con il titolo della form.
Grazie, a tutti, per l'aiuto
Ciao
Daniele
Back to it.comp.lang.delphi | Previous | Next — Previous in thread | Find similar
Richiamare un programma "minimizzato" da un altro programma Daniele <daniele.xxxx@yyyyy.ww> - 2025-06-21 17:40 +0200
Re: Richiamare un programma "minimizzato" da un altro programma Roberto <dash@dominus.net> - 2025-06-23 16:16 +0200
Re: Richiamare un programma "minimizzato" da un altro programma "Alessandro B." <bobbo@tecnosoft.it> - 2025-06-24 06:33 +0200
Re: Richiamare un programma "minimizzato" da un altro programma Daniele <daniele.xxxx@yyyyy.ww> - 2025-06-25 12:07 +0200
csiph-web