hur.cn - 华软网

 热门搜索

PB10 中如何调用API函数关闭应用程序并结束进程

  作者:未知    来源:网络    更新时间:2019/4/16
PB 中如何调用API函数关闭应用程序并结束进程
我试过
Function Ulong FindWindowA(Ulong classname, String windowname)Library 

"user32.dll” 
Function Long SetParent(Long childwin, Long parentwin) Library "user32.dll”

2) PB主程序退出时,Run程序也关闭 

Handle = FindWindowA(nul,wtitle) 

SetParent(handle,Handle(w_main)) 
然则只是把窗口关闭,进程实际上却没结束

另有我也试过用 Handle = FindWindowA(nul,wtitle) 获得句柄;
然后用Postmessage(hwnd, WM_CLOSE, 0, 0)向窗口发送消息好像在PB中不认WM_CLOSE,却

又找不到它的值

讨教高手大哥们有没有更好的方法教教小弟!十万迫切!
------华软网友回答------
up
------华软网友回复------
WM_CLOSE = 16
------华软网友回复------
//声明API
FUNCTION Long CreateToolhelp32Snapshot(Long dwFlags,Long th32ProcessID) LIBRARY "KERNEL32.DLL"
FUNCTION Boolean Process32First(Long hSnapshot,REF PROCESSENTRY32 lppe) LIBRARY "KERNEL32.DLL" alias for "Process32First;Ansi"
FUNCTION Boolean Process32Next(Long hSnapshot,REF PROCESSENTRY32 lppe) LIBRARY "KERNEL32.DLL" alias for "Process32Next;Ansi"
FUNCTION Long CloseHandle(Long hObject) LIBRARY "KERNEL32.DLL"
FUNCTION Long TerminateProcess(Long hProcess,Long uExitCode) LIBRARY "KERNEL32.DLL"
FUNCTION Long OpenProcess(Long dwDesiredAccess,Long bInheritHandle,Long dwProcessId) LIBRARY "KERNEL32.DLL"
FUNCTION Long GetLastError() LIBRARY "KERNEL32.DLL"
//申明常量
CONSTANT Long TH32CS_INHERIT = 2147483648
CONSTANT Long TH32CS_SNAPALL = 19
CONSTANT Long TH32CS_SNAPHEAPLIST = 1
CONSTANT Long TH32CS_SNAPMODULE = 8
CONSTANT Long TH32CS_SNAPPROCESS = 2
CONSTANT Long TH32CS_SNAPTHREAD = 4
CONSTANT Long INVALID_HANDLE_VALUE = -1
CONSTANT Long PROCESS_TERMINATE = 1
//定义结构
type processentry32 from structure
long dwSize
long cntUsage
long th32ProcessID
long th32DefaultHeapID
long th32ModuleID
long cntThreads
long th32ParentProcessID
long pcPriClassBase
long dwFlags
character szExeFile[260]
end type
//函数
public function boolean of_terminateprocess (string exefile);Long ll_hSnapshot,ll_th32ProcessID
Long u_pid,hwdprocess
PROCESSENTRY32 lpe_ProcessEntry

SetNull(ll_th32ProcessID)
//猎取当前进程快照句柄
ll_hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,ll_th32ProcessID)
//
if ll_hSnapshot > 0 then
//初试化结构PROCESSENTRY32巨细
lpe_processentry.dwSize = 296
//猎取所有进程列表
if Process32First(ll_hSnapshot,lpe_ProcessEntry) then
Do 
if lpe_processentry.szExeFile = exefile then
u_pid = lpe_processentry.th32ProcessID
exit
   end if
   Loop While Process32Next(ll_hSnapshot,lpe_ProcessEntry)
end if
CloseHandle(ll_hSnapshot)
end if
//
if u_pid = 0 then return false
hwdprocess = OpenProcess(PROCESS_TERMINATE,1,u_pid)
if hwdprocess = 0 then return false
if TerminateProcess(hwdprocess,0) <> 0 then 
return true
else
return false
end if


end function


------华软网友回复------
谢谢楼上的大哥;我试一下
------华软网友回复------
aflyingpig(毛毛) 十分谢谢你,问题已经解决!谢谢列位!
------华软网友回复------
怎么解决的,我做成以上的函数,程序退出时报错,以下:
bad runtime funtion reference at line 13 in funtion of_terminateprocess of object 
of_terminateprocess 
请问过路高手如何解决?万分迫切!!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。