Что нового

Клик сквозь GUI

havi23

Новичок
Сообщения
5
Репутация
0
Версия AutoIt: 3.3.8.1

Описание: Есть скрипт:
Код:
GUICreate ('', 7, 1, 1, $WS_DISABLED + $WS_BORDER + $WS_POPUP, $WS_EX_TOPMOST)

Как вы могли понять - он создает маленькую полосочку на экране. Всё что требуется - переделать его так, что бы при открывании окна поверх этого скрипта(Который в свою очередь останется поверх окна), при наведении на него курсора и клика - окно на становилось активным.

А теперь рассказываю всё практически: В игре эта полоска показывает мне определенную вещь и нужно, что бы клик в игре по этой полоске происходил насквозь. Т.е. что бы клик шел не в окно, созданное скриптом, а внутрь(в игру).
Надеюсь понятно объяснил. Спасибо заранее!
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
havi23
И какой у вас там смысл?

Код:
#include <WindowsConstants.au3>

$hGui= GUICreate ( '', 250, 1, -1, -1, $WS_POPUP, BitOr( $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT ) )
GUISetBkColor( 0xff0000 )
WinSetTrans( $hGui, '', 255 )
GUISetState()

While Sleep( 10 )
	WEnd
 

td1Qf

Новичок
Сообщения
5
Репутация
0
видел здесь похожее может есть что для вас

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinApi.au3>
;выбор окна для прозрачности и проницаемости мышкой

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("transform_to_ win", 489, 194, 428, 368)
$Label1 = GUICtrlCreateLabel("none", 8, 16, 473, 17)
$Input1 = GUICtrlCreateInput("150", 8, 48, 473, 21)
$Label2 = GUICtrlCreateLabel("Введите число от 0 до 255 чтобы задать прозрачность окна (по умолчанию 150) и нажмите", 11, 72, 466, 17)
$Label3 = GUICtrlCreateLabel("кнопку дальше , наведите на выбронное окно и выждете 10 секунд", 72, 96, 347, 17)
$Button1 = GUICtrlCreateButton("Дальше", 8, 120, 473, 49, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###




While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			Sleep(5000)
			$set00 = GUICtrlRead($Input1)
			$txt0 = _WinAPI_GetMousePos()
			$txt1 = _WinAPI_WindowFromPoint($txt0)
			$txt2 = _WinAPI_GetWindowText($txt1)
			Sleep(5000)
			_WinStyles()
			$Label1 = GUICtrlCreateLabel($txt2, 8, 16, 473, 17)
	EndSwitch
WEnd

Func _WinStyles()
Dim $txt2	
$hWnd = WinGetHandle($txt2)
$nStyle = _WinGetStyle($hWnd, 0)
$nExStyle = _WinGetStyle($hWnd, 1)

_WinSetStyle($hWnd,  -1,BitOr($nExStyle, BitOr($WS_EX_TRANSPARENT, $WS_EX_TOPMOST)))
WinSetTrans($hWnd,"",$set00);заменил 150 на переменую
WinSetOnTop($hWnd,"",1)
EndFunc

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
 
Верх