HOOK中我捕获到WM_CREATE后,我想关闭这个窗口,可是出错了.为何?

hehaa 2003-07-23 06:30:57
if PCWPSTRUCT(lp)^.message = WM_CREATE then
begin
GetClassName(PCWPSTRUCT(lp)^.hwnd,szClass,MAX_PATH);

if szClass = 'TForm2' then
begin
ShowMessage('T');
DESTROYWINDOW(PCWPSTRUCT(lp)^.hwnd); //加上这句出错..是不是窗口未建立?还是怎么了.用CLOSEWINDOW就可以..该用什么关闭它.
end;
end

//上面是钩子过程中的一段.
//安装的是WH_CALLWNDPROC类的HOOK.
请问:如何关掉窗口?

2.本来用WH_CBT中的HCBT_ACTIVATE捕获后,用SENDMESSAGE(HWND,WM_CLOSE...)
可是有些会有一对话框,询问是否要关闭..?有没有直接关闭,不让询问的..
谢谢...

...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hehaa 2003-07-24
  • 打赏
  • 举报
回复
//上面那个问题已经解决了..我加了个比较窗口文本就可以了.

to baguli(巴古里):
这样返回-1一样会创建了窗体了..

function MyCBTHookProc(nCode: Integer; wp: wParam; lp: lParam): LResult; stdcall;
var
hwndToNewWindow: HWND;
szClass: Array[0..MAX_PATH] Of Char;
szTitle: Array[0..MAX_PATH] Of Char;
begin
Result := 0;

if nCode < 0 then
begin
Result:= CallNextHookEx( ghHook, nCode, wP, lP);
exit;
end;

GetClassName(PCWPSTRUCT(lp)^.hwnd,szClass,MAX_PATH);

if (PCWPSTRUCT(lp)^.message = WM_CREATE) and (szClass = 'TForm2' ) then
begin
ShowMessage('T');
//DESTROYWINDOW(PCWPSTRUCT(lp)^.hwnd);
//SendMessage(PCWPSTRUCT(lp)^.hwnd,WM_CLOSE,0,0);
  // DestroyWindow(PCWPSTRUCT(lp)^.hwnd);
 Result := -1;

end
else
Result:= CallNextHookEx( ghHook, nCode, wP, lP);

end;
//----------------------------------------------------------------------------//

procedure SetHook;export;
begin
ghHook := SetWindowsHookEx( WH_CALLWNDPROC, MyCBTHookProc, hInstance, 0);
end;


procedure EndHook;export;
begin
UnhookWindowsHookEx( ghHook );
end;
baguli 2003-07-24
  • 打赏
  • 举报
回复
在WM_CREATE消息中,如果需要阻止创建窗口,简单地返回-1就行了,这样CreateWindow也好,CreateWindiwEx也好,统统会失败,窗口自然也就创建失败了,不需要CloseWindow或者DestroyWindow,因为这是窗口还有创建,何来窗口句柄?
hehaa 2003-07-24
  • 打赏
  • 举报
回复
各位..看来是不能杀死进程的:我主要是不让腾讯ie运行的.
于是找到它的class, Class Name:Afx:400000:0

可是QQ那些家伙的Class也是这个..这下连QQ一块被俺杀死了。。这可不行的.
------------------
看来还得发个命令来个强制关闭..大伙有没有什么方法?
hehaa 2003-07-24
  • 打赏
  • 举报
回复
var
ghHook: HHook;

function MyCBTHookProc(nCode: Integer; wp: wParam; lp: lParam): LResult; stdcall;
var
H : THandle;
hwndToNewWindow: HWND;
szClass: Array[0..MAX_PATH] Of Char;
szTitle: Array[0..MAX_PATH] Of Char;
dwThreadId,dwProcessId: DWORD;
hProcess: THandle;
begin
Result := 0;

if nCode < 0 then
begin
Result:= CallNextHookEx( ghHook, nCode, wP, lP);
exit;
end;

if nCode = HCBT_ACTIVATE Then //HCBT_CREATEWND
begin
hwndToNewWindow := HWND(wP);
GetClassName(hwndToNewWindow, szClass, MAX_PATH);
GetWindowText(hwndToNewWindow, szTitle, MAX_PATH);

if StrComp(szClass, pchar('Afx:400000:0')) = 0 Then
begin
//杀死该进程
dwThreadId := GetWindowThreadProcessId(hwndToNewWindow,dwProcessId);
hProcess := OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessId);
if (hProcess <> 0) then TerminateProcess(hProcess,0);
end
else
Result:= CallNextHookEx( ghHook, nCode, wP, lP);
end
else
Result:= CallNextHookEx( ghHook, nCode, wP, lP);

end;
//----------------------------------------------------------------------------//

procedure SetHook;export;
begin
ghHook := SetWindowsHookEx( WH_CBT, MyCBTHookProc, hInstance, 0);
end;


procedure EndHook;export;
begin
UnhookWindowsHookEx( ghHook );
end;

procedure HotKeyHookExit;
begin
if ghHook <> 0 then EndHook;
end;
==================
hehaa 2003-07-24
  • 打赏
  • 举报
回复
我倒..

还有人吗?
gflpower 2003-07-23
  • 打赏
  • 举报
回复
钩子是用来干什么的

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧