AutoHotKey(오토핫키) 설명서 Drive

Posted by 발전소장
2014. 8. 13. 20:56 AutoHotKey/Commands

Drive

광학 드라이브의 트레이의 개폐, 드라이브의 볼륨 레벨의 변경

Drive, Label [, Drive , NewLabel]
Drive, Eject [, Drive , Retract?]
Drive, Lock, Drive
Drive, Unlock, Drive

Drive, Label [, Drive , NewLabel]

드라이브의 볼륨 레벨을NewLabel(으)로 변경한다.
NewLabel(을)를 생략 하면, 볼륨 레벨없이 된다.
Drive에는, 드라이브 문자와 코론을 지정한다.(례:「C:」)(UNC(이)나 맙드드라이브도 지정 가능)
볼륨 레벨명을 취득하려면 , 이하와 같이 한다.

DriveGet, OutputVar, Label, C:

Drive, Eject [, Drive , Retract?]

CD(이)나DVD등의 광학 드라이브의 트레이를 배출/격납한다.
Drive(을)를 생략 했을 경우, 디폴트의 광학 드라이브가 조작된다.
열린 트레이를 되돌리는 경우, 제3인수에 「1」(을)를 지정한다.

Drive, Eject, G:, 1

열려 있는 트레이를 열려고 했을 경우나, 닫고 있는 트레이를 닫으려고 했을 경우, 조작은 성공으로 간주해진다(ErrorLevel하지만 「0」(이)가 된다).
광학 드라이브 이외의 드라이브를 조작하려고 했을 경우는, 이 커멘드는 동작하지 않고,ErrorLevel(은)는 「1」(이)가 된다.

이 커멘드를 실행한다는 것은, 트레이의 배출/격납이 종료할 때까지 스크립트는 정지한다.
현재로서는, 정지중은 hot key등이 효과가 없게 되어, 훅을 이용하고 있으면 키보드/마우스 조작에 래그가 발생한다.

열려 있는 트레이를 열려고 하면 커멘드가 즉석에서 종료하는 것을 이용하는 것으로, 아래의 예의 같게 닫고 있으면 열어, 열려 있으면 닫는다고 하는 조작을 실현할 수 있다.

#c::
Drive, Eject
; If the command completed quickly, the tray was probably already ejected.
; In that case, retract it:
if A_TimeSinceThisHotkey < 1000 ; Adjust this time if needed.
     Drive, Eject,, 1
return

DriveGet커멘드를 사용하는 것으로, 광학 드라이브의 동작 상황을 취득할 수 있다.

Drive, Lock, Drive

광학 드라이브의 트레이 배출을 금지한다.시스템 전체로 유효가 된다.
락을 실행한 스크립트 이외의 스크립트나 프로그램이 락을 해제하는 일도 가능.
락을 해제하는지, 시스템을 재기동할 때까지 락은 유효하게 된다.

Drive, Unlock, Drive

「Drive, Lock」(이)나 그 외의 이유로 락 된 드라이브의 락을 해제한다.
NT계에서는, 여러 차례 락을 걸칠 수 있었던 드라이브는, 락을 걸칠 수 있었던 회수만 언로크를 실시하지 않으면 배출 가능하게 안 된다.
드라이브가 락 되고 있는지 어떤지를 직접 조사하는 방법은, 없다.

ErrorLevel

정상 종료하면 「0」, 무엇인가 문제가 있으면 「1」

Related

DriveGet, DriveSpaceFree

Example(s)

Drive, Label, D:, BackupDrive
Drive, Eject,, 1 ; Retract (close) the tray of the default CD or DVD drive. 


AutoHotKey(오토핫키) 설명서 DllCall()

Posted by 발전소장
2014. 8. 13. 20:55 AutoHotKey/Commands

DllCall()

임의의DLL의 함수를 호출해 돌아가 값을 얻는다

DllCall("[DllFile]\Function" [, Type1, Arg1,..., TypeN, ArgN [, "[Cdecl ]ReturnType"]])

Parameters

인수명설명
[DllFile]\Function DLL의 파일명과 함수명.(을)를 「\」(으)로 단락지어 기술.
디렉토리 패스를 생략 했을 경우, 시스템 폴더 등PATH하지만 다니고 있는 디렉토리와A_WorkingDir안의 해당한다DLL하지만 검색된다.
파일명의 「.dll」(은)는 생략 가능.(례:「"kernel32\GetCommandLineA"」)

User32.dll,Kernel32.dll,ComCtl32.dll,Gdi32.dll안의 함수의 경우,DllFile(을)를 생략 할 수 있다.
또, 이 경우, 함수명의 말미에 「A」(이)가 붙는 함수명은, 「A」(을)를 생략 하고 쓸 수 있다.
예를 들어, 「"kernel32\GetCommandLineA"」(은)는 「"GetCommandLine"」라고 써도 같은 결과가 된다.

문자열 대신에 「GetProcAddress」등에서 취득한 함수의 주소를 지정할 수도 있다.
Type1, Arg1,..., TypeN, ArgN 인수의 형태와 인수로서 주는 데이터의 조.Type1,Type2,...에는, 후술 하는 형명을 지정한다.
Type(은)는 「"」(으)로 둘러싸도 둘러싸지 않아도 좋다.공백이나 「*」(을)를 포함할 때는 반드시 둘러싼다.
Arg1,Arg2,...에는, 인수로서 주는 데이터를 지정.
식을 지정하는 일도 가능.
이러한 조는, 몇에서도 지정 가능.
"[Cdecl ]ReturnType" 돌아가 값의 형태를 후술의 형명으로부터 지정한다.
4아르바이트 부호 다해 정수 혹은BOOL값의 경우, 생략 해 상관없다.

DLL의 호출 규약이 일반적인StdCall방식은 아니고cdecl방식의 경우, 형명의 전에 반각 스페이스에서 단락지어 「Cdecl」라고 쓸 필요가 있다.

돌아가 값

DLL의 함수가 돌려준 값.
DLL의 함수가 값을 돌려주지 않는 경우, 돌아가 값은 내용 부정인 정수치가 된다.
함수의 호출해에 실패했을 경우, 돌아가 값은 비운다.

형명

형명설명
Str 인수를 문자열로서 준다.
실제로는, 문자열의 격납된 메모리 영역의 주소가 보내진다.
대응한다ArgN에 식이 아니고 변수명을 지정했을 경우(「Array%A_Index%」(와)과 같은 지정도 포함한다), 변수 자체의 주소가 보내진다.
이 경우,DLL의 함수가 문자열의 내용을 변경했을 경우, 변수의 내용이 변경된다.(례:「DllCall("CharUpper", "str", VarName)」)

DLL함수측에서 조작하기 위해서 미리 큰 메모리 영역을 확보해 둘 필요가 있는 경우, 「VarSetCapacity(VarName,NewLength)」로서 변수의 메모 리사이즈를 명시적으로 지정해 둘 필요가 있다.

「str *」라고 하면, 「문자열의 격납된 메모리 영역의 주소」가 격납된 메모리 영역의 주소가 보내지게 된다.
Int64 64비트 정수(부호의 유무에 대해서는 「U」프리픽스의 란을 참조)
Int 32비트 정수(부호의 유무에 대해서는 「U」프리픽스의 란을 참조)
Short 16비트 정수(부호의 유무에 대해서는 「U」프리픽스의 란을 참조)
Char 8비트 정수(부호의 유무에 대해서는 「U」프리픽스의 란을 참조)
Float 32비트 부동 소수점치
Double 64비트 부동 소수점치
「P」사피크스 형명의 뒤에 「P」혹은 「*」(을)를 붙이면, 데이터가 격납된 메모리 영역의 주소를 교환하게 된다.(례:「IntP」)
대응한다ArgN에 식이 아니고 변수명을 지정했을 경우(「Array%A_Index%」(와)과 같은 지정도 포함한다),DLL함수내에서의 메모리 내용의 변경이DLL소환 후의 변수의 내용에 반영된다.
「U」프리픽스 「UInt」 「UShort」 「UChar」의 전에 붙이고, 부호 없음(unsigned)정수로서 취급하는 것을 지정한다.
부호 없음의 정수에서는, 부의 수를 취급할 수 없는 대신 취급할 수 있는 정의 수의 범위가2배가 된다.
통상의 인수에서는,U(을)를 붙이지 않아도 자동 판별된다.(부호 다해 정수의 범위외의 정의 수는 부호 없음 정수로서 다루어진다)
「*」사피크스 첨부의 인수와ReturnType그럼 반드시 지정할 필요가 있다.

부호 없음 정수형의 인수에 부의 값이 지정되었을 경우, 부호 다해 정수에 있어서의 같은 비트열을 부합 없음 정수로서 그대로 보낸다.
예를 들어, 「UInt」형태에 「-1」(이)가 지정되었을 경우, 「0xFFFFFFFF」(이)가 보내진다.이것은 부호 없음 정수에서는 「4294967295」이다. 「UInt64」의 실장은 불완전하다.
ReturnType(으)로서 「Int64」(을)를 지정해 있어도, 부의 값(례:「-1」)하지만 되돌아 왔을 때에 최상위비트가1의 거대한 정수(례:「0xFFFFFFFFFFFFFFFF」)(으)로 간주해져 버린다.

ErrorLevel

0
함수 호출은 성공했다
1이상의 정수
치명적 에러로 함수 호출이 부정 종료했다.
이 경우,ErrorLevel(은)는 에러 코드가 된다.
부정 종료의 경우, 돌아가 값은 비우지만, 「*」부착의 형태의 인수로 지정한 변수의 내용은 변경되고 있는 경우가 있다.
An(n(은)는 정수(례:「A2」))
인수의 수가 맞지 않았다.
n(은)는 실제로 보내진 인수의 합계 바이트수와 올바른 합계 바이트수의 차이.
n하지만 정의 경우 인수의 수가 너무 많아서n하지만 부의 경우 인수의 수가 너무 적은 것을 나타내 보인다.
-1
「[DllFile]\Function」(이)가 수치가 되어 있었다(문자열일 필요가 있다)
-2
인수의 형태가 잘못되어 있다(Int형태의 인수에 문자열을 건네주었을 경우 등)
-3
DllFile그리고 지정했다DLL파일이 존재하지 않을까 액세스에 실패했다
-4
DLL(은)는 발견되었지만,Function그리고 지정한 함수가 없었다

Remarks

Windows에 표준으로 존재한다DLL의 함수에 대해서는,MSDN Library,WinAPI Database for VB Programmer등이 자세하다.
간결한 것으로 해서는,Win32 API함수 리스트그렇다고 하는 페이지도 있다.

상기와 같은 함수 레퍼런스에서는, 인수나 돌아가 값의 형태에AutoHotkey그리고 사용할 수 있는 것보다도 많은 종류가 있다.
대개, 이하와 같은 대응이 되어 있다.

레퍼런스로의 형명AutoHotkey(으)로의 형명
BOOLInt (0때가 가짜,1때가 진)
BOOLEANInt (0때가 가짜,1때가 진)
BYTEUChar
char **StrP
COLORREFUInt(24비트의 색을0xBBGGRR형식에서 격납)
DWORDUInt
HANDLEUInt
선두에H하지만 붙는 것UInt
IPADDRUInt
LANGIDUShort
LCIDUInt
LONGInt
LONGLONGInt64
LPARAMInt
선두에LP하지만 붙는 것「P」사피크스를 붙인다
LPSTR *StrP
LRESULTInt
LUIDInt64
선두에P하지만 붙는 것「P」사피크스를 붙인다
WCHARShort
WORDUShort
WPARAMInt

문자열이나 구조체로서null(을)를 보내고 싶은 경우는, 형태를Int, 내용을0(으)로 하면 좋다.

다양한 곳에서 사용한다DLL함수는, 하나 하나DllCall()의 호출을 기술하는 것보다, 이하와 같은AutoHotkey의 함수로서 선언해 두면 편리

getLastError()
{
	return DllCall("GetLastError")
}

DllCall그럼 인수에Str형태를 지정했을 경우, 교환되는 값을 일시적으로 다른 장소에 카피하고 나서 교환한다.
그 때문에, 함수 호출을 상자로 했을 경우 등에 다른 언어와 다른 동작이 되는 경우가 있다.
그 경우, 관의 돌아가 값으로 해서 주어지는 문자열 버퍼에의 포인터를 「UInt」형태로 받아, 「UInt」형태로 다른DLL함수에 건네주도록(듯이) 하면, 도중에 마음대로 카피되는 것이 없어져, 기대한 동작으로 할 수 있다.

구조체와 배열의 취급

AutoHotkey의 기능으로서는, 구조체나 배열은 준비되어 있지 않다.
다만, 통상의 변수를 문자열로서가 아니고, 아르바이트열을 격납하는 버퍼로서 사용하는 것으로, 구조체나 배열을 취급한다DLL함수도 이용할 수 있다.

버퍼로서 사용하고 싶은 변수의 사이즈는, 사용하기 전에VerSetCapacity()함수로 설정해 둔다.
DLL함수에 인수로서 건네줄 때는, 「Str」형태로서 건네준다.
구조체의 멤버·배열의 요소의 값을 설정·취득하려면 , 아래와 같은 함수를 사용한다.

ExtractInteger(Value,Offset,IsSigned,Size)
Value:		값을 취득하는 버퍼
Offset:		버퍼의 선두로부터의 오프셋(아르바이트수)
IsSigned:	돌아가 값을 부호 다해 정수로서 취급하는 경우true(으)로 한다
Size:		꺼내는 정수치의 사이즈(아르바이트수)
ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
{
	SourceAddress := &pSource + pOffset  ; Get address and apply the caller's offset.
	result := 0  ; Init prior to accumulation in the loop.
	Loop %pSize%  ; For each byte in the integer:
	{
		result := result | (*SourceAddress << 8 * (A_Index - 1))  ; Build the integer from its bytes.
		SourceAddress += 1  ; Move on to the next byte.
	}
	if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
		return result  ; Signed vs. unsigned doesn't matter in these cases.
	; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart:
	return -(0xFFFFFFFF - result + 1)
}
InsertInteger(Value,Buffer,Offset,Size)
Value:	설정하는 값
Buffer:	설정처를 포함한 버퍼
Offset:	버퍼의 선두로부터의 오프셋(아르바이트수)
Size:	정수치의 사이즈(아르바이트수)
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
; To preserve any existing contents in pDest, only pSize number of bytes starting at pOffset
; are altered in it. The caller must ensure that pDest has sufficient capacity.
{
	mask := 0xFF  ; This serves to isolate each byte, one by one.
	Loop %pSize%  ; Copy each byte in the integer into the structure as raw binary data.
	{
		DllCall("RtlFillMemory", UInt, &pDest + pOffset + A_Index - 1, UInt, 1  ; Write one byte.
			, UChar, (pInteger & mask) >> 8 * (A_Index - 1))  ; This line is auto-merged with above at load-time.
		mask := mask << 8  ; Set it up for isolation of the next byte.
	}
}

퍼포먼스 개선

DllCall그럼, 함수 실행마다DLL(을)를 로드하고, 함수 종료후에 개방하고 있다.
같은 함수를 단시간에 빈번히 호출하는 경우, 아래와 같이 해DLL(을)를 로드하는 처리를 자기 부담으로 기술해 두는 것으로, 퍼포먼스를 개선할 수 있다.
덧붙여User32.dll,Kernel32.dll,ComCtl32.dll,Gdi32.dll의 각DLL에 대해서는, 항상 로드 된 채로 있기 때문에, 이 처리는 필요없다.

hModule := DllCall("LoadLibrary", str, "MyFunctions.dll")  ;로드한다
;MyFunctions.dll의 함수를 사용하는 처리
DllCall("FreeLibrary", UInt, hModule)  ;개방한다

DLL확보/개방의 수동화

DLL의 처리에 따라서는, 처리의 도중에DLL하지만 개방해 버리면 정상적으로 동작하지 않는 경우가 있다.
그 경우, 상기의 예의 같게 수동으로LoadLibrary/FreeLibrary(을)를 실시하는 것으로, 본래의 동작이 되는 일이 있다.

Related

VarSetCapacity, RegisterCallback(), 함수, PostMessage, SysGet

Examples

; Example: Call the Windows API function "MessageBox" and report which button the user presses.

WhichButton := DllCall("MessageBox", "int", "0", "str", "Press Yes or No", "str", "Title of box", "int", 4)
MsgBox You pressed button #%WhichButton%.

; Example: Call the API function "IsWindowVisible" to find out if a Notepad window is visible.

DetectHiddenWindows On
if (not DllCall("IsWindowVisible", "UInt", WinExist("Untitled - Notepad")))  ; WinExist() returns an HWND.
	MsgBox The window is not visible.

; Example: Call the API's wsprintf() to pad the number 432 with leading zeros to make it 10 characters wide.

VarSetCapacity(ZeroPaddedNumber, 20)  ; Ensure the variable is large enough to accept the new string.
DllCall("wsprintf", "str", ZeroPaddedNumber, "str", "%010d", "int", 432, "Cdecl")  ; Requires the Cdecl calling convention.
MsgBox %ZeroPaddedNumber%

; Example: QueryPerformanceCounter() can be used if you need more precision than A_TickCount's 10ms.

if DllCall("QueryPerformanceCounter", "Int64 *", Counter)
    MsgBox Current counter value: %Counter%
else
    MsgBox System doesn't support counter.

; Example: When passed a window's Unique ID and the text or ClassNN of one of its controls,
; the following function returns the HWND (unique ID) of that control.

GetChildHWND(ParentHWND, ChildClassNN)
{
	WinGetPos, ParentX, ParentY,,, ahk_id %ParentHWND%
	if ParentX =
		return  ; Parent window not found (possibly due to DetectHiddenWindows).
	ControlGetPos, ChildX, ChildY,,, %ChildClassNN%, ahk_id %ParentHWND%
	if ChildX =
		return  ; Child window not found, so return a blank value.
	; Convert child coordinates -- which are relative to its parent's upper left
	; corner -- to absolute/screen coordinates for use with WindowFromPoint().
	; The following INTENTIONALLY passes too many args to the function because
	; each arg is 32-bit, which allows the function to automatically combine
	; them into one 64-bit arg (namely the POINT structure):
	return DllCall("WindowFromPoint", "int", ChildX + ParentX, "int", ChildY + ParentY)
}

; The following example requires that the GetChildHWND() function above also be present.
; This example monitors the active window and displays the vertical scroll bar position
; of its focused control in real time.

#Persistent
SetTimer, WatchScrollBar, 100
return

WatchScrollBar:
ActiveWindow := WinExist("A")
if not ActiveWindow  ; No active window.
	return
ControlGetFocus, FocusedControl, ahk_id %ActiveWindow%
if not FocusedControl  ; No focused control.
	return
; Display the vertical or horizontal scroll bar's position in a ToolTip:
ChildHWND := GetChildHWND(ActiveWindow, FocusedControl)
ToolTip % DllCall("GetScrollPos", "UInt", ChildHWND, "Int", 1)  ;  Last param is 1 for SB_VERT, 0 for SB_HORZ.
return

; Example: Write some text to a file then read it back into memory (requires v1.0.34+). This method can be
; used to help performance in cases where multiple files are being read or written simultaneously.

FileSelectFile, FileName, S16,, Create a new file:
if FileName =
	return
GENERIC_WRITE = 0x40000000  ; Open the file for writing rather than reading.
CREATE_ALWAYS = 2  ; Create new file (overwriting any existing file).
hFile := DllCall("CreateFile", str, FileName, Uint, GENERIC_WRITE, Uint, 0, UInt, 0, UInt, CREATE_ALWAYS, Uint, 0, UInt, 0)
if not hFile
{
	MsgBox Can't open "%FileName%" for writing.
	return
}
TestString = This is a test string.
DllCall("WriteFile", UInt, hFile, str, TestString, UInt, StrLen(TestString), UIntP, BytesActuallyWritten, UInt, 0)
DllCall("CloseHandle", UInt, hFile)  ; Close the file.

; Now that the file was written, read its contents back into memory.
GENERIC_READ = 0x80000000  ; Open the file for reading rather than writing.
OPEN_EXISTING = 3  ; This mode indicates that the file to be opened must already exist.
FILE_SHARE_READ = 0x1 ; Whether other processes can open the file while we have it open.
FILE_SHARE_WRITE = 0x2
hFile := DllCall("CreateFile", str, FileName, UInt, GENERIC_READ, UInt, FILE_SHARE_READ|FILE_SHARE_WRITE, UInt, 0, UInt, OPEN_EXISTING, Uint, 0, UInt, 0)
if not hFile
{
	MsgBox Can't open "%FileName%" for reading.
	return
}
; Make the variable empty for testing purposes, but ensure it retains sufficient capacity:
BytesToRead := VarSetCapacity(TestString, StrLen(TestString))
DllCall("ReadFile", UInt, hFile, str, TestString, UInt, BytesToRead, UIntP, BytesActuallyRead, UInt, 0)
DllCall("CloseHandle", UInt, hFile)  ; Close the file.
MsgBox The following string was read from the file: "%TestString%"

; Structure Example: Pass the address of a RECT structure to GetWindowRect(), which sets the structure's
; members to the positions of the left, top, right, and bottom sides of a window (relative to the screen).

Run Notepad
WinWait Untitled - Notepad  ; This also sets the "last found window" for use with WinExist() below.
VarSetCapacity(Rect, 16)  ; A RECT is a struct consisting of four 32-bit integers (i.e. 4*4=16).
DllCall("GetWindowRect", UInt, WinExist(), Str, Rect)  ; WinExist() returns an HWND.
MsgBox % "Left " . ExtractInteger(Rect, 0, true) . " Top " . ExtractInteger(Rect, 4, true)
	. " Right " . ExtractInteger(Rect, 8, true) . " Bottom " . ExtractInteger(Rect, 12, true)
	
; Structure Example: Pass to FillRect() the address of a RECT structure that indicates a part of the
; screen to temporarily paint red.

VarSetCapacity(Rect, 16, 0)  ; Set capacity to hold four 4-byte integers and initialize them all to zero.
InsertInteger(A_ScreenWidth//2, Rect, 8)  ; The third integer in the structure is "rect.right".
InsertInteger(A_ScreenHeight//2, Rect, 12) ; The fourth integer in the structure is "rect.bottom".
hDC := DllCall("GetDC", UInt, 0)  ; Pass zero to get the desktop's device context.
hBrush := DllCall("CreateSolidBrush", UInt, 0x0000FF)  ; Create a red brush (0x0000FF is in BGR format).
DllCall("FillRect", UInt, hDC, Str, Rect, UInt, hBrush)  ; Fill the specified rectangle using the brush above.
DllCall("ReleaseDC", UInt, 0, UInt, hDC)  ; Clean-up.
DllCall("DeleteObject", UInt, hBrush)  ; Clean-up.


AutoHotKey(오토핫키) 설명서 DetectHiddenWindows

Posted by 발전소장
2014. 8. 13. 20:54 AutoHotKey/Commands

DetectHiddenWindows

윈도우 탐색시에 비표시가 되어 있는 윈도우를 검출 대상으로 하는지를 설정한다

DetectHiddenWindows, On|Off 

Parameters

인수명설명
On|Off
On
비표시 윈도우를 검출
Off
비표시 윈도우는 무시한다(디폴트)

Remarks

이 설정을On(으)로 하는 것으로, 비표시가 되어 있는 소프트를 hot key로부터 조작하는 등의 기능을 실현될 수 있게 된다.

타이틀이나 텍스트를 사용해 윈도우 매치를 실시하는 경우, 이 설정이On(이)가 되어 있으면 중요한 은폐 윈도우를 오조작해 버릴 우려가 있으므로 주의.

WinShow커멘드는 여기서의 설정에 관계없이 비표시의 윈도우를 대상으로 할 수 있다.

윈도우상의 컨트롤을 「ahk_id」(을)를 사용해 조작하는 경우, 컨트롤이 비표시의 윈도우상에 있어도,DetectHiddenWindows의 설정에 관련되지 않고 조작할 수 있다.

이 설정의 기본치는, 스크립트의 최초의AutoExecute섹션그리고 설정한다.
hot key등에서 새롭게 기동되었다스렛드그럼, 설정은 기본치로 설정된다.

A_DetectHiddenWindows변수로 현재의 설정을 참조할 수 있다.

Related

DetectHiddenText

Example(s)

DetectHiddenWindows, on


AutoHotKey(오토핫키) 설명서 DetectHiddenText

Posted by 발전소장
2014. 8. 13. 20:51 AutoHotKey/Commands

DetectHiddenText

윈도우상의 불가시 컨트롤의 텍스트를 검출 대상으로 할지를 설정

DetectHiddenText, On|Off 

Parameters

인수명설명
On|Off
On
비표시 텍스트를 검출(디폴트)
Off
비표시 텍스트는 무시

Remarks

여기서의 설정은, 각종 윈도우 조작 커멘드의 「WinText」 「ExcludeText」(으)로의 성냥에 영향을 준다.

HiddenText그렇다고 하는 것은, 윈도우상의 비표시가 되어 있는 컨트롤의 텍스트이다.
AutoHotkey동고의AU3_Spy.exe(을)를 사용하면, 어떠한 텍스트가Hidden(이)가 되어 있을까를 알 수 있다.

이 설정의 기본치는, 스크립트의 최초의AutoExecute섹션그리고 설정한다.
hot key등에서 새롭게 기동되었다스렛드그럼, 설정은 기본치로 설정된다.

A_DetectHiddenText변수로 현재의 설정을 참조할 수 있다.

Related

DetectHiddenWindows

Example(s)

DetectHiddenText, off


AutoHotKey(오토핫키) 설명서 Critical

Posted by 발전소장
2014. 8. 13. 20:50 AutoHotKey/Commands

Critical

현재의 스렛드에의 세치기를 금지한다

Critical[,MessageCheckInterval]
Critical,Off
Critical

Parameters

인수명설명
MessageCheckInterval Critical상태의 사이의 윈도우 메세지의 체크 간격을 밀리 세컨드로 지정한다.
디폴트는16밀리 세컨드.
비Critical상태에서는,5밀리 세컨드 간격으로 체크된다.
큰 값을 지정하고, 메세지의 체크를 행해지지 않게 해도, 실행 속도는 극히 불과 밖에 향상하지 않는다.
Off 제1인수에 「Off」(을)를 지정하면,Critical상태를 해제해, 세치기를 받아들이도록(듯이) 한다

Remarks

스렛드의 우선 순위에 의한 세치기 방지와 달라, 스렛드가Critical상태때에 끼어들려고 한 이벤트는, 일시적으로 보존되어 스렛드가Critical(이)가 아니게 되었을 때에 세치기가 발생한다.

보존된 스렛드가 있을 때 「Critical,Off」(을)를 실행했을 경우, 세치기를 하는 것은 약5밀리 세컨드 나중이 된다.
많은 경우, 이전에 스크립트의 다음이 몇 줄기 실행된다.
「Critical,Off」한 직후에 확실히 세치기를 발생시키고 싶은 경우, 「Sleep,-1」(을)를 실행하도록 하면 된다.

GUI윈도우의 이벤트나,OnMessage()그리고 할당할 수 있었던 메세지 이벤트를 위한 메세지 체크는,MessageCheckInterval그리고 지정한 간격으로 행해진다.
메세지 이벤트의 실행중에 같은 메세지를 받아들였을 경우등에는, 실행되지 않고 무시되어 버린다.
Critical그리고MessageCheckInterval(을)를 크게 하고, 메세지의 체크를 하기 전에 스렛드를 종료시키면, 스렛드가 종료하고 나서 메세지가 체크되므로, 메세지가 무시되는 것을 막을 수 있다.

MessageCheckInterval의 지정에 관계없이,Sleep커멘드나WinWait커멘드등의 처리를 정지하는 커멘드를 실행했을 경우, 메세지의 체크를 한다.
메세지를 체크시키지 않고 정지시키고 싶은 경우, 「DllCall("kernel32.dll\Sleep", "UInt", 500))」(와)과 같이 하면 좋다.

OnExit그리고 설정된 프로그램 종료 이벤트 및OnMessage()그리고0x312차례 미만의 메세지에 할당할 수 있었던 이벤트, 이러한 메세지나Critical상태의 스렛드로부터 불려 갔다콜백 함수(은)는,Critical상태에서도 세치기를 한다.
이러한 세치기도 금지하고 싶은 경우는, 일시적으로 이벤트의 할당을 해제한다.

MsgBox등에서 다이얼로그가 표시되고 있는 동안은,Critical상태에서도 모든 세치기를 한다.
다이얼로그가 닫혀진 다음은, 다시 끼어들어 금지 상태가 된다.

Critical상태는 스렛드 마다 보관 유지된다.
현재의 스렛드가Critical상태인 채 끝났을 때, 현재의 스렛드에 끼어들어져 정지하고 있던 스렛드는Critical(이)가 아닌 상태로 속행된다.

Critical하지만 실행된 시점에서, 그 스렛드의SetBatchLines설정은 「-1」(이)가 된다

AutoExecute섹션하지만Critical상태인 채 종료했을 경우, 그 스크립트에서는 모든 스렛드가Critical상태로 개시되게 된다.

Related

Thread (command), Threads, #MaxThreadsPerHotkey, #MaxThreadsBuffer, OnMessage, RegisterCallback(), Hotkey, Menu, SetTimer

Examples

#space::  ; Win+Space hotkey.
Critical
ToolTip No new threads will launch until after this ToolTip disappears.
Sleep 3000
ToolTip  ; Turn off the tip.
return


AutoHotKey(오토핫키) 설명서 Cos()

Posted by 발전소장
2014. 8. 13. 20:49 AutoHotKey/Commands

Cos()

주어진 각도에 대응하는 코사인을 돌려주는 함수

Cos(Radian)

Parameters

인수명설명
Radian각도를 라디안으로 지정한다.3.14...하지만180도

Remarks

인수가 수치가 아니었던 경우나, 계산 불능인 값이 주어졌을 경우는 길이 제로의 공문자열이 돌아간다.

Related

함수


AutoHotKey(오토핫키) 설명서 CoordMode

Posted by 발전소장
2014. 8. 13. 20:48 AutoHotKey/Commands

CoordMode

각종 좌표의 취급을 스크린상에서의 절대 위치로 할까 액티브 윈도우로부터의 상대 위치로 하는지를 설정

CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Relative]

Parameters

인수명설명
Param1
ToolTip
ToolTip의 표시 좌표
Pixel
PixelGetColor(와)과PixelSearch,ImageSearch그리고 사용하는 좌표
Mouse
MouseMove,MouseClick,MouseClickDrag,MouseGetPos그리고 사용하는 좌표
Caret
편입 변수A_CaretX,A_CaretY의 좌표
Menu
Menu Show(으)로의 표시 좌표 지정
Param2
Screen
스크린상에서의 절대 좌표
Relative
액티브 윈도우의 좌상으로부터의 상대 좌표
모든 항목의 초기설정은Relative.
인수를 생략 했을 때는,Screen(을)를 지정한 것이 된다.

Remarks

이 설정의 기본치는, 스크립트의 최초의AutoExecute섹션그리고 설정한다.
hot key등에서 새롭게 기동되었다스렛드그럼, 설정은 기본치로 설정된다.

Related

MouseMove, MouseClick, MouseClickDrag, MouseGetPos, PixelGetColor, PixelSearch, ToolTip, Menu

Example(s)

; Place ToolTips at absolute screen coordinates:
CoordMode, ToolTip, Screen


AutoHotKey(오토핫키) 설명서 ControlSetText

Posted by 발전소장
2014. 8. 13. 20:47 AutoHotKey/Commands

ControlSetText

컨트롤의 텍스트를 변경

ControlSetText, [Control, NewText , WinTitle, WinText, ExcludeTitle, ExcludeText]

Parameters

인수명설명
Control 컨트롤을 지정.
윈도우 지정의 방법참조.
생략시는, 윈도우의 맨 앞면컨트롤.
NewText 새로운 텍스트를 지정.
WinTitle 윈도우 타이틀 등.
윈도우 지정의 방법참조.
WinText 윈도우에 포함되는 텍스트
ExcludeTitle 제외 타이틀
ExcludeText 제외 텍스트

ErrorLevel

성공시는 「0」, 실패시는 「1」.

Related

SetControlDelay, ControlGetText, ControlGet, Control, ControlMove, ControlGetPos, ControlClick, ControlFocus, ControlSend

Example(s)

ControlSetText, Edit1, New Text Here, Untitled -


AutoHotKey(오토핫키) 설명서 ControlSend

Posted by 발전소장
2014. 8. 13. 20:46 AutoHotKey/Commands

ControlSend

키 입력을 지정의 윈도우나 컨트롤에 송신

ControlSend [,Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]
ControlSendRaw [,Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]

Parameters

인수명설명
Control 컨트롤을 지정.
윈도우 지정의 방법참조.
생략시는, 맨 위의 컨트롤이나 윈도우 자신.
Keys 송신하는 키 입력.
자세한 것은Send참조.
WinTitle 윈도우 타이틀 등.
윈도우 지정의 방법참조.
WinText 윈도우에 포함되는 텍스트
ExcludeTitle 제외 타이틀
ExcludeText 제외 텍스트

ErrorLevel

성공시는 「0」, 실패시는 「1」.

Remarks

ControlSendRaw그럼, 「{Enter}」(이)나 「^c」(와)과 같은 특수 키를 해석하지 않고,Keys(으)로 지정한 텍스트를 직접 박는다.

1키 입력 마다,SetKeyDelay그리고 지정한 간격을 열어 입력된다.

Related

SetKeyDelay, Control, ControlGet, ControlGetText, ControlMove, ControlGetPos, ControlClick, ControlSetText, ControlFocus, Send, Automating Winamp

Example(s)

 ControlSend, Edit1, This is a line of text in the notepad window., Untitled
SetTitleMatchMode, 2
ControlSend, , abc, cmd.exe ; Send directly to a command prompt window.


AutoHotKey(오토핫키) 설명서 ControlMove

Posted by 발전소장
2014. 8. 13. 20:45 AutoHotKey/Commands

ControlMove

컨트롤의 위치와 사이즈를 변경

ControlMove, Control, X, Y, Width, Height [, WinTitle, WinText, ExcludeTitle, ExcludeText]

Parameters

인수명설명
Control 컨트롤을 지정.
윈도우 지정의 방법참조.
X, Y X좌표와Y좌표를 친윈도우의 좌상으로부터의 상대 위치에서 지정.
Width, Height 폭과 높이를 지정.
WinTitle 윈도우 타이틀 등.
윈도우 지정의 방법참조.
WinText 윈도우에 포함되는 텍스트
ExcludeTitle 제외 타이틀
ExcludeText 제외 텍스트

ErrorLevel

성공시는 「0」, 실패시는 「1」.

Remarks

To improve reliability, a delay is done automatically after every use of this command. That delay can be changed via SetControlDelay.

Window titles and text are always case sensitive. Hidden windows are not detected unless DetectHiddenWindows has been turned on.

Example(s)

SetTimer, ControlMoveTimer
InputBox, OutputVar, My Input Box
return

ControlMoveTimer:
IfWinNotExist, My Input Box, , return
; Otherwise the above set the "last found" window for us:
SetTimer, ControlMoveTimer, off
WinActivate
ControlMove, OK, 10, , 200  ; Move the OK button to the left and increase its width.
return