读书人

怎么根据程序文件名获取该程序的句柄(

发布时间: 2012-03-06 20:47:55 作者: rapoo

如何根据程序文件名获取该程序的句柄(如果当前正在系统中运行)?WINXP
100分求解决方法~~~~~~~~~~~~~~~~~~

[解决办法]
你这里指的文件是不是PE文件啊?
[解决办法]
遍历所有进程,获取其模块名称对比!
[解决办法]
use TlHelp32,

例子:取excel.exe的进程id话
AppForceExit( 'Excel.exe ');

function AppForceExit(AppName: string):HWND;
var lppe: TProcessEntry32;
ssHandle: THandle;
AppFound: Boolean;
Wnd: HWND;
begin
ssHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
lppe.dwSize := SizeOf(lppe);
AppFound := Process32First(sshandle, lppe);
wnd:=-1;
while AppFound do
begin

if UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AppName) then
begin
Wnd := OpenProcess(PROCESS_ALL_ACCESS, true, lppe.th32ProcessID);
break;
end;
AppFound := Process32Next(ssHandle, lppe);
end;
result:=wnd;
end;

[解决办法]
没啥好办法,
枚举进程的办法很多,用EnumProcesses也可以
[解决办法]
我返回的是进程句柄,你FindWindow返回窗体句柄,怎么会一样
[解决办法]
if AppForceExit(‘excel.exe’) <> -1 then
TerminateProcess(AppForceExit(‘excel.exe’), 0);

//关闭excel.exe,你想怎么操作?
[解决办法]
那是窗体句柄,用FindWindow找到窗体,sendmessage发送
程序句柄多指程序对应的进程句柄
有的窗体不接受你的消息,例如新版的qq
[解决办法]
窗口也可以枚举的
[解决办法]
根据类找,象qq的是#32770,deliphi自己创建的都是Tapplication,也可以EnumWindows枚举窗体
[解决办法]
学习

读书人网 >.NET

热点推荐