获取其他窗口句柄 结束其他进程等问题? 本帖最后由 VisualEleven 于 2012-08-25 19:04:51 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.你是不是结束的是子进程啊?父进程还在所以窗体还在呀我上一段老代码,扫描进程,从进程获得句柄从而关闭。这个是我以前写的监测程序,pe32保存着进程信息,从中获得句柄发送WM_CLOSE看看int MyWatch(char * thread_name){ PROCESSENTRY32 pe32; char * mychar; BOOL bstart=TRUE; HANDLE hProcessSnap; while(1) { pe32.dwSize=sizeof(pe32); hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap==INVALID_HANDLE_VALUE) { printf("CreateToolhelp32Snapshot调用失败!\n"); return -1; } //遍历进程快照。轮流显示每个进程的信息 bstart = TRUE; BOOL bMore=::Process32First(hProcessSnap,&pe32); while(bMore) { USES_CONVERSION; //启用宏命令标记 mychar = W2A(pe32.szExeFile); if(0==strcmp(thread_name,mychar)) //比较你的进程名字是否相同,判断是否进程在启动 { printf("你的程序在运行!"); bstart = FALSE; break; }// printf("进程名称:%s\n",W2A(pe32.szExeFile));// printf("进程ID号:%u\n\n",pe32.th32ProcessID); bMore=::Process32Next(hProcessSnap,&pe32); } if(bstart) { ShellExecute(0, _T("open"), _T("D:\\result.txt"),NULL,NULL,SW_SHOWNORMAL); //启动你要的exe文件,D:\\result.txt是我自己的测试 } Sleep(5000);//5秒监测一次 } //清除snapshot对象 ::CloseHandle(hProcessSnap); return 0;} 是公司内部用的一个软件,我想应该不会写得这么霸道,也没必要写成这样。我是用Process32First与Process32Next来查找进程的,结束掉是确定的了,因为任务管理器里已经消失了,至于是不是有两个进程,这个我倒没注意。3楼可能没理解我的意思,我是说能不能取得隐藏窗口句柄,发送WM_CLOSE消息关闭窗口同时结束掉进程,而不是通过进程句柄结掉进程。另外,第一个问题,控件没有句柄还有什么可能吗?软件在公司,现在不能测试,大家分析的情况等我周一去了再试一下,先谢谢大家了。 如果窗口还在,说明你没结束对。可以在任务管理器里选中那个窗口,右键菜单里选“转到进程”,看看是不是进程没有结束。或者用GetWindowThreadProcessId获取到窗口的进程ID,进一步结束 我倒是忘了这一步,只是想当然的以为进程名和软件名一样了,这样一试,确定程序进程是javaw.exe,好像这是JAVA程序用的,最后我获取进程的执行目录来确定进程,正确结束掉了。 请教一个靠谱的方法或者结论 一不小心踩到大便了!我去... vc6.0 程序无法调用资源 关于CScrollView窗口改变大小的问题 高分.为什么<VC++高级开发范例解析>的例子编译出错 当弹出模式对话框后,定时并不停止,这个问题如何解决? 关于对BMP图像上的点整理的问题 我想打印listCtrl内的数据,该怎么做?这里欧一段代码请大家帮忙看看 特么,卡马乔的工作真好 帮我解释一下! 【求助】StartService失败,错误代码是31,A device attached to the system is not functioning!! ADO远程连接access数据库
{
PROCESSENTRY32 pe32;
char * mychar;
BOOL bstart=TRUE;
HANDLE hProcessSnap;
while(1)
{
pe32.dwSize=sizeof(pe32);
hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot调用失败!\n");
return -1;
}
//遍历进程快照。轮流显示每个进程的信息
bstart = TRUE;
BOOL bMore=::Process32First(hProcessSnap,&pe32);
while(bMore)
{
USES_CONVERSION; //启用宏命令标记
mychar = W2A(pe32.szExeFile);
if(0==strcmp(thread_name,mychar)) //比较你的进程名字是否相同,判断是否进程在启动
{
printf("你的程序在运行!");
bstart = FALSE;
break;
}
// printf("进程名称:%s\n",W2A(pe32.szExeFile));
// printf("进程ID号:%u\n\n",pe32.th32ProcessID);
bMore=::Process32Next(hProcessSnap,&pe32);
} if(bstart)
{
ShellExecute(0, _T("open"), _T("D:\\result.txt"),NULL,NULL,SW_SHOWNORMAL); //启动你要的exe文件,D:\\result.txt是我自己的测试
}
Sleep(5000);//5秒监测一次 }
//清除snapshot对象
::CloseHandle(hProcessSnap); return 0;
}
3楼可能没理解我的意思,我是说能不能取得隐藏窗口句柄,发送WM_CLOSE消息关闭窗口同时结束掉进程,而不是通过进程句柄结掉进程。
另外,第一个问题,控件没有句柄还有什么可能吗?
软件在公司,现在不能测试,大家分析的情况等我周一去了再试一下,先谢谢大家了。