【问题标题】:Python: Handle mspaint.exe Window returning 0Python:处理 mspaint.exe 窗口返回 0
【发布时间】:2015-11-28 15:01:57
【问题描述】:

我正在尝试处理 python 3.5 中的 mspaint.exe,但它不起作用。

这是我做的过程和我不能做的事情:

  • 我可以列出所有窗口列表。
  • 我可以得到右标题窗口(“无标题 - 绘画”)

我不能做什么:

  • 无法获取Handle(如果是,则postmessage返回0)

这是我当前的代码

获取句柄函数:

 # trying to get handle with title parameter
 def get_window_hwnd(title):
    hwnd = False
    list = enum_window_titles();
    for a in list:
        if title.lower() in a.lower() :
            print(a.lower()) # untitled - paint
            hwnd = win32gui.FindWindow(None, title)
            print(hwnd) # return 0
            return hwnd
    return hwnd

列表窗口功能:

#list all windows list
def enum_window_titles():
    def callback(handle, data):
        titles.append(win32gui.GetWindowText(handle))

    titles = []
    win32gui.EnumWindows(callback, None)
    return titles

部分流程:

# core
hwnd = -1
hwnd = get_window_hwnd("paint") # get handle window
print(hwnd) # 0

if(hwnd != -1 or hwnd != False): # enter here
    a = win32api.SendMessage(hwnd, win32con.WM_MOUSEMOVE, 0, win32api.MAKELONG(200, 200));
    b = win32api.PostMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON,0);
    c = win32api.SendMessage(hwnd, win32con.WM_MOUSEMOVE, 0, win32api.MAKELONG(400, 400));
    d = win32api.PostMessage(hwnd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON,0);
    print(a);  #
    print(b);
    print(c);
    print(d);

完整打印结果:

untitled - paint
0
0
# here is the Post Message and Send Message
0
None
0
None

知道为什么我无法处理我的 mspaint 吗?

还有任何想法知道句柄是否像 PostMessage 和 SendMessage 之后那样工作?

谢谢

【问题讨论】:

  • 请不要更改问题。您询问了如何获取窗口句柄。
  • 我不确定您要做什么。您肯定不是试图通过伪造输入来绘制图像吗?还是油漆只是一个例子?
  • 我正在尝试绘制图像。我选择了一个箭头。我只是尝试按下鼠标,转到 X,Y ,然后释放鼠标。我想最小化或在后台。所以这就是为什么我尝试使用SendMessagePostMessage
  • 伪造输入来绘画是错误的方式。使用像 PIL 这样的图像库。
  • 它只是对单击/拖动功能的测试,我使用绘画来确保我能够做到这一点并且它有效。

标签: python python-3.x winapi sendmessage


【解决方案1】:

窗口的名称是"Untitled - Paint",但您将"paint" 传递给FindWindow。如果您要调用FindWindow,您确实需要传递正确的窗口名称。像这样称呼它:

win32gui.FindWindow(None, a)

但是,拨打FindWindow 毫无意义。当您调用EnumWindows 时,您的回调接收窗口句柄。请记住该窗口句柄以及名称。这样,一旦您找到匹配的名称,您就可以使用句柄了。像这样的:

import win32gui

def get_window_hwnd(title):
    for wnd in enum_windows():
        if title.lower() in win32gui.GetWindowText(wnd).lower():
            return wnd
    return 0

def enum_windows():
    def callback(wnd, data):
        windows.append(wnd)

    windows = []
    win32gui.EnumWindows(callback, None)
    return windows

hwnd = get_window_hwnd("paint")
print(hwnd)

【讨论】:

  • 是的,我犯了一个错误。有效地。参数不好谢谢! :P 我在 send/PostMessage rho 中又得到了 0, none, 0, none ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多