Clipboard 그리고 ClipboardAll

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

Clipboard에서 텍스트의 각 줄은 전형적으로 캐리지 리턴과 라인피드(CR+LF)로 끝납니다. 스크립트에서는 `r`n으로 표현할 수 있습니다. (탐색기 창으로부터 Control-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의 사용에 주목하십시오. 반드시 파일이름 앞에 와야 합니다.
선택 | 내려받기

주의

ClipboardAll는 위에 기술된 방식 외에 다른 방식으로 사용되면 비어 있습니다. 게다가, ClipboardAll쉼표로-가른 표현식 안에서 지원하지 않습니다. 즉, ClipSaved := ClipboardAll과 같이 한 줄에 자체만 할당해야 합니다.

ClipboardAll이 할당된 변수는 이진 형식이며 그래서 MsgBox같은 것으로 보면 쓰레기처럼 보입니다. 또, 이진-클립보드 변수 (StringReplace와 같은 수단으로) 보통 변수로 환원하면, 결과적으로 그의 클립보드 데이터가 소실됩니다. v1.0.46+에서, 이진-클립보드 변수는 값으로 함수에 건네도 됩니다 (이전에는 ByRef로만 작동했습니다).

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

클립보드 데이터를 담고 있는 변수는 다음 예제와 같이 다른 변수에 복사할 수 있습니다: ClipSaved2 := ClipSaved.

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

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

ClipboardAll이 할당된 변수는 <> 그리고 = 연산자를 사용하여 다른 변수와 비교할 수 있습니다 (그러나 직접 ClipboardAll과 비교할 수는 없습니다. 다음 예제에서, 각 변수의 크기를 먼저 점검합니다. 크기가 충분하지 않아 결정할 수 없으면, 그 내용을 비교해 승부를 결정지을 수 있습니다:

if ClipSaved1 <> %ClipSaved2%   ; 이것은  예전 스타일의 IF 서술문입니다. 표현식이 아닙니다.
    MsgBox 저장된 두 개의 클립보드가 서로 다릅니다.
선택 | 내려받기

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

저장된 클립보드 파일은 내부적으로 4 바이트 포맷 유형, 다음에 4 바이트 데이터 블록 크기, 그 다음에 그 포맷에 대한 데이터 블록으로 구성됩니다. 클립보드에 하나 이상의 포맷이 들어 있다면 (거의 모든 경우에 그렇습니다), 이 세 개의 항목은 모든 포맷이 포함될 때까지 반복됩니다. 파일은 4 바이트 포맷 유형이 0으로 끝납니다.

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

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

OnClipboardChange

OnClipboardChange를 사용하면 스크립트는 클립보드의 내용이 변하면 탐지할 수 있습니다.