Что нового

[Окна, Диалоги] Сквозной режим окна

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Подскажите можно ли реализовать функцию средствами AutoIT чтоб окно оставаясь поверх всех и было прозрачное но при этом сквозь него возможно было работать с другими приложениями, как сделать прозрачным и верхнем это понятно, а как мышке проходить сквозь него не нашел. Хочется добиться результата как в программе NetWorx http://www.softperfect.com/products/networx/ у нее есть плавающие окошко которое отображает сетевой трафик но при наведении на него мышки оно становится слегка прозрачным и сквозь него можно спокойно работать.
 

VladUs

Скриптер
Сообщения
621
Репутация
180
Сквозным будет делать окно, если указать расширенный стиль $WS_EX_TRANSPARENT при создании окна
Примерно так :

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

 $hWndGUI = GUICreate("My GUI",Default,Default,Default,Default,$WS_POPUP,BitOR($WS_EX_TRANSPARENT,$WS_EX_TOPMOST)) 
 WinSetTrans($hWndGUI,"",200)
 GUISetState(@SW_SHOW) 
    While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
VladUs [?]
Сквозным будет делать окно, если указать расширенный стиль
Извиняюсь за нубство, а подскажите как это свойство применить уже к запущенному окну программы, хотя бы к блокноту ,а то у меня чего то не получается, окно все равно не становится сквозным прозрачность есть, а сквозняка нет :(
 

VladUs

Скриптер
Сообщения
621
Репутация
180
general66 [?]
это свойство применить уже к запущенному окну программы, хотя бы к блокноту
Это уже будет из другой оперы. Вот пример на основе кода от Creatora

Код:
#include <WindowsConstants.au3>
$hWnd = WinGetHandle("Безымянный - Блокнот")
$nStyle = _WinGetStyle($hWnd, 0)
$nExStyle = _WinGetStyle($hWnd, 1)

_WinSetStyle($hWnd,  -1,BitOr($nExStyle, BitOr($WS_EX_TRANSPARENT, $WS_EX_TOPMOST)))
WinSetTrans($hWnd,"",150)
WinSetOnTop($hWnd,"",1)
Func _WinSetStyle($hWnd, $nStyle = -1, $nExStyle = 0)
    Local Const $GWL_STYLE = -16, $GWL_EXSTYLE = -20
    Local Const $SWP_NOMOVE = 0x2, $SWP_NOSIZE = 0x1, $SWP_SHOWWINDOW = 0x40, $SWP_NOZORDER = 0x4
    Local $iFlags = BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOZORDER)
    
    If $nStyle = -1 Then
        $nStyle = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
    EndIf
    $Pos = WinGetpos($hWnd)
    $x = $Pos[0]
    $y = $Pos[1]
    
    DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "int", $nStyle)
    DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_EXSTYLE, "int", $nExStyle)
    DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", $x + 1, "int", $y + 1 , "int", 0, "int", 0, "int", $iFlags)
EndFunc

Func _WinGetStyle($hWnd, $iIndex = 0)
    Local Const $GWL_STYLE = -16, $GWL_EXSTYLE = -20
    
    Local $iGWL_Index = $GWL_STYLE
    
    If $iIndex > 0 Then
        $iGWL_Index = $GWL_EXSTYLE
    EndIf
    
    Local $aStyles = DllCall('User32.dll', 'long', 'GetWindowLong', 'hwnd', $hWnd, 'int', $iGWL_Index)
    Return $aStyles[0]
EndFunc
 
Верх