Clipboard 그리고 ClipboardAll

Clipboard는 내장 변수로서 창의 클립보드의 현재 내용을 반영합니다. 그 내용이 텍스트로 표현 가능하면 말입니다. 대조적으로, ClipboardAll은 그림이든 구조적 텍스트이든 무엇이든 클립보드에 담을 수 있습니다.

[v1.1.35+]: A_Clipboard is an alias of Clipboard.

Clipboard에서 텍스트의 각 줄은 전형적으로 캐리지 리턴과 라인피드(CR+LF)로 끝납니다. 스크립트에서는 `r`n으로 표현할 수 있습니다. (탐색기 창으로부터 Ctrl+C를 통하여 복사된) 파일은 텍스트로 간주됩니다: 스크립트에서 Clipboard를 참조할 때마다 자동으로 (완전한 경로와 함께) 그의 파일이름으로 변환됩니다. 파일을 하나씩 추출하려면 다음 예제를 따르십시오:

Loop, parse, clipboard, `n, `r
{
    MsgBox, 4, , File number %A_Index% is %A_LoopField%.`n`nContinue?
    IfMsgBox, No, break
}

파일 이름을 알파벳 순서로 정렬하려면, Sort 명령어를 사용합니다. 클립보드에 존재하는 파일 이름을 파일에 쓰려면, FileAppend, %clipboard%`r`n, C:\My File.txt를 사용합니다. 얼마나 오랫동안 스크립트가 클립보드를 열려고 시도할 지 변경하려면 -- 다른 어플리케이션에서 사용하고 있는 경우 -- #ClipboardTimeout을 사용합니다.

기본 예제:
clipboard := "my text"   ; 클립보드에 완전히 새로운 내용을 부여합니다.
clipboard := ""   ; Empty the clipboard.
clipboard := clipboard   ; 복사된 파일, HTML, 또는 기타 형식의 텍스트를 평범한 텍스트로 변환합니다.
clipboard := clipboard " Text to append."   ; 텍스트를 클립보드에 추가합니다.
StringReplace, clipboard, clipboard, ABC, DEF, All   ; ABC가 나타나면 모두 DEF로 바꿉니다 (또 클립보드를 평범한 텍스트로 변환합니다).

ClipWait를 사용하여 스크립트의 신뢰성 높이기:

clipboard := ""  ; 텍스트가 도착할 때를 탐지하도록 하기 위해 ClipWait를 비운 채로 시작합니다.
Send ^c
ClipWait  ; 클립보드에 텍스트가 담기기를 기다립니다.
MsgBox Control-C 다음 내용이 클립보드에 복사되었습니다:`n`n%clipboard%

ClipboardAll (클립보드에 무엇이든 저장하고 복구하기)

ClipboardAll은 클립보드에 무엇이든 담습니다 (그림과 구조화 텍스트). 클립보드의 내용을 저장하는데 주로 사용됩니다. 스크립트가 임시로 그 클립보드를 연산에 사용할 수 있습니다. 연산이 완료되면, 스크립트는 원래의 클립보드 내용을 아래에 보여주는 바와 같이 복구합니다:

ClipSaved := ClipboardAll   ; 전체 클립보드를 여러분의 변수에 저장합니다.
; ... 여기에서 임시로 클립보드를 사용합니다. 예를 들어 Transform Unicode를 통하여 유니코드 텍스트를 해석할 수 있습니다 ...
Clipboard := ClipSaved   ; 원래 클립보드를 복구합니다. ( ClipboardAll이 아니라) Clipboard의 사용에 주목하십시오.
ClipSaved := ""   ; 클립보드가 아주 큰 경우 메모리를 해제합니다.

ClipboardAll를 파일에 저장할 수도 있습니다 (이 모드에서, FileAppend는 언제나 기존의 파일을 덮어씁니다):

FileAppend, %ClipboardAll%, C:\Company Logo.clip ; 파일 확장자는 문제가 되지 않습니다.

나중에 다시 그 파일을 클립보드로 (또는 변수 안으로) 적재하려면, 다음 예제를 따르십시오:

FileRead, Clipboard, *c C:\Company Logo.clip ; *c의 사용에 주목하십시오. 반드시 파일이름 앞에 와야 합니다.

한계

Some limitations apply to the direct use of ClipboardAll:

A variable containing binary clipboard data can be used as follows:

Further limitations apply:

주의

ClipboardAll이 클립보드에서 하나 이상의 데이터 객체(구조적 텍스트)를 열람할 수 없으면, 그것은 생략되지만 나머지 객체는 그대로 저장됩니다.

ClipWait을 사용하면 클립보드에 데이터가 담기는 때를 탐지할 수 있습니다 (선택적으로 텍스트-아닌 데이터 포함).

StrLen()를 사용하면 ClipboardAll이 할당된 변수의 총 크기를 발견할 수 있습니다. 그렇지만, 유니코드 버전의 핫키에서 바이트 단위로 그 크기를 얻으려면, 그 크기에 2를 곱해야 얻을 수 있습니다. A_IsUnicode를 사용하면 ANSI와 Unicode 버전을 다음 예제와 같이 선택적으로 지원할 수 있습니다: size := StrLen(ClipSaved) * (A_IsUnicode ? 2 : 1).

Variables to which ClipboardAll has been assigned can be compared to each other (but not directly to ClipboardAll) by means of If[Not]Equal, If Var1 = %Var2%, or If Var1 != %Var2%. 다음 예제에서, 각 변수의 크기를 먼저 점검합니다. 크기가 충분하지 않아 결정할 수 없으면, 그 내용을 비교해 승부를 결정지을 수 있습니다:

if ClipSaved1 != %ClipSaved2%   ; 이것은  예전 스타일의 IF 서술문입니다. 표현식이 아닙니다.
    MsgBox 저장된 두 개의 클립보드가 서로 다릅니다.

ClipboardAll을 변수에 저장하는 것은 #MaxMem에 설정된 메모리 한계에 제한을 받지 않습니다.

A saved clipboard file internally consists of a four-byte format type, followed by a four-byte (for 32-bit) or eight-byte (for 64-bit) data-block size, followed by the data-block for that format. 클립보드에 하나 이상의 포맷이 들어 있다면 (거의 모든 경우에 그렇습니다), 이 세 개의 항목은 모든 포맷이 포함될 때까지 반복됩니다. 파일은 4 바이트 포맷 유형이 0으로 끝납니다.

알려진 한계: 마이크로소프트 엑셀의 셀이 클립보드에 있을 때 ClipboardAll를 열람하면 엑셀이 "프린터 없음" 대화상자를 보여주는 버그가 있습니다.

오토핫키로 작성된 클립보드 유틸리티:

OnClipboardChange

Scripts can detect changes to the content of the Clipboard by using OnClipboardChange() or the OnClipboardChange label.