micdelt wrote:
aver remote from USB 2.0 Plus device to control avertv.exe and media classic player. Shutdown computer when AUTOSCAN pressed for about 3 seconds.
Thank you for this.
Just bought a cheap old Avermedia analog tuner and modified your code to work for it:
Code:
; Avermedia AverTV GO (TVCapture 98)
#NoEnv
#Persistent
SetBatchLines -1
DetectHiddenWindows, on
aver_path = %A_ProgramFiles%\AVerTV\
Timer := 333
DllCall("ole32\CoInitialize", UInt,0)
AverAPI := DllCall("LoadLibrary", "Str", aver_path . "averapi.dll")
if AverAPI = ""
Goto, End_AverRemote ;
aver_keys_s := "-126,2,-94,98,-30,-110,82,-46,-78,114,-14,74,-118,-54,-22,10,"
. "-61,122,50,-6,67,42,18,-102,26,-38,90,-70,58,-62,-125,3,34,-86"
aver_names_s := "TVFM,POWER,1,2,3,4,5,6,7,8,9,L,0,R,SNAPSHOT,16CHPREV,"
. "CHUP,VOLDOWN,FULLSCREEN,VOLUP,CHDOWN,MUTE,AUDIO,REC,PLAY,STOP,"
. "PAUSE,BACKWARD,FORWARD,TELETEXT,PREV,NEXT,SOURCE,AUTOSCAN"
StringSplit, aver_keys, aver_keys_s, `,
StringSplit, aver_names,aver_names_s, `,
AVER_GetRemoteData := DllCall("GetProcAddress", UInt, AverAPI, "str", "AVER_GetRemoteData")
AVER_HWInit := DllCall("GetProcAddress", UInt, AverAPI, "str", "AVER_HWInit")
AVER_Free := DllCall("GetProcAddress", UInt, AverAPI, "str", "AVER_Free")
DllCall(AVER_HWInit,Int,0,Str,"",Int,0,"Cdecl")
prevtime = 0
prevkey = -1
keyseqcount = 0
VarSetCapacity(rd,1,0)
SetTimer, AverLoop, % Timer
Goto, End_AverRemote
AverLoop:
DllCall(AVER_GetRemoteData,"int",&rd,"Cdecl")
key := NumGet(rd,0,"Char")
;Fileappend, % key . "`n", R:\rd.txt
If key != 0
ToolTip, % key
if key != -1
{
now := A_TickCount
since := now - prevtime
if (prevkey = key and since < %Timer%*1.1)
keyseqcount++
else
keyseqcount = 0
prevtime := now
prevkey := key
;if keyseqcount = 0
DoAverEvent()
}
return
;DllCall(AVER_Free,"Cdecl")
;DllCall("ole32\CoUninitialize")
;ExitApp
DoAverEvent()
{
global key,aver_keys0,aver_names0
loop %aver_keys0%
{
if (key = aver_keys%A_Index%)
{
al := "Aver" . aver_names%A_Index%
if IsLabel(al)
Gosub %al%
else
{
ToolTip % aver_names%A_Index%
SetTimer, ClearToolTip, -3000
}
return
}
}
}
ClearToolTip:
ToolTip
return
AverTVFM:
return
AverFULLSCREEN:
if keyseqcount = 0
{
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xC13, , , ahk_class AVerTVApp
IfWinExist, ahk_class MediaPlayerClassicW
WinActivate, ahk_class MediaPlayerClassicW
Send {F11}
}
return
AverCHUP:
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xC0F, , , ahk_class AVerTVApp
return
AverCHDOWN:
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xC0F, 1, , ahk_class AVerTVApp
return
AverVOLUP:
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xC0E, , , ahk_class AVerTVApp
else IfWinActive, ahk_class MediaPlayerClassicW
Send {Up}
else
Send {Volume_Up}
return
AverVOLDOWN:
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xC0E, 1, , ahk_class AVerTVApp
else IfWinActive, ahk_class MediaPlayerClassicW
Send {Down}
else
Send {Volume_Down}
return
AverPOWER:
if keyseqcount = 0
{
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xBC6, , , ahk_class AVerTVApp
else
Run % aver_path . "AverTv.exe"
}
return
AverAUTOSCAN:
if (keyseqcount > 0)
{
SetTimer, ProgressOff, 1000
Progress, b zh0 fs20 cwFF0000, % "SHUTDOWN COUNTDOWN: " . (10 -keyseqcount)
if (keyseqcount >= 10)
Shutdown, 9
}
return
ProgressOff:
Progress, Off
return
AverMUTE:
if keyseqcount = 0
{
IfWinExist, ahk_class AVerTVApp
PostMessage, 0x497, 0xC0D, , , ahk_class AVerTVApp
else
Send {Volume_Mute}
}
return
AverBACKWARD:
IfWinExist, ahk_class MediaPlayerClassicW
{
WinActivate, ahk_class MediaPlayerClassicW
Send ^{Left}
}
return
AverFORWARD:
IfWinExist, ahk_class MediaPlayerClassicW
{
WinActivate, ahk_class MediaPlayerClassicW
Send ^{Right}
}
return
AverNEXT:
if keyseqcount = 0
IfWinExist, ahk_class MediaPlayerClassicW
{
WinActivate, ahk_class MediaPlayerClassicW
Send {Media_Next}
}
return
AverPREV:
if keyseqcount = 0
IfWinExist, ahk_class MediaPlayerClassicW
{
WinActivate, ahk_class MediaPlayerClassicW
Send {Media_Prev}
}
return
AverPLAY:
AverPAUSE:
if keyseqcount = 0
{
IfWinExist, ahk_class MediaPlayerClassicW
{
WinActivate, ahk_class MediaPlayerClassicW
Send {Space}
}
}
return
#T::
IfWinNotExist, ahk_class AVerTVApp
Run % aver_path . "AverTv.exe"
return
End_AverRemote: