销毁其他进程的弹窗

1 场景说明

针对很多软件弹出广告信息,影响工作效率,但是又无法关闭该软件,因为这样会导致失去该软件功能。尝试使用MFC,发送销毁的信息给关闭的窗口。

2 应用的知识

1)定时器,定时检测

SetTimer, OnTimer

2)根据窗口标题查找界面句柄

FindWindow

3)发送关闭消息给窗口

SendMessage

3 具体代码如下

void CCloseWindowsDlg::OnTimer(UINT_PTRnIDEvent)

{

CString szWinTitleName[3]={"京东","腾讯新闻","腾讯大粤网新闻"};

for(int i=0; i<3;i++)

{

HWND   hWnd;

hWnd   =   ::FindWindow(NULL, szWinTitleName[i]);

::SendMessage(hWnd,WM_CLOSE,0,0);

}

CDialog::OnTimer(nIDEvent);

}

4 流浪历程

1)CloseWindow 无效

只是最小化界面

2)DestroyWindow无效

通过GetLastError函数发现,返回5,通过错误查找工具,提示信息:拒绝访问

int nRet = ::DestroyWindow(hWnd);

DWORD dwError = 0;

if (nRet == 0)

{

dwError = GetLastError();

}

根据MSDN说明,不能在非创建线程上调用DestroyWindow;若要在其它线程上关闭窗口,不可以直接调用DestroyWindow(错误"拒绝访问"),也不可以只发送WM_DESTROY,因为DestroyWindow才能完整的关闭窗口,WM_DESTROY消息只是关闭流程的一部分,甚至是最"无用"的一部分--WM_DESTROY只是用户响应的接口,而真正清理窗口的工作由DestroyWindow的其它部分完成。

要在其它线程上关闭窗口,可以向窗口发送WM_CLOSE消息,若窗口过程未在WM_CLOSE的处理中取消关闭操作,则DefWindowProc会默认调用DestroyWindow(彼时自然是在窗口的创建线程上)。

时间: 2024-10-27 09:18:40

销毁其他进程的弹窗的相关文章

UNIX多进程 - 销毁僵尸进程 - wait()和waitpid()函数

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); pid_t waitpid(pid_t pid, int *statusPtr, int options); 现在要知道调用wait或waitpid的进程可能会发生什么情况: 如果其所有子进程都在运行,则阻塞. 如果一个子进程已经终止,正在等待的父进程获取到终止状态,则取得该子进程的终止状态立即返回. 如果他没有任何子进程,则立即出错返回. 如

内存池、进程池、线程池

首先介绍一个概念"池化技术 ".池化技术 一言以蔽之就是:提前保存大量的资源,以备不时之需以及重复使用. 池化技术应用广泛,如内存池,线程池,连接池等等.内存池相关的内容,建议看看Apache.Nginx等开源web服务器的内存池实现. 起因:由于在实际应用当中,分配内存.创建进程.线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作.           因此,当程序中需要频繁的进行内存申请释放,进程.线程创建销毁等操作时,通常会使用内存池.进程池.

Node.js的线程和进程

http://www.admin10000.com/document/4196.html 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况.同时本章还将列举一些让Node.js的web服务器线程阻塞的例子,最后会提供Node.js碰到这类cpu密集型问题的解决方案. 在学习本章之前,读者需要对Node.js有一个初步的认识,熟悉Node.js基本语法.cluster模块.

VB.net结束进程

Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click On Error GoTo Errmessages '在做系统操作时加排错标签是个好习惯 Dim TargetName As String = "WX" '存储进程名为文本型,注:进程名不加扩展名 Dim TargetKill() As Process = Process.GetProc

windbg使用实践1_使用windbg调试杀毒软件的弹窗

1 通过kifastcallentry或者常规的SSDT 挂钩实现的弹窗 2 文件过滤驱动引起弹窗 !process 0 0                         //列出所有进程 .reload!process fffffa800a04b3a0 f   //列出指定进程的所有的栈回溯 !irp                                    //如果是因为释放敏感文件被弹窗使用这条命令观察IRP !fileobj                        

Android ProcessBuilder与Runtime.getRuntime().exec分别创建进程的区别

在Android中想要进行Ping,在不Root机器的情况下似乎还只能进行底层命调用才能实现. 因为在Java中要进行ICMP包发送需要Root权限. 于是只能通过创建进程来解决了,创建进程在Java中有两种方式,分别为: 1. 调用ProcessBuilder的构造函数后执行start() 2. 用Runtime.getRuntime().exec()方法执行 经过使用后发现两者有区别但是也并不是很大,两个例子说明: 1.调用ProcessBuilder的构造函数后执行start(): Pro

安卓进程的生命周期

在安卓中,一共分为五种状态的进程:分别为activityprocess,visibleprocess,backgroundprocess,startedserviceprogress,backgroundprocess,emptyprocess,这五种状态,他们的优先等级由上至下: 一.这里的ActiveProcess这个进程状态的进程此时正处于活跃的状态,用户可以和它进行交互,可以说,此时进程正在运行,而且可以收到来自外界的消息. 二.VisibleProcess,这个进程是可见的进程,但此时

进程和线程的区别 转载

很经典的一个博客 转载的 转自:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高.另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率.线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在应用程序中

Android源码分析--system_server进程分析

在上一篇博文中我们进行了有关Zygote进程的分析,我们知道Zygote进程创建了一个重要的进程–system_server进程后就进入了无限循环中,之后Android系统中的重要任务就交给了system_server进程,作为zygote的嫡长子进程,system_server进程的意义非凡,今天我们来分析一下system_server进程. 创建system_server进程 在ZygoteInit中main方法中,通过调用startSystemServer方法开启了system_serve