delphi – 我可以确定一个进程ID(PID)是32位还是64位应用程序?
发布时间:2020-12-15 03:55:52 所属栏目:大数据 来源:网络整理
导读:我需要确定一个进程id(PID)是32或64位应用程序使用delphi,我该怎么办?我真的检查了 IsWow64Process 功能,但使用过程句柄不是PID. 解决方法 您可以使用 OpenProcess 功能获取pid的句柄,然后调用 IsWow64Process 功能. 请记住,您必须使用 GetProcAddress 功能
我需要确定一个进程id(PID)是32或64位应用程序使用delphi,我该怎么办?我真的检查了
IsWow64Process 功能,但使用过程句柄不是PID.
解决方法
您可以使用
OpenProcess 功能获取pid的句柄,然后调用
IsWow64Process 功能.
请记住,您必须使用 检查此示例代码 {$APPTYPE CONSOLE} uses Windows,SysUtils; type TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall; var IsWow64Process : TIsWow64Process; procedure Init_IsWow64Process; var hKernel32 : Integer; begin hKernel32 := LoadLibrary(kernel32); if (hKernel32 = 0) then RaiseLastOSError; try IsWow64Process := GetProcAddress(hkernel32,'IsWow64Process'); finally FreeLibrary(hKernel32); end; end; function PidIs64BitsProcess(dwProcessId: DWORD): Boolean; var IsWow64 : BOOL; PidHandle : THandle; begin Result := False; if Assigned(IsWow64Process) then begin //check if the current app is running under WOW if IsWow64Process(GetCurrentProcess(),IsWow64) then Result := IsWow64 else RaiseLastOSError; //the current delphi App is not running under wow64,so the current Window OS is 32 bit //and obviously all the apps are 32 bits. if not Result then Exit; PidHandle := OpenProcess(PROCESS_QUERY_INFORMATION,False,dwProcessId); if PidHandle > 0 then try if (IsWow64Process(PidHandle,IsWow64)) then Result := not IsWow64 else RaiseLastOSError; finally CloseHandle(PidHandle); end; end; end; begin try Init_IsWow64Process; //here pass the pid which you want to check Writeln(BoolToStr(PidIs64BitsProcess(1940),True)); except on E:Exception do Writeln(E.Classname,': ',E.Message); end; Readln; end. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |