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

能写程序-会种庄稼 2011-12-23 11:26:41
加精

// 请在前边加上 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图标显示就好了,觉得这段重启进程的代码挺常用的,贴出来共享,不会的可以参考下,适合重启各种进程,高手请提意见,勿喷!
...全文
987 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjbttxx 2012-01-01
  • 打赏
  • 举报
回复
话说: 攒!
chenq28 2012-01-01
  • 打赏
  • 举报
回复
谢谢楼主!

hrg005 2011-12-31
  • 打赏
  • 举报
回复
太赞啦~~~~~~
zhangyunhuax 2011-12-31
  • 打赏
  • 举报
回复
呵呵不错
vann1982 2011-12-31
  • 打赏
  • 举报
回复
虽然简单 楼主写的代码认真,优雅, 学习了
dajiahaowo 2011-12-30
  • 打赏
  • 举报
回复
能发这么好的帖子,太谢谢了
lidongfei123 2011-12-29
  • 打赏
  • 举报
回复
huig回个贴谷歌浏览器还崩溃了 恢复了又来回复 真是诸事不顺啊
arameter 2011-12-29
  • 打赏
  • 举报
回复
重启explorer在wince下也是要费一番功夫的
ilovefzq 2011-12-29
  • 打赏
  • 举报
回复
ccy2251 2011-12-29
  • 打赏
  • 举报
回复
恩谢谢拉
Xiehh11 2011-12-28
  • 打赏
  • 举报
回复
留个做收藏,以后慢慢观摩
liveths 2011-12-28
  • 打赏
  • 举报
回复
判分的感觉真好
QQ515311445 2011-12-28
  • 打赏
  • 举报
回复
觉得被骗了,就常用的杀了进程开进程,我还以为有什么新东西
绿领巾童鞋 2011-12-28
  • 打赏
  • 举报
回复
很好..收了
aoxiang1985 2011-12-28
  • 打赏
  • 举报
回复
很好,不错
  • 打赏
  • 举报
回复
对,这个在WINCE里会经常用到,感谢分享出来。
Ei 2011-12-24
  • 打赏
  • 举报
回复
无聊的测试了下,
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。。
Ei 2011-12-24
  • 打赏
  • 举报
回复
呵呵,从汇编来看。while(1)比for(;;) 会多几条判断判断指令。。
yjhdddf 2011-12-24
  • 打赏
  • 举报
回复
很棒。
woshi_ziyu 2011-12-24
  • 打赏
  • 举报
回复
不错。
加载更多回复(6)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧