程式有個特殊的需求,就是運行時,要把狀態欄上的圖示變成小圖示(下圖1)。默認情況下,我們的系統狀態欄上的圖示都是大圖示(下圖2),在win7,win8上都可以正常運行,實作方式如下:
'把SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\的TaskbarSmallIcons值改成1
rc = RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY_ADVANCED, 0, KEY_SET_VALUE, hSubKey)
If rc <> ERROR_SUCCESS Then Exit Sub
rc = RegSetValueEx(hSubKey, REGNAME_TASKBARSMALLICONS, 0, REG_DWORD, p_SmallIcons, Len(p_SmallIcons))
rc = RegCloseKey&(HKEY_CURRENT_USER&)
'然后給系統發訊息
Call SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0, SMTO_ABORTIFHUNG, 5000, w_retCode)
但是win10就是不行,奇了怪了。,望指教。。。

圖一
uj5u.com熱心網友回復:
使用按鍵精靈模擬手動操作 ?uj5u.com熱心網友回復:
這個肯定不行的。
uj5u.com熱心網友回復:
你確定Win10下,仍然是由那個注冊表設定資訊控制的嗎?你可以先把注冊表中的那個內容洗掉,然后手動改變任務欄的圖示顯示方式,
看看它是否創建了那個注冊表項、并且對應的值(資料型別及格式)是多少。
uj5u.com熱心網友回復:
嗯,注冊表修改對著呢,現在的現象是程式運行時,手動打開任務欄的屬性,顯示已經選擇小圖示,但是任務欄沒有變成小圖示,所以懷疑是發送訊息出問題了。但是就是不知道要換成什么訊息,怎么個發送。
uj5u.com熱心網友回復:
我的意思不是說看你的程式修改注冊表結果對不對。
我是說,你把那個注冊表項(TaskbarSmallIcons)洗掉掉,然后直接操作任務欄的屬性,
讓它顯示為大圖示、小圖示,看看系統會不會把TaskbarSmallIcons創建出來、以及大圖示、小圖示時對應什么樣的資料。
(就是首先要搞清楚:在Win10下,是不是跟Win7、Win8還是一樣的。)
uj5u.com熱心網友回復:
按您的指示操作了下,刪掉后,通過任務欄操作后還是會創建的,所以感覺注冊表那塊對著,就是不知道win10,跟win7,win8之間的訊息機制有什么變動?uj5u.com熱心網友回復:
我在 Win7/64位下試了一下你的代碼,也是有效的。注冊表那兒沒變,看來是訊息的變動了,這個不知道能不能查到資料。
WM_SETTINGCHANGE這個應該是不會變的,
估計在HWND_BROADCAST這個引數上有變化。
不知道可不可以用 Spy++把這個訊息“找出來”。
uj5u.com熱心網友回復:
7和10應該區別不大啊uj5u.com熱心網友回復:
我在 Win7/64位下試了一下你的代碼,也是有效的。
注冊表那兒沒變,看來是訊息的變動了,這個不知道能不能查到資料。
WM_SETTINGCHANGE這個應該是不會變的,
估計在HWND_BROADCAST這個引數上有變化。
不知道可不可以用 Spy++把這個訊息“找出來”。
沒有用過Spy++,不知道怎么找訊息
我msdn的論壇上也提問了,就是沒有人理,奇了怪,麻煩大蝦們上去頂頂..
https://social.technet.microsoft.com/Forums/en-US/c6160636-a7ad-4bd0-9fc4-061b75c9b4ea/windows10-desktop-app-how-to-dynamically-set-the-icon-on-the-taskbar-to-large-or-small
我的英文很爛,如果上面沒有描述清楚,麻煩給咱在上面回帖說明下,謝謝了。。。
uj5u.com熱心網友回復:
VC下出現了同樣的情況,估計是這個訊息被禁用了,不知道樓主怎么解決的uj5u.com熱心網友回復:
7和10應該區別不大啊
我覺得7 32位和10 64位差別巨大!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/63938.html
標籤:API
上一篇:求時間復雜度 怎么算啊求助大神
