Что нового

Эффект плеера(выключение мыши)

Arei

Скриптер
Сообщения
938
Репутация
115
Здравствуйте, скажите как реализовать следующее:
при бездействии мыши выключать её(видимо) или перемещать за приделы экрана.Но при малейшем движении восстанавливать первоначальное положение?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Arei,
Попробуйте так.
Код:
#include <GUIConstantsEx.au3>
#include <WinAPIEx.au3>

Global $fShow = True, $iMaxTime = 2000
GUICreate('Test', 300, 300)
$nCheckBox = GUICtrlCreateCheckbox('Click me', 100, 10, 100, 20)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nCheckBox
			If BitAND(GUICtrlRead($nCheckBox), $GUI_CHECKED) Then
				AdlibRegister('_ShowCursor', 100)
			Else
				AdlibUnRegister('_ShowCursor')
			EndIf
	EndSwitch
WEnd

Func _ShowCursor()
	Local $i_IdleTime = _WinAPI_GetIdleTime()
	ConsoleWrite($i_IdleTime & @LF)
	If $i_IdleTime > $iMaxTime Then
		If $fShow Then
			$fShow = Not $fShow
			_WinAPI_ShowCursor($fShow)
		EndIf
	Else
		If Not $fShow Then
			$fShow = Not $fShow
			_WinAPI_ShowCursor($fShow)
		EndIf
	EndIf
EndFunc   ;==>_ShowCursor
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
а без
Код:
#include <WinAPIEx.au3>
можно?


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

Спасибо, всё идеально работает.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Arei

Код:
Global $DW=@DesktopWidth, $DH=@DesktopHeight
Global $t[2]=[2,2], $Tr=0, $s[2]=[$DW/2, $DH/2], $m, $Tr2=0
AdlibRegister('_Exit', 40000) ; выход через 40 секунд работы
HotKeySet('{ESC}', '_Exit')


While 1
	Sleep(50)
	$m=MouseGetPos() ; получаем координаты курсора
	If $m[0]=$t[0] And $m[1]=$t[1] Then ; если координаты не изменились
		; ToolTip('цикл да', 0, 0)
		If Not $Tr Then
			$Tr=1 ; тригер скрутия устанавливаем в True
			If Not $Tr2 Then AdlibRegister('_Wait_and_block', 700) ; регистрируем функцию ожидания
			; ToolTip('цикл 1', 0, 0)
		EndIf
	Else ; иначе, если координаты изменились
		$t=$m
		; ToolTip('цикл нет', 0, 0)
		If $Tr2 Then _Free() ; если курсор скрыт то освобождаем его
	EndIf
WEnd

Func _Wait_and_block()
	AdlibUnRegister('_Wait_and_block')
	$m=MouseGetPos()
	; если после 700 милисек координаты не изменились, то запускаем скрытие мыши
	If $m[0]=$t[0] And $m[1]=$t[1] Then
		; ToolTip('блокировка', 0, 0)
		$s=$t ; сохраняем координаты для восстановления
		$t[0]=$DW-1 ; устанавливаем координаты скрытия для $t и $m
		$t[1]=$DH-1
		$m=$t
		MouseMove($DW-1, $DH-1, 0) ; перемещаем курсор в скрытую область - край экрана
		$Tr2=1
	Else
		$Tr=0
	EndIf
EndFunc

Func _Free()
	; ToolTip('освобождение', 0, 0)
	MouseMove($s[0], $s[1], 0)
	$Tr=0
	$Tr2=0
EndFunc

Func _Exit()
	MouseMove($s[0], $s[1], 0)
	Exit
EndFunc
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Переделал чуть ...

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

Global $iCurX, $iCurY, $aTimer, $iState

$hForm = GUICreate("Show/Hide Cursor", 500, 300)

GUISetState()

While 1
	
	SetCursorState(1000)
	
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit	
	EndSwitch
WEnd

Func SetCursorState($iDalay)
	
	Local $aMouse = MouseGetPos()
	
	If (($iCurX <> $aMouse[0]) And ($iCurY <> $aMouse[1])) Then
		$aTimer = TimerInit()
		$iCurX = $aMouse[0]
		$iCurY = $aMouse[1]
		$iState = True
		GUISetCursor(2)
	Else
		If TimerDiff($aTimer) > $iDalay Then
			If $iState Then
				$iState = False
		        GUISetCursor(16)
		        MouseMove($iCurX, $iCurY + 1)
			EndIf	
		EndIf	
	EndIf
	
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Попробовал
Код:
If _IsPressed("01", $dll)

чтобы при нажатой мыши не срабатывало, но эффект не стабильный, при отпуске мышь уже не скрывается.

Viktor1703
немного странновато ведёт себя мышь, возвращается в окно потом исчезает или наоборот.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Это как обычно в плеерах делается, включил видео, оставил мышь в покое, а чтоб она не мешалась, через определённое время просто скрывается (исчезает) и делается это для текущей программы.
 
Верх