文档章节

WinAPI: OpenProcess、GetExitCodeProcess、TerminateProcess (测试强制关闭 OICQ)

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 500
阅读 5
收藏 0
//声明:

{返回进程的句柄}
OpenProcess(
  dwDesiredAccess: DWORD;  {访问选项}
  bInheritHandle: BOOL;    {能否继承; True 表示能用 CreateProcess 继承句柄创建新进程}
  dwProcessId: DWORD       {指定进程 ID}
): THandle;                {成功会返回进程句柄; 失败返回 0}

//dwDesiredAccess 可选值:
PROCESS_TERMINATE         = $0001; {允许 TerminateProcess 使用进程句柄来关闭进程}
PROCESS_CREATE_THREAD     = $0002; {允许 CreateRemoteThread 使用进程句柄来创建线程}
PROCESS_VM_OPERATION      = $0008; {允许 VirtualProtectEx 使用进程句柄来改变进程的虚拟内存}
PROCESS_VM_READ           = $0010; {允许 ReadProcessMemory 使用进程句柄从进程的虚拟内存中读取数据}
PROCESS_VM_WRITE          = $0020; {允许 WriteProcessMemory 使用进程句柄向进程的虚拟内存中写入数据}
PROCESS_DUP_HANDLE        = $0040; {允许 DuplicateHandle 把进程句柄当作源句柄或目标句柄进行复制}
PROCESS_CREATE_PROCESS    = $0080; {默认值}
PROCESS_SET_QUOTA         = $0100; {允许 SetProcessWorkingSetSize 使用进程句柄来来设置虚拟内存的上限值}
PROCESS_SET_INFORMATION   = $0200; {允许 SetPriorityClass 使用进程句柄来设置进程优先级}
PROCESS_QUERY_INFORMATION = $0400; {允许 GetExitCodeProcess 或 GetPriorityClass 通过进程句柄读取进程信息}
SYNCHRONIZE               = $00100000; {允许任何等待的函数使用进程句柄}
PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF);  {允许所有权限}

 
 
 
 
 

 

 

  
{获取指定进程的退出码} GetExitCodeProcess( hProcess: THandle; {进程句柄} var lpExitCode: DWORD {接收退出码} ): BOOL; {}
{强制结束(其他)进程} TerminateProcess( hProcess: THandle; {进程句柄} uExitCode: UINT {退出码} ): BOOL; {} //提示: 关闭其他程序一般应该是向其主窗口发送 WM_CLOSE 消息, 不行再用这个, 因为它不能关闭其关联的 DLL.
//举例(强行关闭 OICQ 的办法): unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var id: Cardinal; wh: HWND; ph: THandle; ExitCode: DWORD; begin wh := FindWindow('#32770', nil); GetWindowThreadProcessId(wh, id); ph := OpenProcess(PROCESS_TERMINATE, False, id); GetExitCodeProcess(ph, ExitCode); TerminateProcess(ph, ExitCode); end; end.
提示: #32770 是提前知道的类名, 获取方法可参见:
http://www.cnblogs.com/del/archive/2008/03/09/1097942.html

GetWindowThreadProcessId 函数请参见: http://www.cnblogs.com/del/archive/2008/03/10/1098475.html

本文转载自:http://www.cnblogs.com/del/archive/2008/03/10/1098502.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
在windows下面关闭subprocess打开的子进程

A:我在windows下面使用subprocess打开了一个进程,请问如何在程序里面关闭它? 代码: import subprocesprocess = subprocess.Popen(['python.exe','-c','while 1: pass']) Q:我们可以使用pyw...

长平狐
2012/09/20
131
0
Explorer.EXE进程自动重启的故事

很早就发现一个奇怪的现象了,如果你使用任务管理器杀死Explorer.EXE,Windows不会将Explorer.EXE自动唤起,但是如果你自己使用TerminateProcess() 函数结束Explorer.EXE进程,你会发现一个奇...

伽罗kapple
2016/01/21
286
0
强制结束进程的两种实现方式--C#和C++实现

强制结束进程的两种实现方式--C#和C++实现 最近在做一个大型的项目,由于进程之间的关联出了一些问题,长话短说,就是我们不得不强制停止某些进程以保证系统正常的运行,在网上找了一下,没发...

长平狐
2012/06/11
115
0
强制结束进程的两种实现方式--C#和C++实现

强制结束进程的两种实现方式--C#和C++实现 最近在做一个大型的项目,由于进程之间的关联出了一些问题,长话短说,就是我们不得不强制停止某些进程以保证系统正常的运行,在网上找了一下,没发...

长平狐
2012/06/08
83
0
Windows2000下CreateProcess启动成功的进程却执行出错

VS2008编译的MFC应用程序,需要从windows2000支持到Win8.1,其中有一个模块需要启动一个第三方的exe进程,并获取其输出,此功能在XP至Win8.1下都运行成功,仅windows2000下失败。 windows200...

Kloud
2014/08/04
639
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
19分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
20分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
27分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
32分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部