Что нового

Цикличное переключение окон на сенсорном мониторе

terro

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

Описание: Цикличное переключение окон, как при использовании Alt + Tab, но без использования клавиатуры.
Нужен скрипт выводящий иконку(картинку) размером(примерно) 50х50 пикселей по верх всех окон в левом вернем углу экрана и при левом клике мышью на иконку происходило бы переключение на следующее окно, с циклом как при нажатии Alt + Tab. Если окон для переключения нет, то просто клик без действий. То есть при нажатии пальцем на иконку эмулируется нажатие Alt + Tab с цикличным переключением.

Примечания: Нужно для автомобильного компьютера(CarPC) для упрощения перехода между запущенными приложениями
при использовании сенсорного экрана без клавиатуры.

Заранее спасибо за помощь. :smile:
 
Автор
T

terro

Новичок
Сообщения
4
Репутация
0
Нашел вот такой вариант, но я в Autoit не очень разбираюсь, не понимаю как циклично переключать(как по Alt Tab).
Помогите пожалуйста как это реализовать в этом скрипте.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 60, 60, 0, 0,-1,$WS_EX_TOPMOST)
$Button1 = GUICtrlCreateButton("", 0, 0, 60, 60)

GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            Send("{ALTDOWN}")
			Send("{TAB}")
			Sleep(10)
			Send("{ALTUP}")

    EndSwitch
WEnd
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
terro
Вот такое можно попробовать, с кликом мыши вроде работет (особо не тестировал):
Тут не прямо ALT+TAB, а активизация окон.

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


Const $WS_EX_NOACTIVATE = 0x08000000
Global $iWin = 0, $aWin[1], $hGUI, $iButton1

$hGUI = GUICreate('TaчОкно', 60, 60, @DesktopWidth - 60, 0, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
$iButton1=GUICtrlCreateLabel("", 0, 0, 60, 60)



GUISetState(@SW_SHOW, $hGUI)

zap()
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $iButton1
			sw()
			zap()
	EndSelect
	Sleep(50)
WEnd

Func zap()
	Local $aList, $iAll = 0
	$aList = WinList()
	ReDim $aWin[1]
	If $aList[0][0] Then
		For $i = 1 To $aList[0][0]
			$sClass = _WinAPI_GetClassName($aList[$i][1])
			If $sClass <> 'Progman' And $sClass <> 'Shell_TrayWnd' And $sClass <> 'Button' Then
				If $aList[$i][0] Then
					If BitAND(WinGetState($aList[$i][1]), 2) Then
						If Not WinActive($aList[$i][1]) And $hGUI <> $aList[$i][1] Then
							$iAll += 1
							ReDim $aWin[$iAll]
							$aWin[$iAll - 1] = $aList[$i][1]
						EndIf
					EndIf
				EndIf
			EndIf
		Next
	EndIf
;~ 	For $i = 1 To UBound($aWin) - 1
;~ 		ConsoleWrite(WinGetTitle($aWin[$i]) & ' ' & _WinAPI_GetClassName($aWin[$i]) & @LF)
;~ 	Next
EndFunc   ;==>zap

Func sw()
	$iWin += 1
	If $iWin > UBound($aWin) - 1 Then $iWin = 1
	WinActivate($aWin[$iWin], '')
EndFunc   ;==>sw
 
Автор
T

terro

Новичок
Сообщения
4
Репутация
0
WSWR [?]
Вот такое можно попробовать, с кликом мыши вроде работет (особо не тестировал):Тут не прямо ALT+TAB, а активизация окон.

Спасибо! Работает почти как нужно, но при проверке в SciTE editore извиняюсь если неправильно назвал, выдает такую ошибку:

"C:\Users\....\Desktop\test4.au3"(6,37) : error: $WS_EX_NOACTIVATE previously declared as a 'Const'.

если закомментировать ";" 6-тую строку Const $WS_EX_NOACTIVATE = 0x08000000
то компилируется и работает. Она нужна для каких целей...чтоб не вызывать окно которое кликаешь?
edit:
После компиляции если нет запущенных приложений, либо работает только одно окно(приложение) при клике по кнопке выдает ошибку:
Line 3306 (File "имя файла"):
Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.
 
Верх