消除笔记本的高频电流噪音_第1页
消除笔记本的高频电流噪音_第2页
消除笔记本的高频电流噪音_第3页
消除笔记本的高频电流噪音_第4页
消除笔记本的高频电流噪音_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、消除笔记本的高频电流噪音季光dummyshin.dum摘要:有些笔记本在使用中发出一种高频电流噪音。这种噪音随着硬盘的读写,用户对窗口界面中的滚动条的拉动发生变化,并在操作系统启动之后几乎始终存在,只有当用户播放音频文件时这种噪音会消失。本文利用这一特点针对Windows操作系统给出了消除噪音解决方案。本文设计了一个占用资源较少的Windows系统服务,在里面模拟音频文件的播放,从而将噪音消除。关键字:笔记本高频电流噪音Windows系统服务问题分析有些笔记本由于设计方面的问题,如果使用了USB设备或蓝牙模块,在运行中会发出一种高频电流噪音。例子包括Dell D610,Think R60e(在

2、使用电池的模式下)。这种噪音的来源并未得到官方的解释。但是有些厂商已经发布了修复这种噪音问题的BIOS补丁1。但是某些厂商并未正面解决这个问题2。有一种比较方便易行的方法可以把这种噪音消除:播放一个音频文件,然后按下暂停按钮。某些用户反映在运行一些游戏时也可以将噪音消除,其实也是利用了游戏背景音乐的作用。但是这种方法的缺点是需要手工操作,并且音乐播放器往往占用大量的内存。我们应该考虑用一种节省的方式实现它。设计与实现Windows提供了一组波形音频的编程接口。我们可以利用它们模拟播放器的暂停状态:/代码:模拟播放器的暂停状态HWAVEOUThWaveOut;/波形音频输出句柄BYTEmuteM

3、UTE_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(&hWaveOut,WAVE_MAPPER,&waveformat,0,0,CALLBACK_FUNCTIO

4、N);/准备信息头waveOutPrepareHeader(hWaveOut,&waveHdr,sizeof(WAVEHDR);/播放静音符号waveOutWrite(hWaveOut,&waveHdr,sizeof(WAVEHDR);/暂停waveOutPause(hWaveOut);利用这段代码写一个win32程序,保证程序进程不会退出(可利用一个含有Sleep调用的死循环或弹出一个模态对话框实现),即可实现消除噪音的作用。然而这样做仍然不够完善。我们希望系统在启动的时候,无论有用户登录与否,都能够自动地调用它。为了解决这一问题,我们应当把它改造为Windows的系统服务。Windows系

5、统服务的编写需要服从一定的格式规范,请参阅相关文献3,本文不予详述。需要注意的是,如果编写为独立的Windows服务,仍然需要1,900K左右的内存;如果编写为寄存在svchost中的服务4,则可以把内存占用量大大降低,达到300400K。本文采用了后者。完整代码如下(我们把服务名取作DenoiseSvc31):/*消电流噪声svchost版3.1*/#include#include#defineSLEEP_TIME10000#defineSERVICE_NAMEDenoiseSvc31 /服务名#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服务要求可执行文件必须为动态链接库。我们把它编译为denoise.dll并拷贝到%windir%system32目录下。剩下的任务就是把它安装到系统上。为系统添加一个服务需要修改注册表。对于Svchost服务,需要修改的地方包括:l HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvcHost:把服务添加到某个Svchost

12、组内。l HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices:添加服务的主键及相关键值。代码如下: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中双击运行,然后重启机器,噪音问题就解决了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论