首页 > 代码库 > 编程模式如何结束未响应的程序
编程模式如何结束未响应的程序
有时要编程结束一个程序的运行。
比如说 hWnd 是你要操作的那个窗口的句柄。
如果是一般的情况
::PostMessage(hWnd,WM_CLOSE,0,0);
就可以了。
(注意不要发送 WM_DESTROY消息。
这两者有什么区别呢?WM_CLOSE,会正常关闭程序,比如说,如果是WORD文件未保存,系统会提示你是否要保存的。
而 WM_DESTROY 则不会给你任何提示,就强行结束了。)
但如果是失去响应的应用程序,不论是WM_CLOSE还是WM_DESTROY都无能为力,因为该隔膜泵程序已经不再处理任何消息啦!这时,可以采用下面的代码:
if( IsHungAppWindow( hWnd ) )
{
DWORD id=0;
::GetWindowThreadProcessId(hWnd,&id);
HANDLE ps = OpenProcess(1,false,id);
if( ps && TerminateProcess(ps,-9))
WriteLog(L"结束未响应的窗口,成功");
else
WriteLog(L"结束未响应的窗口,失败");
}
代码不用解释了吧?有点vc基础的都看得懂。
本来想绑定wap子域名的,不过IDC不提供这个功能。真是晕死!
难道为了反色情,就要禁止绑定wap子域名吗?
wap编程有很多不同。比如说,至少要包含一个form,而且,里面的隔膜泵控件,必须要是 <mobile:TextBox> <mobile:form> 这样的形式的。
别的有很多功能是不支持的。比如我想配置文本的背景色却不能成功哦
好不容易找到的,放在这儿备查!
以发送Ctrl+P为例,hWnd是接受消息的窗口句柄,
keybd_event( VK_CONTROL,0,0,0 );
::PostMessage( hWnd, WM_KEYDOWN, ‘P‘,0);
Sleep (30);
::PostMessage( hWnd, WM_KEYUP, ‘P‘,0);
keybd_event( VK_CONTROL,0,KEYEVENTF_KEYUP,0 );
怎么获得具有输入焦点的子窗口句柄?这个问题看似简单,却困惑了很多有经验的程序员。
下面我把问题分解一下。
1,获得本进程具有输入焦点的子窗口句柄
GetFoucus
2,获得系统中的当前窗口
GetForegroundWindow
但要怎么获得整个系统中具有输入焦点的的窗口呢?看下面代码
CWnd *pWnd = GetForegroundWindow();
http://www.it168.com/
if( pWnd )
{
DWORD dwThread = ::GetWindowThreadProcessId(pWnd->m_hWnd,NULL);
AttachThreadInput(dwThread, GetCurrentThreadId(), TRUE);
// 获取焦点窗口句柄
HWND hFocus = ::GetFocus();
// 解除贴附
AttachThreadInput(dwThread, GetCurrentThreadId(), FALSE);
}