C#中,如何通过程序来屏蔽键盘(仅键盘) C#中,如何通过程序来屏蔽键盘(仅键盘)?请附上完整的代码! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Console.WriteLine("请拔掉你的键盘!");我太邪恶了。。 是winform还是web,winform #region 钩子程序 //委托 //public delegate int HookProc(int nCode, int wParam, IntPtr lParam); //static int hHook = 0; //public const int WH_KEYBOARD_LL = 13; //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 //HookProc KeyBoardHookProcedure; //键盘Hook结构函数 //[StructLayout(LayoutKind.Sequential)] //public class KeyBoardHookStruct //{ // public int vkCode; // public int scanCode; // public int flags; // public int time; // public int dwExtraInfo; //} //设置钩子 //[DllImport("user32.dll")] //public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId); //[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] //抽掉钩子 //public static extern bool UnhookWindowsHookEx(int idHook); //[DllImport("user32.dll")] //调用下一个钩子 //public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam); //[DllImport("kernel32.dll")] //public static extern int GetCurrentThreadId(); //[DllImport("kernel32.dll")] //public static extern IntPtr GetModuleHandle(string name); #endregion #region //public void Hook_Start() //{ // // 安装键盘钩子 // if (hHook == 0) // { // KeyBoardHookProcedure = new HookProc(KeyBoardHookProc); // //hHook = SetWindowsHookEx(2, // // KeyBoardHookProcedure, // // GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId()); // hHook = SetWindowsHookEx(WH_KEYBOARD_LL, // KeyBoardHookProcedure, // GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0); // //如果设置钩子失败. // if (hHook == 0) // { // Hook_Clear(); // //throw new Exception("设置Hook失败!"); // } // } //} //取消钩子事件 //public void Hook_Clear() //{ // bool retKeyboard = true; // if (hHook != 0) // { // retKeyboard = UnhookWindowsHookEx(hHook); // hHook = 0; // } // //如果去掉钩子失败. // if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed."); //} //这里可以添加自己想要的信息处理 //public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam) //{ // if (nCode >= 0) // { // KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct)); // if (kbh.vkCode == 91) // 截获左win(开始菜单键) // { // return 1; // } // if (kbh.vkCode == 92)// 截获右win // { // return 1; // } // if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) //截获Ctrl+Esc // { // return 1; // } // if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+f4 // { // return 1; // } // if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete) //截获Ctrl+Alt+Delete // { // return 1; // } // if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+tab // { // return 1; // } // } // return CallNextHookEx(hHook, nCode, wParam, lParam); //} #endregionweb的话用js来屏蔽<html> <script> function KeyDown(){ //屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 //alert("ASCII代码是:"+event.keyCode); if ((window.event.altKey)&& ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ← (window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 → alert("不准你使用ALT+方向键前进或后退网页!"); event.returnValue=false; } if ((event.keyCode==8) || //屏蔽退格删除键 (event.keyCode==116)|| //屏蔽 F5 刷新键 (event.keyCode==112)|| //屏蔽 F1 刷新键 (event.ctrlKey && event.keyCode==82)){ //Ctrl + R event.keyCode=0; event.returnValue=false; } if ((event.ctrlKey)&&(event.keyCode==78)) //屏蔽 Ctrl+n event.returnValue=false; if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10 event.returnValue=false; if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false; //屏蔽 shift 加鼠标左键新开一网页 if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4 window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false;} } function Showhelp(){ alert("呵呵"); return false; } </script> <head> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>键盘代码</title> <style> <!-- body { font-family: Verdana; color: #000080; font-size: 9pt } --></style> </head> <body onkeydown="KeyDown()" oncontextmenu="event.returnValue=false" onhelp="Showhelp();return false;"> <p align="center">请按键盘</p> </body> </html> 将Form中的keypreview设置成True,private void TBillForm_KeyPress(object sender, KeyPressEventArgs e) { e.KeyChar =(char)0; } 1说的不行for(;;) MessageBox.Show("请拔掉你的键盘!"); 我遇到一个问题,用16楼的方法屏蔽掉Ctrl+Shift组合键后,发现应用程序不响应Keyborad.PrewKeyDown事件了,请问这是什么问题?部分代码:if (((int)Control.ModifierKeys == ((int)Keys.Control + (int)Keys.Shift))) //Ctrl+Shift { return 1;} 请教一下高人,C#中利用JMail接收邮件后,想把邮件删掉, 能否用一个通用的方法很方便地将一个文本文件读入一个数组或List<>对象中。例如, 【诡异】dropDownList的SelectedValue总是只能得到第一个的值,得不到我选的那一个? repeater 嵌套 传值问题! 報表 安装c#IDE的时候出错,朋友们来看看。 comboBox 如何实现下拉列表随输入的内容动态变化? 请教各位,如果想学编写组件,最好应该看什么书籍? 关于水晶报表的周统计问题 100分求助一道简单的编程题目 C#控件问题,TreeView以及ListView和ImageList连用的问题
winform #region 钩子程序
//委托
//public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
//static int hHook = 0;
//public const int WH_KEYBOARD_LL = 13; //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
//HookProc KeyBoardHookProcedure; //键盘Hook结构函数
//[StructLayout(LayoutKind.Sequential)]
//public class KeyBoardHookStruct
//{
// public int vkCode;
// public int scanCode;
// public int flags;
// public int time;
// public int dwExtraInfo;
//} //设置钩子
//[DllImport("user32.dll")]
//public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
//[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//抽掉钩子
//public static extern bool UnhookWindowsHookEx(int idHook);
//[DllImport("user32.dll")]
//调用下一个钩子
//public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam); //[DllImport("kernel32.dll")]
//public static extern int GetCurrentThreadId(); //[DllImport("kernel32.dll")]
//public static extern IntPtr GetModuleHandle(string name);
#endregion #region
//public void Hook_Start()
//{
// // 安装键盘钩子
// if (hHook == 0)
// {
// KeyBoardHookProcedure = new HookProc(KeyBoardHookProc); // //hHook = SetWindowsHookEx(2,
// // KeyBoardHookProcedure,
// // GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId()); // hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
// KeyBoardHookProcedure,
// GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0); // //如果设置钩子失败.
// if (hHook == 0)
// {
// Hook_Clear();
// //throw new Exception("设置Hook失败!");
// }
// }
//} //取消钩子事件
//public void Hook_Clear()
//{
// bool retKeyboard = true;
// if (hHook != 0)
// {
// retKeyboard = UnhookWindowsHookEx(hHook);
// hHook = 0;
// }
// //如果去掉钩子失败.
// if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
//} //这里可以添加自己想要的信息处理 //public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
//{
// if (nCode >= 0)
// {
// KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
// if (kbh.vkCode == 91) // 截获左win(开始菜单键)
// {
// return 1;
// }
// if (kbh.vkCode == 92)// 截获右win
// {
// return 1;
// }
// if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) //截获Ctrl+Esc
// {
// return 1;
// }
// if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+f4
// {
// return 1;
// } // if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete) //截获Ctrl+Alt+Delete
// {
// return 1;
// }
// if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+tab
// {
// return 1;
// } // }
// return CallNextHookEx(hHook, nCode, wParam, lParam);
//}
#endregionweb的话用js来屏蔽<html>
<script>
function KeyDown(){ //屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键
//alert("ASCII代码是:"+event.keyCode);
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←
(window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 →
alert("不准你使用ALT+方向键前进或后退网页!");
event.returnValue=false;
}
if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116)|| //屏蔽 F5 刷新键
(event.keyCode==112)|| //屏蔽 F1 刷新键
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if ((event.ctrlKey)&&(event.keyCode==78)) //屏蔽 Ctrl+n
event.returnValue=false;
if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10
event.returnValue=false;
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽 shift 加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;}
}
function Showhelp(){
alert("呵呵");
return false;
}
</script>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>键盘代码</title>
<style>
<!--
body { font-family: Verdana; color: #000080; font-size: 9pt }
--></style>
</head>
<body onkeydown="KeyDown()" oncontextmenu="event.returnValue=false" onhelp="Showhelp();return false;">
<p align="center">请按键盘</p>
</body>
</html>
private void TBillForm_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar =(char)0;
}
for(;;)
MessageBox.Show("请拔掉你的键盘!");
部分代码:
if (((int)Control.ModifierKeys == ((int)Keys.Control + (int)Keys.Shift))) //Ctrl+Shift
{
return 1;
}