python切换消息窗_用Python切换窗口

The way that user had defined find_window only allows you to choose by the classname of the window

用户定义它的方式是将这两个参数class_name和window_name传递给^{}(后者反过来只调用Win32 API函数^{})。所以,就这样做:windowmgr.find_window(None, 'My Window Name')

但即使这不是真的,也不需要使用他的find_window函数;很明显,如何调用win32gui.FindWindow自己:hwnd = win32gui.FindWindow(None, 'My Window Name')

如果你想对FindWindow/EnumWindows/etc.语法有一个很好的解释,你有没有试着查看它们的文档?有什么你不明白的吗?

同时:… the classname of the window, which I don't know and haven't been able to find since it is just a game running in Java

它在Java中运行有什么区别?你可以枚举窗口并打印出他们的类名,无论它们是用C++、java、.net、python或其他东西编写的。或者使用Visual Studio/VS Express附带的工具,或者任何你可以在网上找到的免费改进版本,比如MS Spy++,它可以让你指向一个窗口并给出标题和类名。I don't want to enumerate the windows to find it as I'm not sure how that would work.

只要用正则表达式调用windowmgr.find_window_wildcard(wildcard),它就会枚举窗口并将它们的标题与该正则表达式进行比较。

如果要编写自己的代码来完成此任务,只需编写如下函数:def my_callback(hwnd, cookie):

现在,当你这样做时:win32gui.EnumWindows(my_callback, some_cookie)

…它将在每个窗口调用一次您的my_callback函数,其中hwnd是窗口(您可以传递给win32gui函数,例如GetWindowText),而cookie是您传入的some_cookie值。(如果不需要传入任何内容,只需传入None,并且不使用回调函数中的值。但您可以看到另一个应答器是如何使用它来传递正则表达式的。)

同时:using find_window_wildcard as it's written in that script has managed to bring the window to the foreground a few times, but only if the window was already open, and it only works intermittently.

首先,如果窗口不存在,就不能将其带到前台。你认为这会怎样?

就间歇工作而言,我的猜测是有很多窗口与您的通配符匹配,程序将任意选择其中一个窗口。可能不是你想要的那个。(它甚至可能是一个隐藏的窗口或其他东西,所以你根本看不到任何事情发生。)

无论如何,您不需要使用find_window_wildcard;如果您知道确切的名称,请使用该名称。当然,它可能仍然不是唯一的(无论游戏的名称是什么,没有什么可以阻止你打开一封电子邮件或一个记事本窗口的相同标题…顺便说一句,这就是为什么你想先尝试类名),但至少它比一些未指定的通配符更有可能是唯一的。

那么,如果类名不是唯一的(或者,更糟的是,它是一个特殊的“number”类,比如32770用于一般的对话框窗口),而窗口名也不是唯一的呢?您可以通过查看所属进程或模块(exe/dll)或父窗口或其他任何内容来更好地缩小范围。您必须查看win32gui和/或MSDN文档(链接在上面)以查找可能要尝试的内容,并通过反复尝试(也要记住Spy工具),直到找到某种唯一指定窗口的方法。然后编码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值