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

Autoit send()

데브카페

Windows 키 커스터마이징


;~ See list of keys to detect here
;~ https://www.autoitscript.com/autoit3/docs/libfunctions/_IsPressed.htm
#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

Func lWinKeyPressed()
    If (_IsPressed("5B", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func rWinKeyPressed()
    If (_IsPressed("5C", $hDLL)) Then
        Return True
    EndIf
EndFunc


Func leftKeyPressed()
    If (_IsPressed("25", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func rightKeyPressed()
    If (_IsPressed("27", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func upKeyPressed()
    If (_IsPressed("26", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func downKeyPressed()
    If (_IsPressed("27", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func spaceKeyPressed()
    If (_IsPressed("20", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func altKeyPressed()
    If (_IsPressed("12", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func ctrlKeyPressed()
    If (_IsPressed("11", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func shiftKeyPressed()
    If (_IsPressed("10", $hDLL)) Then
        Return True
    EndIf
EndFunc

Func winKeyPressed()
    If ( lWinKeyPressed() Or rWinKeyPressed() ) Then
        Return True
    EndIf
EndFunc

Func win_left()
    If ( winKeyPressed() And leftKeyPressed() ) Then
        Return True
    EndIf
EndFunc

Func win_right()
    If ( winKeyPressed() And rightKeyPressed() ) Then
        Return True
    EndIf
EndFunc

While 1

    If win_left() Then
        ; Code: When keyes are pressed.
        ConsoleWrite("Win+left Key is pressed." & @CRLF)
        While win_left()
             Sleep(50)
        WEnd
        ; Code: When keyes are released.
        ConsoleWrite("Win+left Key is released." & @CRLF)

    ElseIf win_right() Then
        ; Code: When keyes are pressed.
        ConsoleWrite("Win+right Key is pressed." & @CRLF)
        While win_right()
             Sleep(50)
        WEnd
        ; Code: When keyes are released.
        ConsoleWrite("Win+right Key is released." & @CRLF)
    EndIf
    ;~ Sleep(250)
WEnd




DllClose($hDLL)

문자열로 키 리스트 입력 받고 send() 로 전송

  • 주어진 문자열에서 `{문자}` 형식 부분을 배열로 추출하고, 일반 문자열은 `{문자}` 부분을 뺀 채 출력하며, 추출된 배열 순서대로 `Send("{문자}")`를 실행하는 동작을 함수로 만든 AutoIt 예제입니다.

#include <Array.au3>

; 문자열을 처리하는 함수
Func ProcessAndSendKeys($sInput)
    ; VBScript.RegExp 객체 생성
    Local $oRegExp = ObjCreate("VBScript.RegExp")
    $oRegExp.Global = True
    $oRegExp.Pattern = "\{[^}]+\}"  ; 중괄호 안 문자 대상
    
    ; {문자} 형태 추출
    Local $oMatches = $oRegExp.Execute($sInput)
    Local $iCount = $oMatches.Count
    Local $aMatches[$iCount]
    For $i = 0 To $iCount - 1
        $aMatches[$i] = $oMatches.Item($i).Value
    Next
    
    ; 일반 문자열은 {문자} 부분 제거
    Local $sPlainStr = $oRegExp.Replace($sInput, "")
    $sPlainStr = StringStripWS($sPlainStr, 8) ; 좌우 공백 제거
    
    ; 일반 문자열 출력
    ConsoleWrite("일반 문자열: " & $sPlainStr & @CRLF)
    
    ; 배열 출력 (필요시, 디버깅용)
    ConsoleWrite("{문자} 배열: " & @CRLF)
    For $i = 0 To UBound($aMatches) -1
        ConsoleWrite("  " & $aMatches[$i] & @CRLF)
    Next
    
    ; 추출된 {문자} 순서대로 Send() 실행
    For $i = 0 To UBound($aMatches) - 1
        Send($aMatches[$i])
        Sleep(100) ; 키 입력 간 딜레이 (필요시 조절)
    Next
EndFunc

; 함수 사용 예
Local $str = "{LEFT} is {RIGHT} , test select dldldldl {UP} and {DOWN}"
ProcessAndSendKeys($str)
```

---

### 설명
- `ProcessAndSendKeys()` 함수에 문자열을 넘기면,
- `{}`로 감싼 부분은 배열로 추출되고,
- 일반 텍스트만 남긴 부분을 콘솔에 출력합니다.
- 이후 배열 순서대로 `Send()`로 키 입력을 수행합니다.

Comments