如何屏蔽ACtrl+Alt+Del、windows窗口键?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/3041/3041379.xml?temp=.2252161
      

  2.   

    Implementation
    var 
      Hwnd:THandle;
     Tmp:integer;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Hwnd:=FindWindow('Shell_TrayWnd',nil);
     if Hwnd<>0 then ShowWindow(Hwnd,SW_HIDE); //隐藏任务栏
     SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@Tmp,0); //屏蔽Ctrl+Alt+Del和Alt+Tab等系统热键
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Hwnd:=FindWindow('Shell_TrayWnd',nil);
      ShowWindow(Hwnd,SW_SHOW); //恢复任务栏
      SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@Tmp,0);//恢复系统热键
    end;屏蔽Alt+F4 需要捕捉WM_SYSCOMMAND消息,然后作出判断。
    procedure WMSysCommand(var Msg: TMessage);
    begin
      if Msg.wParam <> SC_CLOSE then inherited;
    end;
      

  3.   

    to extcsdn(Studing VB now) :
    不能屏蔽
    掉Ctrl+Alt+Del和win键
      

  4.   

    SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@Tmp,0);
    这只能在九八上用。
    猛料上好像介绍的有。楼主找找.
      

  5.   

    以前有人回答过的,我这里再把他的文章贴一遍:主  题:  D6实现的windows 2000 下屏蔽Ctrl+Alt+Del的方法,完全SDK发布,来者有分作  者:  micher_yan (小学没毕业)
    信 誉 值:  100
    所属论坛:  Delphi Win32 SDK/API
    问题点数:  100
    回复次数:  20
    发表时间:  2003-10-16 15:25:23

    好不容易在网上查到了屏蔽2000下CAD键的方法,可惜是vc版的,本人费时1天编写sdk并在2003 d6下调试通过。
    原理,替换系统GINA DLL中有关CAD的处理函数,其他不变,
    vc sdk为winwlx.h
    现免费发布,up,gz均给分,目的是提前帖子1、编辑动态链接库
    library dWINWLX;uses
      SysUtils,
      Classes,
      uMain in 'uMain.pas';{$R *.res}exports
       WlxNegotiate,
       WlxInitialize,
       WlxDisplaySASNotice,
       WlxLoggedOutSAS,
       WlxActivateUserShell,
       prcWlxLoggedOnSAS,
       WlxLoggedOnSAS,
       WlxDisplayLockedNotice,
       WlxWkstaLockedSAS,
       WlxIsLockOk,
       WlxIsLogoffOk,
       WlxLogoff,
       WlxShutdown,
       WlxScreenSaverNotify,
       WlxStartApplication,
       WlxNetworkProviderLoad;end.
    -----------------------------------------
    unit uMain;interface
    uses
      Windows, Messages, SysUtils, Variants, Classes;const
      MSGINADLL='msgina.dll';const
      WLX_VERSION_1_0             =$00010000;
      WLX_VERSION_1_1             =$00010001;
      WLX_CURRENT_VERSION         =WLX_VERSION_1_1;
      WLX_SAS_TYPE_TIMEOUT                    =0;
      WLX_SAS_TYPE_CTRL_ALT_DEL               =1;
      WLX_SAS_TYPE_SCRNSVR_TIMEOUT            =2;
      WLX_SAS_TYPE_SCRNSVR_ACTIVITY           =3;
      WLX_SAS_TYPE_USER_LOGOFF                =4;
      WLX_SAS_TYPE_MAX_MSFT_VALUE             =127;
      WLX_LOGON_OPT_NO_PROFILE        =$00000001;
      WLX_LOGON_OPT_USE_GROUPPOLICY   =$00000002;
      WLX_PROFILE_TYPE_V1_0           =1;
      WLX_PROFILE_TYPE_V2_0           =2;
      WLX_SAS_ACTION_LOGON                        =1;
      WLX_SAS_ACTION_NONE                         =2;
      WLX_SAS_ACTION_LOCK_WKSTA                   =3;
      WLX_SAS_ACTION_LOGOFF                       =4;
      WLX_SAS_ACTION_SHUTDOWN                     =5;
      WLX_SAS_ACTION_PWD_CHANGED                  =6;
      WLX_SAS_ACTION_TASKLIST                     =7;
      WLX_SAS_ACTION_UNLOCK_WKSTA                 =8;
      WLX_SAS_ACTION_FORCE_LOGOFF                 =9;
      WLX_SAS_ACTION_SHUTDOWN_POWER_OFF           =10;
      WLX_SAS_ACTION_SHUTDOWN_REBOOT              =11;
      WLX_SAS_ACTION_SHUTDOWN_SLEEP               =12;
      WLX_SAS_ACTION_SHUTDOWN_SLEEP2              =13;
      WLX_SAS_ACTION_SHUTDOWN_HIBERNATE           =14;
      WLX_WM_SAS                  =WM_USER + 601;
      WLX_DLG_SAS                    =101;
      WLX_DLG_INPUT_TIMEOUT          =102;    // Input (keys, etc) timed out
      WLX_DLG_SCREEN_SAVER_TIMEOUT   =103;    // Screen Saver activated
      WLX_DLG_USER_LOGOFF            =104;    // User logged offtype
      PVOID=Pointer;
      PPVOID=^PVOID;
      _LUID=packed record
        LowPart:DWORD;
        HighPart:int64;
      end;
      LUID=_LUID;
      PLUID=^_LUID;  _WLX_PROFILE_V1_0=packed record
        dwType      :DWORD;
        pszProfile  :PWord;
      end;
      WLX_PROFILE_V1_0      =_WLX_PROFILE_V1_0;
      PWLX_PROFILE_V1_0     =^_WLX_PROFILE_V1_0;  _WLX_PROFILE_V2_0 =packed record
        dwType      :DWORD;
        pszProfile  :PWord;
        pszPolicy   :PWord;
        pszNetworkDefaultUserProfile :PWord;
        pszServerName   :PWord;
        pszEnvironment  :PWord;
      end;
      WLX_PROFILE_V2_0      =_WLX_PROFILE_V2_0;
      PWLX_PROFILE_V2_0     =^_WLX_PROFILE_V2_0;  _WLX_MPR_NOTIFY_INFO =packed record
        pszUserName     :PWord;
        pszDomain       :PWord;
        pszPassword     :PWord;
        pszOldPassword  :PWord;
      END;
      WLX_MPR_NOTIFY_INFO=_WLX_MPR_NOTIFY_INFO;
      PWLX_MPR_NOTIFY_INFO=^_WLX_MPR_NOTIFY_INFO;  function WlxNegotiate(dwWinlogonVersion:DWORD;pdwDllVersion:PDWORD):Longbool;stdcall;  function WlxInitialize(
        lpWinsta        :PWORD;
        hWlx            :THandle;
        pvReserved      :PVOID;
        pWinlogonFunctions:PVOID;
        pWlxContext     :PPVOID
      ):LongBool;stdcall;  procedure WlxDisplaySASNotice(
        pWlxContext:PVOID
        );stdcall;
      function WlxLoggedOutSAS(
        pWlxContext:PVOID;
        dwSasType:DWORD;
        pAuthenticationId:PLUID;
        pLogonSid:PVOID;
        pdwOptions:PWORD;
        phToken:PHandle;
        pNprNotifyInfo:PWLX_MPR_NOTIFY_INFO;
        pProfile:PPVOID
        ):Integer;stdcall;  function WlxActivateUserShell(
        pWlxContext:PVOID;
        pszDesktopName:PWORD;
        pszMprLogonScript:PWORD;
        pEnvironment:PVOID
        ):LongBool;stdcall;  function prcWlxLoggedOnSAS(
        pWlxContext:PVOID;
        dwSasType:DWORD;
        pReserved:PVOID
        ):Integer; stdcall;
      

  6.   

    function WlxLoggedOnSAS(
        pWlxContext:PVOID;
        dwSasType:DWORD;
        pReserved:PVOID
        ):Integer; stdcall;  procedure WlxDisplayLockedNotice(
        pWlxContext:PVOID
        );stdcall;  function WlxWkstaLockedSAS(
        pWlxContext:PVOID;
        dwSasType:DWORD
        ):Integer;stdcall;  function WlxIsLockOk(
        pWlxContext:PVOID
        ):LongBool;stdcall;  function WlxIsLogoffOk(
        pWlxContext:PVOID
        ):LongBool;stdcall;  procedure WlxLogoff(
        pWlxContext:PVOID
        );stdcall;  procedure WlxShutdown(
        pWlxContext:PVOID;
        ShutdownType:DWORD
        );stdcall
    //
    // NEW for version 1.1
    //
      function WlxScreenSaverNotify(
        pWlxContext:PVOID;
        pSecure:PBool):Bool;stdcall;  function WlxStartApplication(
        pWlxContext:PVOID;
        pszDesktopName:PWORD;
        pEnvironment:PVOID;
        pszCmdLine:PWORD
        ):Bool;stdcall;  function WlxNetworkProviderLoad(
        pWlxContext:PVOID;
        pNprNotifyInfo:PWLX_MPR_NOTIFY_INFO
        ):bool;stdcall; 回复人: micher_yan(小学没毕业) ( ) 信誉:100  2003-10-16 15:32:00  得分:0
       ////////////////////////////////////////////////////////////////////////
    //                                                                    //
    //  Services that Winlogon provides                                   //
    //                                                                    //
    ////////////////////////////////////////////////////////////////////////
    const
      WLX_DESKTOP_NAME    =$00000001;      // Name present
      WLX_DESKTOP_HANDLE  =$00000002;      // Handle present
    type
      _WLX_DESKTOP=packed record
        Size:DWORD;
        Flags:DWORD;
        hDesktop:HDESK;
        pszDesktopName:PWORD;
      end;
      DLGTEMPLATE=packed record
        _Style:DWORD ;
        dwExtendedStyle:DWORD ;
        cdit:WORD ;
        x:short ;
        y:short ;
        cx:short ;
        cy:short ;
      end;
      LPCDLGTEMPLATE=^DLGTEMPLATE;
      ////
      //typedef BOOL (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM);
      DLGPROC=function(w1:HWND;w2:Longword;w3:wParam;w4:lParam):Bool;stdcall;  WLX_DESKTOP=_WLX_DESKTOP;
      PWLX_DESKTOP=^_WLX_DESKTOP;
      PPWLX_DESKTOP=^PWLX_DESKTOP;
      PWLX_USE_CTRL_ALT_DEL=procedure(hWlx:THandle);stdcall;
      PWLX_SET_CONTEXT_POINTER=procedure(hWlx:THandle;pWlxContext:PVOID);stdcall;
      PWLX_SAS_NOTIFY=procedure(hWlx:THandle;dwSasType:DWORD);stdcall;
      PWLX_SET_TIMEOUT=function(hWlx:THandle;Timeout:DWORD):Bool;stdcall;
      PWLX_ASSIGN_SHELL_PROTECTION=function(hWlx,hToken,hProcess,hThread:THandle):Integer;stdcall;
      PWLX_MESSAGE_BOX=function(hWlx:THandle;hwndOwner:HWND;
                       lpszText,lpszTitle:LPWSTR;fuStyle:LongWord):Integer;Stdcall;
      PWLX_DIALOG_BOX=function(hWlx,hInst:THandle;lpszTemplate:LPWSTR;
                      hwndOwner:HWND;dlgprc:DLGPROC):Integer;stdcall;
      PWLX_DIALOG_BOX_INDIRECT=function(hWlx,hInst:THandle;hDialogTemplate:LPCDLGTEMPLATE;
                               hwndOwner:HWND;dlgprc:DLGPROC):Integer;stdcall;  PWLX_DIALOG_BOX_PARAM=function(hWlx,hInst:THandle;lpszTemplate:LPWSTR;
                            hwndOwner:HWND;dlgprc:DLGPROC;dwInitParam:LPARAM):Integer;stdcall;  PWLX_DIALOG_BOX_INDIRECT_PARAM=function(hWlx,hInst:THandle;
                 hDialogTemplate:LPCDLGTEMPLATE;hwndOwner:HWND;dlgprc:DLGPROC;
                 dwInitParam:LPARAM):Integer;stdcall;  PWLX_SWITCH_DESKTOP_TO_USER=function(hWlx:THandle):Integer;stdcall;
      PWLX_SWITCH_DESKTOP_TO_WINLOGON=function(hWlx:THandle):Integer;stdcall;  PWLX_CHANGE_PASSWORD_NOTIFY=function(hWlx:THandle;pMprInfo:PWLX_MPR_NOTIFY_INFO;
                 dwChangeInfo:DWORD):Integer;stdcall;  PWLX_GET_SOURCE_DESKTOP=function(hWlx:THandle;ppDesktop:PPWLX_DESKTOP):bool;stdcall;  PWLX_SET_RETURN_DESKTOP=function(hWlx:THandle;pDesktop:PWLX_DESKTOP):Bool;stdcall;
      PWLX_CREATE_USER_DESKTOP=function(hWlx,hToken:THandle;Flags:DWORD;
                 pszDesktopName:short;ppDesktop:PPWLX_DESKTOP):bool;stdcall;const
      WLX_CREATE_INSTANCE_ONLY    =$00000001;
      WLX_CREATE_USER             =$00000002;type
      PWLX_CHANGE_PASSWORD_NOTIFY_EX=function(
        hWlx:THandle;
        pMprInfo:PWLX_MPR_NOTIFY_INFO;
        dwChangeInfo:DWORD;
        ProviderName:short;
        Reserved:PVOID):Integer;stdcall;Top
    回复人: micher_yan(小学没毕业) ( ) 信誉:100  2003-10-16 15:33:00  得分:0
       ////////////////////////////////////////////////////////////////////////
    //                                                                    //
    //  Function dispatch tables.                                         //
    //  One of the following tables will be passed to the GINA DLL        //
    //  in the WlxInitialize() call during initialization.                //
    //                                                                    //
    //  NOTE: FOR THIS REVISION THERE IS ONLY ONE TABLE.  DEVELOPERS      //
    //        SHOULD EXPECT MORE IN FUTURE RELEASE.                       //
    //                                                                    //
    //////////////////////////////////////////////////////////////////////////
    // Dispatch table for version WLX_VERSION_1_0
    //  _WLX_DISPATCH_VERSION_1_0=packed record
        WlxUseCtrlAltDel            :PWLX_USE_CTRL_ALT_DEL           ;
        WlxSetContextPointer        :PWLX_SET_CONTEXT_POINTER        ;
        WlxSasNotify                :PWLX_SAS_NOTIFY                 ;
        WlxSetTimeout               :PWLX_SET_TIMEOUT                ;
        WlxAssignShellProtection    :PWLX_ASSIGN_SHELL_PROTECTION    ;
        WlxMessageBox               :PWLX_MESSAGE_BOX                ;
        WlxDialogBox                :PWLX_DIALOG_BOX                 ;
        WlxDialogBoxParam           :PWLX_DIALOG_BOX_PARAM           ;
        WlxDialogBoxIndirect        :PWLX_DIALOG_BOX_INDIRECT        ;
        WlxDialogBoxIndirectParam   :PWLX_DIALOG_BOX_INDIRECT_PARAM  ;
        WlxSwitchDesktopToUser      :PWLX_SWITCH_DESKTOP_TO_USER     ;
        WlxSwitchDesktopToWinlogon  :PWLX_SWITCH_DESKTOP_TO_WINLOGON ;
        WlxChangePasswordNotify     :PWLX_CHANGE_PASSWORD_NOTIFY     ;
      end;
      WLX_DISPATCH_VERSION_1_0=_WLX_DISPATCH_VERSION_1_0;
      PWLX_DISPATCH_VERSION_1_0=^_WLX_DISPATCH_VERSION_1_0;  _WLX_DISPATCH_VERSION_1_1=packed record
        WlxUseCtrlAltDel            :PWLX_USE_CTRL_ALT_DEL           ;
        WlxSetContextPointer        :PWLX_SET_CONTEXT_POINTER        ;
        WlxSasNotify                :PWLX_SAS_NOTIFY                 ;
        WlxSetTimeout               :PWLX_SET_TIMEOUT                ;
        WlxAssignShellProtection    :PWLX_ASSIGN_SHELL_PROTECTION    ;
        WlxMessageBox               :PWLX_MESSAGE_BOX                ;
        WlxDialogBox                :PWLX_DIALOG_BOX                 ;
        WlxDialogBoxParam           :PWLX_DIALOG_BOX_PARAM           ;
        WlxDialogBoxIndirect        :PWLX_DIALOG_BOX_INDIRECT        ;
        WlxDialogBoxIndirectParam   :PWLX_DIALOG_BOX_INDIRECT_PARAM  ;
        WlxSwitchDesktopToUser      :PWLX_SWITCH_DESKTOP_TO_USER     ;
        WlxSwitchDesktopToWinlogon  :PWLX_SWITCH_DESKTOP_TO_WINLOGON ;
        WlxChangePasswordNotify     :PWLX_CHANGE_PASSWORD_NOTIFY     ;
        WlxGetSourceDesktop         :PWLX_GET_SOURCE_DESKTOP         ;
        WlxSetReturnDesktop         :PWLX_SET_RETURN_DESKTOP         ;
        WlxCreateUserDesktop        :PWLX_CREATE_USER_DESKTOP        ;
        WlxChangePasswordNotifyEx   :PWLX_CHANGE_PASSWORD_NOTIFY_EX  ;
      end;
      WLX_DISPATCH_VERSION_1_1=_WLX_DISPATCH_VERSION_1_1;
      PWLX_DISPATCH_VERSION_1_1=^_WLX_DISPATCH_VERSION_1_1;
      

  7.   

    implementation
      function WlxNegotiate; external MSGINADLL name 'WlxNegotiate';
      function WlxInitialize; external MSGINADLL name 'WlxInitialize';
      procedure WlxDisplaySASNotice; external MSGINADLL name 'WlxDisplaySASNotice';
      function WlxLoggedOutSAS; external MSGINADLL name 'WlxLoggedOutSAS';
      function WlxActivateUserShell; external MSGINADLL name 'WlxActivateUserShell';
      function prcWlxLoggedOnSAS; external MSGINADLL name 'WlxLoggedOnSAS';
      function WlxLoggedOnSAS(pWlxContext:PVOID;dwSasType:DWORD;pReserved:PVOID
        ):Integer; stdcall;
      var
        hMutex: THandle;
      begin
        //WriteInfo("WlxLoggedOnSAS \r\n"); //用于记录信息
        //屏蔽CTRL_ALT_DEL,也可以根据特定条件来决定是否要屏蔽
        //我采用了Mutex来控制是否屏蔽,(注意:要用unicode)    if dwSasType = WLX_SAS_TYPE_CTRL_ALT_DEL then
        begin
          hMutex := OpenMutex(MUTEX_ALL_ACCESS, FALSE, '_my_disable_CTRL_ALT_DEL');
          if hMutex<>0 then
          begin
            CloseHandle(hMutex);
            //WriteInfo("disble CTRL+ALT+DEL \r\n");
            //Result:= WLX_SAS_ACTION_NONE; //将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL
            Result:= 99;//99是非法返回值
          end
          else
            Result:= prcWlxLoggedOnSAS ( //这是我从MSGINA.DLL中获取的函数。
            pWlxContext,
            dwSasType,
            pReserved);
        end else
        begin
            //WriteInfo("not disble CTRL+ALT+DEL \r\n");
            Result:= prcWlxLoggedOnSAS ( //这是我从MSGINA.DLL中获取的函数。
            pWlxContext,
            dwSasType,
            pReserved);
        end;
      end;  procedure WlxDisplayLockedNotice; external MSGINADLL name 'WlxDisplayLockedNotice';
      function WlxWkstaLockedSAS; external MSGINADLL name 'WlxWkstaLockedSAS';
      function WlxIsLockOk; external MSGINADLL name 'WlxIsLockOk';
      function WlxIsLogoffOk; external MSGINADLL name 'WlxIsLogoffOk';
      procedure WlxLogoff; external MSGINADLL name 'WlxLogoff';
      procedure WlxShutdown; external MSGINADLL name 'WlxShutdown';
      function WlxScreenSaverNotify; external MSGINADLL name 'WlxScreenSaverNotify';
      function WlxStartApplication; external MSGINADLL name 'WlxStartApplication';
      function WlxNetworkProviderLoad; external MSGINADLL name 'WlxNetworkProviderLoad';end.
    ------------------------------
    2、使用方法,
    GINA DLL的安装: 
    键名 : \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon  
    变量名 : GinaDLL  
    变量类型 : [REG_SZ]  
    内容 : "你的GINA DLL的名称" 如:"dWINWLX.DLL"
    在任意以程序中创建mutex即可,如:
    createMutex(nil,false,pchar('_my_disable_CTRL_ALT_DEL'));
    3、存在问题:屏蔽热键之后按CAD键时屏幕有闪烁情况,如有解决的,还请发布,感激不尽:)Top
    回复人: WWWWA(aaaa) ( ) 信誉:130  2003-10-16 15:34:00  得分:0
       试试Top
    回复人: Commander007(一招半式闯江湖) ( ) 信誉:100  2003-10-16 17:44:00  得分:0
       强!收藏,学习ing.....Top
    回复人: pankun(剑神一笑) ( ) 信誉:105  2003-10-16 17:47:00  得分:0
       嗯,支持楼主的精神.Top
    回复人: BearSinba(雨晴) ( ) 信誉:100  2003-10-16 17:48:00  得分:0
       高。Top
    回复人: pankun(剑神一笑) ( ) 信誉:105  2003-10-16 17:49:00  得分:0
       对了,用拦载热键消息的办法可以做到无闪烁(按下CAD时会发送WM_HOTKEY到一个特定的系统窗口中的).这个办法比改GINA要好实现一些Top
    回复人: hbqinlei(漫步者) ( ) 信誉:100  2003-10-16 18:21:00  得分:0
       支持!
    收藏,学习!Top
    回复人: qufo(飞) ( ) 信誉:100  2003-10-16 19:47:00  得分:0
       学习中。Top
    回复人: Storm2008($$天冰$$) ( ) 信誉:103  2003-10-16 19:51:00  得分:0
       高人!
    学习Top
    回复人: reallike(认真学习Cpp用Cpp考虑delphi) ( ) 信誉:102  2003-10-16 19:52:00  得分:0
       E,是一种方法。试试看。Top
    回复人: dickeybird888(于伟刚) ( ) 信誉:110  2003-10-16 19:53:00  得分:0
       学习一下(·¥·)Top
    回复人: reallike(认真学习Cpp用Cpp考虑delphi) ( ) 信誉:102  2003-10-16 20:00:00  得分:0
       http://www.reallysoft.com.cn/software/dWINWLX.pas楼主,看看我这个文件有没有需要补充的?Top
    回复人: pankun(剑神一笑) ( ) 信誉:105  2003-10-16 20:07:00  得分:0
       呵呵,不错,我把这贴子放到专题去了,也希望其它朋友也能把自己的经验和技术写出来和大家共享.Top
    回复人: 303(吴志坤) ( ) 信誉:88  2003-10-16 20:20:00  得分:0
       好东西,谢谢楼主!!!!!!!!Top
    回复人: hwyang80(Dwei) ( ) 信誉:98  2003-10-16 22:05:00  得分:0
       谢谢楼主,接分!!!!Top
    回复人: micher_yan(小学没毕业) ( ) 信誉:100  2003-10-17 10:54:00  得分:0
       代码更正说明:
    //我采用了Mutex来控制是否屏蔽,(注意:要用unicode)    if dwSasType = WLX_SAS_TYPE_CTRL_ALT_DEL then
        begin
          hMutex := OpenMutex(MUTEX_ALL_ACCESS, FALSE, '_my_disable_CTRL_ALT_DEL');
          if hMutex<>0 then
          begin
            CloseHandle(hMutex);
            //WriteInfo("disble CTRL+ALT+DEL \r\n");
            Result:= WLX_SAS_ACTION_NONE; //将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL
            //Result:= 99;//99是非法返回值请注意后三行!!!
    我在测试通过以后,发现闪屏,因此想测试返回一个非法值会有什么结果,忘了改回来就直接发布了,请大家注意!sorry
    这个错误我是看了reallike(认真学习Cpp用Cpp考虑delphi) 的文件才发现的。感谢reallike(认真学习Cpp用Cpp考虑delphi)Top
    回复人: micher_yan(小学没毕业) ( ) 信誉:100  2003-10-17 10:58:00  得分:0
       pankun(剑神一笑) :要是方便请把你实现拦截CAD的方法贴出,共同学习嘛,我用过使用键盘钩子拦截除了CAD以外的任何系统热键,但您说的“按下CAD时会发送WM_HOTKEY到一个特定的系统窗口中的”还请详细提示
    Top
    回复人: reallike(认真学习Cpp用Cpp考虑delphi) ( ) 信誉:102  2003-10-17 11:02:00  得分:0
       嗬嗬,没啥。发布东西最好找个地方弄成文件包再给大家。贴上来断断续续的。不太理解的人会搞混乱。Top
    回复人: bat800(傻瓜明) ( ) 信誉:100  2003-10-17 11:07:00  得分:0
       学习