最近想做一個情景模式,只是簡單的實現三個狀態:正常音量,震動,靜音。
本來想這麼簡單的應該不會很難的,開始沒有找到相關的函數,就抓取註冊表的變化來實現這三個狀態。
結果可以實現這三種狀態,哈哈,學到幾個有用的登錄機碼。
HKCU/ControlPanel/Notifications/ShellOverrides:Mode. 0表示正常,1表示震動,2是靜音
HKCU/ControlPanel/Volume:
_T("Key") //按鍵音量
_T("Ringer") //這個不清楚
_T("Screen") //應該是點螢幕音量
_T("Volume") // 系統音量
HKCU/ControlPanel/SoundCategories/Ring:InitVol 這個是調節音量那裡第二列的音量(0-5)
系統上一狀態的音量備份值儲存在
HKCU/ControlPanel/Notifications/ShellOverrides:
_T("SavedKey")
_T("SaveRinger")
_T("SavedScreen")
_T("SavedVolume")
還有電話中好像也得設定的,copy snapi.h中的文字
////////////////////////////////////////////////////////////////////////////////
// PhoneRingerOff
// Gets a value indicating whether the phone's ringer is off (i.e., if it rings and/or vibrates).
#define SN_PHONERINGEROFF_ROOT HKEY_LOCAL_MACHINE
#define SN_PHONERINGEROFF_PATH TEXT("System//State//Phone")
#define SN_PHONERINGEROFF_VALUE TEXT("Status")
#define SN_PHONERINGEROFF_BITMASK 0x40
//////////////////////////////////////////////////////////////////////////
設定相應的模式和音量,可以實現相應的功能,但是在TitleBar上面的喇叭表徵圖一直沒有改變。。。
這個問題很鬱悶,後來網上找到兩個文章,可以不用自己維護註冊表,而實現上面的問題,
並可以改變上面標題列的表徵圖~
http://social.msdn.microsoft.com/Forums/zh-TW/803/thread/cb9786c0-823b-4bb1-9f54-12815695ae9c
http://www.devdiv.com/thread-24092-1-1.html
就是使用SndSetSound()函數。
//將頂欄喇叭表徵圖設為(By jjlzg)開啟<br /> SNDFILEINFO sndFile1;<br /> sndFile1.sstType = SND_SOUNDTYPE_ON;<br /> SndSetSound(SND_EVENT_ALL, &sndFile1, TRUE);</p><p> //將頂欄喇叭表徵圖設為(By jjlzg)震動<br /> SNDFILEINFO sndFile2;<br /> sndFile2.sstType = SND_SOUNDTYPE_VIBRATE;<br /> SndSetSound(SND_EVENT_ALL, &sndFile2, TRUE);