windows编程如何指定对某一个程序模拟键盘输入?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-30
怎样用c实现一个windows服务程序,在后台模拟键盘输入

需要组件,标签1一个!复制代码:.版本 2.支持库 shellEx.支持库 eAPI.程序集 窗口程序集1.程序集变量 F1按键ABCD, 整数型.子程序 __启动窗口_创建完毕F1按键ABCD = 注册热键 (_启动窗口.取窗口句柄 (), 标签1.取窗口句柄 (), 0, #F1键).子程序 _标签1_反馈事件, 整数型.参数 参数一, 整数型.参数 参数二, 整数型.如果真 (参数一 = F1按键ABCD) 模拟按键 (#A键, #B键, #C键) 模拟按键 (#D键,#F键 , ).如果真结束记得采纳,我是第一个回答的哦

批处理是不行的 用VBS 很简单 例子如下
Set objShell = CreateObject("Wscript.Shell")
do
WScript.Sleep 3000
objShell.SendKeys "{F5}"
WScript.Sleep 3000
objShell.SendKeys "{F5}"
loop




使用 SendKeys 方法可以将键击发送到无自动化界面的应用程序中。多数键盘字符都可用一个键击表示。某些键盘字符由多个键击组合而成(例如,CTRL+SHIFT+HOME)。要发送单个键盘字符,请将字符本身作为 string 参数发送。例如,要发送字母 x,则请发送 string 参数 "x"。

可使用 SendKeys 同时发送多个键击。为此,可将每个键击按顺序排列在一起,以此来创建表示一系列键击的复合字符串参数。例如,要发送键击 a、b 和 c,则需要发送字符串参数 "abc" 。SendKeys 方法将某些字符用作字符的修饰符(而不使用其本身的含义)。这组特殊的字符可包括圆括号、中括号、大括号,以及:

加号 "+"
插入记号 "^"
百分号 "%"
和“非”符号 "~"

用大括号 "{}" 括起这些字符可以发送它们。例如,要发送加号,请使用字符串参数 "{+}"。SendKeys中使用的中括号 "[ ]" 无任何特殊含义,但是必须把它们括在大括号中,以便容纳确实要赋予其特殊含义的应用程序(例如,对于动态数据交换 (DDE) 就是这样)。

要发送左中括号字符,请发送字符串参数 "{[}";要发送右中括号字符,请发送字符串参数 "{]}"。
要发送左大括号字符,请发送字符串参数 "{{}";要发送右大括号字符,请发送字符串参数 "{}}"。

某些键击不生成字符(如 ENTER 和 TAB)。某些键击表示操作(如 BACKSPACE 和 BREAK)。要发送这些类型的键击,请发送下表中列出的参数:

空格键 " "
退格键 {BACKSPACE} 或 {BS} 或 {BKSP}
BREAK {BREAK}
DELETE {DELETE} 或 {DEL}
向下键 {DOWN}
向上键 {UP}
向左键 {LEFT}
向右键 {RIGHT}
END {END}
ENTER {ENTER} 或 ~
ESC {ESC}
TAB {TAB}
CAPS LOCK {CAPSLOCK}
HELP {HELP}
HOME {HOME}
INSERT {INSERT} 或 {INS}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
SCROLL LOCK {SCROLLLOCK}

F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}

要发送由常规键击和 SHIFT、CTRL 或 ALT 组合而成的键盘字符,请创建表示该键击组合的复合字符串参数。可通过在常规键击之前添加一个或多个以下特殊字符来完成上述操作:

SHIFT +
CTRL ^
ALT %

注意:这样使用时,不用大括号括起这些特殊字符。
要指定在按下多个其他键时,按下 SHIFT、CTRL 和 ALT 的组合,请创建复合字符串参数,用括号括起其中的组合键。例如,要发送的组合键指定:

如果在按 e 和 c 的同时按 SHIFT 键,则发送字符串参数 "+(ec)"。
如果在按 e 时只按 c(而不按 SHIFT),则发送字符串参数 "+ec"。
可使用 SendKeys 方法发送一种在一行内重复按键的键击。为此,要创建复合字符串参数,以指定要重复的键击,并在其后指定重复次数。可使用 {键击 数字} 形式的复合字符串参数来完成上述操作。例如,如果要发送 10 次 "x",则需要发送字符串参数 "{x 10}"。请确保在键击和数字之间有一个空格。

注意:只可以发送重复按一个键的键击。例如,可以发送 10 次 "x",但不可发送 10 次 "Ctrl+x"。
注意:不能向应用程序发送 PRINT SCREEN 键 {PRTSC}。


例子1:关机脚本 (模拟按键为:Ctrl + Esc、u、u )

把以下代码复制至记事本,另存为 off.vbs

set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}uu"


例子2:重启脚本 (模拟按键为:Ctrl + Esc、u、r )

把以下代码复制至记事本,另存为 reboot.vbs

set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}ur"


例子3:切换输入法 (模拟同时按下:Shift Ctrl )

set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "+(^)"


例子4:输入 cn-dos.net! 至记事本并保存为 CnDos.txt

Dim WshShell
Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 1500
WshShell.AppActivate "无标题 - 记事本"
WshShell.SendKeys "c"
WScript.Sleep 200
WshShell.SendKeys "n"
WScript.Sleep 200
WshShell.SendKeys "-"
WScript.Sleep 200
WshShell.SendKeys "d"
WScript.Sleep 200
WshShell.SendKeys "o"
WScript.Sleep 200
WshShell.SendKeys "s"
WScript.Sleep 200
WshShell.SendKeys "."
WScript.Sleep 200
WshShell.SendKeys "n"
WScript.Sleep 200
WshShell.SendKeys "e"
WScript.Sleep 200
WshShell.SendKeys "t"
WScript.Sleep 200
WshShell.SendKeys "!"
WScript.Sleep 200
WshShell.SendKeys "%FS"
WScript.Sleep 500
WshShell.SendKeys "C"
WScript.Sleep 200
WshShell.SendKeys "n"
WScript.Sleep 200
WshShell.SendKeys "D"
WScript.Sleep 200
WshShell.SendKeys "o"
WScript.Sleep 200
WshShell.SendKeys "s"
WScript.Sleep 200
WshShell.SendKeys "%S"
WScript.Sleep 500
WshShell.SendKeys "%FX"


例子5:自动定时存盘的记事本(此脚本来自网上)

'第一部分:定义变量和对象
Dim WshShell, AutoSaveTime, TXTFileName
AutoSaveTime=(1000*60*1) '自动存盘时间为1分钟
Set WshShell=WScript.CreateObject("WScript.Shell")
TXTFileName=InputBox("给文本起名(不能用中文和纯数字):")

'第二部分:打开并激活记事本
WshShell.Run "notepad"
WScript.Sleep 200
WshShell.AppActivate "无标题 - 记事本"

'第三部分:用输入的文件名存盘
WshShell.SendKeys "^s"
WScript.Sleep 300
WshShell.SendKeys TXTFileName
WScript.Sleep 300
WshShell.SendKeys "%s"
WScript.Sleep AutoSaveTime

'第四部分:自动定时存盘
While WshShell.AppActivate (TXTFileName)=True
WshShell.SendKeys "^s"
WScript.Sleep AutoSaveTime
Wend
WScript.Quit


例子:

set objShell = CreateObject("Wscript.Shell")
strCommandLine = "psetup755281.exe" '启动安装程序
objShell.Run(strCommandLine)
set WshShell = CreateObject("WScript.Shell")
WScript.Sleep 2000 '延时3秒
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 300 '延时3秒
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 300 '延时3秒
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 5200 '延时3秒
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 300 '延时3秒
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 300 '延时3秒
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 200
WshShell.SendKeys " " '模拟按下空格键去除安装百度超级搜霸一行前的√号
WScript.Sleep 100
WshShell.SendKeys "{TAB}" '模拟按下 Tab 键选择安装项目
WScript.Sleep 200
WshShell.SendKeys " " '模拟按下空格键去除安装百度超级搜霸一行前的√号
WScript.Sleep 200 '延时0.3秒
WshShell.SendKeys "f" '模拟按下 F键同意协议

可以用普通的C语言来写。调用User32.lib
的函数:
void keybd_event(BYTE bVirturalKey,BYTE bScanCode,
DWORD dwFlags,DWORD dwExtraInfo)
ctrl 键是 VK_CONTROL bScanCode = 0x9d
shift键是 VK_SHIFT 0xaa
揿键是 0,0
键弹上来是:KEYEVENTF_KEYUP,0

例如simu_keyboard.c程序,模拟 Alt-PrintScreen,把屏幕图像放入剪切板。

头文件:
#include <Windows.h>
#include <Winuser.h>
#include <stdio.h>
#include <stdlib.h>

/* ----------------------------------
simulation of Alt-PrintScreen
to get current Window image in clipboard
* -----------------------------------*/
void snapwin_2_clipboard()
{
keybd_event(VK_LMENU,0xA4,0,0); // 揿 Alt
keybd_event(VK_SNAPSHOT,0x2C,0,0); // 揿 PrintScreen
keybd_event(VK_SNAPSHOT,0x2C,KEYEVENTF_KEYUP,0); // 键弹上
keybd_event(VK_LMENU,0xA4,KEYEVENTF_KEYUP,0); // 键弹上
}

void main()
{
(void) snapwin_2_clipboard();
exit(0);
}

编译命令: cl simu_keyboard.c user32.lib
运行:simu_keyboard.exe
用任何图像编辑软件中的Edit-paste 可贴剪切板里的内容了。

  • windows编程如何指定对某一个程序模拟键盘输入?
    答:可以用普通的C语言来写。调用User32.lib 的函数:void keybd_event(BYTE bVirturalKey,BYTE bScanCode,DWORD dwFlags,DWORD dwExtraInfo)ctrl 键是 VK_CONTROL bScanCode = 0x9d shift键是 VK_SHIFT 0xaa 揿键是 0,0 键弹上来是:KEYEVENTF_KEYUP,0 例如simu_keyboard.c程序,模拟 Alt-Print...
  • windows编程如何指定对某一个程序模拟鼠标输入?
    答:先用FindWindow()获取程序的句柄.然后SendMessage(句柄,消息,参数1,参数2)给程序发送消息!
  • C# Windows编程 窗体编程 如何在一个窗体中对另一个窗体进行操作??
    答:1)修改RichtTextBox属性,将Modifiers改为Public 2)在窗体2的后台代码中增加一个新的构造函数:public partial class Form2 : Form { //保存对Form1实例的引用 Form1 form1; //原来的构造函数 public Form2() { InitializeComponent(); } //新构造函数 public For...
  • 如何在Windows环境下编程C语言??
    答:Repl.it CodeChef Jdoodle 使用在线编程环境的步骤通常是:在网站上注册一个帐户。创建一个新的 "项目"。选择 C 语言作为您的项目的编程语言。在编辑器中编写您的 C 代码。使用网站提供的编译器编译代码。运行您的程序并查看输出。您也可以使用解释器来运行 C 代码。例如,您可以使用 CINT 解释器将 C...
  • 哪位朋友可以帮我详细介绍一下某一个具体windows小程序的编程的具体步...
    答:1,先写一个winmain函数,定义一个窗口类的对象(wndclass)2,初始化该窗口对象的参数 3,调用windowcreate函数,创建窗口 4,调用showwindow函数,updatewindow函数 5,再写窗口过程函数 最简单的window程序 include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR sz...
  • 编程中2如何解决右顺序对齐菜单的问题?
    答:Visual Basic环境不支持直接指定、创建右顺序对齐菜单,必须通过编程实现。根据MSDN对菜单信息数据结构、相关API函数的解释,可概括出实现这项功能的四个步骤或称具体程序流程:1.定义菜单信息数据结构MenuItemInfo全局对象;2.用GetMenuItemInfo API函数取得指定的菜单信息,并将信息存放于定义的MenuItemInfo...
  • 如何用Windows API编写一个简单程序
    答:Windows API是Windows应用程序编程的核心,今天就告诉大家如何使用Windows API编写一个Hello World类型的程序吧。 1.首先打开文本编辑器,输入下面的代码: #include int main() { MessageBox(NULL,"Hello","World",MB_OK); return 0; } 2.上面代码中的MessageBox函数是弹出一个对话框。...
  • 如何用VB编程实现点击windows窗口上的“确定”键
    答:楼主说的有点不太明白.你是想建一个还是让程序自己找"开始"?如果是前者,楼上也说了.用VB6.0新建一个工程然后再再放一个BUTTON控件又击就行了.如果是后者.那么可以用WINDOWS自带的功能(控制面板中打印机和其它硬件中鼠标设置打开切换到指针选项在自动移动到默认前打上对号就O了),再一个就是用API...
  • 在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库...
    答:Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:Winsock 1:Windows CE平台支持。头文件:WinSock.h 库:wsock32.lib Winsock 2:部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup...
  • C#语言的第4版中,如何通过Windows应用程序进行编程?
    答:在编程的世界里,C#中文版(第4版)</是一本深入解析C#语言和.NET框架的实用指南。它涵盖了多个章节,帮助你逐步掌握C#编程的各个方面。首先,第1部分</专注于C#语言基础。第1章介绍C#与.NET框架的紧密联系,为你铺开编程旅程的序幕。接着,第2章</带领你以经典的"HelloWorld"程序开始实践,感受C#...