vb里面用findwindowex查找不到东西

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb里面用findwindowex查找不到东西相关的知识,希望对你有一定的参考价值。

我用软件能查到该一个窗体里的一个文本框的名字是“ThunderRT6TextBox”,但是在VB里用findwindowex却找不到,请问一下该怎么处理呢? 我用同样的方法能找到其他,比如该窗体里的标签控件。

能找到标签控件?那么这个窗体一定不是VB写的,VB的标签控件是找不到的
用findwindowex必须先用findwindow查到窗体的hwnd
再用findwindowex(hwnd,0,"类名","控件标题")
参考技术A findwindow是取窗口句柄的API
其基本格式是:hwndd=findwindow(窗口类型,"窗口标题")

例:
比如我们要找一个新建记事本的窗口句柄
hwndd=findwindow(vbnullstring,"新建 文本文档.txt - 记事本")
参考技术B 应该是它的前面还有一个文本框,名称也是“ThunderRT6TextBox”,所以只找到前一个。

为啥 FindWindowEx 找不到我的所有按钮?

【中文标题】为啥 FindWindowEx 找不到我的所有按钮?【英文标题】:Why doesn't FindWindowEx find all my buttons?为什么 FindWindowEx 找不到我的所有按钮? 【发布时间】:2013-01-29 09:19:58 【问题描述】:

我应该编写一个自动安装程序。只是一个您启动的程序,它应该自行完成安装向导,用户无需触摸任何东西。

我目前正在开发的程序称为 Cygwin。而我要做的就是一遍又一遍地点击“下一步”按钮,直到安装完成。我知道我可以使用 VBS,我知道我可以使用 C#,这会让我的生活变得更轻松。但我有一个示例说明它如何适用于另一个程序,我正在尝试将它用于 C++ 中的 Cygwin。

    HWND WINAPI FindWindowEx(
      _In_opt_  HWND hwndParent,
      _In_opt_  HWND hwndChildAfter,
      _In_opt_  LPCTSTR lpszClass,
      _In_opt_  LPCTSTR lpszWindow
      );

这是我用来查找按钮的函数,在下一步中应该单击它。 我在 hwndParent 中有程序窗口,并且工作正常。 hwndChildAfter 和 lpszClass 是“NULL”,而 lpszWindow 是按钮的名称。这适用于按钮“Abbrechen”(德语为取消)。但是,当我将该名称更改为“Weiter”(Next 的德语)时,它就不再起作用了。他就是找不到。 我认为这与“Weiter”的写作方式有关。它不仅是唯一的词。整个表达式是“Weiter >” 当然,我将整个表达式放在 lpszWindow 中,并用 "" 围绕它,就像我对 "Abbrechen" 所做的那样。 但就像我说的,他没有找到。各种写法都试过了,还是不行。

有谁知道“>”或“”(空格)是否有问题,因此他无法阅读。如果是这样,有什么办法可以解决吗? 或者是否可以获得按钮的 ID 或类似的东西,可以用来告诉程序在哪里设置鼠标点击。

我知道,正如我所说,C++ 并不是真正适合这项任务的最佳语言,最后我想我会改用其他语言。但我真的很想知道为什么它适用于“Abbrechen”以及为什么它不适用于“Weiter >”。

因此,如果有人有解决方案,我将不胜感激。谢谢!

【问题讨论】:

尝试使用 spy++ 获取正确的文本,然后使用它找到句柄 【参考方案1】:

我怀疑按钮的实际文本不仅仅是"Weiter >",还包括一个&,用于加速键。尝试按Alt 并查看是否出现了一个字母,其下方有一个取消划线。如果是这样,那么该字母会以& 为前缀。

这个“解决方案”实际上很脆弱,很容易崩溃。例如,如果用户在他们的系统上配置了另一种语言怎么办?

可以获取按钮的 ID,该 ID 不太可能更改。但是您首先必须找到安装程序窗口,然后枚举其子窗口。要查找按钮的 ID,请使用 JosephH 在他的评论中建议的 Spy++。

【讨论】:

您好,非常感谢您的回答。 “Weiter >”前面确实有一个 &(“&Weiter >),所以现在一切正常。感谢您抽出时间 Nik Bougalis 和 JosephH!

以上是关于vb里面用findwindowex查找不到东西的主要内容,如果未能解决你的问题,请参考以下文章

在VB中如何使用FindWindow或FindWindowEx函数查找某窗体句柄

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

vb代码之------FindWindow and FindWindowEx控制其他程序

为啥 FindWindowEx 找不到我的所有按钮?

关于vb2005中用到的arp函数findwindow无法在user32.dll中找不到findwindowA接口

VB中findwindowex函数的用法。。