vb.net中keys vbnet c#

vb.net 获取键盘输入的字符

参考方法如下,具体解释已经注解在代码中;

创新互联是专业的荔城网站建设公司,荔城接单;提供做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行荔城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

/定义变量

public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);

static int hKeyboardHook = 0;

HookProc KeyboardHookProcedure;

/*************************

* 声明API函数

* ***********************/

// 安装钩子 (using System.Runtime.InteropServices;)

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]

public static extern int SetWindowsHookEx(int idHook,HookProc lpfn, IntPtr hInstance, int threadId);

// 卸载钩子

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

// 继续下一个钩子

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);

// 取得当前线程编号(线程钩子需要用到)

[DllImport("kernel32.dll")]

static extern int GetCurrentThreadId();

//钩子子程:就是钩子所要做的事情

private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)

{

if (nCode = 0)

{

/****************

//线程键盘钩子判断是否按下键

Keys keyData = (Keys)wParam;

if(lParam.ToInt32() 0)

{

// 键盘按下

}

if(lParam.ToInt32() 0)

{

// 键盘抬起

}

****************/

/****************

//全局键盘钩子判断是否按下键

wParam = = 0x100 // 键盘按下

wParam = = 0x101 // 键盘抬起

****************/

KeyMSG m = (KeyMSG) Marshal.PtrToStructure(lParam, typeof(KeyMSG));//键盘

// 在这里添加你想要做是事情(比如把键盘nCode记录下来,搞个邮件发送程序发到自己的邮箱去)

return 0;//如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者

}

return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);

}

//键盘结构

public struct KeyMSG

{

public int vkCode; //键值

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

}

// 安装钩子

public void HookStart()

{

if(hKeyboardHook == 0)

{

// 创建HookProc实例

KeyboardHookProcedure = new HookProc(KeyboardHookProc);

// 设置线程钩子

hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);

//************************************

//键盘线程钩子

//SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId()); //GetCurrentThreadId()为要监视的线程ID,你完全可以自己写个方法获取QQ的线程哦

//键盘全局钩子,需要引用空间(using System.Reflection;)

//SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);

//

//关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数:

//idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13,

//线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。

//

//lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可

//以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。

//

//hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子程代码位于当前

//进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。

//

//threadedId 与安装的钩子子程相关联的线程的标识符。如果为0,钩子子程与所有的线程关联,即为全局钩子。

//************************************

// 如果设置钩子失败

if(hKeyboardHook == 0 )

{

HookStop();

throw new Exception("SetWindowsHookEx failed.");

}

}

}

// 卸载钩子

public void HookStop()

{

bool retKeyboard = true;

if(hKeyboardHook != 0)

{

retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

hKeyboardHook = 0;

}

if (!( retKeyboard))

throw new Exception("UnhookWindowsHookEx failed.");

}

vb.net 方向键不能触发 keydown 事件

某些键,如 Tab、Return、Esc 和箭头键,由控件自动处理。所以当你的窗体添加了其它控件如按钮,checkbox等,form的keydown事件就触发不了,为使这些键引发窗体的KeyDown事件,你需要重写form.ProcessDialogKey函数,这个函数可以在消息预处理期间 处理对话字符,例如TAB、RETURN、ESCAPE和箭头键等,以下是我重写了这个事件来处理方向键,你需要把它放到你的代码里:

Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean

If keyData = Keys.Left Or keyData = Keys.Right Or keyData = Keys.Up Or keyData = Keys.Down Then

Return False'如果是方向键返回FALSE,意思是继续执行form的keydown事件.

Else

Return MyBase.ProcessDialogKey(keyData)

End If

End Function

vb.net的,按键连续触发事件,比如,按着键不放,音量增大。

1.定义变量记录键是否被按下,按下的累计时间

Dim 按下A键  As Boolean

Dim 按下A键时间 As Integer

2.添加一个TextBox1用于接收键盘事件,或者直接用窗体的键盘事件(确保KeyPreview为True)

在KeyDown事件中添加如下代码:

If e.Keycode = keys.A Then 按下A键 = True

在KeyUp事件中添加如下代码:

If e.Keycode = keys.A Then 按下A键 = False

3.添加一个Timer1控件,调整Timer1的Interval来决定按键频率,记得要把Timer1.Enable开启

在Tick事件中添加如下代码:

If 按下A键 = True

按下A键时间+=1

Call 音量设置(按下A键时间 * 10)

End If

PS: 按下的秒数 = 按下A键时间*Timer1.Interval / 1000

vb.net中如何执行键盘事件?

执行键盘事件方法如下:

第一步,点击VS工具。

第二步,打开后,新建一个Windows窗体应用程序。

第三步,请看右下方Form的属性栏。

第四步,双击KeyDown。

第五步,输入提示按键代码,如图所示。

第六步,再次输入代码,设置属性KeyPreview为true。

第七步,运行程序,按下举例F5,则会弹出提示,表明已经成功获。

vb.net编写的程序屏蔽系统热键

使用VB.net编写屏蔽热键的方法有很多中,比如说使用系统的API函数,也可以使用钩子来进行屏蔽.还有一种就是.net带的一种方法,首先来判断所按下去的键,然后再执行操作等事件.比如说:if (e.keycode==keys.D){e.handle=true}在keydown事件里面处理!这样就可以屏蔽了D键. 实例:if ((Control.ModifierKeys == Keys.Alt) (e.KeyCode == Keys.F4))

{

e.Handled = true;

}还有一种办法就是不通过屏蔽热键来实现,就是通过设置焦点.你可以把你程序窗口设置为主焦点,这样其他程序一般就无法在你的程序前面了.实现屏蔽的作用.至于任务管理器的话可以通过杀掉进程的办法做到.如下: Process[] p = Process.GetProcesses(); foreach (Process p1 in p)

{

try

{

if (p1.ProcessName.ToLower().Trim() == "taskmgr")//这里判断是任务管理器

{

p1.Kill();

return;

}

}

catch

{

return;

}

}}以上是使用C#编写的,稍微改下就可以了,在,NET里面都差不多!

vb.net中使用sendkeys无效?

vb.net中使用sendkeys无效,是因为窗口没有处于活动状态。

VB6的SendKeys有时有些问题,比如打开任务管理器,以下代码可以:

Sub main()

Dim WshShell As Object

Set WshShell = CreateObject("WScript.Shell")

WshShell.SendKeys "^+{ESC}"

End Sub

以下代码却不可以:

Sub main()

SendKeys "^+{ESC}"

End Sub

所以最好使用WScript.Shell中的SendKeys。


文章名称:vb.net中keys vbnet c#
文章路径:http://myzitong.com/article/hghehc.html