Aller au contenu

AutoHotKey

De Banane Atomic

Généralités

AutoHotKey
SciTE4AutoHotkey permet d'avoir la coloration syntaxique avec les fichiers ahk.

Liens

Send

Send les caractères spéciaux sont transformés
SendRaw pas de transformation, envoie les caractères tels qu'ils sont écrits
SendInput plus rapide et plus fiable que Send
SendPlay similaire à SendInput, mais plus adapté pour les jeux vidéo

Clavier

# Windows
! Alt
^ Ctrl
+ Shift
<^>! Alt Gr
* Wildcard: Fire the hotkey even if extra modifiers are being held down.
Si une combinaison ne fonctionne pas avec + essayez la forme: Shift & key::Send {key}
Pour les caractères spéciaux comme %key::Send `%
$ is usually only necessary if the script uses the Send command to send the keys that comprise the hotkey itself, which might otherwise cause it to trigger itself.

Capture de la Souris

LButton clique gauche
RButton clique droit
MButton clique roulette
XButton1 bouton 4 (doit être assigné à Browser_Back)
XButton2 bouton 5 (doit être assigné à Browser_Forward)
XButton3 n'est pas implémenté car Windows ne supporte que 5 boutons.
Il faut donc mapper ce 6ème boutons à une combinaison de touches et remapper ces touches à une action.

Double-clique

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; Double click
~LButton:: 
If (A_TimeSincePriorHotkey<400) and (A_PriorHotkey="~LButton")
	MsgBox You double Left clicked on something 
Return

Générer des événements souris

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; Clique gauche
MouseClick, left

; Double clique
MouseClick, left, , , 2

Mapping pour une application spécifique

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; Si LibreOffice est actif, mapper le point du pavé numérique avec le point et non la virgule par défaut en FR
IfWinActive ahk_class SALFRAME
NumPadDot::SendInput .

; Si Firefox ou Notepad++ est actif
If WinActive("ahk_class MozillaWindowClass") or WinActive("ahk_class Notepad++") { }

; A window's title can contain WinTitle anywhere inside it to be a match.
SetTitleMatchMode, 2

SetTitleMatchMode

Par défaut, l'expression doit correspondre au début du titre de la fenêtre.
Si ahk_class est spécifié, l'expression doit correspondre exactement à la classe de la fenêtre.

Désactiver / remapper les touches Caps Lock, Num Lock, Scroll Lock

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; set the default state of the lock keys
SetCapsLockState, off
SetNumLockState, on
SetScrollLockState, off

; disable them
$NumLock::Return
$ScrollLock::Return

; make the capslock key behave as menu/AppsKey
CapsLock::AppsKey

if else

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
if Variable
    ...
else if (x > y) {
   ...
   ...
} else
   ...

Lire et écrire dans un fichier

; écriture dans %USERPROFILE%\AppData\Local\Temp\file.tmp
"text" > %A_Temp%\file.tmp
; écriture sans saut de ligne
"text" | Set-Content -NoNewline %A_Temp%\file.tmp

; lecture du fichier %USERPROFILE%\AppData\Local\Temp\file.tmp
FileRead, FileContent, %A_Temp%\file.tmp
; lecture de la ligne 1
FileReadLine, FileLineOne, %A_Temp%\file.tmp, 1

FileRead, FileReadLine

Exécuter du code PowerShell, Batch

; Batch, écriture du résultat dans %USERPROFILE%\AppData\Local\Temp\result.tmp
RunWait %Comspec% /c "commande batch" > %A_Temp%\result.tmp,,HIDE

; PowerShell, écriture du résultat dans %USERPROFILE%\AppData\Local\Temp\result.tmp
RunWait powershell.exe "commande powershell" > %A_Temp%\result.tmp,,HIDE

Run

ScanCode

Clique-droit sur l'icone → Open → View → Key history and script info
Appuyer sur une touche → F5
Le code de la 2ème colonne correspond au ScanCode

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
SC02D::MsgBox, %A_ThisHotKey% was pressed.  ; x

Exemples

; ctrl-w -> ctrl-z
^w::^z
; ctrl-q -> ctrl-a
^q::^a

$F1::Send ^c ; copy
$F2::Send ^v ; paste

F12::Send !{F4} ; fermer fenêtre avec F12

; clique-milieu -> clique gauche + ctrl-v
MButton::
MouseClick
SendInput ^v
Return

; Alt-A select the whole line
!a::
Send {Home}
Send +{End}
Return

; dans LibreOffice
#IfWinActive ahk_class SALFRAME
NumPadDot::SendInput .

Copie la sélection dans le presse-papier

Old

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
CopyToClipboard2()
{
	ClipSaved := ClipboardAll 		; Save the entire clipboard to a variable of your choice.
	Send ^c               			; Copy the highlighted text to the clipboard 
	ClipWait, 2				; Wait for the clipboard to contain text.
	if ErrorLevel
	{
		MsgBox, The attempt to copy text onto the clipboard failed.
		return
	}
	;MsgBox Control-C copied the following contents to the clipboard:`nüClipboardü
	global SecondClipboard
	SecondClipboard := Clipboard	    ; Assign the clipboard content to the variable 
	sleep, 100
	Clipboard := ClipSaved    	    ; Restore the original clipboard
	ClipSaved :=             	    ; Free the memory in case the clipboard was very large 
}

~LButton::
if not (WinActive("ahk_class CabinetWClass") or WinActive("ahk_class Shell_TrayWnd") or WinActive("ahk_class Progman"))
{
	MouseGetPos, cos_mousedrag_x, cos_mousedrag_y
	KeyWait LButton
	MouseGetPos, cos_mousedrag_x2, cos_mousedrag_y2
	if (abs(cos_mousedrag_x2 - cos_mousedrag_x) > 10 or abs(cos_mousedrag_y2 - cos_mousedrag_y) > 10)
	{
		CopyToClipboard2()
	}
	else if (A_TimeSincePriorHotkey < 400) and (A_PriorHotkey = "~LButton")
	{
		if (A_TimeSincePriorHotkey < 400) and (A_PriorHotkey = "~LButton")
		{
			;MsgBox You triple Left clicked on something 
			CopyToClipboard2()
		}
		else
		{
			;MsgBox You double Left clicked on something		
			CopyToClipboard2()
		}
	}
}
Return

XButton2::
StringReplace, SecondClipboard, SecondClipboard, `r, , All
;SendInput {LButton}
SendInput {Click left}
SendInput {Raw}üSecondClipboardü	; plus rapide que Send et SendRaw
Return

Alt Tab

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; AltTab avec Ctrl + Backspace
ctrl & backspace::AltTab
C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; AltTab avec CapsLock
CapsLock::AltTabAndMenu
!LButton::    ; The ! prefix makes it fire while the Alt key is down (which it is if the alt-tab menu is visible).
	MouseClick, left
        Send {Alt up}
return
!Enter::
	Send {Enter}
	Send {Alt up}
return

Contrôle du son avec la molette

+WheelUp::Send {Volume_Up 1}
+WheelDown::Send {Volume_Down 1}

Verrouiller

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; Windows + Esc
#Escape::DllCall("LockWorkStation")

Print Screen

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
; Lancer SnippingTool avec la touche Print Screen
PrintScreen::Run SnippingTool.exe

Mot de passe sous Windows

C:\Windows\System32\drivers\etc\AutoHotkey.ahk
#a::
RunWait, powershell.exe "pm get key1" | Set-Content -NoNewline %A_Temp%\pm.tmp,,HIDE
FileReadLine, Result, %A_Temp%\pm.tmp, 1
FileDelete, %A_Temp%\pm.tmp
SendRaw %Result%
SendInput {Enter}
Return
%UserProfile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
New-Alias pm "C:\Users\[USER]\Documents\WindowsPowerShell\Scripts\PasswordsManager.ps1"
C:\Users\[USER]\Documents\WindowsPowerShell\Scripts\PasswordsManager.ps1
[CmdletBinding()]
Param (
  [string] $Action = "help",
  [string] $Key
)

$PasswordFilesPath = "$home\passwords"

switch ($Action)
{
    "help"
    {
        "Password Manager:
        
> pm store <key>
> pm get <key>
> pm list"
    }
    "store"
    {
        if ([String]::IsNullOrEmpty($Key))
        {
            "Merci de renseigner une clé pour le stockage du mot de passe."
        }
        else
        {
            $Credential = Get-Credential -Message "Enter password for $Key" -Username "-"
            $SecurePassword = $Credential.Password
            $SecureStringAsPlainText = $SecurePassword | ConvertFrom-SecureString
            
            $FilePath = Join-Path "$PasswordFilesPath" "$Key.txt"
            Set-Content $FilePath $SecureStringAsPlainText
            "Mot de passe enregistré pour la clé $Key."
        }
    }
    "get"
    {
        $FilePath = Join-Path "$PasswordFilesPath" "$Key.txt"
        if ([String]::IsNullOrEmpty($Key))
        {
            "Merci de renseigner une clé pour le récupération du mot de passe."
        }
        elseif (Test-Path("$FilePath"))
        {
            $SecureStringAsPlainText = Get-Content "$FilePath"
            $SecurePassword = $SecureStringAsPlainText | ConvertTo-SecureString
            $Credential = New-Object PSCredential "-", $SecurePassword
            $PlainPassword = $Credential.GetNetworkCredential().Password
            $PlainPassword
        }
        else
        {
            "La clé $Key ne correspond à aucun mot de passe."
        }
    }
    "list"
    {
        #"Stored passwords:
        #"
        ls $PasswordFilesPath | % BaseName
    }
    default { "$Action is not a valid parameter." }
}

Stocker et récupérer un mot de passe

reverse Shift for number keys

*1::+
*2::"
*3::*
*4::send {U+00E7} ; ç
*5::send `%
*6::&
*7::/
*8::(
*9::)
*0::=

$+1::send 1
$+2::send 2
$+3::send 3
$+4::send 4
$+5::send 5
$+6::send 6
$+7::send 7
$+8::send 8
$+9::send 9
$+0::send 0

*^::send {U+0060} ; `
$+^::send {U+005E} ; ^

Installation

  1. après l'installation, redémarrer pour mettre à jour le menu contextuel New
  2. créer un script: clique-droit dans un dossier → NewAutoHotkey Script
  3. modifier le script
  4. double-cliquer sur le fichier pour l'associer, l’icône AutoHotKey apparaît dans la zone de notification

Exécuter un script au démarrage

  1. Copier le script
  2. Coller le raccourci (Paste shortcut) dans %AppData%\Microsoft\Windows\Start Menu\Programs\Startup

Exécuter AutoHotKey au démarrage

  • Menu Start → AutoHotKey → copier le raccourci
  • Coller le raccourci (Paste shortcut) dans %AppData%\Microsoft\Windows\Start Menu\Programs\Startup

Définir Notepad++ comme éditeur par défaut

HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Edit\Command
(Default) = "C:\Program Files\Notepad++\notepad++.exe" "%1"

Coloration syntaxique

  1. Language → Define your language → Import → Notepad++ AutoHotKey Syntax Highlighting Dark.xml
  2. redémarrer