首页  编辑  

获取Shell窗口句柄

Tags: /超级猛料/API.Windows应用程序接口/未公开的API/   Date Created:

获取Shell窗口句柄?

...retrieve the handle to the Windows Shell window?

有一个未公开的API:

{

 At times, it is necessary to get a handle (HWND) to the shell's main window.

 MSDN offers us next method:

  hwndShell := FindWindow('Progman', nil);

 It seems to be a simple code but I've found much better solution.

 The User32.dll has one more useful and of course

 undocumented function - GetShellWindow!

}

// This example will show you how you can obtain a handle to the

// Windows Shell window without calling the FindWindow function.

// Translated from C to Delphi by Thomas Stutz

// Original Code:

// (c)1999 Ashot Oganesyan K, SmartLine, Inc

// mailto:ashot@aha.ru, http://www.protect-me.com, http://www.codepile.com

// This function returns a handle to the Windows Shell window

function ShellWindow: HWND;

type

 TGetShellWindow = function(): HWND; stdcall;

var

 hUser32: THandle;

 GetShellWindow: TGetShellWindow;

begin

 Result := 0;

 hUser32 := GetModuleHandle('user32.dll');

 if (hUser32 > 0) then

 begin

   @GetShellWindow := GetProcAddress(hUser32, 'GetShellWindow');

   if Assigned(GetShellWindow) then

   begin

     Result := GetShellWindow;

   end;

 end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

 hShellWindow: Hwnd;

 strWinText: array[0..260] of char;

begin

 hShellWindow := ShellWindow;

 if hShellWindow <> 0 then

 begin

   GetWindowText(ShellWindow, strWinText, 255);

   ShowMessage(strWinText);

 end;

end;