草龟怎么墨化:VC对explorer.exe进程操作实现注册表修改的即时生效

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 20:20:04

VC对explorer.exe进程操作实现注册表修改的即时生效


  因为新到一批前台生产机,要求给系统加锁,除了正常的业务操作外限制其它一些操作,所以动用注册表来实现这些禁止比较方便快捷。我用的是VC,VC中提供了一系统对注册表的操作函数,可以绕过regedit注册表编辑器,对注册表进行直接操作。但其中涉及到即时生效的问题。

  比方,要求把桌面封装起来,禁止显示桌面。

  在注册表[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer]下,新建"NoDesktop"=dword:00000001即可实现禁止。但是,即使你刷新了注册表,桌面还是原来的桌面,并没有意料中的消失。要重新启动系统后才能看到效果。

  那有没有办法可以实现类似的即时生效呢?因为生产机如果每次改动后都要重启那是不大现实的。于是在网上搜索了好些资料。方法很多。包括,SystemParametersInfo(SPI_SETCURSORS,0,NULL,SPIF_SENDCHANGE);和SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,SMTO_NORMAL,1000,&dwResult); 等,其中一些一些人说有用,只是我用在桌面封装上没看到效果,不过也有可能是我用得不对。

  最后,还是回到所谓最原始的方法,explorer.exe进程。直接做法是打开“任务管理器”把这个进程结束掉,再“文件->新建任务->explorer.exe”重启它就可以看到修改的效果了。

  VC中提供了,

  TerminateProcess(HANDLE hProcess,UINT uExitCode);/////终止某个进程

  hProcess:表示需要结束的进程句柄。

  uExitCode:表示进程退出代码。

 

  BOOL CreateProcess /////创建一个进程

  (

  LPCTSTR lpApplicationName,

  LPTSTR lpCommandLine,

  LPSECURITY_ATTRIBUTES lpProcessAttributes。

  LPSECURITY_ATTRIBUTES lpThreadAttributes,

  BOOL bInheritHandles,

  DWORD dwCreationFlags,

  LPVOID lpEnvironment,

  LPCTSTR lpCurrentDirectory,

  LPSTARTUPINFO lpStartupInfo,

  LPPROCESS_INFORMATION lpProcessInformation

  );

  

  只要使用这两个函数就可以方便地结束和创建进程。需要注意的是,TerminateProcess(HANDLE hProcess,UINT uExitCode);后一参数,当uExitCode=1时可以实现进程的彻底KILL。

  所以实现explorer.exe进程的结束重启,可以先用uExitCode=1的TerminateProcess函数将其彻底结束,再用CreateProcess函数创建。不过这个方法存在的不足是,用CreateProcess函数创建explorer.exe进程的话,会弹出“我的文档”窗口。

  因此,比较理想的方法是,用uExitCode=0的TerminateProcess函数结束explorer.exe进程一步即可实现上述效果。这是因为windows会自动检测explorer.exe进程,如果发现其被结束(不是被彻底结束的话),就会自动创建它。而且自动创建的explorer.exe进程不会弹出“我的文档”窗口。

  以上方法,对修改注册表实现桌面封装和硬盘封装有立杆见影的效果,至于注册表其它项有待测试。