访问对话框句柄并自动操作用户界面

发布于 2024-07-27 05:01:45 字数 795 浏览 5 评论 0原文

我有一些 VB 代码,它使用 COM api 并导致屏幕上弹出某个对话框。 我的程序是一个控制台应用程序,需要在批处理文件中运行,但除了找到自动操作对话框的方法之外,我还没有找到任何其他方法来做事情。

以下是导致弹出对话框的 api 调用(省略设置代码):

  Dim oScript = New ProvideX.Script()

  ' Setup code here '

  oScript.Run(commName)

该方法没有返回值,也没有额外的参数使我能够通过 API 填写所需的值。

我找到了一种获取对话框窗口句柄的方法,但我不确定它是否有效,或者它是否会抓住命令行窗口。

Dim windowHandle = Process.GetCurrentProcess().MainWindowHandle

有没有办法获取我的进程创建的窗口列表,以便我可以识别与我的对话框相对应的窗口?

另外,任何人都可以为我指明如何将鼠标单击和键盘按下发送到非托管对话框的正确方向,或者是否有更好的方法来完成我需要的操作。

这是一个相当简单的对话框,有一个警告提示,需要通过单击“确定”按钮来接受。 然后有两个文本框需要填写我拥有的数据。 然后我需要点击另一个按钮。

我并不是要求完整的答案,我只是在寻找如何做到这一点的一般要点。

编辑:我正在 PINVOKE.net 上进行研究,我认为如果我能得到正确的句柄,SendInput 就会起作用。 我已经浏览了该对话框,所有这些都可以通过键盘输入来处理。

I have some VB code which makes use of a COM api and results in a certain dialog box popping up on the screen. My program is a console application, that needs to run in a batch file, but I haven't found any other way to do things other than finding a way to automatically manipulate the dialog box.

Here is the api call (omitting setup code) that results in the dialog popping up:

  Dim oScript = New ProvideX.Script()

  ' Setup code here '

  oScript.Run(commName)

This method has no return value, and no extra parameters that would enable me to fill in the values I need through the API.

I have found one method to get the handle of the dialog window, but I'm not sure if it will work, or if it will grab onto the Command line window instead.

Dim windowHandle = Process.GetCurrentProcess().MainWindowHandle

Is there any way to get a list of windows that were created by my process so I can identify the one that corresponds to my dialog?

Also, can anyone point me in the right direction of how to do send mouse clicks and keyboard presses to an unmanaged dialog box, or is there some better way to do what I need.

This is a fairly simple dialog box that has a warning prompt that needs to be accepted by clicking on an ok button. Then there are two text boxes that need to be filled out with data I have. And then I need to click on another button.

I'm not asking for a complete answer, I'm just looking for the general jist of how to do it.

Edit: I was doing research at PINVOKE.net and I think SendInput will work if I can get the right handle. I've walked through the dialog and it can all be handled by keyboard input.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迟月 2024-08-03 05:01:45

要获取对话框的 HWND,我会调用 FindWindow()。 您可以向它传递对话框的类名和标题,它应该将其 HWND 返回给您。 您可以使用 Spy++(由 Visual Studio 安装,至少是专业版)或 等工具WinCheat 为您的对话框找到它。

从那里,如果您想获取“确定”按钮的 HWND,请尝试调用 GetDlgItem() (向其传递对话框的 HWND 及其 ID(Spy++ 可以为您获取此信息,我不确定如果 WinCheat 可以或不能)。如果这不起作用,您可以随时尝试调用 EnumChildWindows() 看看你是否能找到它,

我不是 VB 专家,从 VB 调用其中一些函数可能很困难和/或不起作用(尤其是 < code>EnumChildWindows(),因为它需要一个回调函数)但希望这会给您一个开始寻找的地方。

To get an HWND of the dialog, I would call FindWindow(). You can pass it the class name and caption of your dialog, and it should return its HWND to you. You can use a tool like Spy++ (installed by Visual Studio, at least the Professional Edition) or WinCheat to find this for your dialog.

From there, if you want to get an HWND for the OK button, try calling either GetDlgItem() (passing it the HWND of your dialog and its ID (Spy++ can get this for you, I'm not sure if WinCheat can or not). If that doesn't work, you could always try calling EnumChildWindows() and see if you can find it that way.

I'm not a VB expert, and calling some of these functions from VB might be hard and/or not work (especially EnumChildWindows(), since it requires a callback function). But hopefully this will give you a place to start looking.

眼泪也成诗 2024-08-03 05:01:45

IIRC 我在 StaxRip 中使用 EnumChildWindows(),您可以在 http://www.stax76.net 中找到 VB.NET 代码。 stax76.bplaced.net 或者当您找到 C# 代码时,您可以使用 Reflector、SharpDevelop 或 SharpDevelop 在线转换器服务将其转换为 VB.NET。

IIRC I'm using EnumChildWindows() in StaxRip, you can find the VB.NET code at http://www.stax76.bplaced.net or when you find C# code you can translate it to VB.NET with Reflector, SharpDevelop or the SharpDevelop online convertor service.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文