刚接触这样的问题不知道有什么好方法解决!
比如计算机机房管理的时候 要刷卡才能上机,刷卡后要利用用户登陆才能使用计算机,这样就要屏蔽一些热键,如 ctrl+alt+del 要不然可以饶过这样的阻碍。
由于刚接触,不知道怎么弄。一开始我是在c#.net里 我利用在form里根据 按键 的事件下判断按键的 ascii是多少,再决定做什么事情。但是好象有什么 勾子函数 hook 不知道怎么使用。找的资料也不合自己的意愿。
请高手赐教!提供一些资料例题,代码。
比如计算机机房管理的时候 要刷卡才能上机,刷卡后要利用用户登陆才能使用计算机,这样就要屏蔽一些热键,如 ctrl+alt+del 要不然可以饶过这样的阻碍。
由于刚接触,不知道怎么弄。一开始我是在c#.net里 我利用在form里根据 按键 的事件下判断按键的 ascii是多少,再决定做什么事情。但是好象有什么 勾子函数 hook 不知道怎么使用。找的资料也不合自己的意愿。
请高手赐教!提供一些资料例题,代码。
解决方案 »
- 有没有大神可以处理检测sql错误行数的编程
- 在网上看到一种排序算法,我是菜鸟,弱弱的问下高手
- 我给出代码,请高手来个排序,要冒泡的排序
- DirectX 播放视频时能不能控制播放速度?
- 为什么在一个有10000个节点的TreeView中, 更改节点的名称很慢, 而更改节点的颜色确很快
- 介个可以算敏捷开发咩?人家说标题要长。。。。。。
- eWebEditor这软件的作用是不是我做好网站挂上去后,能随时更改html页面?
- 错误处理问题
- 江湖救急,请教TabControl的标签页调整问题
- 用C#做的window软件可以在什么系统下运行,需要机器安装什么吗?
- 怎么利用程序将数据保存到Excel中,并且生成相应的统计图啊(大家帮忙看看,分不够继续加!!!)
- 请问如何在填充datagrid时,根据需要调整列标题,和列宽!
using System.Runtime.InteropServices;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
namespace HookTest
{
/// <summary>
/// Hook 的摘要说明。
/// </summary>
public class Hook
{
public Hook()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
// 安装钩子
public const int WH_KEYBOARD = 13;
public const int WH_MOUSE_LL = 14; [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] 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",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); // 取得当前线程编号 [DllImport("kernel32.dll")]
static extern int GetCurrentThreadId(); //定义委托
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
static int hKeyboardHook = 0;
HookProc KeyboardHookProcedure; //处理
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { KeyMSG m = (KeyMSG) Marshal.PtrToStructure(lParam, typeof(KeyMSG));
if ((int) m.vkCode == 91) { //textbox1.Text = “A”
//MessageBox.Show(wParam.ToString(),"dd");
return 1; }
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
// 安装钩子
public void HookStart() { if(hKeyboardHook == 0) { // 创建HookProc实例 KeyboardHookProcedure = new HookProc(KeyboardHookProc); // 设置线程钩子 //hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHookProcedure, IntPtr.Zero, // GetCurrentThreadId());
hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD,KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0); // 如果设置钩子失败 if(hKeyboardHook == 0 ) { HookStop(); throw new Exception("SetWindowsHookEx failedeeeeeeee."); } } } // 卸载钩子 public void HookStop() { bool retKeyboard = true; if(hKeyboardHook != 0) { retKeyboard = UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; } if (!(retKeyboard))
{
throw new Exception("UnhookWindowsHookEx failedsssss.");
}
}
public struct KeyMSG { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; }
}
}
你可以改一下改成你需要的使用的时候
直接调用 HookStart()即可
对于你的需求,我想用微软的智能卡SDK就可以了
Ctrl + Alt + Del应该是任何应用程序不能截获、拦截、屏蔽的。
这个代码是Borland C++Builder 6.0 Patch4下编写的,用是线程注入
如果搂住需要的话
留个邮箱
我发给你
我用C#调用了,并成功了
那就麻烦你了
我现在遇了一些麻烦
总解决不好