没有解决对Ctrl+Alt+Del、Alt+ Tab功能键呀?有没有Windows Api函数呢?下面这个是不是呢?
//屏蔽 Alt-Tab
SystemParametersInfo( SPI_SETFASTTASKSWITCH, i, @temp, 0);
//屏蔽Ctrl+Alt+Del
SystemParametersInfo(Spi_screensaverrunning,i,@temp,0);
//屏蔽 Alt-Tab
SystemParametersInfo( SPI_SETFASTTASKSWITCH, i, @temp, 0);
//屏蔽Ctrl+Alt+Del
SystemParametersInfo(Spi_screensaverrunning,i,@temp,0);
解决方案 »
- 请教几个用户管理相关API
- DCOMConnection和DataSetProvider 如何在应用服务端获得 用户信息
- 关于窗体的位置
- 高分诚请各位高手解答有关DELPHI和EXCEL之间的难题,不够可再加
- 循环窗体上所有组件,如何知道某组件是否有onDblClick事件(双击)
- 如何用语句来更改grid中的显示字段(displaylabel)?
- 从vc转delphi有什么要注意的?请教?
- 如何在delphi中调用vc制作的lib库函数?
- 高分求!!!如何在delphi5中操作xml文件,比如新建、打开、修改、保存等。
- 如何把DELPHI 6的程序转换为DELPHI 5的程序
- 2个 问题 ????????????????????????还是 关于 字符串??
- 头大了,为什么换了密码就连不上了!
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;
屏蔽那系统热键,我可以给你个方法,你看看可不可以?
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.