2010-08-23 17 views
2

Comme le titre le suggère, j'essaie de découvrir où une fenêtre parent maximisée sera redessinée lorsque l'utilisateur la restaure à partir d'un état maximisé. Maintenant, je peux actuellement le faire en utilisant la commande winRestore, capturer la position, puis de nouveau winMaximise, mais cela provoque la fenêtre a) flash comme il est dessiné deux fois et b) prend trop de temps pour un processus que je veux être instantanée à l'utilisateur (j'utilise la position restaurée plus tard lors du déplacement de la fenêtre vers un autre écran). Je suis assez sûr que je suis sur la bonne voie avec la méthode de l'API Windows GetWindowsPlacement, mais je suis prêt à admettre que trouver comment obtenir l'information dont j'ai besoin est un pas au-delà de mes capacités actuelles de codage dllCalling et Les recherches Google ne produisent rien. En un mot: ce que je veux être en mesure de faire est d'obtenir et de définir (dans le système de gestion Windows) la coordonnée en haut à gauche de n'importe quelle fenêtre Restored position sans réellement redessiner et déplacer la fenêtre agrandie.Comment puis-je découvrir les coordonnées de position restaurées d'une fenêtre agrandie?

Est-ce que quelqu'un a une direction ou un pointeur que je peux suivre? Merci!

+0

Quelle est votre cas d'utilisation? Peut-être existe-t-il un autre moyen d'atteindre la fonctionnalité souhaitée. – DevinB

+0

Je veux améliorer une fonction simple "passer la fenêtre à l'écran suivant". C'est facile à faire si une fenêtre n'est pas agrandie (X-pos + screenwidth = nouvelle X-pos) mais l'envoi d'une fenêtre maximisée à travers les écrans ne bouge pas aussi sa position restaurée et j'essaye de découvrir où elle restaure tout en évitant les flashes de dessin de fenêtre impliqués dans l'utilisation de winRestore-move-winMaximise, puis manipuler la pile de sorte que la fenêtre restaure directement sur le nouveau moniteur. J'ai essayé de rendre la fenêtre transparente avant de restaurer-déplacer-maxing, mais c'est trop lent. –

+0

Cirieno - J'ai un code AutoHotkey que j'utilise pour déplacer des fenêtres entre deux moniteurs. Si la fenêtre est agrandie: je la restaure d'abord, fais le mouvement, puis maximise-la à nouveau. Cela peut prendre 1-2 secondes, mais cela fonctionne. Envoyez un e-mail à mon compte "deanhill1971" Gmail si cela vous semble utile. –

Répondre

1

utilisateur Lexikos montre comment le faire avec un appel DLL à GetWindowPlacement:

http://www.autohotkey.com/forum/post-172836.html#172836

hwnd := WinExist("Untitled - Notepad") 
WinGetPos, mX, mY 
WinGetNormalPos(hwnd, x, y, w, h) 
MsgBox Pos:`nx: %mX%`ny: %mY%`n`nNormalPos:`nx: %x%`ny: %y%`nw: %w%`nh: %h% 

WinGetNormalPos(hwnd, ByRef x, ByRef y, ByRef w="", ByRef h="") 
{ 
    VarSetCapacity(wp, 44), NumPut(44, wp) 
    DllCall("GetWindowPlacement", "uint", hwnd, "uint", &wp) 
    x := NumGet(wp, 28, "int") 
    y := NumGet(wp, 32, "int") 
    w := NumGet(wp, 36, "int") - x 
    h := NumGet(wp, 40, "int") - y 
} 
+0

Ceci est sur place et fonctionne pour obtenir la position normalisée pour une fenêtre agrandie. Bonne trouvaille! Maintenant, je (peut-être) besoin de travailler sur * définir * ces valeurs! .. –

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633544(v=vs.85).aspx –