請教:如何禁用鍵盤按鍵? |
尚未結案
|
tiao
一般會員 發表:11 回覆:19 積分:6 註冊:2005-02-01 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
tiao您好,查找关键字:SetwindowsHookEx,HOOK
或参考:
http://delphi.ktop.com.tw/topic.php?topic_id=47169
http://delphi.ktop.com.tw/topic.php?topic_id=34828
小弟对mathewzhao大大的略做修改,不够精细,自己研究看看
< class="code">
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
WH_KEYBOARD_LL =$80000000;
var
Form1: TForm1;
hKeyHook: Integer;
hKeyHookwin98:integer; implementation {$R *.dfm} function KeyHook(iCode: Integer; wParam: wParam; Key: lParam): LRESULT; stdcall;
begin
Result:=0;
If iCode < 0 Then //根據SDK說明,若iCode小於0,調用CallNextHookEx並返回
begin
Result:=CallNextHookEx(hKeyHook, iCode, wParam, key);
Exit;
end;
//在此处设定需屏蔽的按键,此处为屏蔽Ctrl c,Ctrl v,ctrl x
if ((key and WH_KEYBOARD_LL)= 0) and(GetKeyState(vk_control) <0)
and ((wParam = Ord('X'))or(wParam = Ord('V'))or(wParam = Ord('C')))then
{此处屏蔽F1,换汤不换药,自己按需修改
if ((key and WH_KEYBOARD_LL)= 0) and(GetKeyState(vk_F1) <0) then
}
begin
Result:=1;
Exit;
end; end;
//实行屏蔽
procedure TForm1.Button1Click(Sender: TObject);
var
temp:integer;
begin
if Win32Platform=VER_PLATFORM_WIN32_WINDOWS then //win98
begin
SystemParametersInfo(Spi_screensaverrunning,1,@temp,0);
hKeyHookwin98 := SetWindowsHookEx(WH_KEYBOARD, KeyHook, HInstance, 0);
end
else // win2000
begin
hKeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, KeyHook, HInstance, 0);
end;
end;
//解除屏蔽
procedure TForm1.Button2Click(Sender: TObject);
var
temp:integer;
begin
if Win32Platform=VER_PLATFORM_WIN32_WINDOWS then
begin
SystemParametersInfo(spi_screensaverrunning,0,@temp,0);
UnHookWindowsHookEx(hKeyHookwin98);
hKeyHookwin98:=0;
end
else
begin
UnHookWindowsHookEx(hKeyHook);
hKeyHook := 0;
end;
end;
end. ~~~静心养德~~~ 發表人 - deity 於 2005/02/22 11:24:20
|
tiao
一般會員 發表:11 回覆:19 積分:6 註冊:2005-02-01 發送簡訊給我 |
|
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
常數名稱 十六進位值 十進位值 滑鼠或按鍵的對應值 ............................................................. VK_LBUTTON 01 1 滑鼠左鈕 VK_RBUTTON 02 2 滑鼠右鈕 VK_CANCEL 03 3 Control-break 執行 VK_MBUTTON 04 4 滑鼠中鈕 05-07 5-7 未定義 VK_BACK 08 8 Backspace 鍵 VK_TAB 09 9 Tab 鍵 0A-0B 10-11 未定義 VK_CLEAR 0C 12 Clear 鍵 VK_RETURN 0D 13 Enter 鍵 0E-0F 14-15 未定義 VK_SHIFT 10 16 Shift 鍵 VK_CONTROL 11 17 Ctrl 鍵 VK_MENU 12 18 Alt 鍵 VK_PAUSE 13 19 Pause 鍵 VK_CAPITAL 14 20 Caps Lock 鍵 15-19 21-25 保留給Kanji 系統使用 1A 26 未定義 VK_ESCAPE 1B 27 Esc 鍵 1C-1F 28-31 保留給Kanji 系統使用 VK_SPACE 20 32 SpaceBar 鍵 VK_PRIOR 21 33 Page Up 鍵 VK_NEXT 22 34 Page Down 鍵 VK_END 23 35 End 鍵 VK_HOME 24 36 Home 鍵 VK_LEFT 25 37 Left Arrow 鍵 VK_UP 26 38 Up Arrow 鍵 VK_RIGHT 27 39 Right Arrow 鍵 VK_DOWN 28 40 Down Arrow 鍵 VK_SELECT 29 41 Select 鍵 2A 42 OEM 自訂使用 VK_EXECUTE 2B 43 Execute 鍵 VK_SNAPSHOT 2C 44 Print Screen 鍵 VK_INSERT 2D 45 Ins 鍵 VK_DELETE 2E 46 Del 鍵 VK_HELP 2F 47 Help 鍵 VK_0 30 48 0鍵 VK_1 31 49 1鍵 VK_2 32 50 2鍵 VK_3 33 51 3鍵 VK_4 34 52 4鍵 VK_5 35 53 5鍵 VK_6 36 54 6鍵 VK_7 37 55 7鍵 VK_8 38 56 8鍵 VK_9 39 57 9鍵 3A-40 58-64 未定義 VK_A 41 65 A鍵 VK_B 42 66 B鍵 VK_C 43 67 C鍵 VK_D 44 68 D鍵 VK_E 45 69 E鍵 VK_F 46 70 F鍵 VK_G 47 71 G鍵 VK_H 48 72 H鍵 VK_I 49 73 I鍵 VK_J 4A 74 J鍵 VK_K 4B 75 K鍵 VK_L 4C 76 L鍵 VK_M 4D 77 M鍵 VK_N 4E 78 N鍵 VK_O 4F 79 O鍵 VK_P 50 80 P鍵 VK_Q 51 81 Q鍵 VK_R 52 82 R鍵 VK_S 53 83 S鍵 VK_T 54 84 T鍵 VK_U 55 85 U鍵 VK_V 56 86 V鍵 VK_W 57 87 W鍵 VK_X 58 88 X鍵 VK_Y 59 89 Y鍵 VK_Z 5A 90 Z鍵 5B-5F 91-95 未定義 VK_NUMPAD0 60 96 數字鍵0鍵 VK_NUMPAD1 61 97 數字鍵1鍵 VK_NUMPAD2 62 98 數字鍵2鍵 VK_NUMPAD3 63 99 數字鍵3鍵 VK_NUMPAD4 64 100 數字鍵4鍵 VK_NUMPAD5 65 101 數字鍵5鍵 VK_NUMPAD6 66 102 數字鍵6鍵 VK_NUMPAD7 67 103 數字鍵7鍵 VK_NUMPAD8 68 104 數字鍵8鍵 VK_NUMPAD9 69 105 數字鍵9鍵 VK_MULTIPLY 6A 106 *鍵 VK_ADD 6B 107 +鍵 VK_SEPARATOR 6C 108 Separator 鍵 VK_SUBTRACT 6D 109 -鍵 VK_DECIMAL 6E 110 .鍵 VK_DIVIDE 6F 111不知你要的是不是這個呢? -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
tiao
一般會員 發表:11 回覆:19 積分:6 註冊:2005-02-01 發送簡訊給我 |
|
tiao
一般會員 發表:11 回覆:19 積分:6 註冊:2005-02-01 發送簡訊給我 |
|
wbao80
一般會員 發表:0 回覆:1 積分:0 註冊:2005-03-21 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: deity: 我按照你所述試了一下,無法遮罩Ctrl Alt Del鍵! 有沒有可以能成功的源碼?謝謝!!!wbao80你好:小弟在win98测试是可以的,也可以修正为: 简单法 var temp:integer; //开启屏蔽ctrl alt del procedure TForm1.Button1Click(Sender: TObject); begin SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1,@temp,0); end; //关闭屏蔽ctrl alt del procedure TForm1.Button2Click(Sender: TObject); begin SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@temp,0); end;如在win2K或NT 可参考: 【BCB】【轉貼】教你如何在 Win2K/NT 下攔截 Ctrl Alt Del http://delphi.ktop.com.tw/topic.php?topic_id=46004 另推荐使用tiao兄所说的,用dwinlock 具体可参考: http://www.dwinlock.kassl.de/ 里有很详细的范例和控件,小弟没测试过,您可以自行试试 站内也有很多相关的可行方法,您可输入“Ctrl Alt Del”进行查找。 希望能对您有所帮助 <>~~~静心养德~~~> |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |