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()`로 키 입력을 수행합니다.