1. 程式人生 > >幾個修改登錄檔後立即生效的重新整理方法

幾個修改登錄檔後立即生效的重新整理方法

        每次修改登錄檔之後如果想要立即見到效果的話都要重啟explorer真是相當讓人不爽,網上對於此類回答基本上就是重啟explorer和重啟系統。

        有很多功能,比如windows自身提供的一些設定選項,在使用者進行了操作之後實際上也是操作的登錄檔,但是能夠立即重新整理而無須重啟explorer(當然有些操作也是需要重啟的)。那麼也就是說肯定是有方法不用重啟explorer就能實現立即生效的。

        因為我也沒有太多的時間來系統的研究這一整套方法,經過幾天的研究也算是找到了幾種可行的重新整理機制。下面列出來幾條既為了整理記錄也為了能夠拋磚引玉。

        1. SystemParametersInfo函式。通過給第一個引數傳入一個SET屬性的引數可以實現部分系統重新整理功能,例如:有一個小功能是設定win8視窗開啟關閉時的動畫效果,這個功能系統自帶有設定選項,可以選擇開啟或者關閉,整個過程不需要重啟explorer。具體實現方法就是修改了相應的登錄檔項後呼叫:SystemParametersInfo(SPI_SETANIMATION,sizeof(ANIMATIONINFO),&info,SPIF_SENDCHANGE); 其中info是一個ANIMATIONINFO結構體。

        關於這個系統函式有大量的引數可以使用,在此就不多羅列了。

        2. PostMessage/SendMessage函式。關於這倆函式肯定都很熟悉了,比如使用SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0)可以廣播設定變更訊息,在很多場合上很有用;另外,後來研究過一段時間模擬右鍵重新整理桌面的功能,網上有人使用模擬F5按鍵訊息的方法個人感覺不太靠譜,一方面可能容易被安全軟體截獲,另一方面還要考慮存在某些軟體修改F5功能的情況。後來在網上查到傳送41504的WM_COMMAND訊息就可以完美模擬重新整理桌面訊息:PostMessage(HWND_BROADCAST,WM_COMMAND,41504,NULL)。但是對於重新整理本身都無法實現即時生效的登錄檔修改依然幫不上忙。

        3. 另外,SHChangeNotify函式也能實現一部分系統功能的重新整理,但是由於在最近的專案上沒有效果,就不細說了。