首先,需要引用2个单元psapi,tlhelp32:
uses psapi,tlhelp32;
var
; pid
WORD;
begin
GetWindowThreadProcessId( 你找到的HWND , @pid); //pid就是得到窗口的process id
ShowMessage(get_proc_name(pid)); ;//get_prc_name的代码在下面
end;
//get_proc_name是个各个系统通用的函数,传入pid是进程id,返回进程名字
//get_proc_name分别根据是nt/2000 还是 win9x 调用不用的函数得到进程名字
//get_proc_name_nt和get_proc_name_win9x的代码在后面
function get_proc_name(pid
WORD):string;
begin
if Win32Platform=VER_PLATFORM_WIN32_NT then
; Result:=get_proc_name_nt(pid)
;else
; Result:=get_proc_name_9x(pid);
end;
// nt/2000版本的函数:
function get_proc_name_nt(pid
WORD):string;
var
; hp,hmod,need
WORD;
; name:array[0..MAX_PATH]of char;
begin
hp:=OpenProcess(PROCESS_VM_READ ; ;or PROCESS_QUERY_INFORMATION,false,pid);
if hp=0 then
; RaiseLastWin32Error();
EnumProcessModules(hp,@hmod,4,need);
GetModuleFileNameEx(hp,hmod,name,MAX_PATH);
CloseHandle(hp);
Result:=name;
end;
//win9x版本的函数:
function get_proc_name_9x(pid
WORD):string;
var
; snapshot
WORD;
; pe:TProcessEntry32;
begin
snapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if integer(snapshot)=-1 then
; RaiseLastWin32Error();
Result:='未知';
pe.dwSize:=sizeof(pe);
if Process32First(snapshot,pe) then
; repeat
; if pe.th32ProcessID=pid then
; ; begin
; ; Result:=pe.szExeFile;
; ; break;
; ; end;
; until not Process32Next(snapshot,pe);
CloseHandle(snapshot);
end;
补充,上面的函数为了说明的方便,我把它们的顺序反过来列了
你拷贝到delphi的时候,从上到下的顺序是:
1、get_proc_name_nt
2、get_proc_name_9x
3、get_proc_name
4、调用get_proc_name的代码
好,你把增加的100分的地址写出来吧,我去拿:)