다른 명령
새 문서: == autoit caret == === Hiding a Caret === https://www.autoitscript.com/forum/topic/160840-hide-text-cursor-caret-in-edit-control/?do=findComment&comment=1167503 category:autoit |
편집 요약 없음 |
||
(같은 사용자의 중간 판 2개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
== autoit caret == | == autoit caret == | ||
=== | === Caret 근처 텍스트 읽기 === | ||
https://www.autoitscript.com/forum/topic/160840-hide-text-cursor-caret-in-edit-control/?do=findComment&comment=1167503 | * AutoIt에서는 현재 Caret(캐럿, 텍스트 커서) 위치의 주변 텍스트를 직접 가져오는 기본 함수가 없음 | ||
* ControlGetText 함수와 Clipboard를 이용한 우회적인 방법으로 캐럿 왼쪽의 텍스트를 가져 와야함 | |||
* 구현방법 | |||
# 캐럿이 있는 위치의 전체 텍스트를 가져옵니다. | |||
# 현재 캐럿 위치를 구하고, 캐럿 왼쪽 부분의 텍스트를 추출합니다. | |||
<source lang=autoit> | |||
Func GetLeftOfCaret($hWnd, $controlID) | |||
; 현재 캐럿 위치 가져오기 | |||
Local $caretPos = _GetCaretPos() | |||
If @error Then | |||
MsgBox(16, "Error", "캐럿 위치를 가져올 수 없습니다.") | |||
Return "" | |||
EndIf | |||
; 전체 텍스트 가져오기 | |||
Local $fullText = ControlGetText($hWnd, "", $controlID) | |||
If $fullText = "" Then | |||
MsgBox(16, "Error", "텍스트를 가져올 수 없습니다.") | |||
Return "" | |||
EndIf | |||
; 캐럿 위치에 해당하는 인덱스 계산 (가로 위치 사용) | |||
Local $caretIndex = $caretPos[0] ; 캐럿의 x 좌표가 텍스트 인덱스에 해당 | |||
; 캐럿 왼쪽의 텍스트 가져오기 | |||
Local $leftText = StringLeft($fullText, $caretIndex) | |||
Return $leftText | |||
EndFunc | |||
Func _GetCaretPos() | |||
; 커서 위치를 저장할 구조체 생성 | |||
Local $struct = DllStructCreate("int;int") ; (x, y 좌표 저장) | |||
Local $result = DllCall("user32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($struct)) | |||
; 오류 처리 | |||
If @error Or $result[0] = 0 Then | |||
Return SetError(1, 0, 0) ; 오류 발생 시 | |||
EndIf | |||
; 배열 생성 및 반환 | |||
Local $pos[2] | |||
$pos[0] = DllStructGetData($struct, 1) ; x 좌표 | |||
$pos[1] = DllStructGetData($struct, 2) ; y 좌표 | |||
Return $pos | |||
EndFunc | |||
; 사용 예제 | |||
Local $hWnd = WinGetHandle("[ACTIVE]") ; 현재 활성 창의 핸들 | |||
Local $controlID = "[CLASS:Edit; INSTANCE:1]" ; 대상 컨트롤 식별자 (예시) | |||
Local $leftText = GetLeftOfCaret($hWnd, $controlID) | |||
MsgBox(64, "캐럿 왼쪽 텍스트", $leftText) | |||
</source> | |||
{{틀:요약 | |||
|제목=_GetCaretPos 함수 설명 | |||
# Windows API의 GetCaretPos 함수를 사용해 현재 캐럿의 위치를 구합니다. | |||
#:* 캐럿의 (x, y) 좌표를 배열로 반환합니다. | |||
# GetLeftOfCaret 함수: | |||
#:* 주어진 컨트롤의 전체 텍스트를 가져옵니다. | |||
#:* 캐럿의 x 좌표에 해당하는 위치를 사용해 텍스트의 왼쪽 부분을 추출합니다. | |||
# 사용 예제: | |||
#:* 현재 활성 창과 Edit 컨트롤을 대상으로 캐럿 왼쪽 텍스트를 출력합니다. | |||
* 주의사항 | |||
* Edit 컨트롤에서 텍스트를 읽을 때 사용 | |||
* 캐럿 위치와 텍스트 인덱스가 정확히 일치하지 않을 수 있으므로, 상황에 따라 조정이 필요 | |||
* 비표준 컨트롤에서는 ControlGetText가 동작하지 않을 수 있음 | |||
}} | |||
=== Caret 숨기기 === | |||
* AutoIt에서 Caret(텍스트 커서)를 숨기는 방법은 Windows API의 HideCaret 함수 사용 | |||
* 이 함수를 사용하면 활성화된 입력 컨트롤이나 윈도우에서 커서를 숨길 수 있음. | |||
<source lang=autoit> | |||
Func HideCaretInWindow($hWnd) | |||
; Windows API를 사용해 캐럿 숨기기 | |||
DllCall("user32.dll", "int", "HideCaret", "hwnd", $hWnd) | |||
EndFunc | |||
; 예제 사용: 활성 창에서 캐럿 숨기기 | |||
Local $hWnd = WinGetHandle("[ACTIVE]") ; 현재 활성 창의 핸들 | |||
HideCaretInWindow($hWnd) | |||
</source> | |||
=== Caret 다시 보이게 하기 === | |||
* 캐럿을 다시 보이게 하려면 ShowCaret API를 사용. | |||
<source lang=autoit> | |||
Func ShowCaretInWindow($hWnd) | |||
; Windows API를 사용해 캐럿 다시 보이게 하기 | |||
DllCall("user32.dll", "int", "ShowCaret", "hwnd", $hWnd) | |||
EndFunc | |||
; 예제 사용: 활성 창에서 캐럿 다시 보이게 하기 | |||
Local $hWnd = WinGetHandle("[ACTIVE]") | |||
ShowCaretInWindow($hWnd) | |||
</source> | |||
{{틀:요약 | |||
|제목=사용 시 주의사항 | |||
# HideCaret 과 ShowCaret 은 입력 가능한 컨트롤(예: Edit 컨트롤)이 있는 창에서만 동작 함. | |||
# HideCaret을 호출했을 때 캐럿이 숨겨지지 않는다면 해당 창이나 컨트롤에 포커스가 맞춰져 있는지 확인 | |||
# 숨긴 후 다시 보이게 하고 싶을 때는 ShowCaret() 호출해야 함. | |||
* 참고 | |||
[https://www.autoitscript.com/forum/topic/160840-hide-text-cursor-caret-in-edit-control/?do=findComment&comment=1167503 다른방법 참고 사이트] | |||
[[category:autoit]] | [[category:autoit]] |
2024년 10월 24일 (목) 21:38 기준 최신판
autoit caret
Caret 근처 텍스트 읽기
- AutoIt에서는 현재 Caret(캐럿, 텍스트 커서) 위치의 주변 텍스트를 직접 가져오는 기본 함수가 없음
- ControlGetText 함수와 Clipboard를 이용한 우회적인 방법으로 캐럿 왼쪽의 텍스트를 가져 와야함
- 구현방법
- 캐럿이 있는 위치의 전체 텍스트를 가져옵니다.
- 현재 캐럿 위치를 구하고, 캐럿 왼쪽 부분의 텍스트를 추출합니다.
Func GetLeftOfCaret($hWnd, $controlID) ; 현재 캐럿 위치 가져오기 Local $caretPos = _GetCaretPos() If @error Then MsgBox(16, "Error", "캐럿 위치를 가져올 수 없습니다.") Return "" EndIf ; 전체 텍스트 가져오기 Local $fullText = ControlGetText($hWnd, "", $controlID) If $fullText = "" Then MsgBox(16, "Error", "텍스트를 가져올 수 없습니다.") Return "" EndIf ; 캐럿 위치에 해당하는 인덱스 계산 (가로 위치 사용) Local $caretIndex = $caretPos[0] ; 캐럿의 x 좌표가 텍스트 인덱스에 해당 ; 캐럿 왼쪽의 텍스트 가져오기 Local $leftText = StringLeft($fullText, $caretIndex) Return $leftText EndFunc Func _GetCaretPos() ; 커서 위치를 저장할 구조체 생성 Local $struct = DllStructCreate("int;int") ; (x, y 좌표 저장) Local $result = DllCall("user32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($struct)) ; 오류 처리 If @error Or $result[0] = 0 Then Return SetError(1, 0, 0) ; 오류 발생 시 EndIf ; 배열 생성 및 반환 Local $pos[2] $pos[0] = DllStructGetData($struct, 1) ; x 좌표 $pos[1] = DllStructGetData($struct, 2) ; y 좌표 Return $pos EndFunc ; 사용 예제 Local $hWnd = WinGetHandle("[ACTIVE]") ; 현재 활성 창의 핸들 Local $controlID = "[CLASS:Edit; INSTANCE:1]" ; 대상 컨트롤 식별자 (예시) Local $leftText = GetLeftOfCaret($hWnd, $controlID) MsgBox(64, "캐럿 왼쪽 텍스트", $leftText)
list_alt_GetCaretPos 함수 설명
- Windows API의 GetCaretPos 함수를 사용해 현재 캐럿의 위치를 구합니다.
- 캐럿의 (x, y) 좌표를 배열로 반환합니다.
- GetLeftOfCaret 함수:
- 주어진 컨트롤의 전체 텍스트를 가져옵니다.
- 캐럿의 x 좌표에 해당하는 위치를 사용해 텍스트의 왼쪽 부분을 추출합니다.
- 사용 예제:
- 현재 활성 창과 Edit 컨트롤을 대상으로 캐럿 왼쪽 텍스트를 출력합니다.
- 주의사항
- Edit 컨트롤에서 텍스트를 읽을 때 사용
- 캐럿 위치와 텍스트 인덱스가 정확히 일치하지 않을 수 있으므로, 상황에 따라 조정이 필요
- 비표준 컨트롤에서는 ControlGetText가 동작하지 않을 수 있음
Caret 숨기기
- AutoIt에서 Caret(텍스트 커서)를 숨기는 방법은 Windows API의 HideCaret 함수 사용
- 이 함수를 사용하면 활성화된 입력 컨트롤이나 윈도우에서 커서를 숨길 수 있음.
Func HideCaretInWindow($hWnd) ; Windows API를 사용해 캐럿 숨기기 DllCall("user32.dll", "int", "HideCaret", "hwnd", $hWnd) EndFunc ; 예제 사용: 활성 창에서 캐럿 숨기기 Local $hWnd = WinGetHandle("[ACTIVE]") ; 현재 활성 창의 핸들 HideCaretInWindow($hWnd)
Caret 다시 보이게 하기
- 캐럿을 다시 보이게 하려면 ShowCaret API를 사용.
Func ShowCaretInWindow($hWnd) ; Windows API를 사용해 캐럿 다시 보이게 하기 DllCall("user32.dll", "int", "ShowCaret", "hwnd", $hWnd) EndFunc ; 예제 사용: 활성 창에서 캐럿 다시 보이게 하기 Local $hWnd = WinGetHandle("[ACTIVE]") ShowCaretInWindow($hWnd)
{{틀:요약 |제목=사용 시 주의사항
- HideCaret 과 ShowCaret 은 입력 가능한 컨트롤(예: Edit 컨트롤)이 있는 창에서만 동작 함.
- HideCaret을 호출했을 때 캐럿이 숨겨지지 않는다면 해당 창이나 컨트롤에 포커스가 맞춰져 있는지 확인
- 숨긴 후 다시 보이게 하고 싶을 때는 ShowCaret() 호출해야 함.
- 참고