首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

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

2012-03-29 
分享一段重启WinCE下explorer.exe的代码,高手就别进来了。C/C++ code// 请在前边加上tlhelp32.h和toolhelp.

分享一段重启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里会经常用到,感谢分享出来。
[解决办法]
判分的感觉真好
[解决办法]
很好,不错
[解决办法]
很好..收了
------解决方案--------------------


觉得被骗了,就常用的杀了进程开进程,我还以为有什么新东西
[解决办法]
留个做收藏,以后慢慢观摩
[解决办法]
huig回个贴谷歌浏览器还崩溃了 恢复了又来回复 真是诸事不顺啊
[解决办法]
恩谢谢拉
[解决办法]

[解决办法]
重启explorer在wince下也是要费一番功夫的
[解决办法]
能发这么好的帖子,太谢谢了

[解决办法]
太赞啦~~~~~~
[解决办法]
虽然简单 楼主写的代码认真,优雅, 学习了
[解决办法]
呵呵不错
[解决办法]
谢谢楼主! 
 

[解决办法]
话说: 攒!

热点排行