V
VitAl2013
Гость
А как сделать чтоб только поверх определённого окна?
If WinActive("А") Then
WinSetOnTop("Б", "", 1)
EndIf
If WinActive("А")=0 Then
WinSetOnTop("Б", "", 0)
EndIf
Switch WinActive("А")
Case 1
WinSetOnTop("Б", "", 1)
Case 0
WinSetOnTop("Б", "", 0)
EndSwitch
#Include <WinAPIEx.au3>
Opt('WinTitleMatchMode', 3)
Run('calc.exe')
If WinWaitActive('Calculator', '', 5) Then
$hParent = WinGetHandle('Calculator')
Else
Exit
EndIf
OnAutoItExitRegister('OnAutoItExit')
$hForm = GUICreate('')
GUIRegisterMsg(_WinAPI_RegisterWindowMessage('SHELLHOOK'), '_ShellHookProc')
_WinAPI_RegisterShellHookWindow($hForm)
Run('notepad.exe')
While 1
Sleep(1000)
WEnd
Func _ShellHookProc($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hForm
Switch $wParam
Case $HSHELL_WINDOWACTIVATED
If WinGetTitle($lParam) = 'Untitled - Notepad' Then
WinSetOnTop($hParent, '', 1)
Else
WinSetOnTop($hParent, '', 0)
EndIf
EndSwitch
EndSwitch
EndFunc ;==>_ShellHookProc
Func OnAutoItExit()
_WinAPI_DeregisterShellHookWindow($hForm)
EndFunc ;==>OnAutoItExit
Что я не учёл при переносе-адаптации?...: ==> Duplicate function name.:
Func OnAutoItExit()
OnAutoItExitRegister('OnAutoItExit')
WinSetOnTop($hParent, '', 1)
WinSetOnTop("Б", '', 1)
Я ещё использую вот такие инклюды, там эта функция есть?Что я не учёл при переносе-адаптации?
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <Process.au3>
#include <BlockInputEx.au3>
#Include <WinAPIEx.au3>
#include <GUIListView.au3>
;OnAutoItExitRegister('OnAutoItExit')
VitAl2013 сказал(а):Это вообще рушит логику моей программы, получается Статус бар постоянно активен (а мне это не надо). Это я стсус бар свой пытаюсь правильно пристроить.
Не знаю на сколько я тебя правильно понял, но из того что понялVitAl2013 сказал(а):У меня есть autoit прогамма с окном В которая управляет не autoit (совсем не autoit, там проблемы с интерфейсом из Линукса, но это др. история) прогаммой с окном А выводя всё что она делает в статус окно Б Мне надо какимто образом закрепить статус окно за окном А так чтобы оно действовало точно также как обычный статус бар окна А. Тоесть выпрыгнуло окно "Сохранить как" - оно идёт поверх Б. Активировалось окно А, и Б тоже видно. По сути и получается что статус окноБ должно быть всегда поверх окна А и только него. Всё остальное должно возникать сверху.
А мне надо чтоб окно А было активно, я туда Send делаю потом. Еслиже будет окно Б, то послыка уйдёт не туда. ControlSend делать не могу так как уже писал выш интерфейс родом из Линукса. Там ничего не работает толком. Максимум габариты элементов могу вычислить. Указатели меняются даже если просто открыть ещё одно такоеже окно с программой. У обоих окон указательи (handle) изменятся. Только простой Send работает.Потом после активации окна А активируй окно Б.
#Include <Constants.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
Opt('OnExitFunc', '_AutoItExit')
Opt('WinTitleMatchMode', 3)
Opt('WinWaitDelay', 0)
$hForm = GUICreate('MyGUI', 400, 200)
GUISetState()
GUIRegisterMsg(_WinAPI_RegisterWindowMessage('SHELLHOOK'), '_ShellHookProc')
_WinAPI_RegisterShellHookWindow($hForm)
Run('notepad.exe')
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _ShellHookProc($hWnd, $iMsg, $wParam, $lParam)
Local $ExStyle
Switch $hWnd
Case $hForm
Switch $wParam
Case $HSHELL_WINDOWACTIVATED
If BitAND(WinGetState('Untitled - Notepad'), 8) Then
WinSetOnTop($hForm, '', 1)
Else
WinSetOnTop($hForm, '', 0)
$ExStyle = _WinAPI_GetWindowLong($lParam, $GWL_EXSTYLE)
WinSetOnTop($lParam, '', 1)
If Not BitAND($ExStyle, $WS_EX_TOPMOST) Then
WinSetOnTop($lParam, '', 0)
EndIf
EndIf
EndSwitch
EndSwitch
EndFunc ;==>_ShellHookProc
Func _AutoItExit()
_WinAPI_DeregisterShellHookWindow($hForm)
EndFunc ;==>_AutoItExit
VitAl2013 сказал(а):Видеокарта как-то понимает какое окно за каким находится (А ещё она понимает какой элемент перекрывает какой, даже одного окна)...