|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как прилепить некое окно GUI к координатам окна другой проги |
|
[решено] Как прилепить некое окно GUI к координатам окна другой проги
|
Старожил Сообщения: 307 |
Профиль | Отправить PM | Цитировать Имеется код для примера:
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form = GUICreate("Какая то программа", 600, 60) $Button = GUICtrlCreateButton("просто кнопка для примера", 0, 0, 160, 21) $Form1pos = WinGetPos($Form) $chForm = GUICreate("Дополнительное окно", 600, 70, $Form1pos[0],$Form1pos[1]+93, _ BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOOLWINDOW, $Form) GUISetBkColor (0x09FF00) GUICtrlCreateLabel ("Дочернее окно",5, 5, 185, 25) GUIRegisterMsg($WM_MOVE, "WM_MOVE") GUISetState(@SW_SHOW, $Form) While 1 $msg = GUIGetMsg(1) ;using the "advanced" parameter Select Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form ExitLoop ;Следующий Case нужен только если на дочернее окно $chForm не будет установлен стиль $WS_POPUP. ;Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $chForm ;GUISetState(@SW_HIDE, $chForm) Case $msg[0] = $Button If Not BitAND(WinGetState($chForm), 2) Then GUISetState(@SW_SHOW, $chForm) Else GUISetState(@SW_HIDE, $chForm) EndIf EndSelect WEnd Func WM_MOVE($hWndGUI, $MsgID, $WParam, $LParam) If $hWndGUI = $Form Then $aParent_Pos = WinGetPos($Form) WinMove($chForm, "", $aParent_Pos[0], $aParent_Pos[1]+93) Else EndIf EndFunc |
|
Отправлено: 15:53, 08-02-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата beve:
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Timers.au3> ; $hParentWnd = GUICreate("Какая то программа", 600, 60) ;$Button = GUICtrlCreateButton("просто кнопка для примера", 0, 0, 160, 21) ;Следуюзая строка может быть раскомментирована, в этом случае активное окно будет родительским окном ;$hParentWnd = WinGetHandle("[ACTIVE]") $aParent_Pos = WinGetPos($hParentWnd) $hChildWnd = GUICreate("Дополнительное окно", 600, 70, $aParent_Pos[0], $aParent_Pos[1] + $aParent_Pos[3] + 10, _ BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOOLWINDOW, $hParentWnd) GUISetBkColor(0x09FF00) GUICtrlCreateLabel("Дочернее окно", 5, 5, 185, 25) GUISetState(@SW_SHOW, $hParentWnd) GUISetState(@SW_SHOW, $hChildWnd) $iTimer_ID = _Timer_SetTimer($hChildWnd, 10, "_WinMove_Proc") While 1 $aMsg = GUIGetMsg(1) ;using the "advanced" parameter Switch $aMsg[0] Case $GUI_EVENT_CLOSE If $aMsg[1] = $hParentWnd Then ExitLoop ;Case $GUI_EVENT_CLOSE ;Этот Case нужен только если на дочернее окно $chForm не будет установлен стиль $WS_POPUP. ;If $aMsg[1] = $hChildWnd Then GUISetState(@SW_HIDE, $hChildWnd) ;Case $Button ;If Not BitAND(WinGetState($hChildWnd), 2) Then ;GUISetState(@SW_SHOW, $hChildWnd) ;Else ;GUISetState(@SW_HIDE, $hChildWnd) ;EndIf EndSwitch WEnd _Timer_KillTimer($hChildWnd, $iTimer_ID) Func _WinMove_Proc($hWnd, $nMsg, $iIDTimer, $dwTime) Local $aParent_Pos = WinGetPos($hParentWnd) Local $aChild_Pos = WinGetPos($hWnd) If $aParent_Pos[0] <> $aChild_Pos[0] Or $aParent_Pos[1] <> ($aChild_Pos[1] - $aParent_Pos[3] - 10) Then _ WinMove($hWnd, "", $aParent_Pos[0], $aParent_Pos[1] + $aParent_Pos[3] + 10, $aParent_Pos[2]) EndFunc |
|
------- Отправлено: 22:36, 08-02-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать ---Спасибо,почти то что нужно, классно придумано, насчет, изменения ширины Дочернего окна под ширину окна нужной мне проги. Но возникли некоторые трудности, помоги решить. При запуске скрипта (а в моем случае я переделал, чтобы скрипт, приклеивался не снизу, а чуть ниже от верха и был поверх этого самого окна) - Дочернее окно прилепляется к любому окну которое активно в этот самый час и которое я двигаю мышкой, будь то блокнот - оно с блокнотом двигается, я схватил мышкой SciTe - двигается вместе с SciTe!, а мне нужно что бы Дочернее окно двигалось только вместе с моим окном, например с Блокнотом в нижеописанном скрипте, и при свертывании в трей Блокнота, Дочернее окно тоже свертывалось вместе с ним.
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Timers.au3> $hParentWnd=Wingetpos("Безымянный - Notepad2") $aParent_Pos = WinGetPos($hParentWnd) $hChildWnd = GUICreate("Дополнительное окно", 600, 70, $aParent_Pos[0], $aParent_Pos[1] + $aParent_Pos[3] - 380, _ BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST, $hParentWnd) GUISetBkColor(0x09FF00) GUICtrlCreateLabel("Дочернее окно", 5, 5, 185, 25) GUISetState(@SW_SHOW, $hParentWnd) GUISetState(@SW_SHOW, $hChildWnd) $iTimer_ID = _Timer_SetTimer($hChildWnd, 10, "_WinMove_Proc") While 1 $aMsg = GUIGetMsg(1) ;using the "advanced" parameter Switch $aMsg[0] Case $GUI_EVENT_CLOSE If $aMsg[1] = $hParentWnd Then ExitLoop EndSwitch WEnd _Timer_KillTimer($hChildWnd, $iTimer_ID) Func _WinMove_Proc($hWnd, $nMsg, $iIDTimer, $dwTime) Local $aParent_Pos = WinGetPos($hParentWnd) Local $aChild_Pos = WinGetPos($hWnd) If $aParent_Pos[0] <> $aChild_Pos[0] Or $aParent_Pos[1] <> ($aChild_Pos[1] - $aParent_Pos[3] - 10) Then _ WinMove($hWnd, "", $aParent_Pos[0], $aParent_Pos[1] + $aParent_Pos[3] - 380, $aParent_Pos[2]) EndFunc |
Отправлено: 01:30, 09-02-2009 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать beve,
Цитата:
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Timers.au3> ; Run("Notepad.exe") WinWait("[REGEXPCLASS:Notepad.*]") $hParentWnd = WinGetHandle("[REGEXPCLASS:Notepad.*]") $aParent_Pos = WinGetPos($hParentWnd) $hChildWnd = GUICreate("Дополнительное окно", 600, 70, $aParent_Pos[0], $aParent_Pos[1] + $aParent_Pos[3] - 380, _ BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST, $hParentWnd) GUISetBkColor(0x09FF00) GUICtrlCreateLabel("Дочернее окно", 5, 5, 185, 25) $iTimer_ID = _Timer_SetTimer($hChildWnd, 10, "_WinMove_Proc") GUISetState(@SW_SHOW, $hChildWnd) While 1 Sleep(100) WEnd Func _WinMove_Proc($hWnd, $nMsg, $iIDTimer, $dwTime) If Not WinExists($hParentWnd) Then Exit _Timer_KillTimer($hChildWnd, $iTimer_ID) Local $aParent_Pos = WinGetPos($hParentWnd) If @error Then Return Local $aChild_Pos = WinGetPos($hWnd) If @error Then Return If WinGetHandle("[Active]") <> $hParentWnd Then WinSetOnTop($hChildWnd, "", 0) Else WinSetOnTop($hChildWnd, "", 1) EndIf If $aParent_Pos[0] <> $aChild_Pos[0] Or $aParent_Pos[1] <> ($aChild_Pos[1] - $aParent_Pos[3] - 10) Then _ WinMove($hWnd, "", $aParent_Pos[0], $aParent_Pos[1] + $aParent_Pos[3] - 380, $aParent_Pos[2]) EndFunc |
|
------- Отправлено: 02:13, 09-02-2009 | #4 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Супер, именно то что нужно! Спасибо за ответ, и за разъяснение.
|
|
Отправлено: 13:41, 09-02-2009 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Скрытое управление GUI другой проги - без командной строки ? | Nik_rus | AutoIt | 2 | 12-08-2009 12:21 | |
[решено] Щелкнуть по координатам окна | Medic84 | AutoIt | 4 | 10-08-2009 04:02 | |
[решено] Создать окно WMP в GUI | beve | AutoIt | 5 | 09-07-2009 15:52 | |
[решено] Как сделать фон окна GUI ? | sashadeg | AutoIt | 5 | 11-05-2009 16:31 | |
Запуск из проги другой проги | Vampire | Программирование и базы данных | 2 | 26-11-2003 12:40 |
|