当前位置: 代码迷 >> WinCE >> 分享一段重启WinCE下explorer.exe的代码,高手就别进来了。解决方案
  详细解决方案

分享一段重启WinCE下explorer.exe的代码,高手就别进来了。解决方案

热度:1182   发布时间:2016-04-28 13:57:06.0
分享一段重启WinCE下explorer.exe的代码,高手就别进来了。
C/C++ code
// 请在前边加上  tlhelp32.h和toolhelp.libvoid CResAdjustDlg::RestartExplorer(){    // 获取进程快照     HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    if (INVALID_HANDLE_VALUE == hSnapshot) {        MessageBox(_T("Get processes snapshot failure."), _T("ERROR"), MB_ICONERROR|MB_OK);        return;    }    PROCESSENTRY32 pe32;    BOOL bRet = FALSE;    BOOL bFirst = TRUE;    DWORD dwExplorerProcId = (DWORD)-1;    memset(&pe32, 0x00, sizeof(PROCESSENTRY32));    pe32.dwSize = sizeof(PROCESSENTRY32);    // 遍历进程    for ( ; ; ) {            __try {            if (bFirst) {                bRet = Process32First(hSnapshot, &pe32);                bFirst = FALSE;            } else {                bRet = Process32Next(hSnapshot, &pe32);            }            if (!bRet) {                if (ERROR_NO_MORE_FILES != GetLastError()) {                    MessageBox(_T("Process32First() error."));                }                break;            }            //MessageBox(pe32.szExeFile);             if (_tcsicmp(_T("explorer.exe"), pe32.szExeFile) == 0) {                dwExplorerProcId = pe32.th32ProcessID;                break;            }        } __except(EXCEPTION_EXECUTE_HANDLER) {            break;        }    }    if (dwExplorerProcId != (DWORD)-1) {        PROCESS_INFORMATION pi;        HANDLE hExplorer = OpenProcess(0, FALSE, dwExplorerProcId);        if (hExplorer != NULL) {            TerminateProcess(hExplorer, 1);            if (!CreateProcess(_T("explorer.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi)){                MessageBox(_T("Create explorer.exe process failure."));            } else {                // MessageBox(_T("Create process success."));            }        }        CloseHandle(hExplorer);    }    CloseToolhelp32Snapshot(hSnapshot);}

做ce6动态调整分辨率的工作,改完驱动发现调整后图片不能正常显示,后来重启explorer图标显示就好了,觉得这段重启进程的代码挺常用的,贴出来共享,不会的可以参考下,适合重启各种进程,高手请提意见,勿喷!

------解决方案--------------------
不错!
------解决方案--------------------
楼主的分享精神要赞一下。

代码的缩进方式,和for ( ; ; ),很有欧美程序员的风格。

呵呵。
------解决方案--------------------
太赞啦~~~~~~
------解决方案--------------------
不错。
------解决方案--------------------
很棒。
------解决方案--------------------
呵呵,从汇编来看。while(1)比for(;;) 会多几条判断判断指令。。
------解决方案--------------------
无聊的测试了下,
while(1);
0041138E mov eax,1 
00411393 test eax,eax 
00411395 je wmain+29h (411399h) 
00411397 jmp wmain+1Eh (41138Eh) 
for(;;);
00411399 jmp wmain+29h (411399h) 

PC上debug版的结果。。。rlease下一致
WCE上 debug跟rlease一样是一条jmp。。
------解决方案--------------------

------解决方案--------------------
对,这个在WINCE里会经常用到,感谢分享出来。
------解决方案--------------------
判分的感觉真好
------解决方案--------------------
很好,不错
------解决方案--------------------
很好..收了
------解决方案--------------------
  相关解决方案