没有解决对Ctrl+Alt+Del、Alt+ Tab功能键呀?有没有Windows Api函数呢?下面这个是不是呢?
   //屏蔽 Alt-Tab
    SystemParametersInfo( SPI_SETFASTTASKSWITCH, i, @temp, 0);
  //屏蔽Ctrl+Alt+Del
    SystemParametersInfo(Spi_screensaverrunning,i,@temp,0);

解决方案 »

  1.   

    unit disp;interfaceuses
    Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
    Dialogs, StdCtrls;
    {按键消息的结构,Delphi中没有。
    注意:这个结构在Windows NT 4 sp3以上系统
    中才能使用}
    type
    tagKBDLLHOOKSTRUCT = packed record
    vkCode: DWORD;//虚拟键值
    scanCode: DWORD;//扫描码值(没有用过)
    {一些扩展标志,这个值比较麻烦,MSDN上说得也不太明白,但是
    根据这个程序,这个标志值的第六位数(二进制)为1时ALT键按下为0相反。}
    flags: DWORD;
    time: DWORD;//消息时间戳
    dwExtraInfo: DWORD;//和消息相关的扩展信息
    end;
    KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
    PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;//这个是低级键盘钩子的索引值,Delphi中没有,必须自己定义
    const WH_KEYBOARD_LL = 13;
    //定义一个常量好和上面哪个结构中的flags比较而得出ALT键是否按下
    const LLKHF_ALTDOWN = $20;
    //----声明各个函数-------------
     function LowLevelKeyboardProc(nCode: Integer;
    WParam: WPARAM;LParam: LPARAM):LRESULT; stdcall;
     procedure hookstar; //设置钩子
     procedure hookend;
    var
    hhkLowLevelKybd: HHOOK;
    implementation
    {
    功能:低级键盘钩子的回调函数,在里面过滤消息
    参数:nCode 是Hook的标志
    WParam 表示消息的类型
    LParam 是一个指向我们在上面定义的哪个结构KBDLLHOOKSTRUCT的指针
    返回值:如果不是0的话windows就把这个消息丢掉,程序就不会再收到这个消息了。
    }
    function LowLevelKeyboardProc(nCode: Integer;
    WParam: WPARAM;LParam: LPARAM):LRESULT; stdcall;
    var
    fEatKeystroke: BOOL;
    p: PKBDLLHOOKSTRUCT;
    begin
    Result := 0;
    fEatKeystroke := FALSE;
    p := PKBDLLHOOKSTRUCT (lParam);
    //nCode值为HC_ACTION时表示WParam和LParam参数包涵了按键消息
    if (nCode = HC_ACTION) then
    begin
    //拦截按键消息并测试是否是Ctrl+Esc、Alt+Tab、和Alt+Esc功能键。
    case wParam of
    WM_KEYDOWN,
    WM_SYSKEYDOWN,
    WM_KEYUP,
    WM_SYSKEYUP:
    fEatKeystroke :=
    ((p.vkCode = VK_TAB) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or // Alt+Tab
    ((p.vkCode = VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0))or //
    (p.vkCode = VK_Lwin) or (p.vkCode = VK_Rwin)or (p.vkCode = VK_apps) or  //上面是屏蔽WIN按键
    //((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN) and (P.vkCode = VK_Delete)) or
    ((p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0))  or
    ((p.vkCode = VK_F4) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or
    ((p.vkCode = VK_SPACE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) OR
    (((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN and p.flags) and (P.vkCode = VK_Delete))) //AND (p.flags = true) ;
    end;
    end;if fEatKeystroke = True then
    Result := 1;
    if nCode <> 0 then
    Result := CallNextHookEx(0, nCode, wParam, lParam);
    end;
    //----------------------回调函数结束-----------------------------------------procedure hookstar; //设置钩子
    begin
    //设置键盘钩子
    if hhkLowLevelKybd = 0 then
    begin
    hhkLowLevelKybd := SetWindowsHookExW(WH_KEYBOARD_LL,
                                           LowLevelKeyboardProc,
                                           Hinstance,
                                            0);
    if hhkLowLevelKybd <> 0 then
     //MessageBox(0, '键盘钩子设置成功!', '提示', MB_OK)
    else
      MessageBox(0, '键盘钩子设置失败!', '提示', MB_OK);
    end
    else
      //MessageBox(Handle, '键盘钩子已设置!', '提示', MB_OK);
    end;
    //---------------------设置钩子完成-----------------procedure hookend;//卸载键盘钩子
    begin
    if hhkLowLevelKybd <> 0 then
    if UnhookWindowsHookEx(hhkLowLevelKybd) <> False then
    begin
    //MessageBox(0, '系统热键恢复使用!', '提示', MB_OK);
    hhkLowLevelKybd := 0;
    end
    else
    //MessageBox(Handle, '键盘钩子卸载失败!', '提示', MB_OK)
    else
    //MessageBox(Handle, '没有发现键盘钩子!', '提示', MB_OK);
    end;
    //-------------卸载键盘钩子完成-------------------------end.//-------------------修改分辨率的问题--------------------
    function DynamicResolution(X, Y: word): BOOL;
    var
      lpDevMode: TDeviceMode;
    begin
      Result := EnumDisplaySettings(nil, 0, lpDevMode);
      if Result then
      begin
        lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
        lpDevMode.dmPelsWidth := X;
        lpDevMode.dmPelsHeight := Y;
        lpDevMode.dmDisplayFrequency := 75;//刷新率
         Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
      //CDS_UPDATEREGISTRY  必须写,呵呵,要不就有你好看的(任务栏不变 )
      end;
      end;
      

  2.   

    屏蔽桌面以及任务栏等的解决思路是通过FindWindow找到窗口,然后把窗口隐藏掉即可。
    屏蔽那系统热键,我可以给你个方法,你看看可不可以?
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Registry;const
      FPath='\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\';type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      rgLimit: TRegistry;
    begin
      rgLimit := TRegistry.Create;
      try
        rgLimit.RootKey :=HKEY_LOCAL_MACHINE;
        rgLimit.OpenKey(FPath, True);
        rgLimit.WriteString('AutoAdminLogon','2');
        Application.MessageBox('屏蔽操作成功,需重新启动系统!',
            'AAA, MB_OK
            or
            MB_ICONWARNING);
      finally
        rgLimit.Free ;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      rgLimit: TRegistry;
    begin
      rgLimit := TRegistry.Create;
      try
        rgLimit.RootKey :=HKEY_LOCAL_MACHINE;
        rgLimit.OpenKey(FPath, True);
        rgLimit.WriteString('AutoAdminLogon','1');
        Application.MessageBox('取消屏蔽操作成功,需重新启动系统!',
            'AAA', MB_OK
            or
            MB_ICONWARNING);
      finally
        rgLimit.Free ;
      end;
    end;end.
      

  3.   

    u2m(痛并快乐着) 你的方法只能屏蔽Ctrl+Alt+Del 但是不能屏蔽其他功能键,Alt+Tab等 l0f(凌风) 你好,出来键盘钩子你还有什么更好的方法么?
      

  4.   

    l0f(凌风)  你好,我采用了你的方法,可以解决屏蔽Alt+Tab等功能键,但是不能屏蔽Ctrl+Alt+Del。不过,先谢谢你们!