Показано с 1 по 10 из 126

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    53
    Сообщений
    1,161
    Вес репутации
    597

    По умолчанию Re: Примеры ahk-скриптов

    Я в своём скрипте avc_control.ahk сделал вызов по нажатию кнопки в скине RR - посылаю команду SENDMSG;avc_control.ahk;videomove, а по завершению переноса файлов принудительно отключаю флешку командой usr.exe stop -d буква_диска_флешки:
    Код:
    #NoTrayIcon		; не отображать значок скрипта в трее
    #SingleInstance force	; перезагрузить скрипт, если он уже запущен
    DetectHiddenWindows, On	; искать в скрытых окнах
    #NoEnv			; запрещаем имена переменных как у переменных окружения
    SendMode Input		; ускорренный ввод
    #Persistent		; держать скрипт запущенным
    SetTitleMatchMode 2	; 2 - заголовок окна должен содержать значение, заданное в параметре
    
    ; ----------- редактируемые переменные - настройки ------------
    
    winampid	:= "RRWinamp"				; идентификатор класса окна винампа
    cityguide	:= "City Guide"				; название окна CityGuide
    myconnection	:= "BluetoothConnection"		; название подключения к Инету
    btadapter	:= "Jabra - A320s"			; название адаптера bluetooth
    pinghost1	:= "193.125.152.104"			; кого мучаем пингами в первую очередь (www.relcom.ru)
    pinghost2	:= "194.87.0.50"			; кого мучаем пингами во вторую очередь (www.ru)
    onlinestr	:= "В сети"				; сообщение "Online" на экране (переменная RR OnlineStatus)
    offlinestr	:= "---"				; сообщение "Offline" на экране
    chkonline	:= "+                 +"		; сообщение "постоянное подключение" на экране
    pstripwin1	:= "Меры предосторожности"		; название стартового окна 1 восстановления PowerStrip'а
    pstripwin2	:= "PowerStrip Configuration Problem"	; название стартового окна 2 восстановления PowerStrip'а
    svhostwin	:= "svchost.exe - Ошибка приложения"	; название окна ошибки службы (вероятнее всего служба Windows Audio)
    winamperror	:= "DirectSound output"			; название окна винампа с ошибкой звукового устройства
    winamppath	:= "C:\Program Files\Winamp\winamp.exe"	; путь к исполняемому файлу winamp'а
    checkperiod	:= 30					; через сколько секунд (примерно) запускаем процедуру проверки сети и пробок СитиГида
    ;myjamfile	:= "C:\Program Files\City Guide\78SPb.jam" ; за каким файлом пробок следим (боевой)
    myjamfile	:= "C:\Program Files\City Guide CarPC 3\78SPb.jam" ; за каким файлом пробок следим (тестовый)
    jamgreen	:= 8					; до скольки минут считать возраст пробок зеленым
    jamred		:= 50					; до скольки минут считать возраст пробок красным
    empty		:= "нет"				; что пишем на экране, если пробочный файл очень старый
    camgrabbererror	:= "CamGraber full error"		; ошибка camgrabber'а
    kmperror	:= "KMPlayer error in file"		; ошибка kmplayer'а
    karaoke		:= "vanBasco's Karaoke Player"		; название окна karaoke player'а
    kardel		:= ".kar - vanBasco's Karaoke Player"	; что не надо выводить в названии песни
    videosource	:= "C:\camera\*.*"			; маска видеофайлов для переноса на usb-накопитель
    gpsdatasource	:= "C:\GpsData\*.*"			; маска файлов с gps-инфой (их только копируем)
    videodest	:= "G:\camera"				; путь, куда надо переносить видеофайлы
    videodestD	:= "G"					; буква диска пути для отключения из системы
    videodest2	:= "F:\camera"				; альтернативный путь, куда надо переносить видеофайлы
    videodest2D	:= "F"					; буква диска альтернативного пути для отключения из системы
    
    ; -------- конец редактируемых переменных - настроек ----------
    
    
    WinAmpActive := 1
    WinAmpWait := 0
    KaraokeActive := 0
    CityGuideActive := 0
    day := 1
    online := 0
    setoffline := 0
    oncheckonline := 0
    Lastcheck := 0
    checkperiod := - checkperiod * 1000
    jamexpired := 1
    karprev := ""
    onvideomove := 0
    KMPActive := 0
    
    
    ; Окно для получения команд управления от RR и для отображения текущей песни караоке
    CustomColor := "90FF55"
    MyTextEmpty := ""
    Gui, +Owner
    gui, color, 000000
    gui, font, s48 bold, Arial
    Gui, Add, Text, c%CustomColor% x0 y0 w830 h170 vMyRed, Название песни
    Gui, +LastFound +AlwaysOnTop
    WinSet, TransColor, 000000 200
    Gui, -Caption +Disabled -SysMenu
    Gui, Show, x-800 y0 w800 h150 NoActivate, avc_control.ahk
    KarShow := 0
    WinHide, avc_control.ahk
    
    
    ; Устанавливаем обработчик для приёма команд через WM_COPYDATA от RR
    OnMessage(0x4A, "OnCopyData")
    
    SetTimer, CheckWarnings, 2000
    SetTimer, CheckJam, 30000
    SetTimer, CheckInternet, %checkperiod%, -1 ; периодическая проверка подключения к Интернету (с пониженным приоритетом)
    return
    
    
    ShowHideKaraoke:
    	IfWinExist, ahk_class vanBascoPlayerClass
    	{
    		If (KarShow <> 1)
    		{
    			WinShow, avc_control.ahk
    			KarShow := 1
    		}
    		WinGetTitle, KarTitle, ahk_class vanBascoPlayerClass
    		if (karperv <> KarTitle)
    		{
    			karprev := KarTitle
    			StringReplace, KarTitle, KarTitle, %kardel%, , All
    			StringReplace, KarTitle, KarTitle, _, %A_Space%, All
    			StringReplace, KarTitle, KarTitle, =, `r`n, All
    			GuiControl, Text, MyRed, %KarTitle%
    		}
    	}
    	Else
    	{
    		If (KarShow = 1)
    		{
    			WinHide, avc_control.ahk
    			KarShow = 0
    		}
    	}
    	return
    
    StartWinAmp:
    	IfWinNotExist, %karaoke%
    	{
    		; Не нашли активного karaoke player'а
    		IfWinNotExist, ahk_class Winamp v1.x
    		{
    			; Не нашли активного KMPlayer'а
    			; Работаем с WinAmp'ом - запускаем проигрывание музыки
    			IfWinNotExist, ahk_class %winampid%
    			{
    				WinAmpWait := WinAmpWait + 1
    				If(WinAmpWait > 3)
    				{
    					; Не нашли активного WinAmp'а - запускаем
    					Run, %winamppath% /class=%winampid%,, Hide
    					WinAmpActive := 1
    					WinAmpWait := 0
    					WinWait, ahk_class %winampid%,, 5
    				}
    			}
    			Else
    			{
    				WinAmpWait := 0
    			}
    			IfWinExist, ahk_class %winampid%
    			{
    				SendMessage, 0x400,, 104,, ahk_class %winampid% ; проверка воспроизведения
    				If ErrorLevel = 0 ; если не воспроизводится, то...
    					PostMessage, 0x111, 40045,,, ahk_class %winampid% ; включить воспроизведение
    			}
    		}
    	}
    
    ;	Process, Exist, CamGrabber.exe
    ;	If (ErrorLevel != 0)
    ;	{
    ;		CDSSendMessage("STOP", "CamGrabber") ; Пытаемся завершить процесс
    ;		Sleep, 10000
    ;	}
    ;	Process, Exist, CamGrabber.exe
    ;	If (ErrorLevel != 0)
    ;	{
    ;		RunWait, taskkill.exe /IM CamGrabber.exe /F,, Hide
    ;		Sleep, 2000
    ;	}
    ;	Run, C:\CamGrabber31demo\CamGrabber.exe
    
    	Process, Exist, CamGrabber.exe
    	If (ErrorLevel = 0)
    	{
    		Run, C:\CamGrabber31demo\CamGrabber.exe
    	}
    	return
    
    CheckWarnings:
    ; Обработчик варнингов
    ;	CDSSendMessage("SAY1ashu", "CamGrabber") ; Обновляем подпись CamGrabber'а
    	CDSSendMessage("SETVAR;MYSAT;`%SatCount`%||SETVAR;MYALT;`%Alt`%||SETVAR;GPSDATE;`%GPSDate`%||SETVAR;GPSTIME;`%GPSTime`%", "ahk_class TCamGrabberSubTitles", WinExist("RoadRunner")) ; Просим CGSubTitles.exe отдать в RR число спутников и пр.
    	If WinAmpActive = 0
    	{
    		IfWinExist, ahk_class %winampid%
    		{
    ; WinAmp не был запущен, а сейчас найден в списке окон
    			WinAmpActive := 1
    			WinAmpWait := 0
    			Gosub StartWinAmp
    		}
    		Else
    		{
    			; WinAmp не был запущен, да и сейчас его что-то не видно
    			Gosub StartWinAmp
    		}
    	}
    	Else
    	{
    		IfWinNotExist, ahk_class %winampid%
    		{
    			WinAmpActive := 0
    			Gosub StartWinAmp
    		}
    		Else
    		{
    			If (Lastcheck + 20000 < A_TickCount)
    			{
    				; WinAmp был запущен и существует до сих пор, но
    				; давно не было проверок, возможно, работа останавливалась
    				SendToRR("SETVAR;OnlineStatus;" . offlinestr)
    				SetTimer, StartWinAmp, -3000
    				; наверняка было выключение, поэтому проверяем подключение к Инету
    				; инициируем новый цикл проверки Интернета через 1 секунду
    				If (oncheckonline <> 1)
    					SetTimer, CheckInternet, -1000, -1
    			}
    		}
    	}
    	If CityGuideActive = 0
    	{
    		IfWinExist, %cityguide%
    		{
    ; CityGuide не был запущен, а сейчас найден в списке окон
    ;			tmp := A_BatchLines
    ;			SetBatchLines, -1
    ;			WinActivate
    ;			WinWaitActive
    ;			Send, 5 ; включить GPS
    ;			Process, Priority, CityGuide.exe, BelowNormal ; понизить приоритет чтобы не мешал просмотру видео
    ;			SetBatchLines, %tmp%
    			CityGuideActive := 1
    		}
    	}
    	Else
    	{
    		IfWinNotExist, %cityguide%
    		{
    			CityGuideActive := 0
    		}
    	}
    	If KMPActive = 0
    	{
    		IfWinExist, ahk_class Winamp v1.x
    		{
    ; KMPlayer не был запущен, а сейчас найден в списке окон
    ; понижаем приоритет СитиГида
    			Process, Priority, CityGuide.exe, BelowNormal ; понизить приоритет чтобы не мешал просмотру видео
    			KMPActive := 1
    		}
    	}
    	Else
    	{
    		IfWinNotExist, ahk_class Winamp v1.x
    		{
    			Process, Priority, CityGuide.exe, Normal ; вернуть приоритет в normal - видео выключено
    			KMPActive := 0
    		}
    	}
    	If KaraokeActive = 0
    	{
    		IfWinExist, %karaoke%
    		{
    			; Нашли активный karaoke player - максимизируем окно
    			WinActivate
    			Send, !f
    			Send, {Space}
    			KaraokeActive := 1
    			SetTimer, ShowHideKaraoke, 1000 ; отслеживать показ на экране
    		}
    	}
    	Else
    	{
    		IfWinNotExist, %karaoke%
    		{
    			KaraokeActive := 0
    			SetTimer, ShowHideKaraoke, -1000 ; запустить в последний раз - чтобы скрыть окно
    		}
    	}
    	IfWinExist, %pstripwin1%
    	{
    ; Найдено стартовое окно 1 восстановления PowerStrip'а
    		WinActivate
    		Send, Д
    	}
    	IfWinExist, %pstripwin2%
    	{
    ; Найдено стартовое окно 2 восстановления PowerStrip'а
    		WinActivate
    		Send, Y
    	}
    	IfWinExist, %winamperror%
    	{
    ; Найдено окно WinAmp'а с ошибкой звукового устройства
    ; Вероятнее всего звуковая usb-карта не успела проинициализироваться
    ; закрываем окно с ошибкой и через 5 секунд пытаемся запустить PLAY
    		WinActivate
    		Send, {Enter}
    		SetTimer, StartWinAmp, -5000
    	}
    	IfWinExist, %svhostwin%
    	{
    ; Скидываем полученную ошибку приложения (вероятнее всего служба Windows Audio)
    		WinActivate
    		Send, {Esc}
    ;		SetTimer, RestartAudio, -1000
    	}
    	IfWinExist, %kmperror%
    	{
    ; Скидываем полученную ошибку KMP
    		WinActivate
    		Send, {Enter}
    		RunWait, taskkill.exe /IM KMPlayer.exe /F,, Hide
    		Run, C:\Program Files\The KMPlayer\KMPlayer.exe
    	}
    ;	IfWinExist, %camgrabbererror%
    ;	{
    ; Нашли ошибку camgrabber'а - перезапускаем его
    ;		WinActivate
    ;		Send, {Enter}
    ;		CDSSendMessage("STOP", "CamGrabber") ; Пытаемся завершить процесс мирным путём
    ;		Sleep, 4000
    ;		RunWait, taskkill.exe /IM CamGrabber.exe /F,, Hide
    ;		Sleep, 2000
    ;		Run, C:\CamGrabber31demo\CamGrabber.exe
    ;	}
    	Lastcheck := A_TickCount
    	return
    
    RestartAudio:
    	RunWait, net stop AudioSrv,, Hide
    	RunWait, net start AudioSrv,, Hide
    	return
    
    CheckInternet:
    ; Обработчик интернет-проверок
    	oncheckonline := 1
    	If (setoffline = 1)
    		Gosub DoOffline
    	Gosub DoOnline
    	oncheckonline := 0
    	SetTimer, CheckInternet, %checkperiod%, -1
    	return ; конец процедуры CheckInternet
    
    CheckJam:
    ; Получаем время файла пробок
    	FileGetTime, OutputVar, %myjamfile%
    	mhour := Substr(OutputVar, 9, 2)
    	mmin := Substr(OutputVar, 11, 2)
    ; Собираем текущую отметку времени (в минутах)
    	currconntimestamp := A_Min + A_Hour*60
    	lastjamtimestamp := mmin + mhour*60
    	If (currconntimestamp < lastjamtimestamp)
    		currconntimestamp := currconntimestamp + 24*60
    ; Получаем возраст файла пробок
    	jamtime := currconntimestamp - lastjamtimestamp
    	jamexpired := 0
    	If (currconntimestamp > lastjamtimestamp + jamgreen)
    		jamexpired := 1
    	If (currconntimestamp > lastjamtimestamp + jamred)
    		jamtime := empty
    ; тут надо нарисовать цветом возраст пробочного файла
    	If (jamexpired = 0)
    	{
    ; Делаем зеленым
    		SendToRR("SETVAR;MYJAMR||SETVAR;MYJAMG;" . jamtime)
    	}
    	Else
    	{
    ; Делаем красным
    		SendToRR("SETVAR;MYJAMG||SETVAR;MYJAMR;" . jamtime)
    	}
    	return ; конец процедуры CheckJam
    
    killras:
    	Process, Exist, rasdial.exe
    	If (ErrorLevel != 0)
    	{
    		RunWait, taskkill.exe /IM rasdial.exe,, Hide
    		Process, Exist, rasdial.exe
    		If (ErrorLevel != 0)
    		{
    			RunWait, taskkill.exe /IM rasdial.exe,, Hide
    			Sleep, 5000
    			Process, Exist, rasdial.exe
    			If (ErrorLevel != 0)
    			{
    				RunWait, taskkill.exe /IM rasdial.exe /F,, Hide
    			}
    		}
    		Sleep, 5000
    	}
    	return
    
    DoOffline:
    	If (online = 1)
    		SendToRR("SETVAR;OnlineSwitch;" . chkonline)
    	Else
    		SendToRR("SETVAR;OnlineSwitch")
    	setoffline := 0
    
    ;	Gosub killras
    	RunWait, rasdial %myconnection% /DISCONNECT,, Hide
    	SendToRR("SETVAR;OnlineStatus;" . offlinestr)
    
    	return
    
    DoOnline:
    	If (online = 1)
    		SendToRR("SETVAR;OnlineSwitch;" . chkonline)
    	Else
    		SendToRR("SETVAR;OnlineSwitch")
    ;	If (jamexpired = 0)
    ;	{
    ;		; пробки свежие - считаем, что с тырнетом всё в порядке
    ;		SendToRR("SETVAR;OnlineStatus;" . onlinestr)
    ;		return
    ;	}
            Loop, 5 ; предпринимаем 5 попыток подключиться
    	{
    		RunWait, ping -n 3 -f -w 4000 %pinghost1%,, UseErrorLevel|Hide
    		If (ErrorLevel = 0)
    		{
    			SendToRR("SETVAR;OnlineStatus;" . onlinestr)
    			Break
    		}
    		Else
    		{
    			If (online = 1)
    				Sleep, 5000
    			RunWait, ping -n 3 -f -w 4000 %pinghost2%,, UseErrorLevel|Hide
    			If (ErrorLevel = 0)
    			{
    				SendToRR("SETVAR;OnlineStatus;" . onlinestr)
    				Break
    			}
    			Else
    			{
    				SendToRR("SETVAR;OnlineStatus;" . offlinestr)
    			}
    		}
    		If (online = 1)
    		{
    			Gosub DoOffline
    			Sleep, 2000
    			If (A_Index > 4)
    			{
    ; 4 попытки подключиться прошли напрасно - принимаем радикальные меры
    ; Отключаем и снова подключаем адаптер bluetooth
    				Gosub killras
    
    				PostMessage, 0x111, 7049,,, ahk_class AfxWnd42 ; bluetooth off
    				Sleep, 4000
    				PostMessage, 0x111, 7048,,, ahk_class AfxWnd42 ; bluetooth on
    				Sleep, 8000
    
    ;				RunWait, C:\Tools\usr.exe stop -n "%btapapter%",, Hide
    ;				Sleep, 2000
    ;				RunWait, C:\Tools\usr.exe return -n "%btadapter%",, Hide
    			}
    			RunWait, rasdial %myconnection%,, Hide
    		}
    		Else
    		{
    			Break
    		}
    	}
    	return
    
    VideoMove:
    	onvideomove := 1
    	readyformove := 0
    	allsize := 0
    	allcount := 0
    	cursize := 0
    	curcount := 0
    	curvideodestfound := 0
    	if InStr(FileExist(videodest), "D")
    	{
    		curvideodest := videodest
    		curvideodestD := videodestD
    		curvideodestfound := 1
    		gpsdatadest := curvideodestD . ":\GpsData"
    	}
    	Else
    	{
    		if InStr(FileExist(videodest2), "D")
    		{
    			curvideodest := videodest2
    			curvideodestD := videodest2D
    			curvideodestfound := 2
    			gpsdatadest := curvideodestD . ":\GpsData"
    		}
    	}
    	If (curvideodestfound > 0)
    	{
    		DriveSpaceFree, destspace, %curvideodest%
    		Loop, %videosource%
    		{
    			allsize := allsize + A_LoopFileSizeKB
    			allcount := allcount + 1
    		}
    		needspace := round(allsize/1024 - destspace)+10
    		if(needspace > 0)
    		{
    			Progress, B ZH0 W600 H120 CW000000 CB00F000 CT00D000 FM20 FS18 WM1000 WS700, `nНа USB-накопителе не хватает %needspace%Mb!`nПеренос видеофайлов не возможен!,,, Courier New
    			Sleep, 5000
    			Progress, Off
    		}
    		Else
    		{
    			readyformove := 1
    		}
    	}
    	Else
    	{
    		Progress, B ZH0 W600 H120 CW000000 CB00F000 CT00D000 FM20 FS18 WM1000 WS700, `nUSB-накопитель не найден!`nПеренос видеофайлов не возможен!,,, Courier New
    		Sleep, 5000
    		Progress, Off
    	}
    	if(readyformove == 1)
    	{
    		Progress, B R0-%allsize% Y410 ZH50 ZX20 ZY10 W600 H190 CW000000 CB00F000 CT00D000 FM24 FS20 WM1000 WS700, 0`%`r`n0 of %allcount%`r`n%a_space%, Перенос маршрутного видео, Перенос видеозаписей, Tahoma
    		copytime := A_TickCount
    		copyspeedtext := a_space
    		Loop, %videosource%
    		{
    			prometer := round(cursize * 100 / allsize)
    			Progress, %cursize%, %curcount% из %allcount%`n%prometer%`% объёма%copyspeedtext%
    			FileMove, %A_LoopFileLongPath%, %curvideodest%, 1
    			if ErrorLevel
    			{
    				Progress, B ZH0 W600 H120 CW000000 CB00F000 CT00D000 FM20 FS18 WM1000 WS700, `nОшибка переноса %A_LoopFileName%!`nПеренос видеофайлов не возможен!,,, Courier New
    				Sleep, 5000
    				Progress, Off
    				onvideomove := 0
    				return
    			}
    			cursize := cursize + A_LoopFileSizeKB
    			curcount := curcount + 1
    			curcopytime := (A_TickCount - copytime) / 1000
    			copyspeed := round((allsize - cursize) / (cursize / curcopytime))
    			If(curcount > 4)
    			{
    				copyspeedtext := ", осталось " copyspeed " сек"
    			}
    		}
    		Progress, %cursize%, %curcount% из %allcount%`n100`% объёма
    		FileCreateDir, %gpsdatadest%
    		allcount := 0
    		Loop, %gpsdatasource%
    		{
    			allcount := allcount + 1
    		}
    		Progress, Off
    		Progress, B R0-%allcount% Y410 ZH50 ZX20 ZY10 W600 H190 CW000000 CB00F000 CT00D000 FM24 FS20 WM1000 WS700, 0`%`r`n0 of %allcount%`r`n%a_space%, Перенос gps-данных, Перенос gps-данных, Tahoma
    		cur := 0
    		Loop, %gpsdatasource%
    		{
    			Progress, %cur%, %cur% из %allcount%`n
    			FileCopy, %A_LoopFileLongPath%, %gpsdatadest%, 1
    			cur := cur + 1
    		}
    		Progress, %cur%, %cur% из %allcount%`n
    		RunWait, C:\Tools\usr.exe stop -d %curvideodestD%,, Hide
    ;		Sleep, 3000
    		Progress, Off
    	}
    	onvideomove := 0
    	return
    
    CreateGpsTitles:
    	allcount := 0
    	curcount := 0
    	Loop, %videosource%
    	{
    		If(!(A_LoopFileExt = "SRT"))
    		{
    			allcount := allcount + 1
    		}
    	}
    	Progress, B R0-%allcount% Y410 ZH50 ZX20 ZY10 W600 H190 CW000000 CB00F000 CT00D000 FM24 FS20 WM1000 WS700, 0`%`r`n0 of %allcount%, Создание субтитров к маршрутному видео, Создание субтитров, Tahoma
    	Loop, %videosource%
    	{
    		If(!(A_LoopFileExt = "SRT"))
    		{
    			Progress, %curcount%, %curcount% из %allcount%`n
    			RunWait, C:\CGSubTitles\CGSubTitles.exe %A_LoopFileLongPath%,, Hide
    			curcount := curcount + 1
    		}
    	}
    	Progress, %cursize%, %curcount% из %allcount%`n
    	Sleep, 1000
    	Progress, Off
    	return
    
    OnCopyData(wparam, lparam)
    {
    ; функция получения входящего сообщение WM_COPYDATA
    ; Сюда приходит вызов с полученным сообщением-командой от RR
    
    	local pStr
    	pStr := NumGet(lparam+8), len := NumGet(lparam+4)
    	RecvMessage := SubStr(DllCall("MulDiv", "Int", pStr, "Int",1, "Int",1, "str"),1,len)
    
    	If (RecvMessage = "switch") {
    		If (online = 1)
    			online := 0
    		Else
    			online := 1
    	} Else If (RecvMessage = "online") {
    		online := 1
    	} Else If (RecvMessage = "offline") {
    		online := 0
    	} Else If (RecvMessage = "videomove") {
    		If (onvideomove <> 1)
    			SetTimer, VideoMove, -1000, -1 ; инициируем перенос видеофайлов
    	} Else If(RecvMessage = "creategpstitles") {
    		SetTimer, CreateGpsTitles, -1000, -1 ; инициируем создание субтитров
    	} Else If(RecvMessage = "movecg") {
    		WinShow, %cityguide%
    		WinSet, Style, -0xC00000, %cityguide%
    		WinSet, Region,, %cityguide%
    		WinActivate, %cityguide%
    		WinMove, %cityguide%, , -803, -36, 804, 640
    	} Else If(RecvMessage = "moveigo") {
    		WinShow, iGO8
    		WinSet, Style, -0xC00000, iGO8
    		WinSet, Region,, iGO8
    		WinActivate, iGO8
    		WinMove, iGO8, , -760, 0, 720, 600
    	} Else If(RecvMessage = "movegisrx") {
    		WinShow, gisrx
    		WinSet, Style, -0xC00000, gisrx
    		WinSet, Region,, gisrx
    		WinActivate, gisrx
    		WinMove, gisrx, , -760, 0, 720, 600
    	}
    
    	If (online = 1)
    	{
    		setoffline := 0
    		SendToRR("SETVAR;OnlineSwitch;" . chkonline)
    	}
    	Else
    	{
    		setoffline := 1
    		SendToRR("SETVAR;OnlineSwitch")
    	}
    
    	If (oncheckonline <> 1)
    		SetTimer, CheckInternet, -1000, -1 ; инициируем новый цикл проверки Интернета
    
    	return 1 ; подтверждаем успешный приём сообщения
    }
    
    ; Функция отправки команды в RoadRunner
    SendToRR(msg="")
    {
    	CDSSendMessage(msg, "RoadRunner")
    	return
    }
    
    ; Функция отправки команды методом WM_COPY
    CDSSendMessage(msg, prg, hndl="")
    {
    	len := StrLen(msg)
    	port := 1
    	VarSetCapacity(CopyDataStruct, 12, 0)
    	NumPut(port, CopyDataStruct, 0)
    	NumPut(len, CopyDataStruct, 4) ; тут именно len, а не len+1 как пишут в некоторых примерах
    	NumPut(&msg, CopyDataStruct, 8)
    	SendMessage, 0x4A, %hndl%, &CopyDataStruct,, %prg%
    	return
    }
    
    doSK:
    	; Если экранная клавиарура запущена, то управляем ею с помощью "горячей клавиши"
    	; Иначе - запускаем исполняемый файл
    	IfWinExist, ahk_class TFloatingWindowLangForm
    	{
    		Send, ^!k
    	}
    	Else
    	{
    		Run, "C:\Program Files\ComfortKeyboard\CKeyboard.exe"
    	}
    	return
    
    
    
    ; Далее - обычные реакции на хоткеи
    
    
    ^!+c::
    	Critical
    	KeyWait, c
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	IfWinExist, ahk_class Winamp v1.x
    	{
    		; Нашли активный KMPlayer - управляем им
    		ControlSend, , !``
    	}
    	Else
    	{
    		Send, ^!5		; AutoHide для указателя мышки
    	}
    	return
    
    ^!+b::
    	Critical
    	KeyWait, b
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	IfWinExist, ahk_class vanBascoPlayerClass
    	{
    		; нашли активный караоке плейер - удаляем текущую песню с диска
    		WinGetTitle, KarTitle, ahk_class vanBascoPlayerClass
    		StringReplace, KarTitle, KarTitle, %kardel%, , All
    		FileDelete, c:\karaoke.mega\%KarTitle%.kar
    		WinActivate, %karaoke%
    		Send, ^n
    
    	}
    	Else
    	{
    		Send, {Click right}	; имитация правой кнопки мышки
    	}
    	return
    
    ; скриншот вс ж лучше делает shup ;)
    ;^!+a::			; screenshot текущего экрана
    ;	Critical
    ;	KeyWait, a
    ;	KeyWait, Shift
    ;	KeyWait, Alt
    ;	KeyWait, Control
    ;	RunWait, nircmd savescreenshot C:\PrScr.png,, Hide
    ;	FileGetTime, OutputVar, C:\PrScr.png, C
    ;	FileMove C:\PrScr.png, C:\camera\ss_%OutputVar%.png
    ;	return
    
    ^!+e::			; Команда NEXT для WinAmp'а / KMPlayer'а / Kararoke
    	Critical
    	KeyWait, e
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	IfWinExist, %karaoke%
    	{
    		; Нашли активный karaoke player
    		WinActivate
    		Send, ^n
    	}
    	Else
    	{
    		IfWinExist, ahk_class Winamp v1.x
    		{
    			; Нашли активный KMPlayer - управляем им
    			PostMessage, 0x111, 40048,,, ahk_class Winamp v1.x ; следующий трек
    		}
    		Else
    		{
    			PostMessage, 0x111, 40048,,, ahk_class RRWinamp ; следующий трек
    		}
    	}
    	return
    
    ^!+f::			; Команда PREV для WinAmp'а / KMPlayer'а / Karaoke
    	Critical
    	KeyWait, f
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	IfWinExist, %karaoke%
    	{
    		; Нашли активный karaoke player
    		WinActivate
    		Send, ^p
    	}
    	Else
    	{
    		IfWinExist, ahk_class Winamp v1.x
    		{
    			; Нашли активный KMPlayer - управляем им
    			PostMessage, 0x111, 40044,,, ahk_class Winamp v1.x ; предыдущий трек
    		}
    		Else
    		{
    			PostMessage, 0x111, 40044,,, ahk_class RRWinamp ; предыдущий трек
    		}
    	}
    	return
    
    ^!+h::			; Команда PLAY/PAUSE для WinAmp'а / KMPlayer'а / Karaoke
    	Critical
    	KeyWait, h
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	IfWinExist, %karaoke%
    	{
    		; Нашли активный karaoke player
    		WinActivate
    		Send, {Space}
    	}
    	Else
    	{
    		IfWinExist, ahk_class Winamp v1.x
    		{
    			; Нашли активный KMPlayer - управляем им
    			; DoubleClick в окно проигрывателя - Play|Pause
    			WinActivate
    			Send, {Space}
    
    ;			SendMessage, 0x400,, 104,, ahk_class Winamp v1.x ; проверка воспроизведения
    ;			If ErrorLevel = 0 ; если не воспроизводится, то...
    ;				PostMessage, 0x111, 40045,,, ahk_class Winamp v1.x ; включить воспроизведение
    ;			Else ; если воспроизводится, то...
    ;				PostMessage, 0x111, 40046,,, ahk_class Winamp v1.x ; поставить на паузу
    
    		}
    		Else
    		{
    			SendMessage, 0x400,, 104,, ahk_class RRWinamp ; проверка воспроизведения
    			If ErrorLevel = 0 ; если не воспроизводится, то...
    				PostMessage, 0x111, 40045,,, ahk_class RRWinamp ; включить воспроизведение
    			Else ; если воспроизводится, то...
    				PostMessage, 0x111, 40046,,, ahk_class RRWinamp ; поставить на паузу
    		}
    	}
    	return
    
    ^!+i::			; Переключатель профилей PowerStrip'а день/ночь
    	Critical
    	KeyWait, i
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	if(!day)
    	{
    		Send, ^!1
    		day := 1
    	}
    	else
    	{
    		Send, ^!2
    		day := 0
    	}
    	return
    
    ^!+k::			; Показывать или не показывать экранную клавиатуру
    	Critical
    	KeyWait, k
    	KeyWait, Shift
    	KeyWait, Alt
    	KeyWait, Control
    	Process, Exist, RoadRunner.exe
    	If (ErrorLevel != 0)
    	{
    		; Если запущен RR, то клавиатура нам нужна только для Fennec'а
    		IfWinActive, Fennec
    		{
    			Gosub doSK
    		}
    	}
    	Else
    	{
    		Gosub doSK
    	}
    	return
    Последний раз редактировалось ashu; 03.05.2009 в 23:00.
    С уважением, Алексей
    Мой Prius NHW11

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 12 (пользователей: 0 , гостей: 12)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •