Что нового

Вернуть Handle окна из панели задач

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
411
Как вернуть Handle окна если в панели задач навести на него мышкой?

Код:
#Include <WinAPIEx.au3>

$hForm = GUICreate("Flash Player", 480, 300)

GUISetState()

While 1
	$tPOINT = _WinAPI_GetMousePos()
	$hWnd = _WinAPI_WindowFromPoint($tPOINT)
	ConsoleWrite($hWnd & @CRLF)	
	Switch GUIGetMsg()
	    Case -3
		    Exit
	EndSwitch		
Wend
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
Viktor1703,
У меня на Win XP так работает.
Код:
#include <GuiToolbar.au3>

Global $hToolbar, $iHotItem, $iHotItemOld = -2, $iID, $sTitle, $hWin, $fTT

HotKeySet('{Esc}', '_Exit')

$hToolbar = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[CLASS:ToolbarWindow32; INSTANCE:2]')
If Not $hToolbar Then
	MsgBox(16, 'Error', 'ControlGetHandle')
	Exit
EndIf

While 1
	$iHotItem = _GUICtrlToolbar_GetHotItem($hToolbar)
	If $iHotItem > -1 Then
		If $iHotItemOld <> $iHotItem Then
			$iHotItemOld = $iHotItem
			$iID = _GUICtrlToolbar_IndexToCommand($hToolbar, $iHotItemOld)
			$sTitle = _GUICtrlToolbar_GetButtonText($hToolbar, $iID)
			$hWin = WinGetHandle($sTitle)
			ToolTip('Title: ' & $sTitle & @LF & 'Handle: ' & $hWin, 0, 0)
			$fTT = False
		EndIf
	Else
		If Not $fTT Then
			ToolTip('')
			$fTT = True
			$iHotItemOld = -2
		EndIf
	EndIf
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
Не показывает, если открыто много окон и появляется типа меню.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
411
Тут чуть - чуть другая история, скрипт срабатывает там где на рисунке (ниже) рядом с треем стоит ярлык папки, а у меня будет окно, то есть оно тоже будет отображатся в панели задач, нужно чтоб срабатывало на нём (красная стрелка).





Добавлено:
Сообщение автоматически объединено:

Всё, догнал, сделал, большое спасибо!
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
411
Не то, оказывается скрипт возвращает не хэндл окна, а хэндл кнопки toolbar'a, как хэндл окна из панели инструментов вернуть?

Код:
#include <GuiToolbar.au3>

Global $sTitle, $hToolbar = ControlGetHandle("[Class:Shell_TrayWnd]", "", "[CLASS:ToolbarWindow32; INSTANCE:3]")

$hForm = GUICreate("", 400, 200)
GUISetState()

While 1
	If WinGetState($hForm) = 23 Then
	    $Handle = ToolBarWindow32_GetHandle($hToolbar, $sTitle)
		ConsoleWrite($hForm & "    " & $sTitle & @CRLF)
	    If $sTitle = $hForm Then
		    GUISetState(@SW_RESTORE, $hForm)
	    EndIf
    EndIf		
    Switch GUIGetMsg()
	    Case -3
		    Exit
	EndSwitch
WEnd

Func _Exit()
    Exit
EndFunc 

Func ToolBarWindow32_GetHandle($hWnd, ByRef $tBuffer)
	Local $ItemOld = -2, $tState
	Local $Item = _GUICtrlToolbar_GetHotItem($hWnd)
    If $Item > -1 Then
        If $ItemOld <> $Item Then
			$ItemOld = $Item
            $Id = _GUICtrlToolbar_IndexToCommand($hWnd, $ItemOld)
            $hWin = WinGetHandle(_GUICtrlToolbar_GetButtonText($hWnd, $Id))
			If $hWin Then
				$tBuffer = $hWin
			EndIf	
			$tState = False
        EndIf
    Else
        If Not $tState Then
            $tState = True
            $ItemOld = -2
			$tBuffer = -1
        EndIf
    EndIf
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
Viktor1703 [?]
Не то, оказывается скрипт возвращает не хэндл окна, а хэндл кнопки toolbar'a, как хэндл окна из панели инструментов вернуть?
Еще раз проверил свой скрипт (на XP). У меня возвращает Handle окон и у меня CLASS:ToolbarWindow32; INSTANCE:3 - это панель быстрого запуска.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
411
Вот для примера, запустите скрипт, сверните окно и наведите мышь на него в панеле инструментов, если возвращаемый handle совпадёт с handle окна то окно должно развернутся, у меня ни чего не происходит. Для наглядности в ToolTip вместо Title показывает Handle окна, он не совпадает с возвращаемым.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiToolbar.au3>

Global $hToolbar, $iHotItem, $iHotItemOld = -2, $iID, $sTitle, $hWin, $fTT

$hGUI = GUICreate("", 250, 120)
GUISetState()


$hToolbar = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[CLASS:ToolbarWindow32; INSTANCE:3]')
If Not $hToolbar Then
    MsgBox(16, 'Error', 'ControlGetHandle')
    Exit
EndIf

While 1
    $iHotItem = _GUICtrlToolbar_GetHotItem($hToolbar)
    If $iHotItem > -1 Then
        If $iHotItemOld <> $iHotItem Then
            $iHotItemOld = $iHotItem
            $iID = _GUICtrlToolbar_IndexToCommand($hToolbar, $iHotItemOld)
            $sTitle = _GUICtrlToolbar_GetButtonText($hToolbar, $iID)
            $hWin = WinGetHandle($sTitle)
			ToolTip('Title: ' & $hGUI & @LF & 'Handle: ' & $hWin, 0, 0)
			If $hGUI = $hWin Then
                GUISetState(@SW_RESTORE, $hGUI)
			EndIf	
            $fTT = False
        EndIf
    Else
        If Not $fTT Then
            ToolTip('')
            $fTT = True
            $iHotItemOld = -2
        EndIf
    EndIf
    
	Switch GUIGetMsg()
	    Case -3
		    Exit
	EndSwitch		
WEnd

Func _Exit()
    Exit
EndFunc   ;==>_Exit




Добавлено:
Сообщение автоматически объединено:

Очень странно, если окно Активно, доступно и отображается, то его handle совпадает с возвращаемым, если окно свернуть, то функция возвращает другой handle и у меня работает: [CLASS:ToolbarWindow32; INSTANCE:3], handle меняется при разных состояниях окна
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
Viktor1703,
У меня так. Почему у Вас по-другому, я не знаю. :scratch:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
411
Странно, ну ладно, буду тогда использовать 2 инстанции, то есть проверка между ними, ещё раз спасибо!
 
Верх