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...)
可是有些会有一对话框,询问是否要关闭..?有没有直接关闭,不让询问的..
谢谢...

解决方案 »

  1.   

    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;
    ==================
      

  2.   

    各位..看来是不能杀死进程的:我主要是不让腾讯ie运行的.
    于是找到它的class, Class Name:Afx:400000:0可是QQ那些家伙的Class也是这个..这下连QQ一块被俺杀死了。。这可不行的.
    ------------------
    看来还得发个命令来个强制关闭..大伙有没有什么方法?
      

  3.   

    在WM_CREATE消息中,如果需要阻止创建窗口,简单地返回-1就行了,这样CreateWindow也好,CreateWindiwEx也好,统统会失败,窗口自然也就创建失败了,不需要CloseWindow或者DestroyWindow,因为这是窗口还有创建,何来窗口句柄?
      

  4.   

    //上面那个问题已经解决了..我加了个比较窗口文本就可以了.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;