如何用VB实现向其他程序发送字符或文字?

为了减少重复性的输入,我想用VB编程的方式如何实现向Word或记事本等其他程序模拟键盘发送字符或文字,如中华人民共和国Chinese等等,

另请不要仅仅回复使用如Sendkeys等函数,我想要完整源码学习VB,因我认为此程序需使用API,但我对API一窃不通.多谢
多谢“天枫十一郎”的回复

但这些都是声明API,但如何具体应用这些函数呢?即我按一下“CMD”按钮,如何能让此程序向WORD发送“中华人民共和国Chinese”等等字符和文字呢?多谢指教!

多谢“狮儿”的回复:

可能是我写的不清,我的目的减少键盘的手工输入,即先将一些常用字符和文字储存起来,在需向其他程序(不专用于WORD、记事本,还可以是其他如QQ,EXCEL等等程序)输入这些常用字符和文字时,就可以调用这个VB程序来实现输入,免去手工重复地用键盘向其他程序输入字符和文字的无用功。多谢!

楼主的想法实现起来是非常复杂的. 因为QQ已经屏蔽了SendMessage函数, 要使用Hook才能写QQ尾巴. 而API Hook已经远远超出我的知识范围. 就算有高手写出来, 楼主也不一定能看得懂.

而且写这种程序, 还不如直接在某个地方事先输入好常用的语句字符, 然后用键盘复制粘贴(CtrlC CtrlV), 这样也很快捷. 而要写一个所有程序通用的这种输入程序, 还不如用紫光拼音输入法自造词句来得更快, 你说是不是?

-----------------我是分隔线-------------------------------
我写过, 不过代码不在手头上. 如果你要往WORD里写入东西, 那不是用SendMessage的, VB可以与WORD用接口连接, 用类方法实现这种功能. 如果要往记事本等写入文本, 才用SendMessage. 以下代码用于改变标题为"无标题 - 记事本"的记事本窗口的文本. 注意, 是设置, 而不是追加文本. 我忘了追加文本是用什么消息了. 抱歉.

Option Explicit

'取句柄.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Any, ByVal lpsz1 As Any, ByVal lpsz2 As String) As Long

'发消息
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) 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 Const WM_SETTEXT = &HC&

Private Sub Command1_Click()
Dim hWndWindow As Long
Dim hWndEdit As Long
'用FindWindow通过窗口标题取得窗口句柄
hWndWindow = FindWindow(vbNullString, "无标题 - 记事本")
'用findWindowEx通过窗口句柄取得文本框(即"edit")的句柄
hWndEdit = FindWindowEx(hWndWindow, vbNullString, "edit", vbNullString)
'用SendMessage向取得的文本框句柄发送WM_SETTEXT消息
SendMessage hWndEdit, WM_SETTEXT, 0, ByVal "中华人民共和国 Chinese"
End Sub
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-08-03
取句柄 发消息.一向不为问题写手上没有的代码.呵

------------------------

'取句柄.
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Any, ByVal lpsz1 As Any, ByVal lpsz2 As String) As Long

'发消息
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

VB 如何向其它应用程序发送命令
1、用 CreateObject("WScript.Shell").Run "d:\\abc.exe", True 代替 Shell "d:\\abc.exe"2、用API函数FindWindowEx找到千千静听界面上那些“上一曲”、“下一曲”、“暂停”这些按钮的句柄,然后用API函数SendMessage向这些按钮发送按下的消息就行了。

怎样用VB向其他窗口发送字符串
主程序设置一个用于接收文本的TextBox,让你的ActiveX EXE用SendMessage向主程序的TextBox发信息,主程序处理TextBox里的文本就好了~

用VB编写程序向其他程序光标闪动处中输入文字
先在VB中添加一个按钮 在按钮中加入事件 Dim ReturnValue ReturnValue = Shell("NotePad.EXE", 1) ' 在这里打开要运行的程序 AppActivate ReturnValue ' 激活记事本。SendKeys "发送这些字符到记事本", True '

VB如何实现传输语音和文件,我想做个聊天工具
首先,在VB中要传送字符串,你可以这样写:Dim strData As String strData = "Test"Winsock1.SendData strData 但是如果你传送的二进制文件,你还能用String变量来存放吗?从理论上分析是不行的,我也做了实验,确实是不行的。文件虽然可以传,但是接受的文件和发送的不一样,原因可能是二进制文件里...

vb 给其他程序的文本框发送字符 似乎是sendmassege
h1 = FindWindow(vbNullString, "form1")h2 = FindWindowEx(h1, 0, "ThunderTextBox", "")While i <= UBound(data)PostMessage h2, WM_CHAR, data(i), 0 DoEvents i = i + 1 Wend End Sub以上代码是给form1窗口的文本框发送“测试”两个字,注意要用postmessage函数,因为用sendmessage...

VB程序实现向其他程序的TEXT框中输入数据(包括中文)?
2.exe用sendkeys发送字符串,不过前提是1.exe窗体要是当前焦点窗体: sendkeys "我用vb编程" sendkeys "{tab}" sendkeys "123456" 最好在2.exe开启后延迟几秒,然后在sendkeys, 不然1.exe还没获得焦点程序就执行完了。

VB中怎样做一个能向别的地方输入文字的程序?
这个简单啊,比如在光标处输入“baidu”:Sendkeys "baidu"但是问题的难点在于,你要如何通知你的程序在什么时候输出字符串,这个时候你是不能点你的程序的按钮的哦,一点光标就换位置了。这才是你要重点解决的问题。

VB向一个外部程序发送一条字符到指定窗口的指定文本框
先用findwindow找到窗体,用GetWindow和GetClassName获得其窗体内各对象的句柄,从而可以获得文本框的句柄。最后用SendMessage函数想文本框发送文本。tWnd = FindWindow(vbNullString, "窗口名")可以获得外部程序窗口的句柄twnd bwnd = GetWindow(tWnd, GW_CHILD)可以获得该窗口子对象的集合句柄bwnd Do ...

VB 向外部程序文本框发送数据 帮忙看看
从上面的分析我们可以看出,关键在于第二个参数,只要把每次找到的文本框句柄作为第二个参数再次搜索,就能找到下一个文本框啦!比如下面的方法就可以把窗体内的所有文本框全部填上指定的字符:hwd1 = 0 Do hwd1 = FindWindowEx(hwd, hwd1, Text2.Text, vbNullString)If hwd1 = 0 Then MsgBox "...

vb.net 如何操作外部程序?如输入文本..
Thread.Sleep(50)System.Windows.Forms.SendKeys.Send("{tab}")System.Threading.Thread.Sleep(50)System.Windows.Forms.SendKeys.Send("密码")System.Threading.Thread.Sleep(50)System.Windows.Forms.SendKeys.Send("{Enter}")有的时候会出现发送不完全,我也正在寻找更好的方法,多多交流。

相似回答