0
var ScreenSaver:String;
var handle:HWND;
begin
Handle := FindWindow('Progman', 'Program Manager');
Handle := FindWindowEx(Handle, 0, 'SHELLDLL_DefView', 0);
Handle := FindWindowEx(Handle, 0,'SysListView32', 'FolderView');

ScreenSaver := 'C:\windows\system32\Mystify.scr /P' + InttoStr( Handle );
WinExec(pAnsichar(screensaver), SW_SHOWNormal);

このコードはデスクトップアイコンを消去します。
デスクトップアイコンの背後にあるウィンドウハンドルを取得するにはどうすればよいですか?

4

2 に答える 2

0

mghie が示すように、スクリーンセーバーを起動したい場合、それは正しい方法ではありません。最も簡単な方法は次のとおりです。

SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0); 

私の経験では、やはり mghie に同意します。やりたいことはできないと思います。スクリーンセーバーがアクティブな場合、Windows は別の環境で動作しているように見えます。たとえば、Windows メッセージが期待どおりに伝達されないようです。

ただし、デスクトップに到達するために、以前はデスクトップのデバイス コンテキストへのハンドルを使用していました。

var
  ScreenDC: HDC;
begin
  ScreenDC := GetWindowDC(0);
  ...
  // You can then use the Device Context with Windows API methods such as BitBlt
  // and StretchBlt to go graphical work on the desktop.}
  ...
  ReleaseDC(0, ScreenDC);
于 2009-08-05T21:11:30.107 に答える