Jump to content
Catalyst78

Better Gaming Mouse Binds/Hotkeys G502

Recommended Posts

Catalyst78

I want to be able to press one of the many extra buttons on my mouse to execute an autoit script function. To do this I have bound weird key combinations to to each button that would otherwise never be pressed, like shift+alt+ctrl+/ (see linked image and the following code.)

Unfortunately this has a few annoying side effects, such as interfering with whatever I'm doing or one of the modifier keys occasionally getting 'stuck' down.

I have been compling each version of this script directly into my startup folder(win7) and have been using it for years. But surely there is a better way of doing this, thanks for help in advance.

http://prnt.sc/dquyar

;^ Ctrl    ! Alt    + Shift    # Win
HotKeySet("!{/}",  "Back_Btn")  ; spamclickoff
HotKeySet("+!^{.}", "Forw_Btn") ; ___/Speakers/HeadPhones
HotkeySet("+!^{,}", "Midd_Btn") ;MouseLock/InputStuff

HotkeySet("+!^{\}", "Gs_Back_Btn") ;ScreenBrightness 100/60/20
HotkeySet("+!^{=}", "Gs_Forw_Btn") ;Vlc/CloseVlc Recent/Touhou
HotkeySet("+!^{-}", "Gs_Midd_Btn") ;ScreenSwaper ToMain/ToSecond

HotkeySet("+!^{]}", "Gs_M3")      ;VlcTogglePlay
HotkeySet("+!^{[}", "Gs_MW_Left") ;F11/!Enter

 

Share this post


Link to post
Share on other sites
InunoTaishou

The G502 (I have it) has other buttons you can bind those keys to so you wouldn't have to use modifiers. Play/Pause, Stop, Next Track, Previous Track, Volume Up, Volume Down, and Mute would probably be better.

I haven't tested it but maybe a low level keyboard hook, instead of hotkey, might get rid of the side effects. Just check in the help file _WinAPI_SetWindowsHookEx to get you started, if you wanted to go this route (much more difficult and will use more system resources).

Share this post


Link to post
Share on other sites
Catalyst78

 

20 minutes ago, InunoTaishou said:

The G502 (I have it) has other buttons you can bind those keys to so you wouldn't have to use modifiers. Play/Pause, Stop, Next Track, Previous Track, Volume Up, Volume Down, and Mute would probably be better.

I already use most of these (for their intended purpose) on the non G-shift side.

 

20 minutes ago, InunoTaishou said:

I haven't tested it but maybe a low level keyboard hook, instead of hotkey, might get rid of the side effects. Just check in the help file _WinAPI_SetWindowsHookEx to get you started, if you wanted to go this route (much more difficult and will use more system resources).

I have G9 bound to start a script that locks mouse movement. I wrote it quite some time ago as part of my mouse script. Here it is if you were wondering:

#include <WinAPI.au3>

Opt("TrayIconHide", 1)

Global $locked = 1
Global $pStub_MouseProc = DllCallbackRegister ("_Mouse_Handler", "int", "int;ptr;ptr")
Global $hHookMouse = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($pStub_MouseProc), _WinAPI_GetModuleHandle(0), 0)

while $locked
   sleep(100)
WEnd

DllCallbackFree($pStub_MouseProc)
_WinAPI_UnhookWindowsHookEx($hHookMouse)
Exit

Func _Mouse_Handler($nCode, $wParam, $lParam)
   local $info
   If $nCode < 0 Or $locked = 0 Then Return _WinAPI_CallNextHookEx($hHookMouse, $nCode, $wParam, $lParam)
   If $wParam = 0x00000200 Then Return 1

   $locked = 0
EndFunc

 

But yeah, I'm pretty sure buttons getting stuck down is the fault of the mouse. Some of the functions in my script do different things when a button is held down or pressed multiple times. Using these is where it happens most often.

Edited by Catalyst78
typo & mistakes in code, also didn't actually finish writing post <.< hurr durr

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • xtcislove
      By xtcislove
      I have a script which is not very good written and could be mouch smaller etc. but thats not the point.

      The Problem is that sometimes my script stuck and the reason is i am using a tray menu and hotkeys to call other functions...

      Is there a way, to only allow a new hotkey function to get started when the other stopped? 

      Or a way to always return to the tray menu? 
       
      #RequireAdmin #include <StringConstants.au3> #include <TrayConstants.au3> #include <Process.au3> #include <File.au3> #include <FileConstants.au3> #include "ScalingMessageBox.au3" #include "_GetCurrentSoundDevice.au3" #include <Array.au3> #include <WinAPI.au3> #include <_MuteActiveWindow.au3> Opt("TrayMenuMode", 3) Opt("TrayIconDebug", 1) Global $IsMinimized = 0 Global $ActualWindow HotKeySet("+!s", "SwitchSoundDevice") ; Shift-Alt-t. - Hotkey to switch between devices. HotKeySet("+!k", "AppMinMax") ; Shift-Alt-k. - Hotkey to minimize/maximize current app. HotKeySet("+!t", "Taskkiller") ; Shift-Alt-t. - Hotkey to kill current app. HotKeySet("+!f", "SteamFriends") ; Shift-Alt-f. - Hotkey to open Steam Friends. HotKeySet("+!n", "Notepad") ; Shift-Alt-N. - Hotkey for Notepad Function. HotKeySet("+!m", "_MuteActiveWindow") ; Shift-Alt-M. - Hotkey to mute active window sound. HotKeySet("+!c", "SciTEClipboard") ; Shift-Alt-M. - Hotkey to mute active window sound. If Not ProcessExists("aida64.exe") Or Not ProcessExists("RemotePanel.exe") Or Not ProcessExists("PerfTune.exe") Then local AutoStart() local $dcPID[3] $dcPID[0] = 2 $dcPID[1] = ShellExecute("D:\Batch Space\WindowsAutomation\DownloadControl.au3") $dcPID[2] = ShellExecute("D:\Batch Space\WindowsAutomation\FrapsMessage.au3") SwitchSoundDevice("Speaker") ;-> Selecting Speaker on Startup. Local $iSteam = TrayCreateItem("Steam") TrayCreateItem("") ; Create a separator line. Local $iMobileAuthenticator = TrayCreateItem("Mobile Authenticator") TrayCreateItem("") ; Create a separator line. Local $iGames = TrayCreateMenu("Games") ; Create a tray menu sub menu with two sub items. Local $iPUBG = TrayCreateItem("PLAYERUNKNOWN'S BATTLEGROUNDS", $iGames) Local $iDARWIN = TrayCreateItem("Darwin Project", $iGames) Local $iFORTNITE = TrayCreateItem("Fortnite Battle Royale", $iGames) TrayCreateItem("") ; Create a separator line. Local $iStopWatch = TrayCreateItem("StopWatch") TrayCreateItem("") ; Create a separator line. Local $iTimer = TrayCreateItem("Timer") TrayCreateItem("") ; Create a separator line. Local $iTaskManager = TrayCreateItem("TaskManager") TrayCreateItem("") ; Create a separator line. Local $iRestartSensor = TrayCreateItem("RestartSensor") TrayCreateItem("") ; Create a separator line. Local $iShutdown = TrayCreateItem("Shutdown") TrayCreateItem("") ; Create a separator line. Local $idExit = TrayCreateItem("Exit") TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu. While 1 Switch TrayGetMsg() Case $iSteam ShellExecute("D:\Spiele\Steam\Steam.exe") Case $iMobileAuthenticator ShellExecute("D:\Batch Space\WindowsAutomation\MobileAuthenticator.au3") Case $iPUBG ShellExecute("steam://rungameid/578080") Case $iDARWIN ShellExecute("steam://rungameid/544920") Case $iFORTNITE Run("D:\Spiele\Epic Games\Fortnite\FortniteGame\Binaries\Win64\FortniteClient-Win64-Shipping.exe") Case $iStopWatch ShellExecute("D:\Batch Space\WindowsAutomation\StopWatch.au3") Case $iTimer ShellExecute("D:\Batch Space\Timer\Timer.bat") Case $iTaskManager ShellExecute("D:\Batch Space\TaskManager\Taskmanager.bat") Case $iRestartSensor If ProcessExists("RemotePanel.exe") Then ProcessClose("RemotePanel.exe") If ProcessExists("aida64.exe") Then ProcessClose("aida64.exe") ScreenState() ShellExecute("C:\Program Files (x86)\FinalWire\AIDA64 Extreme\aida64.exe","",@SW_SHOWNORMAL) Run("C:\Program Files (x86)\Odospace\Remote Panel\RemotePanel.exe") Case $iShutdown ShellExecute("D:\Batch Space\WindowsAutomation\Shutdown.au3") Case $idExit for $i = 1 To $dcPID[0] If ProcessExists($dcPID[$i]) Then ProcessClose($dcPID[$i]) Next Exit EndSwitch WEnd Func SciTEClipboard() _sMsgBox("SciTE Clipboard", "MsgBox;_sMsgBox", "Choose a option: ", "db=1;to=7;tr=10") if @extended = 1 Then ClipPut('MsgBox(0, "Test", "Test")') if @extended = 2 Then ClipPut('_sMsgBox("Test", "Ok", "Test", "")'&@CRLF) Return EndFunc Func Notepad() _sMsgBox("Launch SciTE or Notepad++?", "SciTE;Notepad++", "Launch SciTE or Notepad++?", "db=1;to=10;tr=10") if @extended = 1 Then Run("C:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe") if @extended = 2 Then Run("C:\Program Files (x86)\Notepad++\notepad++.exe") EndFunc Func SwitchSoundDevice($SoundDevice = "") local $NirCMD = "D:\Batch Space\tools\nircmd.exe" ; nircmd.exe path local $IconPath = "D:\Batch Space\ICON\" ; Icons path local $CurrentDevice = StringLeft(_GetCurrentSoundDevice(), 7) If Not IsDeclared("SoundDevice") Then if $CurrentDevice = "Headset" Then Local $SoundDevice = "Speaker" if $CurrentDevice = "Speaker" Then Local $SoundDevice = "Headset" Run($NirCMD & " setdefaultsounddevice " & $SoundDevice) EndIf TrayTip($SoundDevice & " active.", " ", 1, $TIP_ICONASTERISK) TraySetToolTip($SoundDevice & " active.") TraySetIcon($IconPath & $SoundDevice & ".ico") Local $sActualWindow = WinGetTitle("[ACTIVE]") If $SoundDevice = "Headset" Then If Not ProcessExists("ts3client_win64.exe") Then _sMsgBox("Headset Active, Teamspeak not.", "Yes;No", "Headset active, TeamSpeak 3 is not running.", "db=1;to=10") If @extended = 1 Then ShellExecute("C:\Program Files\TeamSpeak 3 Client\ts3client_win64.exe") WinWaitActive("TeamSpeak3") EndIf EndIf EndIf If ProcessExists("ts3client_win64.exe") Then WinActivate("TeamSpeak3") If $SoundDevice = "Speaker" Then Send("!b") ; Alt + b -> Mute Mic/Speaker in Teamspeak. If $SoundDevice = "Headset" Then Send("!m") ; Alt + m -> Unmute Mic/Speaker in Teamspeak. EndIf If WinExists($sActualWindow) Then WinActivate($sActualWindow) EndFunc Func AppMinMax($IsMinimized) ;==>AppMinMax function. If $IsMinimized = 0 Then $ActualWindow = WinGetTitle("[ACTIVE]") TraySetState($TRAY_ICONSTATE_FLASH) WinSetState($ActualWindow, "", @SW_MINIMIZE) TraySetToolTip("Minimized: " & $ActualWindow) $IsMinimized = 1 else Local $Process = _ProcessGetName(WinGetProcess($ActualWindow)) For $i = 1 to _FileCountLines("D:\Batch Space\WindowsAutomation\Games.txt") $Line = FileReadLine("D:\Batch Space\WindowsAutomation\Games.txt", $i) If $line = $Process Then If WinExists($ActualWindow) Then WinActivate($ActualWindow) WinSetState($ActualWindow, "", @SW_MAXIMIZE) EndIf ExitLoop EndIf Next WinActivate($ActualWindow) TraySetToolTip("Restored: " & $ActualWindow) TraySetState($TRAY_ICONSTATE_STOPFLASH) $IsMinimized = 0 EndIf EndFunc ;==>AppMinMax stop. Func Taskkiller() ;==>Taskkiller function. local $Window = WinGetTitle("[ACTIVE]") local $Process = _ProcessGetName(WinGetProcess($Window)) _sMsgBox("Kill " & $Process & "?", "Yes.,No.", "Do you like to kill: " &@LF&@LF& $Window & "?", "db=1;to=1,20") If @extended = 1 Then ProcessClose($Process) If WinExists($Window) Then WinActivate($Window) EndFunc ;==>Taskkiller stop. Func SteamFriends() ;==>SteamFriends function. ShellExecute("steam://open/friends/") AppMinMax(0) WinActivate("Friends") EndFunc ;==>SteamFriends stop. Func AutoStart() TraySetToolTip("Autorun active.") TraySetIcon("D:\Batch Space\ICON\Autorun.ico") TraySetState($TRAY_ICONSTATE_FLASH) RunWait('regedit /s "D:\Batch Space\WindowsAutomation\REGISTRY.reg"') ShellExecute("C:\Program Files (x86)\Intel\Intel(R) Extreme Tuning Utility\Client\PerfTune.exe","",@SW_SHOWNORMAL) WinWaitActive("Intel® Extreme Tuning Utility", "", 20) WinActivate("Intel® Extreme Tuning Utility") WinClose("Intel® Extreme Tuning Utility") If ProcessExists("RemotePanel.exe") Then ProcessClose("RemotePanel.exe") If ProcessExists("aida64.exe") Then ProcessClose("aida64.exe") ScreenState() ShellExecute("C:\Program Files (x86)\FinalWire\AIDA64 Extreme\aida64.exe","",@SW_SHOWNORMAL) Run("C:\Program Files (x86)\Odospace\Remote Panel\RemotePanel.exe") Run("G:\Programme\Tools\W10Privacy\W10Privacy.exe /s 1") BatteryLevel() TraySetState($TRAY_ICONSTATE_STOPFLASH) EndFunc Func ScreenState() FileChangeDir("C:\Program Files (x86)\Odospace\Remote Panel\adb") If ProcessExists("adb.exe") Then ProcessClose("adb.exe") Local $Odospace = StringInStr(_RunCmd('adb -s 3200d994ae6f9000 shell dumpsys activity activities | find "mFocusedActivity:"'), "com.odospace.remotepanel") If $Odospace <> 0 Then RunWait(@ComSpec & ' /c ' & "adb -s 3200d994ae6f9000 shell am force-stop com.odospace.remotepanel", @TempDir, @SW_HIDE) RunWait(@ComSpec & ' /c ' & "adb -s 3200d994ae6f9000 shell monkey -p com.odospace.remotepanel -c android.intent.category.LAUNCHER 1", @TempDir, @SW_HIDE) RunWait(@ComSpec & ' /c ' & "adb -s 3200d994ae6f9000 shell input keyevent KEYCODE_WAKEUP", @TempDir, @SW_HIDE) EndFunc Func BatteryLevel() FileChangeDir("C:\Program Files (x86)\Odospace\Remote Panel\adb") If ProcessExists("adb.exe") Then ProcessClose("adb.exe") Local $sBatteryLevel = StringTrimLeft(_RunCmd('adb -s 3200d994ae6f9000 shell dumpsys power | find "mBatteryLevel="'), 14) If $sBatteryLevel < 10 Then MsgBox(0, "Warning!", "Battery Level from Sensor Tablet is at: " & $sBatteryLevel & "%" & @CRLF & @CRLF & "Press ok to shutdown Tablet.") RunWait(@ComSpec & ' /c ' & "adb -s 3200d994ae6f9000 shell input keyevent KEYCODE_SLEEP", @TempDir, @SW_HIDE) Endif TrayTip("Tablet Battery Level is at: " & $sBatteryLevel & " %.", " ", 1, $TIP_ICONASTERISK) EndFunc Func _RunCmd($sCommand) If StringLeft($sCommand, 1) = " " Then $sCommand = " " & $sCommand Local $nPid = Run (@Comspec & " /c" & $sCommand, "", @SW_Hide, 8), $sRet = "" If @Error then Return "ERROR:" & @ERROR ProcessWait ($nPid) While 1 $sRet &= StdoutRead($nPID) If @error Or (Not ProcessExists($nPid)) Then ExitLoop WEnd Return StringStripWS($sRet, 3) EndFunc ; ==> _RunCmd  
    • guinness
      By guinness
      Right now the script will exit immediately if I don't pause it somehow (obvious of course).
      I was  curious on people's opinions of how they do it or what option they prefer below? Thanks
      Option 1 (I prefer)
      #include <MsgBoxConstants.au3> HotKeySet('^!p', SomeFunc) ProcessWaitClose(@AutoItPID) Func SomeFunc() MsgBox($MB_SYSTEMMODAL, "Title", "This message box will timeout after 10 seconds or select the OK button.", 10) EndFunc Option 2 (in the help file)
      #include <MsgBoxConstants.au3> HotKeySet('^!p', SomeFunc) While Sleep(100) WEnd Func SomeFunc() MsgBox($MB_SYSTEMMODAL, "Title", "This message box will timeout after 10 seconds or select the OK button.", 10) EndFunc Option 3
      #include <MsgBoxConstants.au3> HotKeySet('^!p', SomeFunc) While 1 GUIGetMsg() ; Use the internal sleep WEnd Func SomeFunc() MsgBox($MB_SYSTEMMODAL, "Title", "This message box will timeout after 10 seconds or select the OK button.", 10) EndFunc  
    • leomoon
      By leomoon
      Hello,
      I'm trying to write a hotkey program and I know exactly how to do it but it will be hard coded and the user won't be able to edit it.
      HotKeySet("{ESC}", "HotKeyPressed") HotKeySet("^!d", "HotKeyPressed") HotKeySet("^+x", "HotKeyPressed") While 1 Sleep(500) WEnd Func HotKeyPressed() Switch @HotKeyPressed Case "{ESC}" Exit Case "^!d" ShellExecute("D:\Docs") Case "^+x" ShellExecute("D:\Docs\My Portables\Burner\AnyBurn\AnyBurn.exe") EndSwitch EndFunc I want the program to read a file that has hotkeys on odd lines and paths on even lines but I don't see how the program will load into itself.
      Is it even possible?
      Thanks.
    • AndreyS
      By AndreyS
      Dear developers and creators of the language, please explain to me why when pressing the combination Crtl + Shift + C from the 5th or the 10th time "sticks / sinks" Ctrl or Shift? And then you need to press Ctrl or Shift again to reset their triggering. I only need to use hot keys like in the example!
      The code is a small example. Its essence is that when a user in the editor selects any number and presses a combination, then it increases by 1. 
      Dim $x HotKeySet("+^c","Calc") While 1 Sleep(10000) WEnd Func Calc() Send("^c") Sleep(50) $x=ClipGet()+1 ClipPut($x) Send("^v") EndFunc I thought that in my program some kind of glitch was searching for a reason for a long time. And it turned out that apparently somehow the work of some functions used in the example is not compatible. 
      Tell me, please, what is the problem?
    • kokoilie
      By kokoilie
      I'm making a program that has a combo control in a gui and back in win7 when the window was focused the scroll wheel could be used to scroll through it's contents, now i'm using win10 and i have to put the mouse on that control to scroll up and down.
      Since now the scroll wheel works depending on where the mouse is, is there a way to make it no matter where on the gui the pointer is?
      Also if the only way to do it is some complex hotkey functions will it work with pressing space to toggle a checkbox?
      If you need to see what i have so far let me know and i'll copy it here.
×