2013-08-28 119 views
3

我在寫一個小窗口應用程序。如何使用windows api更改任務欄中的圖標

我想用nsis腳本創建一個安裝程序。

我知道如何更改默認的應用程序圖標,通過使用

應用程序圖標開始菜單圖標和桌面快捷方式圖標:CreateShortCut "$SMPROGRAMS\$StartMenuFolder\shorcutName.lnk" "$INSTDIR\executableName.exe" "" "$INSTDIR\${INSTALL_ICON}" 0

桌面上的快捷方式:!define MUI_ICON "${INSTALL_ICON}"

開始菜單快捷方式CreateShortCut "$DESKTOP\shorcutName.lnk" "$INSTDIR\executableName.exe" "" "$INSTDIR\${INSTALL_ICON}" 0

但我還想更改應用程序窗口左上角顯示的圖標。 圖標顯示在任務欄上的任務管理器和圖標上。我認爲應該使用winapi完成。

任何幫助,將不勝感激。

在此先感謝

回答

1

它改變所有圖標,包括應用程序是很重要的,既小又大:

//Change both icons to the same icon handle. 
SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon); 
SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon); 

//This will ensure that the application icon gets changed too. 
SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, hIcon); 
SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, hIcon); 
+0

您好@Phoenix的GetWindow GW_OWNER總是返回到我NULL(爲0x0) 。你是什​​麼意思改變應用程序圖標?做第一部分改變任務欄和窗口中的圖標。它不會更改任務欄圖標,如果它固定。所以我只是想知道你的意思是「應用程序圖標」。謝謝! – Noitidart

+1

@Noitidart我相信在Alt + Tab中使用的圖標。可能還有另一個圖標要考慮,或者甚至沒有工作? –

+0

謝謝@Phoenix我無法讓'GW_OWNER'讓我成功,所以它對我沒有任何幫助。爲了讓它在任務欄中更改,如果它是固定的,它將不會與'WM_SETICON'一起工作,因爲這種情況下,我不得不通過固定目錄中的IShellLink/IPersistFile來更新圖標(可能在Implicit中):[檢測應用程序引腳狀態](http://stackoverflow.com/questions/28244200/detecting-application-pin-state#comment44852836_28245750)。如果它不是固定的,我必須使用'SHGetPropertyStoreForWindow'設置圖標,以防萬一他在晚些時候釘住它,我做了'WM_SETICON's – Noitidart

相關問題