怎么根据程序文件名获取该程序的句柄(如果当前正在系统中运行)?WINXP

如何根据程序文件名获取该程序的句柄(如果当前正在系统中运行)?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枚举窗体
------解决方案--------------------
学习