Onemacro Lua API

Overview

The Onemacro Lua API is a set of functions using the Lua programming language and provides advanced scripting functionality for any mice and keyboards with the Onemacro program.

This page assumes a working knowledge of the Lua programming language. Further information can be obtained from www.lua.org.

The script is invoked using an event handler, OnEvent. Users may examine the various events exposed in this handler to perform their desired actions.

OnEvent

The OnEvent() function serves as the event handler for the script. You will need to implement this function.

Код:
function OnEvent(event, arg)

end

Parameters


event
String containing the event identifier.

arg
Argument correlating to the appropriate identifier.

Return Values


None

Remarks


The following is the list of identifiers and their arguments:
EventargDescription
"PROFILE_ACTIVATED"NoneProfile has been activated. This is the first event seen.
"PROFILE_DEACTIVATED"NoneProfile has been deactivated. This is the last event seen
“MOUSE_BUTTON_PRESSED”2=Mouse Button 2
3=Mouse Button 3
4=Mouse Button 4
...
Profile has been deactivated. This is the last event seen
“MOUSE_BUTTON_RELEASED”2=Mouse Button 2
3=Mouse Button 3
4=Mouse Button 4
...
NOTE: Left Mouse Button (1) is not reported by default. Use ‘EnablePrimaryMouseButtonEvents’ to override this.

Example

Код:
-- This is the primary event handler
-- You must implement this function

function OnEvent(event, arg)
	if (event == "PROFILE_ACTIVATED") then
		--profile has been activated
	end

	if (event == "PROFILE_DEACTIVATED") then
		--profile has been deactivated
	end

	if (event == "MOUSE_BUTTON_PRESSED" and arg == 3) then
		--Mouse Button 3 has been pressed
	End

	if (event == "MOUSE_BUTTON_RELEASED" and arg == 3) then
		--Mouse Button 3 has been released
	end
end

Sleep

Sleep() will cause the script to pause for the desired amount of time.

Код:
Sleep( timeout );

Parameters


timeout
Total time to sleep in milliseconds.

Return Values


nil

Remarks


Scripting runs on separate thread than the main Profiler, so pausing the script will not affect it.

You can use this function to simulate delays.

Deactivation of the profiler will wait 1 second for the script to finish, after which the
script will be forcefully aborted. Take precaution if using a long timeout.

Example

Код:
-- Sleeping for 20 milliseconds
Sleep(20)

PressKey

The PressKey() function is used to simulate a keyboard key press. NOTE: Calling IsModifierPressed or IsKeyLockOn immediately afterwards for a simulated modifier or lock key will likely return the previous state. It will take a few milliseconds for the operation to complete.

Код:
PressKey( scancode [,scancode] );
	
PressKey( keyname [,keyname] );

Parameters


scancode
Specifies the numerical scancode of the key to be pressed.

keyname
Specifies the predefined keyname of the key to be pressed.

Return Values


nil

Remarks


If multiple keys are provided as arguments, all keys will be simulated with a press.

For scancode and keyname values, refer to Appendix A.

Example

Код:
-- Simulate "a" pressed using the scancode
PressKey(30)
	
-- Simulate "a" pressed using the keyname
PressKey("a")
	
-- Simulate "a" and "b" being pressed
PressKey("a", "b")

ReleaseKey

The ReleaseKey() function is used to simulate a keyboard key release.

Код:
ReleaseKey( scancode [,scancode] );
	
ReleaseKey( keyname [,keyname] );

Parameters


scancode
Specifies the numerical scancode of the key to be pressed.

keyname
Specifies the predefined keyname of the key to be pressed.

Return Values


nil

Remarks


If multiple keys are provided as arguments, all keys will be simulated with a release.

For scancode and keyname values, refer to Appendix A.

Example

Код:
-- Simulate "a" released using the scancode
ReleaseKey(30)
	
-- Simulate "a" released using the keyname
ReleaseKey("a")
	
-- Simulate "a" and "b" being released
ReleaseKey("a", "b")

PressAndReleaseKey

The PressAndReleaseKey() function is used to simulate a keyboard key press followed by a release. NOTE: Calling IsModifierPressed or IsKeyLockOn immediately afterwards for a simulated modifier or lock key will likely return the previous state. It will take a few milliseconds for the operation to complete.

Код:
ReleaseKey( scancode [,scancode] );
	
ReleaseKey( keyname [,keyname] );

Parameters


scancode
Specifies the numerical scancode of the key to be pressed.

keyname
Specifies the predefined keyname of the key to be pressed.

Return Values


nil

Remarks


If multiple keys are provided as arguments, all keys will be simulated with a press and a release.

For scancode and keyname values, refer to Appendix A.

Example

Код:
-- Simulate "a" pressed and released using the scancode
PressAndReleaseKey(30)
	
-- Simulate "a" pressed and released using the keyname
PressAndReleaseKey("a")
	
-- Simulate "a" and "b" being pressed and released
PressAndReleaseKey("a", "b")

IsModifierPressed

The IsModifierPressed() function is used to determine if a particular modifier key is currently in a pressed state.

Код:
boolean IsModifierPressed ( keyname );

Parameters


keyname
Specifies the predefined keyname of the modifier key to be pressed. The name ust be one of the following:
ModifierDescription
"lalt", "ralt", "alt"Left, right, or either Alt key
"lshift", "rshift", "shift" Left, right, or either Shift key
"lctrl", "rctrl", "ctrl" Left, right, or either Ctrl key

Return Values


True if the modifier key is currently pressed, false otherwise.

Remarks


None

Example

Код:
-- Press a specific modifier
PressKey("lshift")
	
if IsModifierPressed("shift") then
	--shift is pressed
end
	
-- Release the key so it is no longer pressed
ReleaseKey("lshift")
	
if not IsModifierPressed("shift") then
	--shift is not pressed
end

PressMouseButton

The PressMouseButton() function is used to simulate a mouse button press. NOTE: Calling IsMouseButtonPressed immediately afterwards, will likely return the previous state. It will take a few milliseconds for the operation to complete.

Код:
PressMouseButton( button )

Parameters


button
Button identifier. Use the following table:
Button ValueLocation
1Left Mouse Button
2Middle Mouse Button
3Right Mouse Button

Return Values


nil

Remarks


None

Example

Код:
-- Simulate left mouse button press
PressMouseButton(1)
	
-- Simulate right mouse button press
PressMouseButton(3)

ReleaseMouseButton

The ReleaseMouseButton() function is used to simulate a mouse button release

Код:
ReleaseMouseButton( button )

Parameters


button
Button identifier. Use the following table:
Button ValueLocation
1Left Mouse Button
2Middle Mouse Button
3Right Mouse Button

Return Values


nil

Remarks


None

Example

Код:
-- Simulate a left mouse button click (press and release)
	
PressMouseButton(1)
ReleaseMouseButton(1)

PressAndReleaseMouseButton

The PressAndReleaseMouseButton() function is used to simulate a mouse button press followed by a release. NOTE: Calling IsMouseButtonPressed immediately afterwards, will likely return the previous state. It will take a few milliseconds for the operation to complete.

Код:
PressAndReleaseMouseButton( button )

Parameters


button
Button identifier. Use the following table:
Button ValueLocation
1Left Mouse Button
2Middle Mouse Button
3Right Mouse Button

Return Values


nil

Remarks


None

Example

Код:
-- Simulate a left mouse button click (press and release)
	
PressAndReleaseMouseButton(1)

IsMouseButtonPressed

The IsMouseButtonPressed() function is used to determine if a particular mouse button is currently in a pressed state.

Код:
boolean IsMouseButtonPressed( button )

Parameters


button
Button identifier. Use the following table:
Button ValueLocation
1Left Mouse Button
2Middle Mouse Button
3Right Mouse Button

Return Values


True if the button is currently pressed, false otherwise.

Remarks


None

Example

Код:
-- Press a mouse button
PressMouseButton(1)
	
if IsMouseButtonPressed(1) then
	--Left mouse button is pressed
end
	
-- Release the button so it is no longer pressed
ReleaseMouseButton(1)
	
if not IsMouseButtonPressed(1) then
	--Left mouse button is not pressed

MoveMouseTo

The MoveMouseTo() function is used to move the mouse cursor to an absolute position on the screen.

Код:
MoveMouseTo( x, y, )

Parameters


X
Normalized X coordinate between 0 (farthest left) and 65535 (farthest right)

Y
Normalized y coordinate between 0 (farthest top) and 65535 (farthest bottom)

Return Values


nil

Remarks


If multiple monitors are present, use MoveMouseToVirtual.

Example

Код:
-- Move mouse to upper, left corner
MoveMouseTo(0, 0)
	
-- Move mouse to center of screen
MoveMouseTo(32767, 32767)
	
-- Move mouse to lower, right corner
MoveMouseTo(65535, 65535)

MoveMouseWheel

The MoveMouseWheel() function is used to simulate mouse wheel movement.

Код:
MoveMouseWheel( click )

Parameters


click
Number of mouse wheel clicks.

Return Values


nil

Remarks


Positive values denote wheel movement upwards (away from user).

Negative values denote wheel movement downwards (towards user).

Example

Код:
-- Simulate mouse wheel 3 clicks up
MoveMouseWheel(3)
	
-- Simulate mouse wheel 1 click down
MoveMouseWheel(-1)

MoveMouseRelative

The MoveMouseRelative() function is used to simulate relative mouse movement.

Код:
MoveMouseRelative( x, y, )

Parameters


X
Movement along the x-axis

Y
Movement along the y-axis

Return Values


nil

Remarks


Positive x values simulate movement to right.

Negative x values simulate movement to left.

Positive y values simulate movement downwards.

Negative y values simulate movement upwards.

Example

Код:
-- Simulate relative mouse movement upwards in 1 pixel increments
for i = 0, 50 do
	MoveMouseRelative(0, -1)
	Sleep(8)
end

MoveMouseToVirtual

The MoveMouseToVirtual() function is used to move the mouse cursor to an absolute position on a multi-monitor screen layout.

Код:
MoveMouseToVirtual( x, y, )

Parameters


X
Normalized X coordinate between 0 (farthest left) and 65535 (farthest right)

Y
Normalized y coordinate between 0 (farthest top) and 65535 (farthest bottom)

Return Values


nil

Remarks


If multiple monitors are present, use MoveMouseToVirtual.

Example

Код:
-- Move mouse to upper, left corner of virtual desktop
MoveMouseToVirtual(0, 0)
	
-- Move mouse to center of virtual desktop
MoveMouseToVirtual (32767, 32767)
	
-- Move mouse to lower, right corner of virtual desktop
MoveMouseToVirtual (65535, 65535)

IsKeyLockOn

The IsKeyLockOn() function used to determine if a particular lock button is currently in an enabled state.

Код:
IsKeyLockOn( key )

Parameters


key
key name. Use the following table:
Key nameLocation
"scrolllock"Scroll Lock
"capslock"Caps Lock
"numlock"Number Lock

Return Values


True if the lock is currently enabled, false otherwise.

Remarks


None

Example

Код:
-- Check if the numlock is on and turn it off if it is
if ( IsKeyLockOn("numlock" ) then
	PressAndReleaseKey("numlock");
end

EnablePrimaryMouseButtonEvents

EnablePrimaryMouseButtonEvents() enables event reporting for mouse button 1.

Код:
EnablePrimaryMouseButtonEvents(enable);

Parameters


enable
1 or true to enable event reporting for mouse button 1

0 or false to disable event reporting for mouse button 1

Return Values


nil

Remarks


The primary mouse button is not reported by default for performance issues.

Example

Код:
-- Enable event reporting for mouse button 1
EnablePrimaryMouseButtonEvents(true);
	
-- Disable event reporting for mouse button 1
EnablePrimaryMouseButtonEvents(false);

Standard Lua 5.1 Libraries

The following standard library functions are supported:


  • string.byte
  • string.char
  • string.dump
  • string.find
  • string.format
  • string.gmatch
  • string.gsub
  • string.len
  • string.lower
  • string.match
  • string.rep
  • string.reverse
  • string.sub
  • string.upper
  • table.concat
  • table.insert
  • table.maxn
  • table.remove
  • table.sort
  • math.abs
  • math.acos
  • math.asin
  • math.atan
  • math.atan2
  • math.ceil
  • math.cos
  • math.deg
  • math.exp
  • math.floor
  • math.fmod
  • math.frexp
  • math.huge
  • math.ldexp
  • math.log
  • math.log10
  • math.max
  • math.min
  • math.modf
  • math.pi
  • math.pow
  • math.rad
  • math.random
  • math.randomseed
  • math.sin
  • math.sinh
  • math.sqrt
  • math.tan
  • math.tanh

Appendix A

Table of scancodes and keynames used in PressKey(), ReleaseKey(), IsModifierPressed().

KeynameScancode (hex)
"escape"0x01
"f1"0x3b
"f2"0x3c
"f3"0x3d
"f4"0x3e
"f5"0x3f
"f6"0x40
"f7"0x41
"f8"0x42
"f9"0x43
"f10"0x44
"f11"0x57
"f12"0x58
"f13"0x64
"f14"0x65
"f15"0x66
"f16"0x67
"f17"0x68
"f18"0x69
"f19"0x6a
"f20"0x6b
"f21"0x6c
"f22"0x6d
"f23"0x6e
"f24"0x76
"printscreen"0x137
"scrolllock"0x46
"pause"0x146
"tilde"0x29
"1"0x02
"2"0x03
"3"0x04
"4"0x05
"5"0x06
"6"0x07
"7"0x08
"8"0x09
"9"0x0a
"0"0x0b
"minus"0x0c
"equal"0x0d
"backspace"0x0e
"tab"0x0f
"q"0x10
"w"0x11
"e"0x12
"r"0x13
"t"0x14
"y"0x15
"u"0x16
"i"0x17
"o"0x18
"p"0x19
"lbracket0x1a
"rbracket"0x1b
"backslash"0x2b
"capslock"0x3a
"a"0x1e
"s"0x1f
"d"0x20
"f"0x21
"g"0x22
"h"0x23
"j"0x24
"k"0x25
"l"0x26
"semicolon0x27
"quote"0x28
"enter"0x1c
"lshift"0x2a
"non_us_slash"0x56
"z"0x2c
"x"0x2d
"c"0x2e
"v"0x2f
"b"0x30
"n"0x31
"m"0x32
"comma"0x33
"period"0x34
"slash"0x35
"rshift"0x36
"lctrl"0x1d
"lgui"0x15b
"lalt"0x38
"spacebar"0x39
"ralt"0x138
"rgui"0x15c
"appkey"0x15d
"rctrl"0x11d
"insert"0x152
"home"0x147
"pageup"0x149
"delete"0x153
"end"0x14f
"pagedown"0x151
"up" 0x148
"left"0x14b
"down"0x150
"right"0x14d
"numlock"0x45
"numslash"0x135
"numminus"0x4a
"num7"0x47
"num8"0x48
"num9"0x49
"numplus"0x4e
"num4"0x4b
"num5"0x4c
"num6"0x4d
"num1"0x4f
"num2"0x50
"num3"0x51
"numenter"0x11c
"num0"0x52
"numperiod"0x53

Keyboard Scancode

Keyboard Scancode
Сверху