Что нового

[Окна, Диалоги] Изменение стиля окна стороннего приложения

WSWR

AutoIT Гуру
Сообщения
941
Репутация
361
В этой теме приведен пример изменения стиля стороннего окна:
http://autoit-script.ru/index.php/topic,5983.0.html

Код:
#include <WindowsConstants.au3>

Run('notepad', '', @SW_SHOW)

WinWait('[CLASS:Notepad]')
$hWnd = WinGetHandle("[CLASS:Notepad]")
$nStyle = _WinGetStyle($hWnd, 0)
$nExStyle = _WinGetStyle($hWnd, 1)

_WinSetStyle($hWnd,  -1,BitOr($nExStyle, BitOr($WS_EX_TRANSPARENT, $WS_EX_TOPMOST)))
WinSetTrans($hWnd,"",255)
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


Как переделать этот пример, чтобы заголовок окна стал таким, как на скрине? Или вообще удалить заголовок окна.
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
659
Как переделать этот пример, чтобы заголовок окна стал таким, как на скрине? Или вообще удалить заголовок окна.
Убираем (удаляем) заголовок:
Код:
#include <WindowsConstants.au3>

Run('notepad', '', @SW_SHOW)

WinWait('[CLASS:Notepad]')
$hWnd = WinGetHandle("[CLASS:Notepad]")

_WinSetStyle($hWnd,  $WS_POPUP)

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


Делаем заголовок как на скрине:
Код:
#include <WindowsConstants.au3>

Run('notepad', '', @SW_SHOW)

WinWait('[CLASS:Notepad]')
$hWnd = WinGetHandle("[CLASS:Notepad]")

_WinSetStyle($hWnd,  -1, $WS_EX_TOOLWINDOW)

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


P.S. Проверено на Windows XP SP3 - РАБОТАЕТ :smile:
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
361
Zaramot, спасибо! :IL_AutoIt_1:
 
Верх