网站建设资讯

NEWS

网站建设资讯

vb.net中键盘输入 vb模拟键盘输入

VB.net 我的程序只有一个窗体,窗体很小,怎么才能检测到鼠标在窗体以外的范围移动,还有键盘输入

用API GetCursorPos  

创新互联公司主营庐阳网站建设的网络公司,主营网站建设方案,重庆App定制开发,庐阳h5微信平台小程序开发搭建,庐阳网站营销推广欢迎庐阳等地区企业咨询

用Timer隔一段时间获取一次鼠标位置。

键盘输入,用 GetKeyboardState

加点分的话就给你完整的代码

Public Class NativeMethods

'获取鼠标位置

Declare Function GetCursorPos Lib "user32.dll" _

(ByRef lpPoint As System.Drawing.Point) as boolean

Private Shared keyState() As Byte

DllImport("user32.dll") _

Private Shared Function GetKeyboardState(ByVal keyState() As Byte) As Boolean

End Function

Private Shared Sub Update()

keyState = New Byte(256) {}

Dim result As Boolean = GetKeyboardState(keyState)

' Check for error:

If result = False Then

Debug.WriteLine("GetKeyBoardState error: "  Marshal.GetLastWin32Error)

Throw New Exception("GetKeyBoardState error: "  Marshal.GetLastWin32Error)

End If

End Sub

Public Enum LightState

Off

[On]

End Enum

' Example - the keyboard lights...

Public Shared ReadOnly Property CapsLockState() As LightState

Get

Update()

Dim isOn As Boolean = (keyState(Keys.CapsLock) = 1)

Return IIf(isOn, LightState.On, LightState.Off)

End Get

End Property

Public Shared ReadOnly Property NumLockState() As LightState

Get

Update()

Dim isOn As Boolean = (keyState(Keys.NumLock) = 1)

Return IIf(isOn, LightState.On, LightState.Off)

End Get

End Property

Public Shared ReadOnly Property ScrollLockState() As LightState

Get

Update()

Dim isOn As Boolean = (keyState(Keys.Scroll) = 1)

Return IIf(isOn, LightState.On, LightState.Off)

End Get

End Property

End Class

pinvoke.net: GetCursorPos (user32)

pinvoke.net: GetKeyboardState (user32)

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

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

/定义变量

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从键盘输入两个正数,求最大公约数~怎么作?最好给个中文说明!

程序调试通过,附上截图。代码如下,欢迎交流。

采用的方法是辗除法。

’-------------------------------------

Public Class Form1

Private Sub test()

Dim a As Integer

Dim b As Integer

Try

a = CInt(TextBox1.Text)

b = CInt(TextBox2.Text)

Catch ex As Exception

MsgBox(ex.Message)

Exit Sub

End Try

Dim r As Integer = findTheNumber(a, b)

TextBox3.Text = r.ToString

End Sub

Private Function findTheNumber(ByVal a As Integer, ByVal b As Integer) As Integer

If a  b Then

Dim temp As Integer = a

a = b

b = temp

End If

'辗除法

Dim temp_a As Integer

While b  0

temp_a = a Mod b

a = b

b = temp_a

End While

Return a

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

test()

End Sub

End Class

VB.net 中如何获取键盘输入的ASCii码

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If Asc(0) Then

textbox1.text="0"

end if

end sub


网站名称:vb.net中键盘输入 vb模拟键盘输入
分享链接:http://njwzjz.com/article/doiigdg.html