如何使用VB.NET使用PostMessage或者SendMessage发送中文到另外一个程序
答案:3 悬赏:40
解决时间 2021-03-03 20:04
- 提问者网友:泪痣哥哥
- 2021-03-02 19:05
如何使用VB.NET使用PostMessage或者SendMessage发送中文到另外一个程序
最佳答案
- 二级知识专家网友:十年萤火照君眠
- 2021-03-02 19:33
中文的要转为 byte
下面不管是中、英文都可以用
Dim chars As Char() = TextBox1.Text.ToUpper().ToCharArray()
For i As Integer = 0 To chars.Length - 1
Dim Stbyte As Byte() = System.Text.Encoding.Unicode.GetBytes(chars(i))
PostMessageA(hWnd, WM_CHAR, Stbyte, 0)
Next追答
追问:你好,感谢您的回复。。。按您的修改后提示出错。。。
错误1类型“Byte 的 1 维数组”的值无法转换为“Byte”。
WM_CHAR, Stbyte, 0)这个位置的出错了
追答:把PostMessageA 的api 修改一下 ByVal wParam As byte()
Declare Function PostMessage Lib "USER32.DLL" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As byte(), ByVal lParam As Integer) As Integer
追问:您好,由衷感谢您的回复,按您的引用改好可以执行了,但是传过去的是乱码,我自己也查了一下chars(I)做循环的时候是正确的汉字,但是传过去后就乱了,是否转码之类的有问题呢?或者还是不应该使用WM_CHAR这个参数。。还望不吝赐教。。
追答:WM_CHAR 对应的只是字符,字符是指的0-127内的ASCII码。
改一下WM_IME_CHAR
或
加一句试一下
Declare Function PostMessage Lib "USER32.DLL" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As string, ByVal lParam As Integer) As Integer
Dim chars As Char() = TextBox1.Text.ToUpper().ToCharArray()
For i As Integer = 0 To chars.Length - 1
PostMessageA(hWnd, WM_IME_CHAR, chars(i), 0)
‘ PostMessageA(hWnd, 258, chars(i), 0)
Next
下面不管是中、英文都可以用
Dim chars As Char() = TextBox1.Text.ToUpper().ToCharArray()
For i As Integer = 0 To chars.Length - 1
Dim Stbyte As Byte() = System.Text.Encoding.Unicode.GetBytes(chars(i))
PostMessageA(hWnd, WM_CHAR, Stbyte, 0)
Next追答
追问:你好,感谢您的回复。。。按您的修改后提示出错。。。
错误1类型“Byte 的 1 维数组”的值无法转换为“Byte”。
WM_CHAR, Stbyte, 0)这个位置的出错了
追答:把PostMessageA 的api 修改一下 ByVal wParam As byte()
Declare Function PostMessage Lib "USER32.DLL" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As byte(), ByVal lParam As Integer) As Integer
追问:您好,由衷感谢您的回复,按您的引用改好可以执行了,但是传过去的是乱码,我自己也查了一下chars(I)做循环的时候是正确的汉字,但是传过去后就乱了,是否转码之类的有问题呢?或者还是不应该使用WM_CHAR这个参数。。还望不吝赐教。。
追答:WM_CHAR 对应的只是字符,字符是指的0-127内的ASCII码。
改一下WM_IME_CHAR
或
加一句试一下
Declare Function PostMessage Lib "USER32.DLL" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As string, ByVal lParam As Integer) As Integer
Dim chars As Char() = TextBox1.Text.ToUpper().ToCharArray()
For i As Integer = 0 To chars.Length - 1
PostMessageA(hWnd, WM_IME_CHAR, chars(i), 0)
‘ PostMessageA(hWnd, 258, chars(i), 0)
Next
全部回答
- 1楼网友:玩世
- 2021-03-02 21:41
如果推中文是乱码,那你应该把中文转成UTF-8来推。
追问:您好,谢谢您的回复,我试了UTF8,也是乱码。不知道何故,例如这样。。。
Dim Stbyte As Byte() = System.Text.Encoding.UTF8.GetBytes(chars(i))
追答:实在不行的话,把中文字符串先拷贝,然后发送“粘帖”命令
追问:您好,谢谢您的回复,我试了UTF8,也是乱码。不知道何故,例如这样。。。
Dim Stbyte As Byte() = System.Text.Encoding.UTF8.GetBytes(chars(i))
追答:实在不行的话,把中文字符串先拷贝,然后发送“粘帖”命令
- 2楼网友:行路难
- 2021-03-02 20:55
执行文件5秒后向光标处发送中文,所以执行文件后赶紧设置光标位置,好像只能发送几个字符,可以多发送几次
Imports System.Threading
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
System.Threading.Thread.Sleep(5000)
SendKeys.Send("发送中文")
End Sub
End Class
Imports System.Threading
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
System.Threading.Thread.Sleep(5000)
SendKeys.Send("发送中文")
End Sub
End Class
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯