Python 试图查找列表框以便向其发送消息

Python 试图查找列表框以便向其发送消息,python,winapi,pywin32,Python,Winapi,Pywin32,我正在尝试使用pywin32向(子)窗口中的ListBox控件发送消息(LB_SELECTSTRING)。我已经获得了窗口的句柄,并且没有问题,我还拥有父窗口的线程id和进程id。我的理解是,控件的处理方式类似于windows,因为它们有自己的句柄,所以我试图找出如何使用其父句柄查找控件,但似乎没有任何效果 下面是我的代码,它总是引发异常 try: _listbox1_hwnd = win32gui.FindWindowEx(_hwnd, None, "ListBox1", "Prefe

我正在尝试使用pywin32向(子)窗口中的ListBox控件发送消息(LB_SELECTSTRING)。我已经获得了窗口的句柄,并且没有问题,我还拥有父窗口的线程id和进程id。我的理解是,控件的处理方式类似于windows,因为它们有自己的句柄,所以我试图找出如何使用其父句柄查找控件,但似乎没有任何效果

下面是我的代码,它总是引发异常

try:
    _listbox1_hwnd = win32gui.FindWindowEx(_hwnd, None, "ListBox1", "Preferences")
    if _listbox1_hwnd == 0:
        raise Exception("Listbox1 wasn't found!")
except Exception as e:
    print e
    sys.exit(0)
我还尝试过使用win32ui FindWindow方法,但没有成功(即这也失败了)


什么是“列表框1”?这与列表框类名不符。使用Spy++工具检查列表框类名。

如果您觉得Python语言更简单,为什么不使用?我从未见过更简单的自动化工具。而且它非常像蟒蛇。

这就是我正在使用的。如果我单击列表框中的某个内容或将鼠标悬停在其上,它会将ClassNN报告为ListBox1。这对我来说似乎很好,因为autohotkey就是用它来查找控件的,但显然这不是autohotkey:)我还应该提到“首选项”是包含列表框的窗口的标题。我尝试将其设置为“无”,但这使它失败。如果我使“ListBox1”无效,那么它将成功,但显然这不好,因为我需要listbox控件。我没有试过空。这是ctypes包的一部分吗?PyWin32API说我可以给它一个字符串,也可以不给它,所以我想如果我不给它,它会在系统级别将其转换为NULL。等等,我们在这里争论什么?因为在我看来这确实是一个自定义列表控件,而不是标准的Windows listbox或listview…您的代码查找顶级窗口。您需要找到顶层窗口并通过其子窗口进行操作。你为什么不使用自动化呢?事实上,我已经尝试过通过儿童窗口,但仍然没有成功。我不确定什么是自动化,但我不使用autohotkey的原因是我正在编写的大部分内容都是python(直到我可以去掉autohotkey中的一些位,然后它们都将是python)。我只是想看看我能用python做些什么,因为我发现python语言更容易。如果你不想学习自动化,我没问题。好的,我找到了pywinauto。我想你指的就是这个?我试试看。
try:
    _listbox1_cwnd = win32ui.FindWindow("ListBox1", "Preferences")
    if _listbox1_cwnd == 0:
        raise Exception("Listbox1 wasn't found!")
except Exception as e:
    print e
    sys.exit(0)