获取其他窗口句柄 结束其他进程等问题?
我这有一个程序,是JAVA写的,窗口上有一个按钮,我现在需要向这个按钮发送点击的消息,获取不到句柄,结果用SPY++查看,居然只有父窗口,我就以为它是画上去的,所以向其父窗口发送鼠标的各种消息,坐标试了好多,可是它全都没有响应,这是怎么回事,除了画上去的还有没有其他可能?
还是这个程序,我需要强制结束他,所以就采取结束进程的方法,可是进程成功结束掉了,窗口居然还在,而且还能正常的操作,这是什么情况?是隐藏进程吗?它正常情况下是隐藏的,我如果获取到隐藏窗口的句柄向其发送WM_CLOSE消息呢?
这两个问题困扰了多天,因为天天很忙,而且这也不是工作,所以一直放着没解决,但天天一想到这就头痛,所以特地上来请教各位。
[解决办法]
它有守护进程?
[解决办法]
结束了进程,窗口还在...
确定结束对了?
[解决办法]
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;}
[解决办法]
估计有多个进程,你没有结束干净.
[解决办法]
TerminateProcess也结束不了?
[解决办法]
如果窗口还在,说明你没结束对。可以在任务管理器里选中那个窗口,右键菜单里选“转到进程”,看看是不是进程没有结束。或者用GetWindowThreadProcessId获取到窗口的进程ID,进一步结束