精华内容
下载资源
问答
  • 终极结束进程方法API

    千次阅读 2016-03-21 19:40:29
    引言最近在机房里上课的时候,学生的电脑上都安装了相应的学生端软件,而这些软件并没法正常关闭,用任务管理器也无法关闭,下面我说一下如何用Windows API对这类顽固程序进行终结。福利方法由于相关方面的规定,...

    引言

    最近在机房里上课的时候,学生的电脑上都安装了相应的学生端软件,而这些软件并没法正常关闭,用任务管理器也无法关闭,下面我说一下如何用Windows API对这类顽固程序进行终结。


    福利方法

    由于相关方面的规定,这里我只列出相应的操作函数和一些实现原理,具体程序代码我就不贴上了,想深入了解的,可以私信我。


    方法一. 消息投递

    这里用到的方法就是获取要关闭进程的窗口句柄,然后发送关闭消息到进程的消息队列中,让进程执行关闭消息,这样进程就会以正常的方式自动关闭,而且不会引发内存泄露等问题。(此方法能关闭大部分进程)

    涉及API

    //API_获得窗口关联进程ID
    DWORD WINAPI GetWindowThreadProcessId(
      _In_      HWND    hWnd,
      _Out_opt_ LPDWORD lpdwProcessId
    );
    //API_取进程快照
    HANDLE WINAPI CreateToolhelp32Snapshot(
      _In_ DWORD dwFlags,
      _In_ DWORD th32ProcessID
    );
    //API_枚举父窗口
    BOOL WINAPI EnumWindows(
      _In_ WNDENUMPROC lpEnumFunc,
      _In_ LPARAM      lParam
    );
    
    //API_快照中获取进程列表
    BOOL WINAPI Process32First(
      _In_    HANDLE           hSnapshot,
      _Inout_ LPPROCESSENTRY32 lppe
    );
    //API_遍历快照中进程列表
    BOOL WINAPI Process32Next(
      _In_  HANDLE           hSnapshot,
      _Out_ LPPROCESSENTRY32 lppe
    );
    //API_关闭内核对象
    BOOL WINAPI CloseHandle(
      _In_ HANDLE hObject
    );
    //API_投递消息
    BOOL WINAPI PostMessageA(
      _In_opt_ HWND   hWnd,
      _In_     UINT   Msg,
      _In_     WPARAM wParam,
      _In_     LPARAM lParam
    );

    PostMessageA函数是关闭程序的关键只需要将Msg参数设置为AE_RESACCESS2即可,对应的值为18。此常量来源于lmaudit.h

    //lmaudit.h
    /**
     * This file has no copyright assigned and is placed in the Public Domain.
     * This file is part of the mingw-w64 runtime package.
     * No warranty is given; refer to the file DISCLAIMER.PD within this package.
     */
    #ifndef _LMAUDIT_
    #define _LMAUDIT_
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #ifndef _LMHLOGDEFINED_
    #define _LMHLOGDEFINED_
    
      typedef struct _HLOG {
        DWORD time;
        DWORD last_flags;
        DWORD offset;
        DWORD rec_offset;
      } HLOG,*PHLOG,*LPHLOG;
    
    #define LOGFLAGS_FORWARD 0
    #define LOGFLAGS_BACKWARD 0x1
    #define LOGFLAGS_SEEK 0x2
    #endif
    
      DWORD WINAPI NetAuditClear(LPCWSTR server,LPCWSTR backupfile,LPCWSTR service);
      DWORD WINAPI NetAuditRead(LPCWSTR server,LPCWSTR service,LPHLOG auditloghandle,DWORD offset,LPDWORD reserved1,DWORD reserved2,DWORD offsetflag,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD bytesread,LPDWORD totalavailable);
      DWORD WINAPI NetAuditWrite(DWORD type,LPBYTE buf,DWORD numbytes,LPCWSTR service,LPBYTE reserved);
    
      typedef struct _AUDIT_ENTRY {
        DWORD ae_len;
        DWORD ae_reserved;
        DWORD ae_time;
        DWORD ae_type;
        DWORD ae_data_offset;
        DWORD ae_data_size;
      } AUDIT_ENTRY,*PAUDIT_ENTRY,*LPAUDIT_ENTRY;
    
    #define REVISED_AUDIT_ENTRY_STRUCT
    
      typedef struct _AE_SRVSTATUS {
        DWORD ae_sv_status;
      } AE_SRVSTATUS,*PAE_SRVSTATUS,*LPAE_SRVSTATUS;
    
      typedef struct _AE_SESSLOGON {
        DWORD ae_so_compname;
        DWORD ae_so_username;
        DWORD ae_so_privilege;
      } AE_SESSLOGON,*PAE_SESSLOGON,*LPAE_SESSLOGON;
    
      typedef struct _AE_SESSLOGOFF {
        DWORD ae_sf_compname;
        DWORD ae_sf_username;
        DWORD ae_sf_reason;
      } AE_SESSLOGOFF,*PAE_SESSLOGOFF,*LPAE_SESSLOGOFF;
    
      typedef struct _AE_SESSPWERR {
        DWORD ae_sp_compname;
        DWORD ae_sp_username;
      } AE_SESSPWERR,*PAE_SESSPWERR,*LPAE_SESSPWERR;
    
      typedef struct _AE_CONNSTART {
        DWORD ae_ct_compname;
        DWORD ae_ct_username;
        DWORD ae_ct_netname;
        DWORD ae_ct_connid;
      } AE_CONNSTART,*PAE_CONNSTART,*LPAE_CONNSTART;
    
      typedef struct _AE_CONNSTOP {
        DWORD ae_cp_compname;
        DWORD ae_cp_username;
        DWORD ae_cp_netname;
        DWORD ae_cp_connid;
        DWORD ae_cp_reason;
      } AE_CONNSTOP,*PAE_CONNSTOP,*LPAE_CONNSTOP;
    
      typedef struct _AE_CONNREJ {
        DWORD ae_cr_compname;
        DWORD ae_cr_username;
        DWORD ae_cr_netname;
        DWORD ae_cr_reason;
      } AE_CONNREJ,*PAE_CONNREJ,*LPAE_CONNREJ;
    
      typedef struct _AE_RESACCESS {
        DWORD ae_ra_compname;
        DWORD ae_ra_username;
        DWORD ae_ra_resname;
        DWORD ae_ra_operation;
        DWORD ae_ra_returncode;
        DWORD ae_ra_restype;
        DWORD ae_ra_fileid;
      } AE_RESACCESS,*PAE_RESACCESS,*LPAE_RESACCESS;
    
      typedef struct _AE_RESACCESSREJ {
        DWORD ae_rr_compname;
        DWORD ae_rr_username;
        DWORD ae_rr_resname;
        DWORD ae_rr_operation;
      } AE_RESACCESSREJ,*PAE_RESACCESSREJ,*LPAE_RESACCESSREJ;
    
      typedef struct _AE_CLOSEFILE {
        DWORD ae_cf_compname;
        DWORD ae_cf_username;
        DWORD ae_cf_resname;
        DWORD ae_cf_fileid;
        DWORD ae_cf_duration;
        DWORD ae_cf_reason;
      } AE_CLOSEFILE,*PAE_CLOSEFILE,*LPAE_CLOSEFILE;
    
      typedef struct _AE_SERVICESTAT {
        DWORD ae_ss_compname;
        DWORD ae_ss_username;
        DWORD ae_ss_svcname;
        DWORD ae_ss_status;
        DWORD ae_ss_code;
        DWORD ae_ss_text;
        DWORD ae_ss_returnval;
      } AE_SERVICESTAT,*PAE_SERVICESTAT,*LPAE_SERVICESTAT;
    
      typedef struct _AE_ACLMOD {
        DWORD ae_am_compname;
        DWORD ae_am_username;
        DWORD ae_am_resname;
        DWORD ae_am_action;
        DWORD ae_am_datalen;
      } AE_ACLMOD,*PAE_ACLMOD,*LPAE_ACLMOD;
    
      typedef struct _AE_UASMOD {
        DWORD ae_um_compname;
        DWORD ae_um_username;
        DWORD ae_um_resname;
        DWORD ae_um_rectype;
        DWORD ae_um_action;
        DWORD ae_um_datalen;
      } AE_UASMOD,*PAE_UASMOD,*LPAE_UASMOD;
    
      typedef struct _AE_NETLOGON {
        DWORD ae_no_compname;
        DWORD ae_no_username;
        DWORD ae_no_privilege;
        DWORD ae_no_authflags;
      } AE_NETLOGON,*PAE_NETLOGON,*LPAE_NETLOGON;
    
      typedef struct _AE_NETLOGOFF {
        DWORD ae_nf_compname;
        DWORD ae_nf_username;
        DWORD ae_nf_reserved1;
        DWORD ae_nf_reserved2;
      } AE_NETLOGOFF,*PAE_NETLOGOFF,*LPAE_NETLOGOFF;
    
      typedef struct _AE_ACCLIM {
        DWORD ae_al_compname;
        DWORD ae_al_username;
        DWORD ae_al_resname;
        DWORD ae_al_limit;
      } AE_ACCLIM,*PAE_ACCLIM,*LPAE_ACCLIM;
    
    #define ACTION_LOCKOUT 00
    #define ACTION_ADMINUNLOCK 01
    
      typedef struct _AE_LOCKOUT {
        DWORD ae_lk_compname;
        DWORD ae_lk_username;
        DWORD ae_lk_action;
        DWORD ae_lk_bad_pw_count;
      } AE_LOCKOUT,*PAE_LOCKOUT,*LPAE_LOCKOUT;
    
      typedef struct _AE_GENERIC {
        DWORD ae_ge_msgfile;
        DWORD ae_ge_msgnum;
        DWORD ae_ge_params;
        DWORD ae_ge_param1;
        DWORD ae_ge_param2;
        DWORD ae_ge_param3;
        DWORD ae_ge_param4;
        DWORD ae_ge_param5;
        DWORD ae_ge_param6;
        DWORD ae_ge_param7;
        DWORD ae_ge_param8;
        DWORD ae_ge_param9;
      } AE_GENERIC,*PAE_GENERIC,*LPAE_GENERIC;
    
    #define AE_SRVSTATUS 0
    #define AE_SESSLOGON 1
    #define AE_SESSLOGOFF 2
    #define AE_SESSPWERR 3
    #define AE_CONNSTART 4
    #define AE_CONNSTOP 5
    #define AE_CONNREJ 6
    #define AE_RESACCESS 7
    #define AE_RESACCESSREJ 8
    #define AE_CLOSEFILE 9
    #define AE_SERVICESTAT 11
    #define AE_ACLMOD 12
    #define AE_UASMOD 13
    #define AE_NETLOGON 14
    #define AE_NETLOGOFF 15
    #define AE_NETLOGDENIED 16
    #define AE_ACCLIMITEXCD 17
    #define AE_RESACCESS2 18
    #define AE_ACLMODFAIL 19
    #define AE_LOCKOUT 20
    #define AE_GENERIC_TYPE 21
    
    #define AE_SRVSTART 0
    #define AE_SRVPAUSED 1
    #define AE_SRVCONT 2
    #define AE_SRVSTOP 3
    
    #define AE_GUEST 0
    #define AE_USER 1
    #define AE_ADMIN 2
    
    #define AE_NORMAL 0
    #define AE_USERLIMIT 0
    #define AE_GENERAL 0
    #define AE_ERROR 1
    #define AE_SESSDIS 1
    #define AE_BADPW 1
    #define AE_AUTODIS 2
    #define AE_UNSHARE 2
    #define AE_ADMINPRIVREQD 2
    #define AE_ADMINDIS 3
    #define AE_NOACCESSPERM 3
    #define AE_ACCRESTRICT 4
    
    #define AE_NORMAL_CLOSE 0
    #define AE_SES_CLOSE 1
    #define AE_ADMIN_CLOSE 2
    
    #define AE_LIM_UNKNOWN 0
    #define AE_LIM_LOGONHOURS 1
    #define AE_LIM_EXPIRED 2
    #define AE_LIM_INVAL_WKSTA 3
    #define AE_LIM_DISABLED 4
    #define AE_LIM_DELETED 5
    
    #define AE_MOD 0
    #define AE_DELETE 1
    #define AE_ADD 2
    
    #define AE_UAS_USER 0
    #define AE_UAS_GROUP 1
    #define AE_UAS_MODALS 2
    
    #define SVAUD_SERVICE 0x1
    #define SVAUD_GOODSESSLOGON 0x6
    #define SVAUD_BADSESSLOGON 0x18
    #define SVAUD_SESSLOGON (SVAUD_GOODSESSLOGON | SVAUD_BADSESSLOGON)
    #define SVAUD_GOODNETLOGON 0x60
    #define SVAUD_BADNETLOGON 0x180
    #define SVAUD_NETLOGON (SVAUD_GOODNETLOGON | SVAUD_BADNETLOGON)
    #define SVAUD_LOGON (SVAUD_NETLOGON | SVAUD_SESSLOGON)
    #define SVAUD_GOODUSE 0x600
    #define SVAUD_BADUSE 0x1800
    #define SVAUD_USE (SVAUD_GOODUSE | SVAUD_BADUSE)
    #define SVAUD_USERLIST 0x2000
    #define SVAUD_PERMISSIONS 0x4000
    #define SVAUD_RESOURCE 0x8000
    #define SVAUD_LOGONLIM 0x00010000
    
    #define AA_AUDIT_ALL 0x0001
    #define AA_A_OWNER 0x0004
    #define AA_CLOSE 0x0008
    #define AA_S_OPEN 0x0010
    #define AA_S_WRITE 0x0020
    #define AA_S_CREATE 0x0020
    #define AA_S_DELETE 0x0040
    #define AA_S_ACL 0x0080
    #define AA_S_ALL (AA_S_OPEN | AA_S_WRITE | AA_S_DELETE | AA_S_ACL)
    #define AA_F_OPEN 0x0100
    #define AA_F_WRITE 0x0200
    #define AA_F_CREATE 0x0200
    #define AA_F_DELETE 0x0400
    #define AA_F_ACL 0x0800
    #define AA_F_ALL (AA_F_OPEN | AA_F_WRITE | AA_F_DELETE | AA_F_ACL)
    
    #define AA_A_OPEN 0x1000
    #define AA_A_WRITE 0x2000
    #define AA_A_CREATE 0x2000
    #define AA_A_DELETE 0x4000
    #define AA_A_ACL 0x8000
    #define AA_A_ALL (AA_F_OPEN | AA_F_WRITE | AA_F_DELETE | AA_F_ACL)
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    方法二. TerminateProcess 干掉进程

    说到TerminateProcess 必要说一下ExitProcess,这两个函数都是用于干掉进程的,ExitProcess是用于干掉自身的,TerminateProcess 是用于干掉其它程序的进程的, 所以这里用TerminateProcess 来进行功能制作。
    函数原型:

    BOOL WINAPI TerminateProcess(
      _In_ HANDLE hProcess,
      _In_ UINT   uExitCode
    );
    VOID WINAPI ExitProcess(
      _In_ UINT uExitCode
    );

    主要步骤就是通过进程名获取窗口句柄,通过窗口句柄获取进程ID,然后通过进程ID获取进程ID的句柄,然后就可以终结了。这里还有一个API就是OpenProcess,通过这OpenProcess获得进程ID对应的句柄。

    HANDLE WINAPI OpenProcess(
      _In_ DWORD dwDesiredAccess,
      _In_ BOOL  bInheritHandle,
      _In_ DWORD dwProcessId
    );
    //小例子
    BOOL KillProcess(DWORD ProcessId) {
        HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
    
        if(hProcess == NULL) return FALSE;
        if(!TerminateProcess(hProcess, 0)) return FALSE;
    
        return TRUE;
    }

    本人只是抛砖引玉,想研究的可以深入研究,此方面可以用于终止恶意顽固程序进程等。


    博客名称:王乐平博客

    博客地址:http://blog.lepingde.com

    CSDN博客地址:http://blog.csdn.net/lecepin


    这里写图片描述

    展开全文
  • HookApi禁止任务管理器结束进程

    热门讨论 2009-04-14 01:48:06
    Hook TerminateProcess函数 禁止任务管理器结束进程 内有详细注释解说 编译运行通过!
  • 类似于360,腾讯管家等在任务管理器中无法结束提示拒绝访问 使用驱动写的,支持WIN10,WIN8,WIN7等系统。所有程序都可调用,有API帮助教程 由于是驱动,所以打开的时候杀毒软件会报毒 可以用程序调用并且传入要...
  • windows API学习笔记 之 结束进程

    千次阅读 2016-01-18 13:26:34
    代码没有做判断,简单记录结束进程的步骤。 #include #include int main() { HWND hwnd; HANDLE pHandle; DWORD pid; hwnd = FindWindow(NULL, "无标题 - 记事本"); GetWindowThreadProcessId...

    代码没有做判断,简单记录结束进程的步骤。



    #include <stdio.h>
    #include <Windows.h>
    
    int main() 
    {
    	HWND hwnd;
    	HANDLE pHandle;
    	DWORD pid;
    	hwnd = FindWindow(NULL, "无标题 - 记事本");
    
    	GetWindowThreadProcessId(hwnd, &pid);
    
    	pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    
    	TerminateProcess(pHandle, pid);
    
    	CloseHandle(pHandle);
    	
    	system("pause");
    
    	return 0;
    }


    展开全文
  • 易语言结束进程源码

    2020-07-15 23:16:07
    易语言结束进程源码,结束进程,取线程信息,枚举进程_,关闭进程线程,取创建32位帮助工具快照_,API_Process32First,sizeof,sizeof2,打开进程_,API_Thread32First,API_枚举任务窗口,API_Process32Next,API_Thread32Next,...
  • 当我们多线程多窗口启动游戏时,在退出时我们手动比较麻烦,可以使用进程结束一键退出。 511遇见易语言模块API教程 1、GetCurrentProcessId 获取当前进程一个唯一的标识符 说明: 获取当前进程的标示符(PID) ...

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

    511遇见易语言模块API教程

    1、GetCurrentProcessId

    511遇见

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

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

    2、TerminateProcess

    511遇见

    基本简介
    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

    511遇见

    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。

    进程_结束

    511遇见

    .版本 2
    
    .子程序 进程_结束, 逻辑型, 公开, 结束指定的进程,成功返回真,失败返回假。
    .参数 进程ID, 整数型, 可空, 要结束的进程ID,为空的时候,结束的是自身的进程,
    
    .如果真 (是否为空 (进程ID))
        进程ID = 进程_取自进程ID ()
    .如果真结束
    返回 (TerminateProcess (OpenProcess (1, 0, 进程ID), 0) = 1)
    
    
    

    进程_取自进程ID

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

    参考:易语言模块API制作系列视频教程

             易语言模块API教程进程结束和进程取自进程ID

     

    展开全文
  • 易语言制作大漠模块API进程结束

    千次阅读 2020-06-15 09:28:04
    当我们启动多线程多窗口多任务时,我们要关闭退出游戏,需要一个一个的手动结束,非常非常麻烦,,主要是通过API实现循环结束游戏进程,从而实现一键关闭游戏,一键结束销毁进程。 第十课511遇见易语言大漠模块制作...

    当我们启动多线程多窗口多任务时, 我们要关闭退出游戏,需要一个一个的手动结束,非常非常麻烦,,主要是通过API实现循环结束游戏进程,从而实现一键关闭游戏,一键结束销毁进程。

    第十课511遇见易语言大漠模块制作API进程_结束

     

    1、目的是一键结束游戏

    2、用到的api

    (1) TerminateProcess
    这个函数可以用来终止或者说杀死一个进程,它不会留给进程及其所有线程清理的时间,系统会马上终止(杀死)这个进程的所有线程,致使进程终止。在使用此函数前我们必须要调用OpenProcess函数来获得我们要终止(杀死)进程的句柄,并且要获得进程的PROCESS_TERMINATE权限。
    函数原型:
     

    BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode)


    参数说明:
    1、hProcess:要终止(杀死)进程的句柄,需要有PROCESS_TERMINATE权限。
    2、uExitCode:设置进程的退出值。可通过GetExitCodeProcess函数得到一个进程的退出值。
    返回值:
    如果失败将返回FALSE(0),而成功将返回一个非零值。
    注:不要用if(ret==TRUE)去检测函数是否调用成功,因为函数调用成功会返回一个非零值,但不一定是TRUE(1)

    .版本 2
     
    .DLL命令 TerminateProcess, 整数型, , "TerminateProcess", 公开, _进程终止
        .参数 进程ID, 整数型
        .参数 a, 整数型

    (2) OpenProcess
    OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
    1.函数原型

    HANDLE OpenProcess(
    DWORD dwDesiredAccess, //渴望得到的访问权限(标志)
    BOOL bInheritHandle, // 是否继承句柄
    DWORD dwProcessId// 进程标示符
    );

    3、易语言进程结束

    .版本 2
    .子程序 进程_结束, 逻辑型, 公开, 结束指定进程。成功返回真,失败返回假。.参数 进程ID, 整数型, 可空, 欲结束的进程ID,如果为空将结束自己
     
    .如果真 (是否为空 (进程ID))
        进程ID = 进程_取自进程ID ()
    .如果真结束
    返回 (TerminateProcess (OpenProcess (1, 0, 进程ID), 0) = 1)

    原文:511遇见易语言大漠模块制作API进程_结束

    展开全文
  • Java9 进程API详细介绍

    千次阅读 2017-09-24 22:09:44
    官方在JEP 102中引进新的进程API来增强java.lang.Process 类,并且引进java.lang.ProcessHandle 及其嵌套接口Info 来让开发者逃离时常因为要获取一个本地进程的PID而不得不使用本地代码的窘境。本文将详细介绍这些新...
  • 易语言多种结束进程方法源码,多种结束进程方法,m1,m2,m3,m4,m5,m6,m7,m9,m10,m8,getpid,getcsrsspid,gettid,killtid,killby_wintopic,postthreadquit,RemoteExitProcess,enum,枚举窗口,DebugThread,...
  • // EnumProcessDemo.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include #include <TlHelp32.h>//CreateToolhelp32Snapshot #include <Psapi.h>//EnumProcessesbool ... // 取得当前进程
  • 主要为NATIVE API。 强力结束进程 强力打开进程 三叶学习网
  • 软件可以实现获取进程、终止进程等类似于任务管理器的功能。包括基本原理和几个API函数说明。
  • HOOK其他进程API和全局HOOK-API

    千次阅读 2007-08-16 09:32:00
    HOOK是一种WINDOWS下存在很久的技术了。 HOOK一般分两种1。...通过这两种技术,我们基本都可以实现对本进程API函数进行HOOK了。但是在高兴之余会有点遗憾,怎么才能HOOK其他进程API函数呢?怎么才
  • 易语言强力打开结束进程模块源码例程程序调用API函数实现强行打开或结束进程。点评:源码主要使用了NATIVE API。 三叶易语言自学网
  • 遍历进程和结束进程的几种常见方法,可以获取进程文件名ListProcess
  • PB结束进程

    千次阅读 2012-03-21 16:33:14
    结束进程---举IE为例   //创建非可视对象uf_get_exename   //声明local external function(api) Function Long CreateToolhelp32Snapshot(Long Flags,Long ProcessId) Library "kernel32.dll" ...
  • 资源介绍:主要为NATIVE API。强力结束进程强力打开进程资源作者:三叶学习网资源下载:
  • delphi 结束进程

    千次阅读 2009-02-06 15:11:00
    在网上搜了一下delphi结束进程的代码,发现当要结束的进程名是当前的进程并且该程序开了多个的话,会因为当前进程在结束其他进程前把自己关掉而不能结束所有同名的进程,所以修改了一下:注:TProcessEntry32 需要...
  • 资源介绍:易语言强力打开结束进程模块源码例程程序调用API函数实现强行打开或结束进程。点评:源码主要使用了NATIVE API。资源作者:三叶易语言自学网资源下载:
  • 按照游戏设定的退出模拟按键操作,也可以调用大漠插件的EnumProcess枚举剑侠游戏的所有进程,然后TerminateProcess(pid)强制结束进程. 第21课511遇见易语言大漠一键退出升级(完结) 一键结束游戏源码: ....
  • Android下结束进程的方法

    千次阅读 2013-11-19 19:48:13
    Android下结束进程的方法  一、结束一个活动Activity  要主动的结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的...
  • 可以加载进程列表,可以结束进程,附带提升权限的代码,可以结束大部分进程
  • 易语言api CreateProcess 创建进程

    千次阅读 2020-06-04 09:58:55
    WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件,我们先学习它的函数原型,参数和返回值。 函数原型 BOOL CreateProcess ( LPCTSTR lpApplicationName,//程序路径...
  • 强制结束进程,提供思路,用于免杀与安全软件。
  • Tomcat shutdown无法结束进程的问题

    千次阅读 2015-10-30 21:08:02
    问题现象: 执行tomcat/bin目录下的shutdown.sh后,查看tomcat进程,仍然...最简单的就是在shutdown后面补上一个kill命令,如下:kill -9 `ps -ef|grep tomcat-api|awk '{print $2}'`其中 tomcat-api 为tomcat的名称。
  • VB 结束进程

    千次阅读 2010-03-22 17:59:00
    API函数Private Declare Function CloseHandle Lib "Kernel32.dll " (ByVal Handle As Long) As LongPrivate Declare Function OpenProcess Lib "Kernel32.dll " (ByVal dwDesiredAccessas As Long, ByVal bInher
  • delphi查找和结束进程

    千次阅读 2010-04-08 16:51:00
    delphi查找和结束进程function TFrmImportExcel.FindProcess(AFileName: string): boolean;var hSnapshot: THandle;//用于获得进程列表 lppe: TProcessEntry32;//用于查找进程 Found: Boolean;//用于判断进程遍历...
  • Android 结束进程的方法

    万次阅读 热门讨论 2010-07-14 10:36:00
    Android 结束进程,关闭程序的方法,经过这几天的调研,发现了Android结束一个进程的方法即采用下面这个类void android.app.ActivityManager.restartPackage(String packageName)public void restartPackage(String ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,732
精华内容 62,292
关键字:

结束进程api