Delphi中如何最小化外部应用程序

5

我能否在我的Delphi应用程序中控制并最小化一个外部应用程序?

例如,notepad.exe,但我要最小化的应用程序只会有一个实例。

4个回答

8
您可以使用 FindWindow 函数查找应用程序的句柄,然后使用 ShowWindow 函数将其最小化。
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;

3

虽然我不是Delphi专家,但如果您可以调用win32 api,即使窗口不属于您的应用程序,您也可以使用FindWindow和ShowWindow来最小化窗口。


我给你投了赞,因为你让我找对了方向,但最终我还是使用了Neftali的代码。 - Re0sless

3

感谢您的提问,最终我使用了修改过的Neftali的代码。以下是该代码,以便其他人在将来遇到相同问题时可以使用。

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

一直返回0,于是在寻找原因时我发现了这个函数可以找到hwnd,而它很好用。

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;

1
请注意,除非您的应用程序以提升的权限运行,否则此操作无法在Windows Vista上运行。 - Lars Fosdal

0

我猜FindWindow(PChar('notepad'), nil)应该改为FindWindow(nil, PChar('notepad')),以通过标题查找窗口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接