2010-09-20 4 views
2

Y at-il un moyen de détecter quand une fenêtre qui n'appartient pas à mon application est glissée dans Windows en utilisant python/pywin32? Je veux le configurer de telle sorte que lorsque je fais glisser une fenêtre dont le titre correspond à un motif près du bord du bureau, il s'aligne sur le bord lorsque la souris est relâchée. Je pourrais écrire du code pour aligner toutes les fenêtres avec ce titre sur le bureau chaque fois que la souris est libérée, mais je veux seulement déplacer la fenêtre particulière qui était en train d'être déplacée.python + win32: glisser la fenêtre de détection

Répondre

2

pyHook semble avoir fait une partie des travaux nécessaires, car il est clavier crochu et les événements souris. Ce que je vais probablement faire est de garder un registre constant de toutes les fenêtres qui m'intéressent, ainsi que leurs positions. Ensuite, à la souris, je détecterai si l'une des fenêtres a bougé, et si c'est le cas, et que la souris a été lâchée, sur la barre de titre, je supposerai qu'elle a été traînée là et l'a cassée. Le code à accrocher suit.

import pyHook 

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

    print "Mouse went up" 
    return True 

hookManager = pyHook.HookManager() 
hookManager.MouseLeftUp = mouseUp 
hookManager.HookMouse() 

Vous devez également une boucle principale, que j'ai depuis que je suis en utilisant gtk déjà, ou vous pouvez faire:

import pythoncom 
pythoncom.PumpMessages() 
2

Jusqu'à présent, la seule solution possible est d'utiliser SetWindowsHookEx. Pywin32 n'interface pas, donc je pense que je vais devoir faire quelque chose comme ceci:

  • Ecrivez un module d'extension C. Il a une fonction comme setCallback qui prend une fonction python à appeler lorsque l'événement de glisser se produit.
  • Ecrivez une DLL C qui contient le hook réel dans Windows. Cette DLL devra en quelque sorte appeler la fonction python actuellement définie.

Je ne suis pas sûr de savoir comment faire cela, ou si elle est correcte, bien ..

+0

s'il vous plaît revenir et publier des mises à jour de cette question. Je suis très curieux de voir ce que vous proposez. – Mark

+0

@Mark: consultez ma nouvelle réponse, on dirait que quelqu'un a fait partie du travail pour moi =) – Claudiu

Questions connexes