메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Autoit 아이콘 변경

데브카페

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) 사용

Comments