2010-09-20 88 views
2

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

回答

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

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

  • 写一个C扩展模块。它有一个像setCallback这样的函数,当拖动事件发生时,它会调用python函数。
  • 将包含实际钩子的C DLL写入到窗口中。这个DLL将以某种方式不得不调用当前设置的python函数。

我不知道该怎么做这些,或者如果它是正确的,但..

+0

请回来,并张贴到这个问题的任何更新。我很好奇你看到你想出什么。 – Mark 2010-09-23 15:41:57

+0

@Mark:查看我的新答案,看起来有人为我做了部分工作=) – Claudiu 2010-09-23 19:47:32