2008-09-25 93 views

回答

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 apis,则可以使用FindWindow和ShowWindow将窗口最小化,即使它不属于您的应用程序。

+0

我投你一票,因为你把我放在正确的轨道上,但最终我用了Neftali的代码 – Re0sless 2008-09-25 15:22:28

2

感谢这个,到底我用的Neftali's代码modifyed版本,我已经低于其列入情况下任何其他人在未来有同样的问题。

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

总返回0,所以在寻找一个原因,我发现this function会找到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上运行,除非你的应用程序以提升的特权运行。 – 2008-10-01 08:36:19

0

我猜FindWindow函数值(P Char( '记事本'),无)应该是FindWindow函数(零,PChar类型( '记事本'))来查找标题的窗口。