vb如何控制其他程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb如何控制其他程序?相关的知识,希望对你有一定的参考价值。

比如在其他软件的输入框里输入,或者点按钮。
好像要句柄?怎么弄啊
谢谢

可以用clswindow框架,相关方法:

SetElementTextByText 函数


SetElementTextByClassName 函数

ClickElementByText 函数

ClickElementByClassName 函数

参考技术A 要用到API函数,获取句柄可以用findwindow和findwindowex,输入信息可以用setwindowlong
如果没有接触过会很麻烦。。。本人正在努力自学中本回答被提问者和网友采纳
参考技术B 同意一楼的 百度下 API函数的第一课 是关闭其他窗口的 参考技术C 要用到API函数 共计600多个字呢?好难写呢?

如何使用 VB.net 获取 Windows 控制台应用程序的文本?

【中文标题】如何使用 VB.net 获取 Windows 控制台应用程序的文本?【英文标题】:How do I get the text of a Windows console application using VB.net? 【发布时间】:2016-08-04 18:32:26 【问题描述】:

我正在使用 VB 2010 自动化在外部 Windows 控制台 (cmd.exe) 上运行的应用程序。请注意,我想继续正常使用外部控制台,但有时我想从 VB 应用程序中捕获控制台文本。我向控制台发送文本命令没有问题 从我的 VB 应用程序上的按钮使用,例如:

...
Dim As IntPtr = FindWindow destination ("ConsoleWindowClass", "consoleapp")
SendMessage (destination, WM_CHAR, VK_RETURN, "")
...

但是,似乎无法获取控制台窗口中显示的文本。我尝试使用标准输出重定向:

...
oStartInfo = New ProcessStartInfo ("consoleapp.exe")
oStartInfo.UseShellExecute = False
oStartInfo.RedirectStandardOutput = True
oProcess.StartInfo = oStartInfo
oProcess.Start ()
...

然后我使用以下命令读取输出流:

....
Dim oStreamReader As System.IO.StreamReader = oProcess.StandardOutput
sOutput = oStreamReader.ReadLine ()
....

这样我可以从我的 VB 应用程序中读取标准输出,但我不能使用控制台,因为控制台不显示任何文本(因为它已被重定向!)。另一方面,一旦启动控制台进程,您就无法更改标准输出重定向。

我也尝试使用“GetWindowText”,但不适用于属于其他应用程序的窗口。

现在我使用 'SendMessage' 和 'WM_GETTEXT' 如下:

...
Dim windowhandle As IntPtr = FindWindow ("ConsoleWindowClass", "consoleapp")
Dim ChildHandle As IntPtr = FindWindowEx (windowhandle, IntPtr.Zero, Nothing, Nothing)
Dim RcvText As String

'Alloc memory for the buffer That recieves the text
Dim mybuffer As IntPtr = Marshal.AllocHGlobal (200)

'The WM_GETTEXT Send Message
SendMessage (ChildHandle, WM_GETTEXT, 200, mybuffer)

'Copy the characters from the unmanaged memory to a managed string
RcvText = Marshal.PtrToStringUni(mybuffer)

'Display the string
Debug.Print (RcvText)
...

但我得到的只是奇怪的文本字符串,而没有控制台的文本内容。

由于控制台窗口没有子窗口,我尝试使用SendMessage(Windowhandle...)而不是SendMessage(ChildHandle...), 但结果也是奇怪的字符串...

有没有办法使用 VB 读取 Windows 控制台的文本?

非常感谢您的帮助。

【问题讨论】:

Capturing console output from a .NET application (C#)的可能重复 @KenWhite 这不是重复的,因为 OP 希望捕获输出,同时仍将其保留给原始控制台以显示在其窗口中。 您能否更改控制台应用程序的代码,将输出写入 txt 文件,然后从您的应用程序中读取。 @BanForFun,不是真的。我尝试这样做,但是在控制台进程启动后您无法重定向标准输出。然后您将无法使用控制台,因为控制台不显示任何文本(因为它已被重定向到 txt 文件)。我还尝试了powershell的'tee'功能,但不幸的是控制台应用程序不能与'tee'一起正常工作。 :( .................... 【参考方案1】:

选项很少,但这应该读取控制台文本

Console.ReadLine()

【讨论】:

要像这样读取控制台文本,您需要将其分配给变量。 Dim input as string input = console.readline() 方法console.readline()从标准输入流中读取下一行字符,但是我想读取控制台输出流。

以上是关于vb如何控制其他程序?的主要内容,如果未能解决你的问题,请参考以下文章

vb.net 应用程序不能在其他计算机上运行?

请问vb中如何查找程序里面的多个文本框(或其他控件)的句柄啊?

VB 获取其他程序某个按钮的句柄,实现点击操作

C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC

如何通过 vb.net 让其他应用程序(计算器)在 winforms 中脱颖而出?

如何在其他 PC 上发布 VB.net 应用程序,因为我的 PC 成为使用 sql server 的服务器主机