消除筆記本的高頻電流噪音_第1頁
消除筆記本的高頻電流噪音_第2頁
消除筆記本的高頻電流噪音_第3頁
消除筆記本的高頻電流噪音_第4頁
消除筆記本的高頻電流噪音_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、消除筆記本的高頻電流噪音季光dummyshin.dum摘要:有些筆記本在使用中發(fā)出一種高頻電流噪音。這種噪音隨著硬盤的讀寫,用戶對窗口界面中的滾動(dòng)條的拉動(dòng)發(fā)生變化,并在操作系統(tǒng)啟動(dòng)之后幾乎始終存在,只有當(dāng)用戶播放音頻文件時(shí)這種噪音會(huì)消失。本文利用這一特點(diǎn)針對Windows操作系統(tǒng)給出了消除噪音解決方案。本文設(shè)計(jì)了一個(gè)占用資源較少的Windows系統(tǒng)服務(wù),在里面模擬音頻文件的播放,從而將噪音消除。關(guān)鍵字:筆記本高頻電流噪音Windows系統(tǒng)服務(wù)問題分析有些筆記本由于設(shè)計(jì)方面的問題,如果使用了USB設(shè)備或藍(lán)牙模塊,在運(yùn)行中會(huì)發(fā)出一種高頻電流噪音。例子包括Dell D610,Think R60e(在

2、使用電池的模式下)。這種噪音的來源并未得到官方的解釋。但是有些廠商已經(jīng)發(fā)布了修復(fù)這種噪音問題的BIOS補(bǔ)丁1。但是某些廠商并未正面解決這個(gè)問題2。有一種比較方便易行的方法可以把這種噪音消除:播放一個(gè)音頻文件,然后按下暫停按鈕。某些用戶反映在運(yùn)行一些游戲時(shí)也可以將噪音消除,其實(shí)也是利用了游戲背景音樂的作用。但是這種方法的缺點(diǎn)是需要手工操作,并且音樂播放器往往占用大量的內(nèi)存。我們應(yīng)該考慮用一種節(jié)省的方式實(shí)現(xiàn)它。設(shè)計(jì)與實(shí)現(xiàn)Windows提供了一組波形音頻的編程接口。我們可以利用它們模擬播放器的暫停狀態(tài):/代碼:模擬播放器的暫停狀態(tài)HWAVEOUThWaveOut;/波形音頻輸出句柄BYTEmuteM

3、UTE_LENGTH;/靜音符號(hào)串WAVEFORMATEXwaveformat=WAVE_FORMAT_PCM,1,SAMPLE_RATE,SAMPLE_RATE,1,8,0;/設(shè)定波形音頻的格式WAVEHDRwaveHdr=0,MUTE_LENGTH,0,0,0,1,NULL,0;/音頻數(shù)據(jù)信息頭FillMemory(mute,MUTE_LENGTH,(BYTE)0x80);/用靜音符號(hào)填充waveHdr.lpData=mute;/初始化信息頭指針/打開音頻設(shè)備waveOutOpen(&hWaveOut,WAVE_MAPPER,&waveformat,0,0,CALLBACK_FUNCTIO

4、N);/準(zhǔn)備信息頭waveOutPrepareHeader(hWaveOut,&waveHdr,sizeof(WAVEHDR);/播放靜音符號(hào)waveOutWrite(hWaveOut,&waveHdr,sizeof(WAVEHDR);/暫停waveOutPause(hWaveOut);利用這段代碼寫一個(gè)win32程序,保證程序進(jìn)程不會(huì)退出(可利用一個(gè)含有Sleep調(diào)用的死循環(huán)或彈出一個(gè)模態(tài)對話框?qū)崿F(xiàn)),即可實(shí)現(xiàn)消除噪音的作用。然而這樣做仍然不夠完善。我們希望系統(tǒng)在啟動(dòng)的時(shí)候,無論有用戶登錄與否,都能夠自動(dòng)地調(diào)用它。為了解決這一問題,我們應(yīng)當(dāng)把它改造為Windows的系統(tǒng)服務(wù)。Windows系

5、統(tǒng)服務(wù)的編寫需要服從一定的格式規(guī)范,請參閱相關(guān)文獻(xiàn)3,本文不予詳述。需要注意的是,如果編寫為獨(dú)立的Windows服務(wù),仍然需要1,900K左右的內(nèi)存;如果編寫為寄存在svchost中的服務(wù)4,則可以把內(nèi)存占用量大大降低,達(dá)到300400K。本文采用了后者。完整代碼如下(我們把服務(wù)名取作DenoiseSvc31):/*消電流噪聲svchost版3.1*/#include#include#defineSLEEP_TIME10000#defineSERVICE_NAMEDenoiseSvc31 /服務(wù)名#defineMUTE_LENGTH128#defineSAMPLE_RATE11025SERVI

6、CE_STATUSServiceStatus;SERVICE_STATUS_HANDLEhStatus;voidInitService(void)HWAVEOUThWaveOut;BYTEmuteMUTE_LENGTH;WAVEFORMATEXwaveformat=WAVE_FORMAT_PCM,1,SAMPLE_RATE,SAMPLE_RATE,1,8,0;WAVEHDRwaveHdr=0,MUTE_LENGTH,0,0,0,1,NULL,0;FillMemory(mute,MUTE_LENGTH,(BYTE)0x80);waveHdr.lpData=mute;waveOutOpen(&hW

7、aveOut,WAVE_MAPPER,&waveformat,0,0,CALLBACK_FUNCTION);waveOutPrepareHeader(hWaveOut,&waveHdr,sizeof(WAVEHDR);waveOutWrite(hWaveOut,&waveHdr,sizeof(WAVEHDR);waveOutPause(hWaveOut);voidControlHandler(DWORDrequest)switch(request)caseSERVICE_CONTROL_STOP:caseSERVICE_CONTROL_SHUTDOWN:ServiceStatus.dwWin3

8、2ExitCode=0;ServiceStatus.dwCurrentState=SERVICE_STOPPED;SetServiceStatus(hStatus,&ServiceStatus);return;default:break;/ReportcurrentstatusSetServiceStatus(hStatus,&ServiceStatus);return;#pragmaargsused_declspec(dllexport)VOIDWINAPIServiceMain(DWORDdwArgc,LPTSTR*lpszArgv)ServiceStatus.dwServiceType=

9、SERVICE_WIN32_SHARE_PROCESS;ServiceStatus.dwCurrentState=SERVICE_START_PENDING;ServiceStatus.dwControlsAccepted=SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;ServiceStatus.dwWin32ExitCode=0;ServiceStatus.dwServiceSpecificExitCode=0;ServiceStatus.dwCheckPoint=0;ServiceStatus.dwWaitHint=0;hStatus=Regist

10、erServiceCtrlHandler(SERVICE_NAME,(LPHANDLER_FUNCTION)ControlHandler);if(hStatus=(SERVICE_STATUS_HANDLE)0)/RegisteringControlHandlerfailedreturn;/InitializeServiceInitService();/WereporttherunningstatustoSCM.ServiceStatus.dwCurrentState=SERVICE_RUNNING;SetServiceStatus(hStatus,&ServiceStatus);/Thewo

11、rkerloopofaservicewhile(ServiceStatus.dwCurrentState=SERVICE_RUNNING)Sleep(SLEEP_TIME);return;Svchost服務(wù)要求可執(zhí)行文件必須為動(dòng)態(tài)鏈接庫。我們把它編譯為denoise.dll并拷貝到%windir%system32目錄下。剩下的任務(wù)就是把它安裝到系統(tǒng)上。為系統(tǒng)添加一個(gè)服務(wù)需要修改注冊表。對于Svchost服務(wù),需要修改的地方包括:l HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvcHost:把服務(wù)添加到某個(gè)Svchost

12、組內(nèi)。l HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices:添加服務(wù)的主鍵及相關(guān)鍵值。代碼如下:Windows Registry Editor Version 5.00HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDenoiseSvc31Type=dword:00000020Start=dword:00000002ErrorControl=dword:00000001ImagePath=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00

13、,6f,00,6f,00, 74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73, 00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00, 6b,00,20,00,48,00,54,00,54,00,50,00,46,00,69,00,6c,00,74,00,65,00,72,00,00, 00DisplayName=DenoiseSvc31DependOnService=hex(7):4c,00,61,

14、00,6e,00,6d,00,61,00,6e,00,57,00,6f,00,72,00, 6b,00,73,00,74,00,61,00,74,00,69,00,6f,00,6e,00,00,00,00,00DependOnGroup=hex(7):00,00ObjectName=NT AUTHORITYLocalServiceDescription=消除筆記本的高頻電流噪音HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDenoiseSvc31Enum0=RootLEGACY_ALERTER0000Count=dword:00000001N

15、extInstance=dword:00000001HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDenoiseSvc31ParametersAlertNames=hex(7):00,00ServiceDll=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f, 00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00, 64,00,65,00,6e,00,6f,00,69,0

16、0,73,00,65,00,2e,00,64,00,6c,00,6c,00,00,00HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDenoiseSvc31SecuritySecurity=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,02, 00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00, 00,00,02,00,60,00,04,00,00,00,00,00

17、,14,00,fd,01,02,00,01,01,00,00,00,00,00, 05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00, 20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00, 00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01, 00,00,00,00,00,05,12,00,00,00,0

18、1,01,00,00,00,00,00,05,12,00,00,00HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvcHostHTTPFilter=hex(7):48,00,54,00,54,00,50,00,46,00,69,00,6c,00,74,00,65,00,72, 00,00,00,44,00,65,00,6e,00,6f,00,69,00,73,00,65,00,53,00,76,00,63,00,33,00, 31,00,00,00,00,00把它保存在denoise.reg中雙擊運(yùn)行,然后重啟機(jī)器,噪音問題就解決了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論