如何使用Win32 GUI和Win32 API在windows中使用python定位和移动窗口

如何使用Win32 GUI和Win32 API在windows中使用python定位和移动窗口,python,winapi,pywin32,win32gui,pyautogui,Python,Winapi,Pywin32,Win32gui,Pyautogui,这个问题实际上是因为我不理解必须传递给win32gui.EnumWindows()的内容 我试图完成的简短版本: 检测可能位于4个不同监视器中任何一个监视器上的窗口(我的远程桌面窗口,而不是任何实际在远程桌面上运行的窗口) 将窗口移动到某个监视器(我已经可以找到监视器句柄) 最大化窗口 我想通过win32gui和win32api来实现这一点 但是,我有一个可能的其他方法: 如果有人知道如何让pyautogui屏幕截图函数观察主显示以外的任何内容,那么就有可能 使用pyautogui检测远程桌面

这个问题实际上是因为我不理解必须传递给win32gui.EnumWindows()的内容

我试图完成的简短版本:

  • 检测可能位于4个不同监视器中任何一个监视器上的窗口(我的远程桌面窗口,而不是任何实际在远程桌面上运行的窗口)
  • 将窗口移动到某个监视器(我已经可以找到监视器句柄)
  • 最大化窗口
  • 我想通过win32gui和win32api来实现这一点

    但是,我有一个可能的其他方法: 如果有人知道如何让pyautogui屏幕截图函数观察主显示以外的任何内容,那么就有可能

    使用pyautogui检测远程桌面窗口标题(始终相同,但可能出现在4个监视器上,然后单击它并拖动到适当的监视器,并使用pyautogui最大化)

    第三种方法:

    使用pygetwindow定位并聚焦远程桌面窗口,然后使用win32 API将其移动到适当的监视器。我需要一种使用win32获取聚焦窗口句柄的方法

    编辑:我能够得到我认为是正确的处理使用

    pygetwindow.getAllTitles()
    查找远程桌面程序的标题,然后使用
    pygetwindow.getWindowsWithTitle('MyRemoteDesktopName-远程桌面连接')
    ,因为“MyRemoteDesktopName-远程桌面连接”之前被列为标题。这为我提供了一个使用的句柄
    win32gui.MoveWindow(197160,0,0,1920,1080,True)
    将窗口移动到我的原始屏幕。但是,远程桌面栏没有移动,并且屏幕虽然现在合适,但没有按照将工具栏拖动到另一个窗口的方式重新缩放。我的每个显示器都有不同的大小和分辨率,我的远程桌面自动缩放以匹配我将工具栏拖动到的任何位置。但是当我使用wMo时veWindow,它与该条断开连接

    您使用它设置4个不同的监视器吗?现在您有了特定的窗口句柄,您不能使用
    MoveWindow
    功能将窗口移动到特定的监视器吗?您可以尝试
    EnumDisplayMonitors
    +
    GetMonitorInfo
    ,它应该为您提供每个mo的坐标nitor,然后调用
    SetWindowPos
    将其移动到您想要的任何位置。move window实际上会移动显示器,但不会让它执行相同的功能。如果不录制视频,很难向您展示我的意思,因为我的工作区。MoveWindow会移动窗口的显示器,但不会移动它看起来的位置。它不会让虚拟机根据需要识别新的屏幕分辨率和比例。想象一下,如果你在chrome上使用移动窗口,它离开了地址栏和监视器3顶部的最小化最大化关闭栏,但将你正在查看的图像移动到监视器1,同样,是的,我已经扩展了显示,正如你所说的,这真的很难理解,因为我I’我无法重现你的问题。如果方便的话,也许你可以用详细的屏幕截图或代码信息转发一篇关于这个问题的帖子。当前的问题很普遍。在调用某些函数之前和之后,我会做一系列的屏幕截图,特别是移动窗口。可能需要几天时间,因为我的工作环境已经改变了暂时回家。