Domanda

Esiste un modo per ridurre a icona un'applicazione esterna da cui non ho il controllo dall'interno della mia applicazione Delphi?

ad esempio notepad.exe, ad eccezione dell'applicazione che voglio minimizzare avrà sempre e solo un'istanza.

È stato utile?

Soluzione

Puoi utilizzare Trova finestra per trovare l'handle dell'applicazione e Mostra finestra per minimizzarla.

var  
  Indicador :Integer;
begin 
  // Find the window by Classname
  Indicador := FindWindow(PChar('notepad'), nil);
  // if finded
  if (Indicador <> 0) then begin
    // Minimize
    ShowWindow(Indicador,SW_MINIMIZE);
  end;
end;

Altri suggerimenti

Non sono un esperto di Delphi, ma se puoi invocare API Win32, puoi utilizzare FindWindow e ShowWindow per ridurre a icona una finestra, anche se non appartiene alla tua app.

Grazie per questo, alla fine ho usato una versione modificata di Neftali's codice, l'ho incluso di seguito nel caso in cui qualcun altro abbia gli stessi problemi in futuro.

FindWindow(PChar('notepad'), nil);

restituiva sempre 0, quindi mentre cercavo un motivo per cui ho trovato questo funzione che avrebbe trovato l'hwnd e che ha funzionato a meraviglia.

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;

procedure hideExWindow()
var Indicador:Hwnd;
begin
    // Find the window by Classname
    Indicador := FindWindowByTitle('MyApp'); 
    // if finded
    if (Indicador <> 0) then
    begin
        // Minimize
        ShowWindow(Indicador,SW_HIDE); //SW_MINIMIZE
    end;
end;

Suppongo che FindWindow (PChar ('notepad'), zero) dovrebbe essere FindWindow (zero, PChar ('notepad')) per trovare la finestra per titolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top