编程模式如何结束未响应的程序

有时要编程结束一个程序的运行。
比如说 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);
                    
}

时间: 2024-08-05 15:23:24

编程模式如何结束未响应的程序的相关文章

Scalaz(43)- 总结 :FP就是实用的编程模式

完成了对Free Monad这部分内容的学习了解后,心头豁然开朗,存在心里对FP的疑虑也一扫而光.之前也抱着跟大多数人一样的主观概念,认为FP只适合学术性探讨.缺乏实际应用.运行效率低,很难发展成现实的软件开发模式.Free Monad的出现恰恰解决我心中的疑问,更正了我对FP的偏见:Free Monad提供了一套在Monad 算法内(在 for-comprehension内)的行令编程(imperative programming)方法,解决了FP的复杂语法,使Monadic编程更贴近传统编程

delphi 如何判断应用程序未响应

http://www.cnblogs.com/smallmuda/archive/2009/07/24/1529845.html delphi 如何判断应用程序未响应 今天在MSN的核心讨论组上看到两篇文章.讨论的乃是应用程序是否没有响应.原文如下:           >   How   is   it   possible   to   determine   a   process   is   "not   responding"   like   NT   Task  

【转】VS2013 C#WinForm程序构造界面拖动控件NumericUpDown时&quot;未响应“是有道词典惹的祸

很久之前遇到过因为金山词霸和其他软件冲突导致的程序无响应的情况. 没想到今天情况重现,VS2013在可视化编辑NumbericUpDown控件的时候,又出现了”未响应“,发现又是有道词典惹的祸. 可见屏幕取词功能还是应该好好研究的,希望微软和有道之间能协调解决一下!!! 转自:http://blog.csdn.net/smstong/article/details/21018529

Java多线程编程模式实战指南(三):Two-phase Termination模式--转载

本文由本人首次发布在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-two-phase-termination.转载请注明作者: 黄文海 出处:http://viscent.iteye.com. 停止线程是一个目标简单而实现却不那么简单的任务.首先,Java没有提供直接的API用于停止线程.此外,停止线程时还有一些额外的细节需要考虑,如待停止的线程处于阻塞(等待锁)或者等待状态(等待其它

Java多线程编程模式实战指南(三):Two-phase Termination模式

停止线程是一个目标简单而实现却不那么简单的任务.首先,Java没有提供直接的API用于停止线程.此外,停止线程时还有一些额外的细节需要考虑,如待停止的线程处于阻塞(等待锁)或者等待状态(等待其它线程).尚有未处理完的任务等.本文介绍的Two-phase Termination模式提供了一种通用的用于优雅地停止线程的方法. Two-phase Termination模式简介 Java并没有提供直接的API用于停止线程.Two-phase Termination模式通过将停止线程这个动作分解为准备阶

.NET &ldquo;底层&rdquo;异步编程模式&mdash;&mdash;异步编程模型

本文内容 异步编程类型 环境 异步编程模型(APM) 参考资料 首先澄清,异步编程模式(Asynchronous Programming Patterns)与异步编程模型(Asynchronous Programming Model,APM),它们的中文翻译只差一个字,英文名称差在最后一个单词,看英文一个是 Pattern,一个是 Model.Model 比 Pattern 更具体.前者是一个统称,比后者含义要广,前者包含三个模型,而 APM 只是它其中一个而已. 个人理解,异步编程模型(APM

[.net 多线程]异步编程模式

从.NET 4.5开始,支持的三种异步编程模式: 基于事件的异步编程设计模式 (EAP,Event-based Asynchronous Pattern) 异步编程模型(APM,Asynchronous Programming Model) 基于任务的编程模型(TAP,Task-based Asynchronous Pattern) 基于任务的异步模式 (TAP) 是基于 System.Threading.Tasks 命名空间的 Task 和 Task<TResult>,用于表示任意异步操作.

Java多线程编程模式实战指南(一):Active Object模式--转载

本文由黄文海首次发布在infoq中文站上:http://www.infoq.com/cn/articles/Java-multithreaded-programming-mode-active-object-part1 .转载请注明作者: 黄文海 出处:http://viscent.iteye.com. Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心

Java多线程编程模式实战指南之Promise模式

Promise模式简介(转) Promise模式是一种异步编程模式 .它使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作.等到我们需要该任务的执行结果时,再调用凭据对象的相关方法来获取.这样就避免了不必要的等待,增加了系统的并发性.这好比我们去小吃店,同时点了鸭血粉丝汤和生煎包.当我们点餐付完款后,我们拿到手的其实只是一张可借以换取相应食品的收银小票(凭据对象)而已,而不是对应的实物.由于鸭血粉丝汤可以较快制作好,故我们