Python 3.x 从我的Python应用程序可以检测/识别另一个应用程序';窗户在哪里?

Python 3.x 从我的Python应用程序可以检测/识别另一个应用程序';窗户在哪里?,python-3.x,mouse,Python 3.x,Mouse,我希望能够在屏幕上拖动我的半透明应用程序窗口,并在放开时将其“拖放”到指针下的任何窗口上。在这一点上,我希望我的GUI窗口重新配置自己,使其与目标窗口一致。让目标窗口从除我之外的所有窗口后面出来也很好 最后,我有一些代码要分享。大多数情况下,它是有效的,但并不总能抓住整个目标窗口。有时,它只抓住了它的一部分。如果你有什么想法,请告诉我。要激活抓取,我将窗口拖到目标上方的某个位置,将鼠标指针移动到重叠区域的任何位置,然后再次键入“w”。键入“w”将窗口恢复到以前的状态。我花了很长时间才弄明白这一点

我希望能够在屏幕上拖动我的半透明应用程序窗口,并在放开时将其“拖放”到指针下的任何窗口上。在这一点上,我希望我的GUI窗口重新配置自己,使其与目标窗口一致。让目标窗口从除我之外的所有窗口后面出来也很好

最后,我有一些代码要分享。大多数情况下,它是有效的,但并不总能抓住整个目标窗口。有时,它只抓住了它的一部分。如果你有什么想法,请告诉我。要激活抓取,我将窗口拖到目标上方的某个位置,将鼠标指针移动到重叠区域的任何位置,然后再次键入“w”。键入“w”将窗口恢复到以前的状态。我花了很长时间才弄明白这一点,因为我是个初学者。我认为,最终决议变得出人意料地直截了当。但是,如果能帮助我简化代码,我将不胜感激。它给人一种笨拙的感觉。提前谢谢

    if (e.key() == Qt.Key_W):
        if (self.makeBaby):
            self.makeBaby = False
            self.setGeometry(self.previousGeometry)
            self.updateStuff()      #> Redraw everything after getting    <#
                                    #> off her. How do you know it's a    <#
                                    #> girl? Her mouth is open.           <#
        else:
            self.makeBaby = True
            Joe = self.geometry()
            self.previousGeometry = Joe
            self.windowHandle = win32gui.WindowFromPoint((QCursor.pos().x(), QCursor.pos().y()))
                                    #> Get my window's handle.            <#
            self.move(self.ws, self.hs)
                                    #> Get out of the way.                <#
            windowHandle = win32gui.WindowFromPoint((QCursor.pos().x(), QCursor.pos().y()))
                                    #> Get the target window's handle.    <#
            windowRect = win32gui.GetWindowRect(windowHandle)
                                    #> Get its geometry.                  <#

            x = windowRect[0]
            y = windowRect[1]
            w = windowRect[2] - x
            h = windowRect[3] - y
            self.move(Joe.x(), Joe.y())
                                    #> Return to the playing field.       <#
            win32gui.SetWindowPos (windowHandle, self.windowHandle, x, y, w, h, win32con.SWP_NOSIZE|win32con.SWP_NOMOVE)
                                    #> Position the target window under   <#
                                    #> my window.                         <#
            self.raise_()           #> This and the next line are         <#
                                    #> necessary. I don't understand why. <#
            self.activateWindow()
            self.setGeometry(x, y, w, h)
                                    #> Match my window's geometry to the  <#
                                    #> target's.                          <#
            self.updateStuff()      #> Give her a new coat of paint.      <#
如果(e.key()==Qt.key\u W):
如果(self.makeBaby):
self.makeBaby=False
self.setGeometry(self.previousGeometry)

self.updateStuff()#>在离开她后重新绘制所有内容。你怎么知道是个女孩?她的嘴张着。抓住我的窗户把手。让开获取目标窗口的句柄。获取它的几何图形。回到赛场上。将目标窗口放置在我的窗口下。这一行和下一行是必要的。我不明白为什么。将窗口的几何体与目标的几何体匹配。给她一层新漆 根据您不完整的代码,让我试着给您一些提示。我知道你试图上传更多的代码,以使其最小可验证性,我知道你达到了一些字符限制,并放弃了

首先,您编写的任何代码,包括这段代码,都会在某个时间点被其他人读取。在这种情况下,您已将代码上载到internet,并被许多人查看。出于这个原因,我认为您应该保持代码注释的专业性

虽然我可能理解您的代码注释是用幽默的语言写的,但我相信您应该更新注释,以下内容读起来不太好,可能会侮辱一些人:

#> Redraw everything after getting    <#
#> off her. How do you know it's a    <#
#> girl? Her mouth is open.           <#
这是为了确保您自己的窗口不与目标窗口重叠

然后继续获取目标窗口,如下所示:

        windowHandle = win32gui.WindowFromPoint((QCursor.pos().x(), QCursor.pos().y()))
                                #> Get the target window's handle.    <#
如果进程“仅捕获目标的一部分”,这可能有助于调试进程。您可以在程序的其他部分使用这种类型的日志来了解发生了什么

我不确定是否需要这样做,可能需要进行实验:

        self.move(Joe.x(), Joe.y())
                                #> Return to the playing field.       <#
self.move(Joe.x(),Joe.y())

#>回到赛场上。将目标窗口放置在我的窗口下。我尝试了“代码检查”,但失败了。这对我来说太复杂了。确认这一点。核实一下。我尝试的一切都被拒绝了,没有任何解释。哦,好吧。。。我要回毒品学校进修。好的,埃德温,今天我将试着对实际的、完整的、工作程序执行一个编码截取,以生成相同的最小版本。是的,我知道这个片段不完整,但我相信这就是罪魁祸首。windowHandle=win32gui.WindowFromPoint((QCursor.pos().x(),QCursor.pos().y())#>获取目标窗口的句柄。我试图进入一个项目,但没有成功。程序超过30000个字符。哦,好吧。见鬼去吧,我试着尽我所能理解你的代码。。。但我意识到这可能根本不是答案,或者只是答案的一部分。祝你好运
        windowHandle = win32gui.WindowFromPoint((QCursor.pos().x(), QCursor.pos().y()))
                                #> Get the target window's handle.    <#
        windowRect = win32gui.GetWindowRect(windowHandle)
                                #> Get its geometry.                  <#
        x = windowRect[0]
        y = windowRect[1]
        w = windowRect[2] - x
        h = windowRect[3] - y
        with open('somelog.txt', 'a') as logfile:
            logfile.write('x = {}\n'.format(str(x))
            logfile.write('y = {}\n'.format(str(y))
            logfile.write('w = {}\n'.format(str(w))
            logfile.write('h = {}\n'.format(str(h))
            logfile.flush()
        self.move(Joe.x(), Joe.y())
                                #> Return to the playing field.       <#
        win32gui.SetWindowPos (windowHandle, self.windowHandle, x, y, w, h, win32con.SWP_NOSIZE|win32con.SWP_NOMOVE)
                                #> Position the target window under   <#
                                #> my window.                         <#