用VB 向指定的程序窗口发键盘事件该如何编写?

比如CS 里 任务 前后左右 移动
但是切换到别的窗口 ,按键仍然有效,如何把这个模拟的键盘事件 只发给 这个窗口.
谢谢你的 回答,但是 可不可以再详细点.

还是没明白^ APPACTIVATE 这个只是激活窗口到最顶层了, 如果这个窗口在后台,模拟的事件还是 在当前的窗口上了……

以下方法供参考

方法1: 用 SendKeys 语句
AppActivate "接收键盘事件的窗口标题" ' 激活指定窗口
SendKeys "A", True '发送字符 A

方法2: 用 API 函数
这个方法实现起来较复杂,给你一个思路:
用 FindWindow 查找特定标题的窗口,获得该窗口的句柄,用 SendMessage 向该窗口发送键盘消息。
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-15
Option Explicit

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const WM_SETFOCUS = &H7
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2

Private Sub KeyDown(ByVal vKey As Long) '用keybd_event模拟按下键盘
keybd_event vKey, 0, KEYEVENTF_EXTENDEDKEY, 0
End Sub

Private Sub KeyUp(ByVal vKey As KeyCodeConstants) '用keybd_event模拟松开键盘
keybd_event vKey, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End Sub

Private Function SendKeyToWnd(MainWnd As Long, vbkey, Shift) As Boolean
SetForegroundWindow MainWnd
SendMessage MainWnd, WM_SETFOCUS, 0&, 0& '选中按钮
If Shift Then KeyDown Shift
KeyDown vbkey
Sleep 100
KeyUp vbkey
If Shift Then KeyUp Shift
End Function

Private Sub Form_Load()
'向指定的程序窗口发键盘事件
SendKeyToWnd 目标窗口的hwnd, 命令, 复合键
End Sub本回答被提问者采纳
第2个回答  2008-09-15
建一个Command1。我以计算器为例。
代码如下。
============
Private Sub Command1_Click()
Dim t As Long
t = Shell("calc")
AppActivate t
SendKeys "123"
End Sub

用VB 向指定的程序窗口发键盘事件该如何编写?
方法1: 用 SendKeys 语句 AppActivate "接收键盘事件的窗口标题" ' 激活指定窗口 SendKeys "A", True '发送字符 A 方法2: 用 API 函数 这个方法实现起来较复杂,给你一个思路:用 FindWindow 查找特定标题的窗口,获得该窗口的句柄,用 SendMessage 向该窗口发送键盘消息。Declare Function FindWind...

vb如何对指定窗口发送按键消息?
如果对普通的窗口发送就直接sendkeys,如果对高级一点的窗口发就用KEYBOARD_EVENT这个API函数,如果对高级游戏窗口发送按键消息一般就要用到驱动级WINIO模拟按键了,不知道你想用哪种我给一个keyboard_event函数模拟键盘按键的代码吧通用部分声明:Private Declare Sub keybd_event Lib "user32" (ByVal bVk ...

如何用VB编写一个向指定窗口发送键盘命令的程序?
具体定义 Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)keybd_event 17, vbNull, &H2, vbNull 17 是要模拟的按键 17 是 ctrl 键 &H2模拟按键的动作 &H2是按下...

VB编写按键程序.
简单说,这个命令就是模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,其使用格式为:object.SendKeys string "object":表示WshShell对象 "string":表示要发送的按键指令字符串,需要放在英文双引号中.1.基本键 一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要...

请问如何用VB程序来模拟键盘操作
ws.sendKeys "^{esc}r"VBS中SendKeys的基本应用模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,其使用格式为:object.SendKeys string “object”:表示WshShell对象 “string”:表示要发送的按键指令字符串,需要放在英文双引号中。1.基本键 一般来说,要发送的按键指令都...

VB sendkey可以向指定窗口发送消息吗?如果可以,怎么实现?
可以的,比如先启动计算器,再在VB中运行下面的代码即可向计算器中输入数字:AppActivate "计算器"SendKeys "1234"不过一般来说这个只能实现简单的功能,如果要想实现复杂一些的操作(比如向处于后台运行状态的窗口发送按键消息,并且不影响前台的键盘操作),就要借助API函数了,而且代码量也比较大。

如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键?
因为应用程序顶层窗口不一定就是接受按键的窗口(如“NotePad.exe”记事本程序,实际接受按键的窗口是Notepad主窗口下的Edit控件),可以通过ClassID或Caption来查找。假设目标窗口的句柄已取得(hwnd),然后要用PostMessage向该窗口发送按键消息,对于普通字符键,直接用WM_CHAR消息最简单,如下:PostMessage ...

VB事件的键盘事件
键盘事件主要有以下几种:(1)KeyDown:当键盘上某键被按下去时发生。(2)KeyUp:键盘上的键抬起来时发生。(3)KeyPree:此事件发生在键盘被按下后和字符被显示出来之前发生。对于键盘事件,相对来说KeyDown事件和KeyUp事件使用比较少,通常情况下对KeyPress事件编程较多,因为此事件注重键盘被按下的是...

vb postmessage 中 怎么向某窗口发送 ctrl+F
如果那个窗口是前台窗口的话,可以这样做,用keybd_event函数来模拟键盘 === 仔细研究了下这个问题,向后台发送单键可以,发送组合键只能发送alt+x这种,ctrl的shift的都不行 alt+V的发法:Private Sub Command4_Click()SendMessage Command2.hWnd, BM_CLICK, 0, 0 End Sub Private Sub Text1_Key...

求VB用向其他程序发送键值的方法!
SendKeys 语句 将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。语法 SendKeys string[, wait]SendKeys 语句的语法具有以下几个命名参数:部分 描述 string 必需的。字符串表达式,指定要发送的按键消息。Wait 可选的。指定等待方式的 BooleandefBooleanDataType@veendf98.chm 值。如果...

相似回答