专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > WinCE

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

发布时间:2010-06-13 22:29:20 文章来源:www.iduyao.cn 采编人员:星星草
分享一段重启WinCE下explorer.exe的代码,高手就别进来了。
C/C++ code

// 请在前边加上  tlhelp32.h和toolhelp.lib
void 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里会经常用到,感谢分享出来。
------解决方案--------------------
判分的感觉真好
------解决方案--------------------
很好,不错
------解决方案--------------------
很好..收了
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: