Where i can find a working AHK script?

Hello guys, i used GSE in shadowlands and was perfect with the AHK script.

I come again to play wow but i dont see any topic to see a working AHK script to run gse with, or any tutorial.

Can anyone share any tutorial or workign script to just press one key and run the gse macro?

Welcome back.

This is one I made and use regularly:

;
; AutoHotkey Version:	1.1.36.02
; Script Version:		0.5.0
; Language:				English
; Platform:				Win 11
; Author:				Drake <https://wowlazymacros.com/u/drake>
;
; Script Function:
;	Easy configure action key spam toggle with robust modifier keys support. Set your
;	activation key, and save. Start the macro by pressing that key, and insert modifiers
;	by holding down any combination of alt, ctrl, and shift. Stop the macro by pressing
;	the activation key again. A non-interactable display in the top-center of your
;	monitor will tell you if the macro is currently active (toggleable).
;
; Of Note:
;	Testing in-game found that wow does not recognize the difference between left and
;	right modifier keys in their macros. That still leaves 8 total combinations when you
;	include [nomod].
; Additionally:
;	Some modifier and hotkey combos do not work as expected. Particularly Shift+Numpad or letters
;
; Please make sure you are running the lastest version of AutoHotKey <https://www.autohotkey.com/>
;

#NoEnv									; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input							; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%				; Ensures a consistent starting directory.
#SingleInstance Force
#MaxThreadsPerHotkey 2

; ================= Start User Configurable Values =================

SingleKeySpam	:= true					; Pressing a hotkey will disable any other hotkeys
monitor			:= true					; Set if monitor display is active

; ╔═════════╗
; β•‘ Block A β•‘
; β•šβ•β•β•β•β•β•β•β•β•β•
ActiveA			:= true					; Set to use this key block
RunSpeedA		:= "250"				; Milliseconds delay between keypresses
KeyPressA		:= "XButton2"			; Set the mouse or keyboard key to start macro
KeySpamA		:= "="					; Set the ingame key being spammed

; ╔═════════╗
; β•‘ Block B β•‘
; β•šβ•β•β•β•β•β•β•β•β•β•
ActiveB			:= true
RunSpeedB		:= "250"
KeyPressB		:= "+XButton2"
KeySpamB		:= "-"

; ╔═════════╗
; β•‘ Block C β•‘
; β•šβ•β•β•β•β•β•β•β•β•β•
ActiveC			:= false
RunSpeedC		:= "200"
KeyPressC		:= "1"
KeySpamC		:= "1"

; ================= End User Configurable Values =================

; ================= Start Macro Monitor =================

if (monitor)
	_mvar := ""
if not monitor
	_mvar := "hide "

MacroRunning := false

UpdateMonitor()
{
	global

	If(!MacroRunning) and (ToggleA or ToggleB or ToggleC) {
		MacroRunning := true
		Progress, M B1 X5 Y5 C1 W75 ZH-5 ZX0 ZY0 FM0 FS25 WM1 WS600 CT40FF06 CW000000, ON,,ON,Verdana
	} Else If(MacroRunning) and not (ToggleA or ToggleB or ToggleC) {
		MacroRunning := false
		Progress, Off
	}

	RunningA := ((ToggleA) ? "On " : "Off" )
	RunningB := ((ToggleB) ? "On " : "Off" )
	RunningC := ((ToggleC) ? "On " : "Off" )

	MonitorText := ""
	If(ActiveA) {
		MonitorText .= """" KeyPressA """ -> " KeySpamA " @" RunSpeedA "ms | " RunningA "`n"
	}
	If(ActiveB) {
		MonitorText .= """" KeyPressB """ -> " KeySpamB " @" RunSpeedB "ms | " RunningB "`n"
	}
	If(ActiveC) {
		MonitorText .= """" KeyPressC """ -> " KeySpamC " @" RunSpeedC "ms | " RunningC "`n"
	}

	ModKeys := ""
	if GetKeyState("Shift", "P")
	{
		ModKeys .= "shift+"
	}
	if GetKeyState("Ctrl", "P")
	{
		ModKeys .= "ctrl+"
	}
	if GetKeyState("Alt", "P")
	{
		ModKeys .= "alt+"
	}

	GuiControl,, MyText, %MonitorText%
	return 
}
UpdateMonitor()

CustomColor := "EEAA99"  ; Can be any RGB color (it will be made transparent below).
Gui +LastFound +AlwaysOnTop -Caption +ToolWindow ; +ToolWindow avoids a taskbar button and an alt-tab menu item.
Gui, Color, %CustomColor%
Gui, Font, s12, Courier New  ; Set a large font size (32-point).
Gui, Add, Text, vMyText cyellow 0x2, %MonitorText%
; Make all pixels of this color transparent and make the text itself translucent (150):
WinSet, TransColor, %CustomColor% 150
Gui, Show
return

Guisize:
	guiheight := A_guiheight
	guiwidth := A_guiwidth
	gui,show, % _mvar "x" (A_ScreenWidth/2) - (GuiWidth/2) " y0 w" Guiwidth " h" GuiHeight NoActivate

; ================= End Macro Monitor =================

; ================= Main =================

Hotkey, IfWinActive, World of Warcraft	; Only run if window "World of Warcraft" is active
If(ActiveA) {
	Hotkey, $%KeyPressA%, LabelA
}
If(ActiveB) {
	Hotkey, $%KeyPressB%, LabelB
}
If(ActiveC) {
	Hotkey, $%KeyPressC%, LabelC
}
return

ToggleA := 0
ToggleB := 0
ToggleC := 0

LabelA:
If(ToggleA) {
	If(SingleKeySpam) {
		ToggleA := 0
		UpdateMonitor()
		SetTimer, SpamKeyA, Off
		SetTimer, SpamKeyB, Off
		SetTimer, SpamKeyC, Off
	} Else {
		ToggleA := 0
		UpdateMonitor()
		SetTimer, SpamKeyA, Off
	}
} Else {
	If(SingleKeySpam) {
		ToggleA := 1
		ToggleB := 0
		ToggleC := 0
		SetTimer, SpamKeyA, %RunSpeedA%
		SetTimer, SpamKeyB, Off
		SetTimer, SpamKeyC, Off
	} Else {
		ToggleA := 1
		SetTimer, SpamKeyA, %RunSpeedA%
	}
}
return

LabelB:
If(ToggleB) {
	If(SingleKeySpam) {
		ToggleB := 0
		UpdateMonitor()
		SetTimer, SpamKeyA, Off
		SetTimer, SpamKeyB, Off
		SetTimer, SpamKeyC, Off
	} Else {
		ToggleB := 0
		UpdateMonitor()
		SetTimer, SpamKeyB, Off
	}
} Else {
	If(SingleKeySpam) {
		ToggleA := 0
		ToggleB := 1
		ToggleC := 0
		SetTimer, SpamKeyA, Off
		SetTimer, SpamKeyB, %RunSpeedB%
		SetTimer, SpamKeyC, Off
	} Else {
		ToggleB := 1
		SetTimer, SpamKeyB, %RunSpeedB%
	}
}
return

LabelC:
If(ToggleC) {
	If(SingleKeySpam) {
		ToggleC := 0
		UpdateMonitor()
		SetTimer, SpamKeyA, Off
		SetTimer, SpamKeyB, Off
		SetTimer, SpamKeyC, Off
	} Else {
		ToggleC := 0
		UpdateMonitor()
		SetTimer, SpamKeyC, Off
	}
} Else {
	If(SingleKeySpam) {
		ToggleA := 0
		ToggleB := 0
		ToggleC := 1
		SetTimer, SpamKeyA, Off
		SetTimer, SpamKeyB, Off
		SetTimer, SpamKeyC, %RunSpeedC%
	} Else {
		ToggleC := 1
		SetTimer, SpamKeyC, %RunSpeedC%
	}
}
return

;; blind mode to send modifiers
SpamKeyA:
Send, {Blind}{%KeySpamA%}
UpdateMonitor()
return

SpamKeyB:
Send, {Blind}{%KeySpamB%}
UpdateMonitor()
return

SpamKeyC:
Send, {Blind}{%KeySpamC%}
UpdateMonitor()
return

;; #################################
;;		CONTROLS
;; #################################

^PgDn::Suspend	;; Ctrl + PageDown to suspend script (if you want to chat)
^PgUp::Reload	;; Ctrl + PageUP to reload script
^End::ExitApp	;; Ctrl + End to terminate script

1 Like

Thank you!!!

I also was looking for this today, I have a question i like use middle mouse button so that’s
Middle-click scrol wheel but i cant fine what number that is for the ahk script?
or is that not possible?

1 Like

#IfWinActive, World of Warcraft ;; enabled only in WoW

$1::
While GetKeyState(β€œx”, β€œP”) {
Send, {Blind}{x} ;; blind mode to send modifiers
Sleep, 150
}
return
#IfWinActive ;; disable WoW context sensitivity

^PgDn::Suspend ;; Ctrl + PageDown to suspend script (if you want to chat)
^PgUp::Reload ;; Ctrl + PageUP to reload script
^End::ExitApp ;; Ctrl + End to terminate script

been using this one for years but it no longer auto fires did something change?

(I assume the unicode quotation marks are a side effect of the forums)

So your script looks like its trying to do:

Press 1 to enable/disable
Hold x to send x repeatedly

Did you check to make sure β€œSit/Move Down” was not still bound to x?

no only bound to x is the macro. i dont recall cause i set this up so long ago what is β€œP”? with the new gse you just set a key. you used to have to put it somewhere else then send it to the key you wanted

GetKeyState(β€œx”, β€œP”) means its watching for the x key to be in the KeyDown state.

I’m not sure if sending x will trigger the keystate again in AHK, either, possibly polluting your loop condition.

switched to punchkey and its working fine.