请问如何在DELPHI中锁定鼠标于某个窗口,锁定键盘,包括:ALT、TAB、SHIFT等键。如何关闭计算机,重启计算机,请各位帮忙。小弟在些先谢谢大家了。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var
      rtButton2: TRect;
    Temp:integer;
    begin
      rtButton2 := Button2.BoundsRect;
      MapWindowPoints(handle, 0, rtButton2, 2); // 座标换算
      ClipCursor(@rtButton2); // 限制滑鼠移动区域
    SystemParametersInfo(spi_screensaverrunning,1,@temp,0);end;
    这个所键盘的办法很BT
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Asm    //封锁20端口
        IN AL,21H
        OR AL,02H
        OUT 21H,AL
      end;
    end;解锁键盘:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Asm     //解锁20端口
        IN AL,21H
        AND AL,0FDH
        OUT 21H,AL
      end;
    end;
      

  2.   

    var st:SYSTEMTIME;htoken:THANDLE;tkp:TOKEN_PRIVILEGES;rr:DWORD;
    begin
     openprocesstoken(getcurrentprocess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,htoken);
     lookupprivilegevalue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
     tkp.PrivilegeCount:=1;
     tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
     adjusttokenprivileges(htoken,false,tkp,0,nil,rr);
     exitwindowsex(EWX_SHUTDOWN or EWX_REBOOT,0);//重启
     exitwindowsex(EWX_SHUTDOWN or EWX_POWEROFF,0);//关机
     exitwindowsex(EWX_LOGOFF,0);//注销
     end;
    WIN98和WIN2000都适用的!var rt:TRect;
    begin
     if state then
     begin
     rt:=rect(100,100,100,100);
     mapwindowpoints(application.Handle,0,rt,2);
     clipcursor(@rt);//锁住鼠标
     clipcursor(0);//释放鼠标
    end;
      

  3.   

    锁住鼠标的那个代码没有if state then begin 语句,
    var rt:TRect;
    begin
     rt:=rect(100,100,100,100);
     mapwindowpoints(application.Handle,0,rt,2);
     clipcursor(@rt);//锁住鼠标
     clipcursor(0);//释放鼠标
    end;
      

  4.   

    屏蔽键盘的方法的确BT!呵呵!你2k++根本没办法去 IN,AL,21H
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, shellapi, {这个东西不要忘记了添加}StdCtrls;
     .
     .
     .
    begin
    ShellExecute(Handle,'open','c:\windows\rudll32.exe user.exe,exitwindows','','',SW_NORMAL);
    end;
    这样就一OK了,你只要运行这个程序,系统就会自动重新启动,WIN98了