| 
      ...retrieve the handle to the Windows Shell window?
     | 
   
   
    | Autor: 
      Thomas Stutz     | 
   
  | [ Print tip 
] |   |   |   
 
 
 
{ 
  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; 
 
 
  
                       |