Python 3.x 从我的Python应用程序可以检测/识别另一个应用程序';窗户在哪里?
我希望能够在屏幕上拖动我的半透明应用程序窗口,并在放开时将其“拖放”到指针下的任何窗口上。在这一点上,我希望我的GUI窗口重新配置自己,使其与目标窗口一致。让目标窗口从除我之外的所有窗口后面出来也很好 最后,我有一些代码要分享。大多数情况下,它是有效的,但并不总能抓住整个目标窗口。有时,它只抓住了它的一部分。如果你有什么想法,请告诉我。要激活抓取,我将窗口拖到目标上方的某个位置,将鼠标指针移动到重叠区域的任何位置,然后再次键入“w”。键入“w”将窗口恢复到以前的状态。我花了很长时间才弄明白这一点,因为我是个初学者。我认为,最终决议变得出人意料地直截了当。但是,如果能帮助我简化代码,我将不胜感激。它给人一种笨拙的感觉。提前谢谢Python 3.x 从我的Python应用程序可以检测/识别另一个应用程序';窗户在哪里?,python-3.x,mouse,Python 3.x,Mouse,我希望能够在屏幕上拖动我的半透明应用程序窗口,并在放开时将其“拖放”到指针下的任何窗口上。在这一点上,我希望我的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. <#