python + win32:检测窗口拖动

时间:2010-09-20 16:50:53

标签: python winapi pywin32 windows

有没有办法检测何时使用python / pywin32在窗口中拖动不属于我的应用程序的窗口?我想设置它,以便当我拖动一个标题与桌面边缘附近的图案匹配的窗口时,它会在鼠标松开时捕捉到边缘。每当释放鼠标时,我都可以编写代码将所有具有该标题的窗口捕捉到桌面,但我只想移动被拖动的特定窗口。

2 个答案:

答案 0 :(得分:2)

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

  • 编写C扩展模块。它有一个像setCallback这样的函数,当拖拽事件发生时,它会调用python函数。
  • 将包含实际挂钩的C DLL写入windows。这个DLL将以某种方式调用当前设置的python函数。

我不知道怎么做这些,或者它是否正确,但是......

答案 1 :(得分:2)

pyHook似乎做了一些必要的工作,因为它是钩住了键盘和鼠标事件。我可能会做的是保持我所关心的所有窗户的记录,以及他们的位置。然后,在鼠标上移动时,我将检测是否有任何窗口移动,如果是这样,并且它在鼠标放开的位置附近,在标题栏上,我会假设它被拖动并拍摄它。挂钩的代码如下。

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()