关于winform屏蔽锁
生活随笔
收集整理的這篇文章主要介紹了
关于winform屏蔽锁
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在項(xiàng)目里經(jīng)常要設(shè)計(jì)一個(gè)窗體全屏,然后屏蔽一些窗體的事件,比如 屏蔽開(kāi)始按鈕? alt+F4等等按鈕,這里給出示例代碼希望對(duì)大家有幫助
1 static int hHook = 0; //全局鉤子數(shù)2
3 public const int WH_KEYBOARD_LL = 13; //LowLevel鍵盤(pán)截獲,如果是WH_KEYBOARD=2,并不能對(duì)系統(tǒng)鍵盤(pán)截取
4
5 //委托
6 public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
7 event HookProc KeyBoardHookProcedure;
8
9 //鍵盤(pán)Hook結(jié)構(gòu)
10 [StructLayout(LayoutKind.Sequential)]
11 public class KeyBoardHookStruct
12 {
13 public int vkCode;
14 public int scanCode;
15 public int flags;
16 public int time;
17 public int dwExtraInfo;
18 }
19
20 #region DllImport
21 //設(shè)置鉤子
22 [DllImport("user32.dll")]
23 public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
24 [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
25 //抽掉鉤子
26 public static extern bool UnhookWindowsHookEx(int idHook);
27 [DllImport("user32.dll")]
28 //調(diào)用下一個(gè)鉤子
29 public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
30
31 [DllImport("kernel32.dll")]
32 public static extern int GetCurrentThreadId();
33
34 [DllImport("kernel32.dll")]
35 public static extern IntPtr GetModuleHandle(string name);
36
37 #endregion
38
39 #region 自定義事件函數(shù)
40
41 public void Hook_Start()
42 {
43 // 安裝鍵盤(pán)鉤子
44 if (hHook == 0)
45 {
46 KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
47
48 hHook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyBoardHookProcedure,GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
49
50 //如果設(shè)置鉤子失敗.
51 if (hHook == 0)
52 {
53 Hook_Clear();
54 //throw new Exception("設(shè)置Hook失敗!");
55 }
56 }
57 }
58
59 //取消鉤子事件
60 public void Hook_Clear()
61 {
62 bool retKeyboard = true;
63 if (hHook != 0)
64 {
65 retKeyboard = UnhookWindowsHookEx(hHook);
66 hHook = 0;
67 }
68 //如果去掉鉤子失敗.
69 if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
70 }
71
72 //這里添加自己想要的信息處理
73 public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
74 {
75 if (nCode >= 0)
76 {
77 KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
78 if (kbh.vkCode == 91) // 截獲左win(開(kāi)始菜單鍵)
79 {
80 return 1;
81 }
82 if (kbh.vkCode == 92)// 截獲右win
83 {
84 return 1;
85 }
86 //截獲Ctrl+Esc
87 if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control)
88 {
89 return 1;
90 }
91 //截獲alt+f4
92 if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt)
93 {
94 return 1;
95 }
96 //截獲alt+tab
97 if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt)
98 {
99 return 1;
100 }
101 //截獲Ctrl+Shift+Esc
102 if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift)
103 {
104 return 1;
105 }
106 //截獲alt+空格
107 if (kbh.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Alt)
108 {
109 return 1;
110 }
111 //截獲Ctrl+Alt+Delete
112 if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete)
113 {
114 return 1;
115 }
116
117
118 }
119 return CallNextHookEx(hHook, nCode, wParam, lParam);
120 }
121
122 #endregion
123
124
125 private void frmMain_Load(object sender, EventArgs e)
126 {
127 Hook_Start();
128 }
129
130 private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
131 {
132 Hook_Clear();
133 }
?
代碼基本就是這樣,如果不明白可以大家交流一下
總結(jié)
以上是生活随笔為你收集整理的关于winform屏蔽锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL Server 无法生成 FRun
- 下一篇: 如何评价构架好与坏