다른 명령
AutoIt - Ctrl 키 누름 감지 → 트레이 아이콘 변경 Ctrl 키 상태를 주기적으로 체크해서 아이콘을 바꾸는 방식입니다.
핵심 함수 ∙ _IsPressed("11") → Ctrl 키 상태 감지 (0x11 = VK_CONTROL) ∙ TraySetIcon() → 트레이 아이콘 변경
구현 코드
#include <Misc.au3>
#include <TrayConstants.au3>
Opt("TrayMenuMode", 0)
; 아이콘 경로 설정
Global $sIconNormal = @SystemDir & "\shell32.dll" ; 기본 아이콘
Global $sIconCtrl = @SystemDir & "\shell32.dll" ; Ctrl 눌렸을 때 아이콘
Global $iIconNormal = 1 ; shell32.dll 내 아이콘 인덱스
Global $iIconCtrl = 21 ; 다른 인덱스 (원하는 번호로 변경)
Global $bCtrlPressed = False
; 트레이 메뉴
$idExit = TrayCreateItem("종료")
TrayItemSetOnEvent($idExit, "_DoExit")
; 초기 아이콘 설정
TraySetIcon($sIconNormal, $iIconNormal)
TraySetState($TRAY_ICONSTATE_SHOW)
; Ctrl 키 감지를 AdlibRegister로 등록 (100ms 주기)
AdlibRegister("_CheckCtrlKey", 100)
While 1
Sleep(50)
WEnd
Func _CheckCtrlKey()
Local $bNowPressed = _IsPressed("11") ; 0x11 = VK_CONTROL
If $bNowPressed And Not $bCtrlPressed Then
; Ctrl 키 눌림 → 아이콘 변경
$bCtrlPressed = True
TraySetIcon($sIconCtrl, $iIconCtrl)
TraySetToolTip("Ctrl 키 누름!")
ElseIf Not $bNowPressed And $bCtrlPressed Then
; Ctrl 키 해제 → 원래 아이콘 복원
$bCtrlPressed = False
TraySetIcon($sIconNormal, $iIconNormal)
TraySetToolTip("대기중")
EndIf
EndFunc
Func _DoExit()
Exit
EndFunc
커스텀 .ico 파일 사용시
; .ico 파일 직접 사용 Global $sIconNormal = @ScriptDir & "\normal.ico" Global $sIconCtrl = @ScriptDir & "\ctrl_mode.ico" ; 인덱스는 0 또는 1 TraySetIcon($sIconNormal, 0) ; Ctrl 눌렸을 때 TraySetIcon($sIconCtrl, 0) shell32.dll 주요 아이콘 인덱스 참고 |인덱스|모양 | |---|------| |1 |일반 파일 | |4 |폴더 | |15 |검색 | |21 |정보 (i)| |44 |경고 | |109|네트워크 | |238|자물쇠 |
포인트 정리 ∙ AdlibRegister("_CheckCtrlKey", 100) : 100ms마다 자동 호출, 메인 루프 방해 없음 ∙ _IsPressed("11") : 16진수 문자열로 전달 (“11” = 0x11) ∙ 상태 변화 시에만 TraySetIcon() 호출 → 불필요한 깜빡임 방지 ∙ Left Ctrl만 감지하려면 "A2" (VK_LCONTROL) 사용