2009-09-11 52 views
7

我寫了一個程序,它在桌面圖標上繪製小部件,在桌面圖標下繪製,都很好。 但我揭示了一個奇怪的錯誤 - 我的程序並不適用於其他一些計算機 - 它們在啓動後顯示 沒有小部件的相同桌面。在桌面上的圖標下繪製

那麼,有沒有人有過這方面的經驗,有些知識呢?請幫幫我! :)

(我找不到任何附近的電腦,那裏的小工具不工作,在我的電腦中一切正常。在我的朋友的電腦顯示沒有什麼太)

繪圖方法:

我寫了一個dll,誰發現桌面窗口(progman->兒童安全>子)) 並創建一個鉤,並安裝自己的窗口過程桌面。 在窗口過程我勾WM_ERASEBKGND:

case WM_ERASEBKGND: 
    HDC hdc = (HDC)wparam; 
    PaintDesktop(hdc); 
    WidgetPaint(hdc); 
    return 1; 

//我跳過這段代碼獲取和快速繪製設置裁剪區域。我試圖在WM_PAINT消息中繪製小部件,結果相同 - 所有的東西都已經在我身上工作,但並不適用於我所有的朋友。

upd:我解決了! :)

+0

您的代碼是否在Windows XP中運行,而不是*在Windows Vista或Windows 7中運行? – MusiGenesis

+0

是的,我的代碼適用於XP和Windows Vista。 但是copmletely在Windows 7中不起作用。在Windows 7中,我想,它的一個保護機制是 。 (我甚至不能列出在explorer.exe進程中加載​​的DLL) – vsvasya

+1

出於好奇,這是什麼修復? – Brian

回答

3

我解決了它! 這很簡單,是一個64位機器) 因此,我編譯我的代碼爲64位和小部件開始工作很不錯!

而且,還 -

PaintDesktop(hdc); 

會產生在Windows7(和Vista)與航空非常明亮的牆紙。 (用戶的壁紙變亮)。 必須

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

原因這一點 - 航空對待PaintDesktop()像往常一樣漆(在虛擬屏幕壁紙,這是一樣的桌面上)與顏色總和。

問候! :)

+0

我只是想寫一個類似的東西。我想在桌面圖標下方顯示圖像。我不是Windows編程專家,所以我有一些困難。你能不能在你的widget的某個地方發佈源代碼? – ciamej

+0

你能發表更詳細的答案嗎?我很好奇你如何在桌面圖標下繪畫。 – Ampere