2009-08-05 81 views
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); 

此代碼將清除桌面圖標。
如何獲取桌面圖標後面的窗口句柄?推送屏幕保護程序作爲牆紙

回答

2

這不是一個真正的Delphi問題,但無論如何...使用/P命令行開關啓動屏幕保護程序創建屏幕保護程序窗口作爲給定窗口的子窗口,具有相同的大小和位置 - 它是僅用於在「顯示屬性」對話框中提供屏幕保護程序預覽。它將而不是定位屏幕保護程序窗口的某個其他窗口下的Z順序。因此它會畫出一切,擦除桌面圖標。

除非您創建自己的屏幕保護程序,直接在桌面窗口上繪製,否則我不認爲您可以完成任何操作。

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); 
相關問題