Last active
February 16, 2016 16:06
-
-
Save galaydaroman/6388709eab6e788047f3 to your computer and use it in GitHub Desktop.
SMPlayer control as global hotkeys (Windows)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'dl' | |
require 'dl/import' | |
require './vkeys' | |
module User32 | |
extend DL::Importer | |
dlload 'User32.dll' | |
extern 'short GetAsyncKeyState(int)' | |
end | |
class SMPlayer | |
COMMAND_LINE = '"C:\Program Files\SMPlayer\smplayer.exe" -send-action %s' | |
MAPPING = { | |
:play_or_pause => [VK_CONTROL, VK_F12], | |
:rewind2 => [VK_CONTROL, VK_F10], | |
:forward2 => [VK_CONTROL, VK_F11], | |
:play_next => [VK_CONTROL, VK_ADD], | |
:play_prev => [VK_CONTROL, VK_SUBTRACT], | |
:increase_volume => [VK_CONTROL, VK_NUMPAD0], | |
:decrease_volume => [VK_CONTROL, VK_NUMPAD9] | |
} | |
def self.start! | |
loop do | |
new.tap do |smplayer| | |
MAPPING.each do |action, keys| | |
if keys.all? { |key| smplayer.key_pressed? key } | |
puts Time.now.strftime "%D %R - #{action}" | |
system COMMAND_LINE % action | |
sleep 0.9 | |
end | |
end | |
end | |
sleep 0.1 | |
end | |
end | |
def initialize | |
@store = {} | |
end | |
def key_pressed? key_code | |
not cached_key_state(key_code).zero? | |
end | |
def cached_key_state key_code | |
@store[key_code] ||= User32.GetAsyncKeyState key_code | |
end | |
end | |
SMPlayer.start! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Kernel | |
VK_LBUTTON = 0x01 | |
VK_RBUTTON = 0x02 | |
VK_CANCEL = 0x03 | |
VK_MBUTTON = 0x04 | |
VK_XBUTTON1 = 0x05 | |
VK_XBUTTON2 = 0x06 | |
VK_BACK = 0x08 | |
VK_TAB = 0x09 | |
VK_CLEAR = 0x0C | |
VK_RETURN = 0x0D | |
VK_SHIFT = 0x10 | |
VK_CONTROL = 0x11 | |
VK_MENU = 0x12 | |
VK_PAUSE = 0x13 | |
VK_CAPITAL = 0x14 | |
VK_KANA = 0x15 | |
VK_HANGUEL = 0x15 | |
VK_HANGUL = 0x15 | |
VK_JUNJA = 0x17 | |
VK_FINAL = 0x18 | |
VK_HANJA = 0x19 | |
VK_KANJI = 0x19 | |
VK_ESCAPE = 0x1B | |
VK_CONVERT = 0x1C | |
VK_NONCONVERT = 0x1D | |
VK_ACCEPT = 0x1E | |
VK_MODECHANGE = 0x1F | |
VK_SPACE = 0x20 | |
VK_PRIOR = 0x21 | |
VK_NEXT = 0x22 | |
VK_END = 0x23 | |
VK_HOME = 0x24 | |
VK_LEFT = 0x25 | |
VK_UP = 0x26 | |
VK_RIGHT = 0x27 | |
VK_DOWN = 0x28 | |
VK_SELECT = 0x29 | |
VK_PRINT = 0x2A | |
VK_EXECUTE = 0x2B | |
VK_SNAPSHOT = 0x2C | |
VK_INSERT = 0x2D | |
VK_DELETE = 0x2E | |
VK_HELP = 0x2F | |
K_0 = 0x30 | |
K_1 = 0x31 | |
K_2 = 0x32 | |
K_3 = 0x33 | |
K_4 = 0x34 | |
K_5 = 0x35 | |
K_6 = 0x36 | |
K_7 = 0x37 | |
K_8 = 0x38 | |
K_9 = 0x39 | |
K_A = 0x41 | |
K_B = 0x42 | |
K_C = 0x43 | |
K_D = 0x44 | |
K_E = 0x45 | |
K_F = 0x46 | |
K_G = 0x47 | |
K_H = 0x48 | |
K_I = 0x49 | |
K_J = 0x4A | |
K_K = 0x4B | |
K_L = 0x4C | |
K_M = 0x4D | |
K_N = 0x4E | |
K_O = 0x4F | |
K_P = 0x50 | |
K_Q = 0x51 | |
K_R = 0x52 | |
K_S = 0x53 | |
K_T = 0x54 | |
K_U = 0x55 | |
K_V = 0x56 | |
K_W = 0x57 | |
K_X = 0x58 | |
K_Y = 0x59 | |
K_Z = 0x5A | |
VK_LWIN = 0x5B | |
VK_RWIN = 0x5C | |
VK_APPS = 0x5D | |
VK_SLEEP = 0x5F | |
VK_NUMPAD0 = 0x60 | |
VK_NUMPAD1 = 0x61 | |
VK_NUMPAD2 = 0x62 | |
VK_NUMPAD3 = 0x63 | |
VK_NUMPAD4 = 0x64 | |
VK_NUMPAD5 = 0x65 | |
VK_NUMPAD6 = 0x66 | |
VK_NUMPAD7 = 0x67 | |
VK_NUMPAD8 = 0x68 | |
VK_NUMPAD9 = 0x69 | |
VK_MULTIPLY = 0x6A | |
VK_ADD = 0x6B | |
VK_SEPARATOR = 0x6C | |
VK_SUBTRACT = 0x6D | |
VK_DECIMAL = 0x6E | |
VK_DIVIDE = 0x6F | |
VK_F1 = 0x70 | |
VK_F2 = 0x71 | |
VK_F3 = 0x72 | |
VK_F4 = 0x73 | |
VK_F5 = 0x74 | |
VK_F6 = 0x75 | |
VK_F7 = 0x76 | |
VK_F8 = 0x77 | |
VK_F9 = 0x78 | |
VK_F10 = 0x79 | |
VK_F11 = 0x7A | |
VK_F12 = 0x7B | |
VK_F13 = 0x7C | |
VK_F14 = 0x7D | |
VK_F15 = 0x7E | |
VK_F16 = 0x7F | |
VK_F17 = 0x80 | |
VK_F18 = 0x81 | |
VK_F19 = 0x82 | |
VK_F20 = 0x83 | |
VK_F21 = 0x84 | |
VK_F22 = 0x85 | |
VK_F23 = 0x86 | |
VK_F24 = 0x87 | |
VK_NUMLOCK = 0x90 | |
VK_SCROLL = 0x91 | |
VK_LSHIFT = 0xA0 | |
VK_RSHIFT = 0xA1 | |
VK_LCONTROL = 0xA2 | |
VK_RCONTROL = 0xA3 | |
VK_LMENU = 0xA4 | |
VK_RMENU = 0xA5 | |
VK_BROWSER_BACK = 0xA6 | |
VK_BROWSER_FORWARD = 0xA7 | |
VK_BROWSER_REFRESH = 0xA8 | |
VK_BROWSER_STOP = 0xA9 | |
VK_BROWSER_SEARCH = 0xAA | |
VK_BROWSER_FAVORITES = 0xAB | |
VK_BROWSER_HOME = 0xAC | |
VK_VOLUME_MUTE = 0xAD | |
VK_VOLUME_DOWN = 0xAE | |
VK_VOLUME_UP = 0xAF | |
VK_MEDIA_NEXT_TRACK = 0xB0 | |
VK_MEDIA_PREV_TRACK = 0xB1 | |
VK_MEDIA_STOP = 0xB2 | |
VK_MEDIA_PLAY_PAUSE = 0xB3 | |
VK_LAUNCH_MAIL = 0xB4 | |
VK_LAUNCH_MEDIA_SELECT = 0xB5 | |
VK_LAUNCH_APP1 = 0xB6 | |
VK_LAUNCH_APP2 = 0xB7 | |
VK_OEM_1 = 0xBA | |
VK_OEM_PLUS = 0xBB | |
VK_OEM_COMMA = 0xBC | |
VK_OEM_MINUS = 0xBD | |
VK_OEM_PERIOD = 0xBE | |
VK_OEM_2 = 0xBF | |
VK_OEM_3 = 0xC0 | |
VK_OEM_4 = 0xDB | |
VK_OEM_5 = 0xDC | |
VK_OEM_6 = 0xDD | |
VK_OEM_7 = 0xDE | |
VK_OEM_8 = 0xDF | |
VK_OEM_102 = 0xE2 | |
VK_PROCESSKEY = 0xE5 | |
VK_PACKET = 0xE7 | |
VK_ATTN = 0xF6 | |
VK_CRSEL = 0xF7 | |
VK_EXSEL = 0xF8 | |
VK_EREOF = 0xF9 | |
VK_PLAY = 0xFA | |
VK_ZOOM = 0xFB | |
VK_PA1 = 0xFD | |
VK_OEM_CLEAR = 0xFE | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment