python+;win32:检测窗口拖动

python+;win32:检测窗口拖动,python,winapi,pywin32,windows,Python,Winapi,Pywin32,Windows,是否有方法检测何时使用python/pywin32在windows中拖动不属于我的应用程序的窗口?我想对其进行设置,以便在拖动标题与桌面边缘附近的图案相匹配的窗口时,鼠标松开时,窗口会捕捉到边缘。无论何时释放鼠标,我都可以编写代码将所有具有该标题的窗口捕捉到桌面上,但我只想移动正在拖动的特定窗口。到目前为止,我看到的唯一可能的解决方案是使用SetWindowsHookEx。Pywin32没有接口,所以我想我必须这样做: 编写一个C扩展模块。它有一个类似于setCallback的函数,它在发生拖

是否有方法检测何时使用python/pywin32在windows中拖动不属于我的应用程序的窗口?我想对其进行设置,以便在拖动标题与桌面边缘附近的图案相匹配的窗口时,鼠标松开时,窗口会捕捉到边缘。无论何时释放鼠标,我都可以编写代码将所有具有该标题的窗口捕捉到桌面上,但我只想移动正在拖动的特定窗口。

到目前为止,我看到的唯一可能的解决方案是使用
SetWindowsHookEx
。Pywin32没有接口,所以我想我必须这样做:

  • 编写一个C扩展模块。它有一个类似于
    setCallback
    的函数,它在发生拖动事件时调用python函数
  • 将包含实际钩子的C DLL写入windows。这个DLL将不得不调用当前设置的python函数
我不知道该怎么做,或者它是否正确,不过..

似乎已经完成了一些必要的工作,因为这是挂接的键盘和鼠标事件。我可能会做的是对我关心的所有窗户以及它们的位置保持一个固定的记录。然后,在鼠标向上移动时,我会检测是否有任何窗口移动,如果有,它就在鼠标被释放的位置附近,在标题栏上,我会假设它被拖到了那里并捕捉它。要钩住的代码如下

import pyHook

def mouseUp(event):
    if event.Injected: return True

    print "Mouse went up"
    return True

hookManager = pyHook.HookManager()
hookManager.MouseLeftUp = mouseUp
hookManager.HookMouse()
您还需要一个主循环,因为我已经在使用
gtk
,或者您可以执行以下操作:

import pythoncom
pythoncom.PumpMessages()

请返回并发布此问题的任何更新。我很好奇你能想出什么来。@Mark:看看我的新答案,看起来好像有人帮我做了部分工作=)