当我们多线程多窗口启动游戏时,在退出时我们手动比较麻烦,可以使用进程结束一键退出。


511遇见易语言模块API教程


1、GetCurrentProcessId

易语言redis Out of memory 易语言必背100代码_取进程ID

获取当前进程一个唯一的标识符
说明:
获取当前进程的标示符(PID)
返回值:
返回一个标示符(PID)
库文件:kernel32.dll

.版本 2

.DLL命令 GetCurrentProcessId, 整数型, "kernel32", "GetCurrentProcessId", , 获取当前进程一个唯一的标识符  当前的进程标识符(进程_取自进程ID)

2、TerminateProcess

易语言redis Out of memory 易语言必背100代码_511遇见_02

基本简介
TerminateProcess函数终止指定进程及其所有线程。
函数原型
BOOL TerminateProcess(
HANDLE hProcess,//进程句柄
UINT uExitCode //进程终止码
这个叫进程退出码,一般设置为0,
他的主要作用就是,通知调用这个程序的其他程序退出的原因。
以前在dos下可能用的较多,现在windows下用的很少,
而且windows下进程间传递数据的方式很多,不太需要用这种方式。
这个代码一般没有用途,我们一般可以填入0。对于父进程(不一定是父进程,拥有该进程句柄都算)可以通过GetExitCodeThread获取进程的退出代码。这个代码用来告诉父进程程序退出原因,填入什么没有特别规定,可以自己约定,一般来说填入0表示正常退出,其他表示非正常退出。

返回值:
返回非零值代表成功。0代表失败。

.版本 2

.DLL命令 TerminateProcess, 整数型, "kernel32", "TerminateProcess", , 结束一个进程  非零表示成功,零表示失败。(进程_结束)
    .参数 hProcess, 整数型, , 指定要中断的一个进程的句柄//进程句柄
    .参数 uExitCode, 整数型, , 进程的一个退出代码;通常设为 0

3、OpenProcess

易语言redis Out of memory 易语言必背100代码_进程ID_03

OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
1.函数原型
HANDLE OpenProcess(
DWORD dwDesiredAccess, //渴望得到的访问权限(标志)
BOOL bInheritHandle, // 是否继承句柄 如果这个值为真,由这个过程创建的进程将继承该句柄。否则,进程不会继承这个句柄。
DWORD dwProcessId// 进程标示符
);
返回值

如成功,返回值为指定进程的句柄。

如失败,返回值为空,
//声明:

{返回进程的句柄}
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); {允许所有权限}完全访问:2035711

http://msdn2.microsoft.com/en-us/library/ms684320.aspx http://msdn2.microsoft.com/en-us/library/ms684880.aspx

.版本 2

.DLL命令 OpenProcess, 整数型, "kernel32", "OpenProcess", , 将句柄返回给过程对象(进程_结束)
    .参数 dwDesiredAccess, 整数型, , //渴望得到的访问权限(标志)
    .参数 bInheritHandle, 整数型, , // 是否继承句柄 如果这个值为真,由这个过程创建的进程将继承该句柄。否则,进程不会继承这个句柄。
    .参数 dwProcessId, 整数型, , // 进程标示符

PS:

1、关系运算与逻辑运算的结果为逻辑真(True)或逻辑假(False)。当把逻辑型值转换成数值型时,False转变成0,True转变成-1。当把数值型转换成逻辑型时,0变为False,非0变为True

2、以0开头的是八进制数;以0x或0X开头的数字序列表示十六进制数。加字母 u 或 U 后缀表示无符号整数;加字母 l 或 L 后缀表示长整数
所以,应该0x80000000L是16进制的80000000,转换成10进制是2147483648。

进程_结束

易语言redis Out of memory 易语言必背100代码_进程ID_04

.版本 2

.子程序 进程_结束, 逻辑型, 公开, 结束指定的进程,成功返回真,失败返回假。
.参数 进程ID, 整数型, 可空, 要结束的进程ID,为空的时候,结束的是自身的进程,

.如果真 (是否为空 (进程ID))
    进程ID = 进程_取自进程ID ()
.如果真结束
返回 (TerminateProcess (OpenProcess (1, 0, 进程ID), 0) = 1)

进程_取自进程ID

易语言redis Out of memory 易语言必背100代码_进程ID_05

.版本 2

.子程序 进程_取自进程ID, 整数型, 公开, 取自身进程的PID,成功返回PID,失败返回0

返回 (GetCurrentProcessId ())