Panoramica di AutoHotkey

20 / 100
()

Elenco completo dei comandi AutoHotkey disponibili.

NameDescription
{ … } (Block)Blocks are one or more statements enclosed in braces. Typically used with function definitions and control flow statements.
{ … } / Object()Creates a scriptable associative array.
[ … ] / Array()Creates a scriptable associative array with integer keys.
Abs()Returns the absolute value of Number.
AutoTrimDetermines whether traditional assignments like Var1 = %Var2% omit spaces and tabs from the beginning and end of Var2.
Asc()Returns the numeric value of the first byte or UTF-16 code unit in the specified string.
ASin()Returns the arcsine (the number whose sine is Number) in radians.
ACos()Returns the arccosine (the number whose cosine is Number) in radians.
ATan()Returns the arctangent (the number whose tangent is Number) in radians.
BlockInputDisables or enables the user’s ability to interact with the computer via keyboard and mouse.
BreakExits (terminates) any type of loop statement.
CatchSpecifies the code to execute if an exception is raised during execution of a try statement.
Ceil()Returns Number rounded up to the nearest integer (without any .00 suffix).
Chr()Returns the string (usually a single character) corresponding to the character code indicated by the specified number.
ClickClicks a mouse button at the specified coordinates. It can also hold down a mouse button, turn the mouse wheel, or move the mouse.
ClipWaitWaits until the clipboard contains data.
ComObjActive()Retrieves a registered COM object.
ComObjArray()Creates a SafeArray for use with COM.
ComObjConnect()Connects a COM object’s event sources to functions with a given prefix.
ComObjCreate()Creates a COM object.
ComObject()Creates an object representing a typed value to be passed as a parameter or return value.
ComObjEnwrap() / ComObjUnwrap()Wraps/unwraps a COM object.
ComObjError()Enables or disables notification of COM errors.
ComObjFlags()Retrieves or changes flags which control a COM wrapper object’s behaviour.
ComObjGet()Returns a reference to an object provided by a COM component.
ComObjMissing()Creates a “missing parameter” object to pass to a COM method.
ComObjParameter()Wraps a value and type to pass as a parameter to a COM method.
ComObjQuery()Queries a COM object for an interface or service.
ComObjType()Retrieves type information from a COM object.
ComObjValue()Retrieves the value or pointer stored in a COM wrapper object.
ContinueSkips the rest of a loop statement‘s current iteration and begins a new one.
ControlMakes a variety of changes to a control.
ControlClickSends a mouse button or mouse wheel event to a control.
ControlFocusSets input focus to a given control on a window.
ControlGetRetrieves various types of information about a control.
ControlGetFocusRetrieves which control of the target window has input focus, if any.
ControlGetPosRetrieves the position and size of a control.
ControlGetTextRetrieves text from a control.
ControlMoveMoves or resizes a control.
ControlSend / ControlSendRawSends simulated keystrokes to a window or control.
ControlSetTextChanges the text of a control.
CoordModeSets coordinate mode for various commands to be relative to either the active window or the screen.
Cos()Returns the trigonometric cosine of Number.
CriticalPrevents the current thread from being interrupted by other threads, or enables it to be interrupted.
DetectHiddenTextDetermines whether invisible text in a window is “seen” for the purpose of finding the window. This affects commands, built-in functions and control flow statements such as WinExist() and WinActivate.
DetectHiddenWindowsDetermines whether invisible windows are “seen” by the script.
DllCall()Calls a function inside a DLL, such as a standard Windows API function.
DriveEjects/retracts the tray in a CD or DVD drive, or sets a drive’s volume label.
DriveGetRetrieves various types of information about the computer’s drive(s).
DriveSpaceFreeRetrieves the free disk space of a drive, in Megabytes.
EditOpens the current script for editing in the associated editor.
ElseSpecifies one or more statements to execute if an If statement evaluates to false.
EnvAddSets a variable to the sum of itself plus the given value (can also add or subtract time from a date-time value). Synonymous with: Var += Value.
EnvDivSets a variable to itself divided by the given value. Synonymous with: Var /= Value.
EnvGetRetrieves an environment variable.
EnvMultSets a variable to itself times the given value. Synonymous with: Var *= Value.
EnvSetWrites a value to a variable contained in the environment.
EnvSubSets a variable to itself minus the given value (can also compare date-time values). Synonymous with: Var -= Value.
EnvUpdateNotifies the OS and all running applications that environment variable(s) have changed.
Exception()Creates an object with properties, also common to exceptions created by runtime errors.
ExitExits the current thread or (if the script is not persistent) the entire script.
ExitAppTerminates the script.
Exp()Returns e (which is approximately 2.71828182845905) raised to the Nth power.
FileAppendWrites text to the end of a file (first creating the file, if necessary).
FileCopyCopies one or more files.
FileCopyDirCopies a folder along with all its sub-folders and files (similar to xcopy).
FileCreateDirCreates a folder.
FileCreateShortcutCreates a shortcut (.lnk) file.
FileDeleteDeletes one or more files.
FileEncodingSets the default encoding for FileReadFileReadLineLoop ReadFileAppend, and FileOpen().
FileExist()Checks for the existence of a file or folder and returns its attributes.
FileInstallIncludes the specified file inside the compiled version of the script.
FileGetAttribReports whether a file or folder is read-only, hidden, etc.
FileGetShortcutRetrieves information about a shortcut (.lnk) file, such as its target file.
FileGetSizeRetrieves the size of a file.
FileGetTimeRetrieves the datetime stamp of a file or folder.
FileGetVersionRetrieves the version of a file.
FileMoveMoves or renames one or more files.
FileMoveDirMoves a folder along with all its sub-folders and files. It can also rename a folder.
FileOpen()Opens a file to read specific content from it and/or to write new content into it.
FileReadReads a file’s contents into a variable.
FileReadLineReads the specified line from a file and stores the text in a variable.
FileRecycleSends a file or directory to the recycle bin if possible, or permanently deletes it.
FileRecycleEmptyEmpties the recycle bin.
FileRemoveDirDeletes a folder.
FileSelectFileDisplays a standard dialog that allows the user to open or save file(s).
FileSelectFolderDisplays a standard dialog that allows the user to select a folder.
FileSetAttribChanges the attributes of one or more files or folders. Wildcards are supported.
FileSetTimeChanges the datetime stamp of one or more files or folders. Wildcards are supported.
FinallyEnsures that one or more statements are always executed after a Try statement finishes.
Floor()Returns Number rounded down to the nearest integer (without any .00 suffix).
ForRepeats a series of commands once for each key-value pair in an object.
Format()Formats a variable number of input values according to a format string.
FormatTimeTransforms a YYYYMMDDHH24MISS timestamp into the specified date/time format.
Func()Retrieves a reference to a function.
GetKeyName()Retrieves the name or text of a key.
GetKeyVK()Retrieves the virtual key code of a key.
GetKeySC()Retrieves the scan code of a key.
GetKeyStateChecks if a keyboard key or mouse/joystick button is down or up. Also retrieves joystick status.
GetKeyState()Checks if a keyboard key or mouse/joystick button is down or up. Also retrieves joystick status.
GosubJumps to the specified label and continues execution until Return is encountered.
GotoJumps to the specified label and continues execution.
GroupActivateActivates the next window in a window group that was defined with GroupAdd.
GroupAddAdds a window specification to a window group, creating the group if necessary.
GroupCloseCloses the active window if it was just activated by GroupActivate or GroupDeactivate. It then activates the next window in the series. It can also close all windows in a group.
GroupDeactivateSimilar to GroupActivate except activates the next window not in the group.
GuiCreates and manages windows and controls. Such windows can be used as data entry forms or custom user interfaces.
GuiControlMakes a variety of changes to a control in a GUI window.
GuiControlGetRetrieves various types of information about a control in a GUI window.
HotkeyCreates, modifies, enables, or disables a hotkey while the script is running.
Hotstring()Creates, modifies, enables, or disables a hotstring while the script is running.
If (expression)Specifies one or more statements to execute if an expression evaluates to true.
If (legacy)Specifies one or more statements to execute if the comparison of a variable to a value evaluates to true.
If var [not] betweenChecks whether a variable’s contents are numerically or alphabetically between two values (inclusive).
If var [not] in/contains MatchListChecks whether a variable’s contents match one of the items in a list.
If var is [not] typeChecks whether a variable’s contents are numeric, uppercase, etc.
IfEqual / IfNotEqualCompares a variable to a value for equality. Synonymous with: if Var = Value | if Var != Value.
IfExist / IfNotExistChecks for the existence of a file or folder.
IfGreater / IfGreaterOrEqualCompares a variable to a value. Synonymous with: if Var > Value | if Var >= Value.
IfInString / IfNotInStringChecks if a variable contains the specified string.
IfLess / IfLessOrEqualCompares a variable to a value. Synonymous with: if Var < Value | if Var <= Value.
IfMsgBoxChecks which button was pushed by the user during the most recent MsgBox command.
IfWinActive / IfWinNotActiveChecks if the specified window exists and is currently active (foremost).
IfWinExist / IfWinNotExistChecks if the specified window exists.
IL_Create()
IL_Add()
IL_Destroy()
The means by which icons are added to a ListView or TreeView control.
ImageSearchSearches a region of the screen for an image.
IniDeleteDeletes a value from a standard format .ini file.
IniReadReads a value, section or list of section names from a standard format .ini file.
IniWriteWrites a value or section to a standard format .ini file.
InputWaits for the user to type a string.
InputBoxDisplays an input box to ask the user to enter a string.
InputHook()Creates an object which can be used to collect or intercept keyboard input.
InStr()Searches for a given occurrence of a string, from the left or the right.
IsByRef()Returns a non-zero number if the specified ByRef parameter was supplied with a variable.
IsFunc()Returns a non-zero number if the specified function exists in the script.
IsLabel()Returns a non-zero number if the specified label exists in the script.
IsObject()Returns a non-zero number if the specified value is an object.
KeyHistoryDisplays script info and a history of the most recent keystrokes and mouse clicks.
KeyWaitWaits for a key or mouse/joystick button to be released or pressed down.
ListHotkeysDisplays the hotkeys in use by the current script, whether their subroutines are currently running, and whether or not they use the keyboard or mouse hook.
ListLinesDisplays the script lines most recently executed.
ListVarsDisplays the script’s variables: their names and current contents.
LoadPicture()Loads a picture from file and returns a bitmap or icon handle.
Log()Returns the logarithm (base 10) of Number.
Ln()Returns the natural logarithm (base e) of Number.
Loop (normal)Performs a series of commands repeatedly: either the specified number of times or until break is encountered.
Loop (files & folders)Retrieves the specified files or folders, one at a time.
Loop (parse a string)Retrieves substrings (fields) from a string, one at a time.
Loop (read file contents)Retrieves the lines in a text file, one at a time (performs better than FileReadLine).
Loop (registry)Retrieves the contents of the specified registry subkey, one item at a time.
LV_Add()
LV_Delete()
LV_DeleteCol()
LV_GetCount()
LV_GetNext()
LV_GetText()
LV_Insert()
LV_InsertCol()
LV_Modify()
LV_ModifyCol()
LV_SetImageList()
The means by which the rows and columns of a ListView control are added, modified or retrieved.
Max()Returns the highest value of one or more numbers.
MenuCreates, deletes, modifies and displays menus and menu items. Changes the tray icon and its tooltip. Controls whether the main window of a compiled script can be opened.
MenuGetHandle()Retrieves the Win32 menu handle of a menu.
MenuGetName()Retrieves the name of a menu given a handle to its underlying Win32 menu.
Min()Returns the lowest value of one or more numbers.
Mod()Modulo. Returns the remainder when Dividend is divided by Divisor.
MouseClickClicks or holds down a mouse button, or turns the mouse wheel. NOTE: The Click command is generally more flexible and easier to use.
MouseClickDragClicks and holds the specified mouse button, moves the mouse to the destination coordinates, then releases the button.
MouseGetPosRetrieves the current position of the mouse cursor, and optionally which window and control it is hovering over.
MouseMoveMoves the mouse cursor.
MsgBoxDisplays the specified text in a small window containing one or more buttons (such as Yes and No).
NumGet()Returns the binary number stored at the specified address+offset.
NumPut()Stores a number in binary format at the specified address+offset.
ObjAddRef() / ObjRelease()Increments or decrements an object’s reference count.
ObjBindMethod()Creates a BoundFunc object which calls a method of a given object.
ObjClone()
ObjCount()
ObjDelete()
ObjGetAddress()
ObjGetCapacity()
ObjHasKey()
ObjInsert()
ObjInsertAt()
ObjLength()
ObjMaxIndex()
ObjMinIndex()
ObjNewEnum()
ObjPop()
ObjPush()
ObjRemove()
ObjRemoveAt()
ObjSetCapacity()
These functions are equivalent to built-in methods of the Object type. It is usually recommended to use the corresponding method instead.
ObjGetBase()Retrieves an object’s base object.
ObjRawGet()Retrieves a key-value pair from an object, bypassing the object’s meta-functions.
ObjRawSet()Stores or overwrites a key-value pair in an object, bypassing the object’s meta-functions.
ObjSetBase()Sets an object’s base object.
OnClipboardChange()Registers a function or function object to run whenever the clipboard’s content changes.
OnError()Specifies a function to run automatically when an unhandled error occurs.
OnExitSpecifies a subroutine to run automatically when the script exits.
OnExit()Specifies a callback function to run automatically when the script exits.
OnMessage()Specifies a function or function object to call automatically when the script receives the specified message.
Ord()Returns the ordinal value (numeric character code) of the first character in the specified string.
OutputDebugSends a string to the debugger (if any) for display.
PausePauses the script’s current thread.
PixelGetColorRetrieves the color of the pixel at the specified x,y coordinates.
PixelSearchSearches a region of the screen for a pixel of the specified color.
PostMessagePlaces a message in the message queue of a window or control.
ProcessPerforms one of the following operations on a process: checks if it exists; changes its priority; closes it; waits for it to close.
ProgressCreates or updates a window containing a progress bar.
RandomGenerates a pseudo-random number.
RegExMatch()Determines whether a string contains a pattern (regular expression).
RegExReplace()Replaces occurrences of a pattern (regular expression) inside a string.
RegDeleteDeletes a subkey or value from the registry.
RegReadReads a value from the registry.
RegWriteWrites a value to the registry.
RegisterCallback()Creates a machine-code address that when called, redirects the call to a function in the script.
ReloadReplaces the currently running instance of the script with a new one.
ReturnReturns from a subroutine to which execution had previously jumped via function-callGosubHotkey activation, GroupActivate, or other means.
Round()Returns Number rounded to N decimal places.
RunRuns an external program.
RunAsSpecifies a set of user credentials to use for all subsequent uses of Run and RunWait.
RunWaitRuns an external program and waits until it finishes.
SB_SetIcon()
SB_SetParts()
SB_SetText()
The means by which the bar of a StatusBar control is modified.
Send / SendRaw / SendInput / SendPlay / SendEventSends simulated keystrokes and mouse clicks to the active window.
SendLevelControls which artificial keyboard and mouse events are ignored by hotkeys and hotstrings.
SendMessageSends a message to a window or control and waits for acknowledgement.
SendModeMakes Send synonymous with SendInput or SendPlay rather than the default (SendEvent). Also makes Click and MouseMove/Click/Drag use the specified method.
SetBatchLinesDetermines how fast a script will run (affects CPU utilization).
SetCapsLockStateSets the state of CapsLock. Can also force the key to stay on or off.
SetControlDelaySets the delay that will occur after each control-modifying command.
SetDefaultMouseSpeedSets the mouse speed that will be used if unspecified in Click and MouseMove/Click/Drag.
SetEnv (Var = Value)Assigns the specified value to a variable.
SetFormatSets the format of integers and floating point numbers generated by math operations.
SetKeyDelaySets the delay that will occur after each keystroke sent by Send or ControlSend.
SetMouseDelaySets the delay that will occur after each mouse movement or click.
SetNumLockStateSets the state of NumLock. Can also force the key to stay on or off.
SetScrollLockStateSets the state of ScrollLock. Can also force the key to stay on or off.
SetRegViewSets the registry view used by RegReadRegWriteRegDelete and registry loops, allowing them in a 32-bit script to access the 64-bit registry view and vice versa.
SetStoreCapsLockModeWhether to restore the state of CapsLock after a Send.
SetTimerCauses a subroutine to be launched automatically and repeatedly at a specified time interval.
SetTitleMatchModeSets the matching behavior of the WinTitle parameter in commands such as WinWait.
SetWinDelaySets the delay that will occur after each windowing command, such as WinActivate.
SetWorkingDirChanges the script’s current working directory.
ShutdownShuts down, restarts, or logs off the system.
Sin()Returns the trigonometric sine of Number.
SleepWaits the specified amount of time before continuing.
SortArranges a variable’s contents in alphabetical, numerical, or random order (optionally removing duplicates).
SoundBeepEmits a tone from the PC speaker.
SoundGetRetrieves various settings of a sound device (master mute, master volume, etc.)
SoundGetWaveVolumeRetrieves the wave output volume of a sound device.
SoundPlayPlays a sound, video, or other supported file type.
SoundSetChanges various settings of a sound device (master mute, master volume, etc.)
SoundSetWaveVolumeChanges the wave output volume of a sound device.
SplashImageCreates or updates a window containing an image.
SplashTextOn / SplashTextOffCreates or removes a customizable text popup window.
SplitPathSeparates a file name or URL into its name, directory, extension, and drive.
Sqrt()Returns the square root of Number.
StatusBarGetTextRetrieves the text from a standard status bar control.
StatusBarWaitWaits until a window’s status bar contains the specified string.
StrGet()Copies a string from a memory address, optionally converting it from a given code page.
StringCaseSenseDetermines whether string comparisons are case sensitive (default is “not case sensitive”).
StringGetPosRetrieves the position of the specified substring within a string.
StringLeftRetrieves a number of characters from the left-hand side of a string.
StringLenRetrieves the count of how many characters are in a string.
StringLowerConverts a string to lowercase.
StringMidRetrieves one or more characters from the specified position in a string.
StringReplaceReplaces the specified substring with a new string.
StringRightRetrieves a number of characters from the right-hand side of a string.
StringSplitSeparates a string into an array of substrings using the specified delimiters.
StringTrimLeftRemoves a number of characters from the left-hand side of a string.
StringTrimRightRemoves a number of characters from the right-hand side of a string.
StringUpperConverts a string to uppercase.
StrLen()Retrieves the count of how many characters are in a string.
StrPut()Copies a string to a memory address, optionally converting it to a given code page.
StrReplace()Replaces the specified substring with a new string.
StrSplit()Separates a string into an array of substrings using the specified delimiters.
SubStr()Retrieves one or more characters from the specified position in a string.
SuspendDisables or enables all or selected hotkeys and hotstrings.
SwitchExecutes one case from a list of mutually exclusive candidates.
SysGetRetrieves screen resolution, multi-monitor info, dimensions of system objects, and other system properties.
Tan()Returns the trigonometric tangent of Number.
ThreadSets the priority or interruptibility of threads. It can also temporarily disable all timers.
ThrowSignals the occurrence of an error. This signal can be caught by a trycatch statement.
ToolTipCreates an always-on-top window anywhere on the screen.
TransformPerforms miscellaneous math functions, bitwise operations, and tasks such as ASCII/Unicode conversion.
TrayTipCreates a balloon message window near the tray icon. On Windows 10, a toast notification may be shown instead.
Trim() / LTrim() / RTrim()Trims characters from the beginning and/or end of a string.
TryGuards one or more statements (commands or expressions) against runtime errors and exceptions thrown by the throw command.
TV_Add()
TV_Delete()
TV_Get()
TV_GetChild()
TV_GetCount()
TV_GetNext()
TV_GetParent()
TV_GetPrev()
TV_GetSelection()
TV_GetText()
TV_Modify()
TV_SetImageList()
The means by which the items of a TreeView control are added, modified or retrieved.
UntilApplies a condition to the continuation of a Loop or For-loop.
UrlDownloadToFileDownloads a file from the Internet.
Var = ValueAssigns the specified value to a variable.
Var := expressionEvaluates an expression and stores the result in a variable.
VarSetCapacity()Enlarges a variable’s holding capacity or frees its memory. Normally, this is necessary only for unusual circumstances such as DllCall().
While-loopPerforms a series of commands repeatedly until the specified expression evaluates to false.
WinActivateActivates the specified window.
WinActivateBottomSame as WinActivate except that it activates the bottommost matching window rather than the topmost.
WinActive()Checks if the specified window is active and returns its unique ID (HWND).
WinCloseCloses the specified window.
WinExist()Checks if the specified window exists and returns the unique ID (HWND) of the first matching window.
WinGetActiveStatsCombines the functions of WinGetActiveTitle and WinGetPos into one command.
WinGetActiveTitleRetrieves the title of the active window.
WinGetClassRetrieves the specified window’s class name.
WinGetRetrieves the specified window’s unique ID, process ID, process name, or a list of its controls. It can also retrieve a list of all windows matching the specified criteria.
WinGetPosRetrieves the position and size of the specified window.
WinGetTextRetrieves the text from the specified window.
WinGetTitleRetrieves the title of the specified window.
WinHideHides the specified window.
WinKillForces the specified window to close.
WinMaximizeEnlarges the specified window to its maximum size.
WinMenuSelectItemInvokes a menu item from the menu bar of the specified window.
WinMinimizeCollapses the specified window into a button on the task bar.
WinMinimizeAll / WinMinimizeAllUndoMinimizes or unminimizes all windows.
WinMoveChanges the position and/or size of the specified window.
WinRestoreUnminimizes or unmaximizes the specified window if it is minimized or maximized.
WinSetMakes a variety of changes to the specified window, such as “always on top” and transparency.
WinSetTitleChanges the title of the specified window.
WinShowUnhides the specified window.
WinWaitWaits until the specified window exists.
WinWaitActive / WinWaitNotActiveWaits until the specified window is active or not active.
WinWaitCloseWaits until the specified window does not exist.
#ClipboardTimeoutChanges how long the script keeps trying to access the clipboard when the first attempt fails.
#CommentFlagChanges the script’s comment symbol from semicolon to some other string.
#DelimiterChanges the script’s command parameter delimiter from comma to some other character.
#DerefCharChanges the script’s dereference symbol from percent to some other character.
#ErrorStdOutSends any syntax error that prevents a script from launching to the standard error stream (stderr) rather than displaying a dialog.
#EscapeCharChanges the script’s escape character (e.g. backslash vs. accent).
#HotkeyIntervalAlong with #MaxHotkeysPerInterval, specifies the rate of hotkey activations beyond which a warning dialog will be displayed.
#HotkeyModifierTimeoutAffects the behavior of hotkey modifiers: CtrlAltWin, and Shift.
#HotstringChanges hotstring options or ending characters.
#IfCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the result of an expression.
#IfTimeoutSets the maximum time that may be spent evaluating a single #If expression.
#IfWinActive / #IfWinNotActive / #IfWinExist / #IfWinNotExistCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the type of window that is active or exists.
#Include / #IncludeAgainCauses the script to behave as though the specified file’s contents are present at this exact position.
#InputLevelControls which artificial keyboard and mouse events are ignored by hotkeys and hotstrings.
#InstallKeybdHookForces the unconditional installation of the keyboard hook.
#InstallMouseHookForces the unconditional installation of the mouse hook.
#KeyHistorySets the maximum number of keyboard and mouse events displayed by the KeyHistory window. You can set it to 0 to disable key history.
#LTrimEnables or disables trimming of indentation in continuation sections.
#MaxHotkeysPerIntervalAlong with #HotkeyInterval, specifies the rate of hotkey activations beyond which a warning dialog will be displayed.
#MaxMemSets the maximum capacity of each variable to the specified number of megabytes.
#MaxThreadsSets the maximum number of simultaneous threads.
#MaxThreadsBufferCauses some or all hotkeys to buffer rather than ignore keypresses when their #MaxThreadsPerHotkey limit has been reached.
#MaxThreadsPerHotkeySets the maximum number of simultaneous threads per hotkey or hotstring.
#MenuMaskKeyChanges which key is used to mask Win or Alt keyup events.
#NoEnvAvoids checking empty variables to see if they are environment variables (recommended for all new scripts).
#NoTrayIconDisables the showing of a tray icon.
#PersistentKeeps a script permanently running (that is, until the user closes it or ExitApp is encountered).
#RequiresDisplays an error and quits if a version requirement is not met.
#SingleInstanceDetermines whether a script is allowed to run again when it is already running.
#UseHookForces the use of the hook to implement all or some keyboard hotkeys.
#WarnEnables or disables warnings for specific conditions which may indicate an error, such as a typo or missing “global” declaration.
#WinActivateForceSkips the gentle method of activating a window and goes straight to the forceful method.

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?