【HSP3】プロセス(全スレッド)を一時停止するモジュール

プロセス名とPIDのどちらでも指定して一時停止が可能です。昔作ったのですので不具合があるかもしれません。

プロセス名とPIDのどちらでも指定して一時停止が可能です。昔作ったのですので不具合があるかもしれません。

#include "kernel32.as"
#include "user32.as"
#define global STANDARD_RIGHTS_REQUIRED 0x000f0000
#define global SYNCHRONIZE 0x00100000
#define global THREAD_TERMINATE 0x0001
#define global THREAD_SUSPEND_RESUME 0x0002
#define global THREAD_GET_CONTEXT 0x0008
#define global THREAD_SET_CONTEXT 0x0010
#define global THREAD_SET_INFORMATION 0x0020
#define global THREAD_QUERY_INFORMATION 0x0040
#define global THREAD_SET_THREAD_TOKEN 0x0080
#define global THREAD_IMPERSONATE 0x0100
#define global THREAD_DIRECT_IMPERSONATION 0x0200
#define global THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
#define global TH32CS_SNAPPROCESS 0x02
#define global TH32CS_SNAPTHREAD 0x04
#module _processkill_
#deffunc _init
Count = 0
return
#defcfunc CountCheck
return Count
#deffunc PIDPauseResume int pid,int flag
CreateToolhelp32Snapshot TH32CS_SNAPTHREAD,pid
hThreadSnap = stat
// INVALID_HANDLE_VALUE
if hThreadSnap = 0xFFFFFFFF : return -1
dim th32,7 : th32.0 = length(th32) * 4
Thread32First hThreadSnap,varptr(th32)
repeat
if th32.3 = pid {
OpenThread 0x0002, 0, th32.2
hThread = stat
if hThread!=0{
if flag = 0{
//
repeat
SuspendThread hThread
if (stat != 0){
break
}
loop
}else{
//
repeat
ResumeThread hThread
if ((stat = 1)| (stat = 0)){
break
}
loop
}
CloseHandle hThread
}
}
dim th32,7 : th32.0 = length(th32) * 4
Thread32Next hThreadSnap,varptr(th32)
if stat = 0 : break
loop
if flag = 0 : Count++ : else : Count--
return Count
#deffunc ProcessPauseResume str fname,int flg
//
CreateToolhelp32Snapshot TH32CS_SNAPPROCESS,0
hProcessSnap = stat
dim pe32 , 9 + (260/4)
pe32.0 = length(pe32) * 4
Process32First hProcessSnap,varptr(pe32)
;mes "PID:"+pe32.2
if pe32.9!=0{
sdim filename,261
memcpy filename,pe32.9,260,0,0
;mes filename
}
repeat
dim pe32 , 9 + (260/4)
pe32.0 = length(pe32) * 4
Process32Next hProcessSnap,varptr(pe32)
if stat = 0 : break
;mes "PID:"+pe32.2
if pe32.9!=0{
sdim filename,261
memcpy filename,pe32.9,260,0,0
;mes filename
//
filename = getpath(filename,16)
if instr(filename,0,fname)!=-1 : PIDPauseResume pe32.2,flg
}
loop
return
#global
_init
//
ProcessPauseResume "chrome.exe", 0
dialog "OK"
ProcessPauseResume "chrome.exe", 1
// PID
;PIDPauseResume pid, 0
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX