先得到一个窗口的句柄,再得到进程ID,再得到进程句柄,再终止进程,有程序 (50分)

  • 主题发起人 主题发起人 EdwinYeah
  • 开始时间 开始时间
E

EdwinYeah

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这段程序,先得到一个窗口的句柄,再得到进程ID,再得到进程句柄,再终止进程,
但13行返回的为0,为什么?
98&2000都一样.

1procedure TForm1.Button1Click(Sender: TObject);
2var
3 ;aHwnd: HWND;
4 ;aProcID: DWORD;
5 ;aProcHandle: DWORD;
6begin
7 ;aHwnd := FindWindow(nil, 'WindowToBeClosed');
8 ;if aHwnd = 0 then
9 ; ;Exit;
10 ;aProcID := GetWindowThreadProcessId(aHwnd);
11 ;if aProcID = 0 then
12 ; ;Exit;
13 ;aProcHandle := OpenProcess(PROCESS_TERMINATE, False, aProcID);
14 ;if aProcHandle = 0 then
15 ; ;Exit;
16 ;TerminateProcess(aProcHandle, 0);
17end;
 
uses TLHelp32;
aProcHandle := OpenProcess(PROCESS_ALL_ACCESS, False, aProcID);
 
你是不是想阻止WINDOWS关闭啊!?
那样的话只需要拦截WM_QueryEndSession消息即可!
 
又看了一下!
DWORD是四字节整数, 改为aProcID:integer 试试!

Example:
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
 
to YB_unique
DWORD是没有问题的,我已搞掂了,基本上和你说的一样 :)
 
接受答案了.
 
后退
顶部