| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5231 人关注过本帖
标题:用c#如何屏蔽键盘的输入功能
只看楼主 加入收藏
longlongjiaz
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2006-11-11
收藏
 问题点数:0 回复次数:11 
用c#如何屏蔽键盘的输入功能
我在做一个小程序,希望使用计算机中的软键盘,屏蔽键盘的输入,急!!
搜索更多相关主题的帖子: 键盘 功能 输入 
2006-11-13 09:23
CrazyWeed0907
Rank: 2
等 级:新手上路
威 望:5
帖 子:1385
专家分:0
注 册:2006-5-30
收藏
得分:0 
用键盘钩子屏蔽键盘

“十步杀一人,千里不留行。事了拂衣去,深藏身与名。”
2006-11-13 10:44
skyland84
Rank: 2
等 级:新手上路
威 望:4
帖 子:544
专家分:0
注 册:2006-10-9
收藏
得分:0 
以下是引用CrazyWeed0907在2006-11-13 10:44:55的发言:
用键盘钩子屏蔽键盘

什么是键盘钩子?


决定人生~
2006-11-13 14:10
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
hook

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-11-13 14:31
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 

不过好像很精深哦.我都找了很久了,都没找到个什么好的东西.


飘过~~
2006-11-13 19:45
冷雪无痕
Rank: 1
等 级:新手上路
帖 子:125
专家分:0
注 册:2006-8-30
收藏
得分:0 


以下是我复制过来的,实现的效果是当用户在TextBox中输入 b 的时候,TextBox 始终显示 a

你把MyHookProc函数改一下就可以了,

IntPtr MyHookProc(int code, IntPtr wparam, IntPtr lparam)

{

if( code < 0 ) return CallNextHookEx(_nextHookPtr,code, wparam, lparam); //返回,让后面的程序处理该消息

return (IntPtr) 1; //直接返回了,该消息就处理结束

}




实现过程:

1、新建一个C#的WindowsApplication

2、在Form1中,添加下面一些变量:

internal enum HookType //枚举,钩子的类型

{

//MsgFilter = -1,

//JournalRecord = 0,

//JournalPlayback = 1,

Keyboard = 2,

//GetMessage = 3,

//CallWndProc = 4,

//CBT = 5,

//SysMsgFilter = 6,

//Mouse = 7,

//Hardware = 8,

//Debug = 9,

//Shell = 10,

//ForegroundIdle = 11,

//CallWndProcRet = 12,

//KeyboardLL = 13,

//MouseLL = 14,

};

IntPtr _nextHookPtr; //记录Hook编号


3、在Form1中引入必须的API

[DllImport("kernel32.dll")]
static extern int GetCurrentThreadId(); //取得当前线程编号的API

[DllImport("User32.dll")]

internal extern static void UnhookWindowsHookEx(IntPtr handle); //取消Hook的API

[DllImport("User32.dll")]

internal extern static IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProc lpfn, IntPtr hinstance, int threadID); //设置Hook的API

[DllImport("User32.dll")]

internal extern static IntPtr CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam); //取得下一个Hook的API

4、声明一个实现的委托

internal delegate IntPtr HookProc(int code, IntPtr wparam, IntPtr lparam);

5、添加自己的Hook处理过程

IntPtr MyHookProc(int code, IntPtr wparam, IntPtr lparam)

{

if( code < 0 ) return CallNextHookEx(_nextHookPtr,code, wparam, lparam); //返回,让后面的程序处理该消息

if( wparam.ToInt32() == 98 || wparam.ToInt32() == 66 ) //如果用户输入的是 b

{

this.textBox1.Text = "a";

return (IntPtr) 1; //直接返回了,该消息就处理结束了

}

else

{

return IntPtr.Zero; //返回,让后面的程序处理该消息

}

}

6、添加加入Hook链和从Hook链中取消的函数

public void SetHook()

{

if( _nextHookPtr != IntPtr.Zero ) //已经勾过了

return;

HookProc myhookProc = new HookProc(MyHookProc); //声明一个自己的Hook实现函数的委托对象

_nextHookPtr = SetWindowsHookEx((int)HookType.Keyboard, myhookProc , IntPtr.Zero , GetCurrentThreadId()); //加到Hook链中

}

public void UnHook()

{

if( _nextHookPtr != IntPtr.Zero )

{

UnhookWindowsHookEx(_nextHookPtr); //从Hook链中取消

_nextHookPtr = IntPtr.Zero;

}

}

7、在Form1的Load事件中添加 SetHook() , 在Form1的closing 事件中添加 UnHook()

private void Form1_Load(object sender, System.EventArgs e)

{

SetHook();

}

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

UnHook();

}


<<奇迹>> 如果 这个世界 真的有奇迹 那么 你我所各自站立的土地 能否合二为一
2006-11-13 20:48
ruihua
Rank: 1
等 级:新手上路
威 望:1
帖 子:235
专家分:0
注 册:2006-2-21
收藏
得分:0 
设置e.Handel就可以吧

2006-11-14 15:05
冷雪无痕
Rank: 1
等 级:新手上路
帖 子:125
专家分:0
注 册:2006-8-30
收藏
得分:0 
我试了一下,不行啊.不知道是不是我不会搞
楼上的朋友可以说说具体实现的代码吗

<<奇迹>> 如果 这个世界 真的有奇迹 那么 你我所各自站立的土地 能否合二为一
2006-11-14 21:03
longlongjiaz
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2006-11-11
收藏
得分:0 
具体一点

2006-11-15 14:36
ruihua
Rank: 1
等 级:新手上路
威 望:1
帖 子:235
专家分:0
注 册:2006-2-21
收藏
得分:0 
比如屏蔽数字键:
e.Handled = (e.KeyChar <'0' || e.KeyChar >'9') && (e.KeyChar != (char)8);

2006-11-15 16:08
快速回复:用c#如何屏蔽键盘的输入功能
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018781 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved