xiaohongshu
xiaohongshu
julien-ref-ahk-v1
Best practices AutoHotkey v1. Use when writing AHK v1 scripts to avoid critical errors like auto-execute section issues, includes order, and COM object handling.
Full skill instructions
Guide structuré des bonnes pratiques AutoHotkey v1 pour développeurs et assistants IA
First: At the start of execution, display:
🔧 Skill "julien-ref-ahk-v1" activated
PARTIE I - RÈGLES CRITIQUES : Erreurs fatales à éviter absolument PARTIE II - STANDARDS FONDAMENTAUX : Encodage, nommage, architecture PARTIE III - DÉVELOPPEMENT : Patterns, GUI, performance PARTIE IV - VALIDATION : Tests et déploiement
La section auto-execute est le code qui s'exécute automatiquement au démarrage du script. C'est la source #1 des bugs incompréhensibles en AutoHotkey!
L'auto-execute se termine dès qu'AutoHotkey rencontre:
return expliciteExitNomFonction() {)::):)#SingleInstance Force
global myVar := "value"
MyFunction() { ; CETTE FONCTION TERMINE L'AUTO-EXECUTE!
MsgBox, Function
}
; CE CODE NE S'EXÉCUTERA JAMAIS AU DÉMARRAGE!
MsgBox, Script started ; Jamais affiché!
Menu, Tray, Icon, icon.ico ; Jamais chargé!
return
#SingleInstance Force
global myVar := "value"
; Code d'initialisation (s'exécute au démarrage)
MsgBox, Script started
Menu, Tray, Icon, icon.ico
; FIN EXPLICITE de l'auto-execute
return
; Fonctions (après le return)
MyFunction() {
MsgBox, Function
}
; Hotkeys (après les fonctions)
^a::
MyFunction()
return
#Directives (#SingleInstance, #Persistent, etc.)
↓
Variables globales
↓
AUTO-EXECUTE (code qui s'exécute au démarrage)
↓
return ← FIN EXPLICITE de l'auto-execute
↓
Fonctions
↓
Labels
↓
Hotkeys/Hotstrings
↓
#Include (À LA TOUTE FIN!)
Les #Include DOIVENT être À LA TOUTE FIN du fichier, après:
POURQUOI? Les modules appellent souvent des fonctions du fichier principal (comme Logger_Info). Si l'include est placé avant la définition de ces fonctions, le script plantera!
#Include %A_ScriptDir%\VA.ahk ; Chemin absolu TOUJOURS
%A_ScriptDir%\ pour les chemins absolusMsgBox, Device: %devices[1].name% ; ERREUR FATALE
deviceName := devices[1].name ; Extraire la propriété
MsgBox, Device: %deviceName% ; Utiliser la variable simple
globalMyFunction() {
global ; En DÉBUT de fonction seulement
; OU global var1, var2 pour variables spécifiques
}
MyLabel:
; Les variables sont globales par défaut dans les labels
; PAS de déclaration global nécessaire
return
.MaxIndex retourne "" (chaîne vide) pour un tableau vide, pas 0.
ArrayCount := Array.MaxIndex
if (ArrayCount = "") {
ArrayCount := 0 ; Conversion explicite
}
Loop % ArrayCount {
Element := Array[A_Index]
}
Sans UTF-8 avec BOM, les caractères accentués deviennent illisibles.
FileRead, var, *t *p65001 %file%FileAppend, content, %file%, UTF-8MonScript.ahk # Tout en un seul fichier
Projet/
├── Main.ahk # Point d'entrée
├── Config.ahk # Variables globales
├── Modules/
│ ├── Module1.ahk # Fonctionnalités
│ └── Module2.ahk
└── logs/ # Logs (auto-créé)
; Fichiers et dossiers : PascalCase
MyModule.ahk, Utils/, Core/
; Variables globales : MAJUSCULES
global LOG_ENABLED := true
global EMAIL_ADDRESS := "[email protected]"
; Fonctions : PascalCase
SendEmailGmail()
GetAudioDevicesList()
; Variables locales : camelCase
local deviceName := "Speakers"
currentTime := A_Now
FunctionWithCOM() {
; 1. Créer les objets
if !(enumerator := VA_GetDeviceEnumerator()) {
return "Erreur création enumerator"
}
VA_IMMDeviceEnumerator_EnumAudioEndpoints(enumerator, 0, 1, devices)
; 2. Traitement
VA_IMMDeviceCollection_GetCount(devices, count)
Loop, %count% {
VA_IMMDeviceCollection_Item(devices, A_Index - 1, device)
; Traiter device...
ObjRelease(device) ; LIBÉRER CHAQUE OBJET
}
; 3. Nettoyage OBLIGATOIRE
ObjRelease(devices)
ObjRelease(enumerator)
}
Chaque objet COM créé DOIT être libéré avec ObjRelease().
Gui, Add, Edit, x10 y10 w500 h300 ReadOnly VScroll HScroll vContentArea
GuiControl,, ContentArea, %LongText% ; Scroll automatique
%A_ScriptDir%\MaxIndex = "" pour tableaux videsObjRelease()%var%%A_ScriptDir%\%var%, pas de propriétés d'objetsMaxIndex = ""ObjRelease() obligatoirereturn explicitexiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience