Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save holgate/7dcc49ef9d202a5a199e to your computer and use it in GitHub Desktop.
Save holgate/7dcc49ef9d202a5a199e to your computer and use it in GitHub Desktop.
Netflix Windows 8.1 Metro app - remote navigation for HTPC usage - with "Change the Size of Apps on the screen" in Windows 8.1 set to "Larger"
;DEFINE CONSTANTS...
;
;
; Global value settings that are independant to display-size...
;
; MAIN MENU
boundaryLeft := 120
boundaryRight := 1800
leftScrollbarXpos := 28
leftScrollbarYpos := 1065
rightScrollbarXpos := 1891
rightScrollbarYpos := 1065
;
; For 1920x1080px displays, with "Change the Size of Apps on the screen" set to "Larger"...
;
; MAIN MENU
mainmenuHeaderTop := 200 ;top categories text start Y pos
mainmenuGridTop := 257 ;top thumbs start Y pos
mainmenuStartXpos := 962 ; init X position
mainmenuStartYpos := 458 ; init Y position
mainmenuThumbDisplacementX := 176
mainmenuThumbDisplacementY := 242
; SEARCH MENU
searchButtonXpos := 1646
searchButtonYpos := 100
; SEARCH RESULTS
searchresultsStartXpos := 780 ; init X position
searchresultsStartYpos := 284 ; init Y position
; NAV MENU
navmenuButtonXpos := 1538
navmenuButtonYpos := 100
navmenuFirstMenuButtonXpos := 216
navmenuFirstMenuButtonYpos := 87
navmenuThumbDisplacementX := 373
navmenuThumbDisplacementY := 62
; CATEGORIES MENU
categoriesButtonXpos := 1895
categoriesButtonYpos := 1030
categoriesFirstMenuButtonXpos := 239
categoriesFirstMenuButtonYpos := 433
categoriesThumbDisplacementX := 273
categoriesThumbDisplacementY := 371
; DETAILS PAGE
backnavXpos := 60 ; top back nav button X pos
backnavYpos := 102 ; top back nav button Y pos
seasonButtonXpos := 316
seasonButtonYpos := 435
seasonButtonRowHeight := 64
detailsHeaderTop := 435 ;top season selector button start Y pos
detailsGridTop := 500 ;top thumbs start Y pos
detailsStartXpos := 316 ; init X position
detailsStartYpos := 610 ; init Y position
detailsThumbDisplacementX := 406
detailsThumbDisplacementY := 0
; PLAYING MEDIA
; SKIP/NAV CONTROLS
skipnextXpos := 460
skipnextYpos := 140
skipprevXpos := 234
skipprevYpos := 140
; TIMELINE BAR
timelinebar0Xpos := 160
timelinebar0Ypos := 890
timelinebar100Xpos := 1704
timelinebar100Ypos := 890
timelinebar10Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*1) + timelinebar0Xpos
timelinebar20Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*2) + timelinebar0Xpos
timelinebar30Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*3) + timelinebar0Xpos
timelinebar40Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*4) + timelinebar0Xpos
timelinebar50Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*5) + timelinebar0Xpos
timelinebar60Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*6) + timelinebar0Xpos
timelinebar70Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*7) + timelinebar0Xpos
timelinebar80Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*8) + timelinebar0Xpos
timelinebar90Xpos := ((timelinebar100Xpos - timelinebar0Xpos) /10*9) + timelinebar0Xpos
timelinebarColorHandle := "0x0A07B2"
timelinebarColorBg := "0x3F3F3F"
; FOOTER CONTROLS
nextepisodeXpos := 1554
nextepisodeYpos := 1006
episodesmenuXpos := 1695
episodesmenuYpos := 1006
languagesmenuXpos := 1834
languagesmenuYpos := 1006
;
;DEFINE VARIABLES...
currentView := "mainmenu" ;can be: mainmenu, mainmenu_category, details, details_seasonSelector, movie, search, searchresults, navmenu, categoryGrid
gridTop := mainmenuGridTop
;
;
CoordMode, Mouse, Screen ;Mouse coords used from here on will be absolute to the screen coordinates, not relative to the active window
#SingleInstance force ;Only one instance of script can run
#Persistent ;Make this script run indefinitely
#NoEnv
;#InstallKeybdHook
SetTitleMatchMode 3
SetDefaultMouseSpeed, 0 ;Move the mouse instantly.
;SetTimer, checkNetflixExists, 2000
;return
;checkNetflixExists:
#ifWinActive, Netflix
;IfWinNotActive, Netflix, , WinActivate, Netflix,
;WinWait, Netflix
;WinWaitActive, Netflix,
;{
MouseMove, %mainmenuStartXpos%, %mainmenuStartYpos%, 0 ;Move the mouse to init location
;SetTimer, WatchCursor, 1000
;settimer startMonitoring, 100 ;Run this function pretty much instantly straight afterwards
;return
Loop
{
;startMonitoring:
Down::
if (currentView = "details")
{
;MouseMove, 0,%detailsThumbDisplacementY%, 0, R
MouseMove, 0,%mainmenuThumbDisplacementY%, 0, R ;TODO
} else if (currentView = "details_seasonSelector") {
MouseMove, 0,%seasonButtonRowHeight%, 0, R
} else if (currentView = "navmenu") {
MouseMove, 0,%navmenuThumbDisplacementY%, 0, R
} else if (currentView = "categoryGrid") {
MouseMove, 0,%categoriesThumbDisplacementY%, 0, R
} else {
MouseMove, 0,%mainmenuThumbDisplacementY%, 0, R
}
Goto, checkBounds
return
Up::
if (currentView = "details")
{
;MouseMove, 0,-%detailsThumbDisplacementY%, 0, R
MouseMove, 0,-%mainmenuThumbDisplacementY%, 0, R ;TODO
} else if (currentView = "details_seasonSelector") {
MouseMove, 0,-%seasonButtonRowHeight%, 0, R
} else if (currentView = "navmenu") {
MouseMove, 0,-%navmenuThumbDisplacementY%, 0, R
} else if (currentView = "categoryGrid") {
MouseMove, 0,-%categoriesThumbDisplacementY%, 0, R
} else {
MouseMove, 0,-%mainmenuThumbDisplacementY%, 0, R
}
Goto, checkBounds
return
Right::
; Move the mouse by X pixels Right from its current location:
;MouseMove, %mainmenuThumbDisplacementX%,0, 0, R
MouseGetPos, mouseXpos, mouseYpos
if (currentView = "details")
{
MouseMove, %detailsThumbDisplacementX%, 0, 0, R
} else if (currentView = "details_seasonSelector") {
} else if (currentView = "navmenu") {
MouseMove, %navmenuThumbDisplacementX%, 0, 0, R
} else if (currentView = "categoryGrid") {
MouseMove, %categoriesThumbDisplacementX%, 0, 0, R
} else {
MouseMove, %mainmenuThumbDisplacementX%, 0, 0, R
}
Goto, checkBounds
return
Left::
; Move the mouse by X pixels Left from its current location:
;MouseMove, -%mainmenuThumbDisplacementX%,0, 0, R
MouseGetPos, mouseXpos, mouseYpos
if (currentView = "details")
{
MouseMove, -%detailsThumbDisplacementX%, 0, 0, R
} else if (currentView = "details_seasonSelector") {
} else if (currentView = "navmenu") {
MouseMove, -%navmenuThumbDisplacementX%, 0, 0, R
} else if (currentView = "categoryGrid") {
MouseMove, -%categoriesThumbDisplacementX%, 0, 0, R
} else {
MouseMove, -%mainmenuThumbDisplacementX%, 0, 0, R
}
Goto, checkBounds
return
F9::
; Reset init pos
MouseMove, %mainmenuStartXpos%, %mainmenuStartYpos%, 0
return
ENTER::
; Select
;currentView := "details"
;MouseMove, %mainmenuStartXpos%, %mainmenuStartYpos%, 0
MouseGetPos, savedXpos, savedYpos ;save position of currently selected menu item
Click
if (currentView="details" and savedXpos=seasonButtonXpos and savedYpos=seasonButtonYpos)
{
currentView := "details_seasonSelector"
;MsgBox, currentView
} else if (currentView="details_seasonSelector") {
currentView := "details"
MouseMove, %detailsStartXpos%, %detailsStartYpos%, 0
} else if (currentView="details") {
savedDetailsXpos := savedXpos ;save position of currently selected menu item
savedDetailsYpos := savedYpos ;save position of currently selected menu item
Sleep, 100
currentView := "movie"
} else if (currentView="mainmenu" and savedYpos<mainmenuGridTop) { ;i.e. if user selected a category at top of manimenu grid
savedMainmenuXpos := savedXpos ;save position of currently selected menu item
savedMainmenuYpos := savedYpos ;save position of currently selected menu item
Sleep, 100
currentView := "mainmenu_category"
MouseMove, %mainmenuStartXpos%, %mainmenuStartYpos%, 0
} else if (currentView="navmenu") {
savedNavmenuXpos := savedXpos ;save position of currently selected menu item
savedNavmenuYpos := savedYpos ;save position of currently selected menu item
Sleep, 100
currentView := "mainmenu_category"
MouseMove, %mainmenuStartXpos%, %mainmenuStartYpos%, 0
} else if (currentView="categoryGrid") {
savedCategoryXpos := savedXpos ;save position of currently selected menu item
savedCategoryYpos := savedYpos ;save position of currently selected menu item
Sleep, 100
currentView := "mainmenu"
MouseMove, %mainmenuStartXpos%, %mainmenuStartYpos%, 0
} else if (currentView="searchresults") {
savedSearchresultsXpos := savedXpos ;save position of currently selected menu item
savedSearchresultsYpos := savedYpos ;save position of currently selected menu item
Sleep, 100
currentView := "details"
MouseMove, %detailsStartXpos%, %detailsStartYpos%, 0
} else { ;i.e. if in "mainmenu" view...
savedMainmenuXpos := savedXpos ;save position of currently selected menu item
savedMainmenuYpos := savedYpos ;save position of currently selected menu item
Sleep, 100
currentView := "details"
MouseMove, %detailsStartXpos%, %detailsStartYpos%, 0
}
return
;Media_Prev::
; Skip_Next
;Sleep, 100
;Click %timelinebar0Xpos%, %timelinebar0Ypos%
;Sleep, 100
;Click %timelinebar0Xpos%, %timelinebar0Ypos%
;return
;Media_Next::
; Skip_Next
;Sleep, 100
;Click %skipnextXpos%, %skipnextYpos%
;return
;Media_Prev
!#P:: ; !=Alt; #=Windowskey; ^=Ctrl; +=Shift
KeyWait, P, T0.5 ;wait for Xseconds ;NOTE: "KeyWait, Media_Prev, T1" doesnt work because it's a Media button and not a physical/logical button apparently, hence why I remapped this button!?!
If ErrorLevel = 0
{
;SHORT PRESS
lastKeyPressed := "skipPrev"
Goto, GetProgress
return
}
Else
{
;LONG PRESS
;go to timecode 0:00
MouseGetPos, MouseX, MouseY
MouseMove, MouseX+1, MouseY+1, 0 ;move the mouse to make the progess bar appear
;Click right ;click right mouse button to make the progess bar appear
Sleep, 500 ;wait for UI to react/update
jumpPos := timelinebar0Xpos
Goto, jumpToTimelinePos
}
return
Media_Next::
lastKeyPressed := "skipNext"
Goto, GetProgress
return
GetProgress:
MouseGetPos, MouseX, MouseY
MouseMove, MouseX+1, MouseY+1, 0 ;move the mouse to make the progess bar appear
;Click right ;click right mouse button to make the progess bar appear
Sleep, 500 ;wait for UI to react/update
PixelGetColor, barColor, timelinebar10Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 0
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar0Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar10Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar20Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 10
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar0Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar20Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar30Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 20
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar10Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar30Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar40Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 30
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar20Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar40Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar50Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 40
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar30Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar50Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar60Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 50
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar40Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar60Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar70Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 60
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar50Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar70Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar80Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 70
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar60Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar80Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar90Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 80
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar70Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar90Xpos
}
Goto, jumpToTimelinePos
return
}
PixelGetColor, barColor, timelinebar100Xpos, timelinebar0Ypos
if (barColor = timelinebarColorBg) {
barProgress := 90
if (lastKeyPressed = "skipPrev") {
jumpPos := timelinebar80Xpos
} else if (lastKeyPressed = "skipNext") {
jumpPos := timelinebar100Xpos - 80 ;minus credits buffer
}
Goto, jumpToTimelinePos
return
}
return
jumpToTimelinePos:
;MsgBox progress bar is at %barProgress%
Click %jumpPos%, %timelinebar0Ypos%
return
;timelinebar90Xpos
;timelinebarColorHandle
;timelinebarColorBg
; Next Episode
;Sleep, 100
;Click %nextepisodeXpos%, %nextepisodeYpos%
;return
!#I:: ; !=Alt; #=Windowskey; ^=Ctrl; +=Shift
; Info button
;Sleep, 100
Click %episodesmenuXpos%, %episodesmenuYpos%
return
Browser_Back::
; Back
if (currentView = "details_seasonSelector")
{
Send {Escape} ;to exit out of navMenu
currentView := "details"
} else if (currentView = "movie") {
Click %backnavXpos%, %backnavYpos%
Send {Escape} ;to exit out of navMenu
Sleep, 100
MouseMove, savedDetailsXpos,savedDetailsYpos, 0
currentView := "details"
} else if (currentView = "searchresults") {
Click %backnavXpos%, %backnavYpos%
Send {Escape} ;to exit out of navMenu
Sleep, 100
MouseMove, savedMainmenuXpos,savedMainmenuYpos, 0
currentView := "mainmenu"
} else { ;i.e. if in "details" view, or a sub-category view in the mainmenu...
Click %backnavXpos%, %backnavYpos%
Send {Escape} ;to exit out of navMenu
Sleep, 100
MouseMove, savedMainmenuXpos,savedMainmenuYpos, 0
currentView := "mainmenu"
}
return
!#G:: ; !=Alt; #=Windowskey; ^=Ctrl; +=Shift
;MsgBox backPRessed
; Search
Click %searchButtonXpos%, %searchButtonYpos%
Sleep, 100
MouseMove, searchresultsStartXpos, searchresultsStartYpos, 0
currentView := "searchresults"
return
!#R:: ; !=Alt; #=Windowskey; ^=Ctrl; +=Shift
; navmenu (accessed via Hamburger icon)
MouseGetPos, savedMainmenuXpos, savedMainmenuYpos ;save position of currently selected menu item
Click %navmenuButtonXpos%, %navmenuButtonYpos%
Sleep, 100
MouseMove, navmenuFirstMenuButtonXpos,navmenuFirstMenuButtonYpos, 0
currentView := "navmenu"
return
!#Y:: ; !=Alt; #=Windowskey; ^=Ctrl; +=Shift
; categoryGrid (accessed via '-' icon in bottom right)
MouseGetPos, savedMainmenuXpos, savedMainmenuYpos ;save position of currently selected menu item
Click %categoriesButtonXpos%, %categoriesButtonYpos%
Sleep, 100
MouseMove, categoriesFirstMenuButtonXpos,categoriesFirstMenuButtonYpos, 0
currentView := "categoryGrid"
return
checkBounds:
MouseGetPos, mouseXpos, mouseYpos
;MsgBox, %currentView%
if (currentView = "details") {
;MsgBox, itsOnDetails
;gridTop = %detailsGridTop%
if (mouseYpos < detailsGridTop) {
MouseMove, %seasonButtonXpos%, %seasonButtonYpos%, 0
return
}
if (mouseXpos < boundaryLeft) {
;SendRaw {Left}
;MouseGetPos, mouseXpos, mouseYpos
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
;MouseMove, %mouseXpos%, %mouseYpos%, 0 ;move it back to where it was
MouseMove, %boundaryLeft%, %mouseYpos%, 0 ;temp
;Send {PgUp}
return
} else if (mouseXpos > boundaryRight) {
;SendInput {Right}
;MouseGetPos, mouseXpos, mouseYpos
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
;MouseMove, %mouseXpos%, %mouseYpos%, 0 ;move it back to where it was
MouseMove, %boundaryRight%, %mouseYpos%, 0 ;temp
;Send {PgDn}
return
}
} else if (currentView = "navmenu") {
} else {
;MsgBox, %currentView%
;gridTop = %mainmenuGridTop%
if (mouseYpos < mainmenuHeaderTop) {
MouseMove, %mouseXpos%, %mainmenuHeaderTop%, 0
return
}
if (mouseXpos < boundaryLeft) {
;SendRaw {Left}
MouseMove, %boundaryLeft%, %mouseYpos%, 0 ;temp
if (currentView = "mainmenu_category") {
;Send {PgUp}
MouseGetPos, mouseXpos, mouseYpos
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
Click %leftScrollbarXpos%, %leftScrollbarYpos%
MouseMove, %mouseXpos%, %mouseYpos%, 0 ;move it back to where it was
} else {
Click WheelLeft
}
return
} else if (mouseXpos > boundaryRight) {
;SendInput {Right}
MouseMove, %boundaryRight%, %mouseYpos%, 0 ;temp
if (currentView = "mainmenu_category") {
;Send {PgDn}
MouseGetPos, mouseXpos, mouseYpos
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
Click %rightScrollbarXpos%, %rightScrollbarYpos%
MouseMove, %mouseXpos%, %mouseYpos%, 0 ;move it back to where it was
} else {
Click WheelRight
}
return
}
}
return
;#ifWinActive
;Esc::ExitApp
;Sleep, 1000 ; 1 second
}
return
;WatchCursor:
@holgate
Copy link
Author

holgate commented Oct 19, 2014

REMAPPING INFO

Some keys will behave differently on your system. Namely, to:

Skip back / Rewind during playback
  • pressing Media_Prev (aka SkipPrev) on my remote is the same as pressing the Alt-Win-P key combo, thanks to a few settings in Promixis Girder which runs in the background. However, you can probably achieve the same result with Autohotkey/EventGhost
Skip back to beginning during playback
  • holding down Media_Prev (aka SkipPrev) for a couple of seconds
Access Episodes menu during playback (currently useless as navigating this menu has not yet been developed)
  • press Info button on remote = Alt-Win-I key combo
Access Navmenu on the top-level Netflix menu
  • press the Small Red button at the bottom of remote = Alt-Win-R key combo
Access Search on the top-level Netflix menu
  • press the Small Green button at the bottom of remote = Alt-Win-G key combo
Access Categories Grid Menu on the top-level Netflix menu
  • press the Small Yellow button at the bottom of remote = Alt-Win-Y key combo

@holgate
Copy link
Author

holgate commented Sep 13, 2015

NOTE:
Newer version of this tool available here: http://sticky-ux.com/apps/NetflixRemoteController/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment