Mouse And Keyboard Macro Recorder
Re: Mouse And Keyboard Macro Recorder
Anyone know how to change the mouse to Clicks instead of Mouseclick?
https://www.autohotkey.com/docs/commands/Click.htm
https://www.autohotkey.com/docs/commands/Click.htm
Re: Mouse And Keyboard Macro Recorder
Hello,
In order to create this script Do I copy and past the entire script and then save as a .pmc file.
How to load and run it in PMC?
I am totally new to PMC but I am ok with AHK.
Thanks!
In order to create this script Do I copy and past the entire script and then save as a .pmc file.
How to load and run it in PMC?
I am totally new to PMC but I am ok with AHK.
Thanks!
Re: Mouse And Keyboard Macro Recorder
Why my mouse move too fast when I play back the recorded movement?
Re: Mouse And Keyboard Macro Recorder
You should save it as an .ahk file, as it is an AutoHotkey script. It has nothing to do with PMC.
-
- Posts: 6
- Joined: 21 Feb 2017, 07:30
Re: Mouse And Keyboard Macro Recorder
sorry but i'm pretty new to this
Macro Recorder v2.1 By FeiYue is beautifully simple. but i can't figure out how to put the loop in an actual macro script. i would love if there was an extra "save" button that where i could choose the key to activate the macro and be done with it.
but if anyone would tell me how to bind the loop to a key i would be very greatful.
i tried
but all it did was highlight the windows shortcuts and do the first click. like i had used : rather than :: or something, i thought ahk would handle it differently
Macro Recorder v2.1 By FeiYue is beautifully simple. but i can't figure out how to put the loop in an actual macro script. i would love if there was an extra "save" button that where i could choose the key to activate the macro and be done with it.
but if anyone would tell me how to bind the loop to a key i would be very greatful.
i tried
Code: Select all
F10::
loop, 1
{
;code goes here
}
return
-
- Posts: 1
- Joined: 14 Nov 2020, 01:22
Re: Mouse And Keyboard Macro Recorder
How can i loop this script countless times? Thank you!
-
- Posts: 4
- Joined: 13 Oct 2021, 01:16
Re: Mouse And Keyboard Macro Recorder
this is great but it repeats the process very fast so it is necessary to add a "sleep" after every recording.
-
- Posts: 1
- Joined: 08 Nov 2021, 05:33
Re: Mouse And Keyboard Macro Recorder
Which line can I adjust the playback speed? I find the recorder plays it back about 3x the speed in which I recorded.
- SpeedMaster
- Posts: 494
- Joined: 12 Nov 2016, 16:09
Re: Mouse And Keyboard Macro Recorder
feiyue wrote: ↑11 Mar 2020, 23:24Updated to 2.1 version - 2020/03/12
1. Put the record file in the temporary folder to avoid that some computers cannot generate the record file.
2. Record the actual delay instead of a uniform delay of 0.5 seconds.
... Note: if the actual delay is large, please modify the record file yourself.
3. I added "Loop, 1 {...}" statement at the beginning and end of the record file,
... You can modify the number of loops by yourself. For infinite loops, you can use "Loop {".
Re: Mouse And Keyboard Macro Recorder
Thank you so much @feiyue! I created a forum account just to comment here!
I tried Pulover's Macro Creator but it wasn't working for me. All I want to do is occasional on-the-fly macro recording, with a single key for recording and playback and no GUI interaction required (a GUI is great for learning, but I do not want to have to move my mouse to click on anything). I think PMC should do that with the "Hotkeys Always Active" and "Clear List" options enabled, but for some reason it would never erase the existing script unless I manually deleted it with the GUI, and after several hours of effort and YouTube videos I finally gave up. I am a new user and really appreciate you trying to keep it simple.
In any case, I have some feedback for your script if you're interested:
I tried Pulover's Macro Creator but it wasn't working for me. All I want to do is occasional on-the-fly macro recording, with a single key for recording and playback and no GUI interaction required (a GUI is great for learning, but I do not want to have to move my mouse to click on anything). I think PMC should do that with the "Hotkeys Always Active" and "Clear List" options enabled, but for some reason it would never erase the existing script unless I manually deleted it with the GUI, and after several hours of effort and YouTube videos I finally gave up. I am a new user and really appreciate you trying to keep it simple.
In any case, I have some feedback for your script if you're interested:
- It would help me if the screen tip that currently says "Recording" and "Playing" could additionally say "Recording (Paused)" and "Playing (Paused)".
- Could you add a note in the script on how to turn off the GUI? Once I've memorized the hotkeys I'd like to disable it, but I'm not sure how to make that change.
- Could your script rename the Pause label to something like LabelPause? I tried replacing F6 on line 196 with Pause so I could use the Pause key on my keyboard (I need F6 for its existing function). But when starting the script I get this error:
I think it's a an issue with the you having a label named Pause, which is the same name Autohotkey uses for Pause from the keyboard.Error at line 197.
Line text: Pause
Error: Duplicate label.
The program will now exit.
- SpeedMaster
- Posts: 494
- Joined: 12 Nov 2016, 16:09
Re: Mouse And Keyboard Macro Recorder
I like the script the way it is now. Simple and easy to use.
Cheers
![Cool 8-)](./images/smilies/icon_cool.gif)
Cheers
Last edited by SpeedMaster on 19 Mar 2023, 12:39, edited 1 time in total.
- SpeedMaster
- Posts: 494
- Joined: 12 Nov 2016, 16:09
Re: Mouse And Keyboard Macro Recorder
Here is the way I use when I run the script from my main script.
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
Shortcuts:
Win + F1 ................... Start visible
Win + F2 ................... Start hidden
Code: Select all
; start visible
#f1::
run, C:\MouseAndKeyboardMacroRecorder.ahk
sleep, 500
WinShow, Macro Recorder
return
;start hidden
#f2::
run, C:\MouseAndKeyboardMacroRecorder.ahk
sleep, 800
WinHide, Macro Recorder
return
just do that...
Code: Select all
Pause::
;pause:
Code: Select all
UsedKeys:="F1,F2,F3,F4,F5,Pause"
s:="[F1]Record(Screen),[F2]Record(Window),"
. "[F3]Stop,[F4]Play,[F5]Edit,[Pause]Pause "
Re: Mouse And Keyboard Macro Recorder
Any one knows how to remove app and window detections? I just want eveything else like Click, keyboard, Sleep. In apps I use this it is a mess to clean it by removing all detected windows which are diffrent next time I run my scripts. So it is useless for me due to restrictions in my system.
I appreciate any input.
I appreciate any input.
- SpeedMaster
- Posts: 494
- Joined: 12 Nov 2016, 16:09
Re: Mouse And Keyboard Macro Recorder
Last edited by SpeedMaster on 19 Mar 2023, 12:42, edited 1 time in total.
Re: Mouse And Keyboard Macro Recorder
@SpeedMaster
Thanks.
When I do recording and run this code after, I get warning:
This variable has not been assigned a value.
Specifically: LoFie (Aglobal variable)
....> Loop, read, % LogFile, % LogFile2
I am sure im doing something wrong.
Thanks.
When I do recording and run this code after, I get warning:
This variable has not been assigned a value.
Specifically: LoFie (Aglobal variable)
....> Loop, read, % LogFile, % LogFile2
I am sure im doing something wrong.
- SpeedMaster
- Posts: 494
- Joined: 12 Nov 2016, 16:09
Re: Mouse And Keyboard Macro Recorder
I hope this will work.
Last edited by SpeedMaster on 19 Mar 2023, 12:45, edited 1 time in total.
Re: Mouse And Keyboard Macro Recorder
@SpeedMaster
Didn't work.
Might be because I use the Windows Store edition of ahk? Can't acces it s folder tho.
No other direct way like removing some of the original code in this script?
Didn't work.
Might be because I use the Windows Store edition of ahk? Can't acces it s folder tho.
No other direct way like removing some of the original code in this script?
- SpeedMaster
- Posts: 494
- Joined: 12 Nov 2016, 16:09
Re: Mouse And Keyboard Macro Recorder
you can try to disable the call to the LogWindow() function in the script
disable the corresponding line like that:
Code: Select all
LogWindow:
;LogWindow()
return
![Confused :?](./images/smilies/icon_e_confused.gif)
Re: Mouse And Keyboard Macro Recorder
@SpeedMaster
Wow, thanks, it worked! Saved me alot!
Wow, thanks, it worked! Saved me alot!
Code: Select all
;-----------------------------------
; Macro Recorder v2.1 By FeiYue
;
; Description: This script records the mouse
; and keyboard actions and then plays back.
;
; F1 --> Record(Screen) (CoordMode, Mouse, Screen)
; F2 --> Record(Window) (CoordMode, Mouse, Window)
; F3 --> Stop Record/Play
; F4 --> Play LogFile
; F5 --> Edit LogFile
; F6 --> Pause Record/Play
;
; Note:
; 1. press the Ctrl button individually
; to record the movement of the mouse.
; 2. Shake the mouse on the Pause button,
; you can pause recording or playback.
;-----------------------------------
#NoEnv
SetBatchLines, -1
Thread, NoTimers
CoordMode, ToolTip
SetTitleMatchMode, 2
DetectHiddenWindows, On
;--------------------------
LogFile:=A_Temp . "\~Record.txt"
UsedKeys:="F1,F2,F3,F4,F5,F6"
Play_Title:=RegExReplace(LogFile,".*\\") " ahk_class AutoHotkey"
;--------------------------
Gui, +AlwaysOnTop -Caption +ToolWindow +E0x08000000 +Hwndgui_id
Gui, Margin, 0, 0
Gui, Font, s12
s:="[F1]Record(Screen),[F2]Record(Window),"
. "[F3]Stop,[F4]Play,[F5]Edit,[F6] Pause "
For i,v in StrSplit(s, ",")
{
j:=i=1 ? "":"x+0", j.=InStr(v,"Pause") ? " vPause":""
Gui, Add, Button, %j% gRun, %v%
}
Gui, Add, Button, x+0 w0 Hidden vMyText
Gui, Show, NA y0, Macro Recorder
OnMessage(0x200,"WM_MOUSEMOVE")
;--------------------------
SetTimer, OnTop, 2000
OnTop:
Gui, +AlwaysOnTop
return
Run:
if IsLabel(k:=RegExReplace(RegExReplace(A_GuiControl,".*]"),"\W"))
Goto, %k%
return
WM_MOUSEMOVE() {
static OK_Time
ListLines, Off
if (A_Gui=1) and (A_GuiControl="Pause")
and (t:=A_TickCount)>OK_Time
{
OK_Time:=t+500
Gosub, Pause
}
}
ShowTip(s:="", pos:="y35", color:="Red|00FFFF") {
static bak, idx
if (bak=color "," pos "," s)
return
bak:=color "," pos "," s
SetTimer, ShowTip_ChangeColor, Off
Gui, ShowTip: Destroy
if (s="")
return
; WS_EX_NOACTIVATE:=0x08000000, WS_EX_TRANSPARENT:=0x20
Gui, ShowTip: +LastFound +AlwaysOnTop +ToolWindow -Caption +E0x08000020
Gui, ShowTip: Color, FFFFF0
WinSet, TransColor, FFFFF0 150
Gui, ShowTip: Margin, 10, 5
Gui, ShowTip: Font, Q3 s20 bold
Gui, ShowTip: Add, Text,, %s%
Gui, ShowTip: Show, NA %pos%, ShowTip
SetTimer, ShowTip_ChangeColor, 1000
ShowTip_ChangeColor:
Gui, ShowTip: +AlwaysOnTop
r:=StrSplit(SubStr(bak,1,InStr(bak,",")-1),"|")
Gui, ShowTip: Font, % "Q3 c" r[idx:=Mod(Round(idx),r.length())+1]
GuiControl, ShowTip: Font, Static1
return
}
;============ Hotkey =============
F1::
Suspend, Permit
Goto, RecordScreen
F2::
Suspend, Permit
Goto, RecordWindow
RecordScreen:
RecordWindow:
if (Recording or Playing)
return
Coord:=InStr(A_ThisLabel,"Win") ? "Window":"Screen"
LogArr:=[], oldid:="", Log(), Recording:=1, SetHotkey(1)
ShowTip("Recording")
return
F3::
Stop:
Suspend, Permit
if Recording
{
if (LogArr.MaxIndex()>0)
{
s:="`nLoop, 1`n{`n`nSetTitleMatchMode, 2"
. "`nCoordMode, Mouse, " Coord "`n"
For k,v in LogArr
s.="`n" v "`n"
s.="`nSleep, 1000`n`n}`n"
s:=RegExReplace(s,"\R","`n")
FileDelete, %LogFile%
FileAppend, %s%, %LogFile%
s:=""
}
SetHotkey(0), Recording:=0, LogArr:=""
}
else if Playing
{
WinGet, list, List, %Play_Title%
Loop, % list
if WinExist("ahk_id " list%A_Index%)!=A_ScriptHwnd
{
WinGet, pid, PID
WinClose,,, 3
IfWinExist
Process, Close, %pid%
}
SetTimer, CheckPlay, Off
Playing:=0
}
ShowTip()
Suspend, Off
Pause, Off
GuiControl,, Pause, % "[F6] Pause "
isPaused:=0
return
F4::
Play:
Suspend, Permit
if (Recording or Playing)
Gosub, Stop
ahk:=A_IsCompiled ? A_ScriptDir "\AutoHotkey.exe" : A_AhkPath
IfNotExist, %ahk%
{
MsgBox, 4096, Error, Can't Find %ahk% !
Exit
}
Run, %ahk% /r "%LogFile%"
SetTimer, CheckPlay, 500
Gosub, CheckPlay
return
CheckPlay:
Check_OK:=0
WinGet, list, List, %Play_Title%
Loop, % list
if (list%A_Index%!=A_ScriptHwnd)
Check_OK:=1
if Check_OK
Playing:=1, ShowTip("Playing")
else if Playing
{
SetTimer, CheckPlay, Off
Playing:=0, ShowTip()
}
return
F5::
Edit:
Suspend, Permit
Gosub, Stop
Run, notepad.exe "%LogFile%"
return
F6::
Pause:
Suspend, Permit
if Recording
{
Suspend
Pause, % A_IsSuspended ? "On":"Off", 1
isPaused:=A_IsSuspended, Log()
}
else if Playing
{
isPaused:=!isPaused
WinGet, list, List, %Play_Title%
Loop, %list%
if WinExist("ahk_id " list%A_Index%)!=A_ScriptHwnd
PostMessage, 0x111, 65306
}
else return
if isPaused
GuiControl,, Pause, [F6]<Pause>
else
GuiControl,, Pause, % "[F6] Pause "
return
;============ Functions =============
SetHotkey(f:=0) {
; These keys are already used as hotkeys
global UsedKeys
f:=f ? "On":"Off"
Loop, 254
{
k:=GetKeyName(vk:=Format("vk{:X}", A_Index))
if k not in ,Control,Alt,Shift,%UsedKeys%
Hotkey, ~*%vk%, LogKey, %f% UseErrorLevel
}
For i,k in StrSplit("NumpadEnter|Home|End|PgUp"
. "|PgDn|Left|Right|Up|Down|Delete|Insert", "|")
{
sc:=Format("sc{:03X}", GetKeySC(k))
if k not in ,Control,Alt,Shift,%UsedKeys%
Hotkey, ~*%sc%, LogKey, %f% UseErrorLevel
}
; SetTimer, LogWindow, %f%
; if (f="On")
; Gosub, LogWindow
}
LogKey:
LogKey()
return
;LogWindow:
;LogWindow()
return
LogKey() {
Critical
k:=GetKeyName(vksc:=SubStr(A_ThisHotkey,3))
k:=StrReplace(k,"Control","Ctrl"), r:=SubStr(k,2)
if r in Alt,Ctrl,Shift,Win
LogKey_Control(k)
else if k in LButton,RButton,MButton
LogKey_Mouse(k)
else
{
if (k="NumpadLeft" or k="NumpadRight") and !GetKeyState(k,"P")
return
k:=StrLen(k)>1 ? "{" k "}" : k~="\w" ? k : "{" vksc "}"
Log(k,1)
}
}
LogKey_Control(key) {
global LogArr, Coord
k:=InStr(key,"Win") ? key : SubStr(key,2)
if (k="Ctrl")
{
CoordMode, Mouse, %Coord%
MouseGetPos, X, Y
}
Log("{" k " Down}",1)
Critical, Off
KeyWait, %key%
Critical
Log("{" k " Up}",1)
if (k="Ctrl")
{
i:=LogArr.MaxIndex(), r:=LogArr[i]
if InStr(r,"{Blind}{Ctrl Down}{Ctrl Up}")
LogArr[i]:="MouseMove, " X ", " Y
}
}
LogKey_Mouse(key) {
global gui_id, LogArr, Coord
k:=SubStr(key,1,1)
CoordMode, Mouse, %Coord%
MouseGetPos, X, Y, id
if (id=gui_id)
return
Log("MouseClick, " k ", " X ", " Y ",,, D")
CoordMode, Mouse, Screen
MouseGetPos, X1, Y1
t1:=A_TickCount
Critical, Off
KeyWait, %key%
Critical
t2:=A_TickCount
if (t2-t1<=200)
X2:=X1, Y2:=Y1
else
MouseGetPos, X2, Y2
i:=LogArr.MaxIndex(), r:=LogArr[i]
if InStr(r, ",,, D") and Abs(X2-X1)+Abs(Y2-Y1)<5
LogArr[i]:=SubStr(r,1,-5), Log()
else
Log("MouseClick, " k ", " (X+X2-X1) ", " (Y+Y2-Y1) ",,, U")
}
;LogWindow() {
; global oldid, LogArr
; static oldtitle
; id:=WinExist("A")
; WinGetTitle, title
; WinGetClass, class
; if (title="" and class="")
; return
; if (id=oldid and title=oldtitle)
; return
; oldid:=id, oldtitle:=title
; title:=SubStr(title,1,50)
; if (!A_IsUnicode)
; {
; GuiControl,, MyText, %title%
; GuiControlGet, s,, MyText
; if (s!=title)
; title:=SubStr(title,1,-1)
; }
; title.=class ? " ahk_class " class : ""
; title:=RegExReplace(Trim(title), "[``%;]", "``$0")
; s:="tt = " title "`nWinWait, %tt%"
; . "`nIfWinNotActive, %tt%,, WinActivate, %tt%"
; i:=LogArr.MaxIndex(), r:=LogArr[i]
; if InStr(r,"tt = ")=1
; LogArr[i]:=s, Log()
; else
; Log(s)
;}
Log(str:="", Keyboard:=0) {
global LogArr
static LastTime
t:=A_TickCount, Delay:=(LastTime ? t-LastTime:0), LastTime:=t
IfEqual, str,, return
i:=LogArr.MaxIndex(), r:=LogArr[i]
if (Keyboard and InStr(r,"Send,") and Delay<1000)
{
LogArr[i]:=r . str
return
}
if (Delay>200)
LogArr.Push("Sleep, " (Delay//2))
LogArr.Push(Keyboard ? "Send, {Blind}" str : str)
}
;============ The End ============
;
Re: Mouse And Keyboard Macro Recorder
@SpeedMaster
You didn't happen to know the answer of this above question too?![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
Anyone know how to change the mouse to Clicks instead of Mouseclick?
https://www.autohotkey.com/docs/commands/Click.htm
Click is just so much cleaner for the code than MouseClick, L. After all records I do this by find and replace, and removing empty lines which take twice the space.
You didn't happen to know the answer of this above question too?
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
Anyone know how to change the mouse to Clicks instead of Mouseclick?
https://www.autohotkey.com/docs/commands/Click.htm
Click is just so much cleaner for the code than MouseClick, L. After all records I do this by find and replace, and removing empty lines which take twice the space.