python + win32: обнаружить перетаскивание окна - PullRequest
2 голосов
/ 20 сентября 2010

Есть ли способ обнаружить, когда окно, которое не принадлежит моему приложению, перетаскивается в окнах с помощью python / pywin32?Я хочу настроить его так, чтобы при перетаскивании окна, заголовок которого соответствовал узору рядом с краем рабочего стола, оно щелкало по краю при отпускании мыши.Я мог бы написать код для привязки всех окон с таким заголовком к рабочему столу при каждом отпускании мыши, но я хочу переместить только то конкретное окно, которое перетаскивалось.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

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 голосов
/ 21 сентября 2010

Пока единственное возможное решение, которое я вижу, это использовать SetWindowsHookEx. Pywin32 не взаимодействует с этим, поэтому я думаю, что мне придется сделать что-то вроде этого:

  • Написать модуль расширения C. У него есть функция типа setCallback, которая принимает функцию python, которая вызывается, когда происходит событие перетаскивания.
  • Напишите C DLL, которая содержит фактический хук в Windows. Эта DLL каким-то образом должна будет вызывать функцию python, которая установлена ​​в данный момент.

Я не уверен, как это сделать, или если это правильно, хотя ..

...