오토핫키로 OCR(문자 인식)을 활용하는 방법!

Posted by 발전소장
2014. 8. 15. 20:11 Functions

오늘 소개해드릴 사용자 함수는 OCR.ahk 입니다.


OCR은 광학 문자 인식(Optical character recognition; OCR)의 준말로

사람이 쓰거나 기계로 인쇄한 문자의 영상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 것이다. by 위키


오토핫키로 자동화 작업을 하면서 어느 부분에서 OCR 기능이 필요할때가 있습니다.


그럴때 이걸 응용하면 됩니다.


먼저 설명하기전에 주의점을 알려드리겠습니다.


한글은 인식을 못 합니다.

gocr.exe 라는 오픈소스 프로그램을 이용하는데 한글은 지원하지 않습니다.

숫자, 영문, 일문 등을 지원합니다.


문자의 크기와 폰트, 배경에 따라 인식률의 차이가 발생합니다.

아무래도 특정패턴으로 문자를 인식하기에 크기가 클수록, 폰트나 필체가 단정하고 깔끔할수록, 배경이 되도록 단순할수록 인식률이 좋습니다.

인식하고자 하는 문자만 정확히 인식영역에 들어오도록 크기를 지정하는게 중요합니다.


인식영역이 넓을수록 처리속도는 늦어집니다.

설명이 필요없겠죠.


해당 ahk의 출처는

http://www.autohotkey.com/board/topic/69127-ocrahk-library-for-recognizing-text-in-images/


스크립트와 예제를 첨부합니다.




압축파일 구조입니다.




알파벳 순서로 설명하겠습니다.



 dpjeg.exe

 djpeg.exe jpg파일을 pnm으로 변환하는 실행파일입니다. (pnm파일은 gocr.exe이 인식)

 Gdip.ahk

 Gdip.dll을 ahk로 활용해주는 ahk 스크립트 (화면을 캡쳐해서 jpg파일로 저장하는데 사용)

 gocr.exe

 gocr.exe pnm파일(이미지)을 인식하여 문자로 반환합니다.

 OCR.ahk

 OCR 기능을 처리하는 ahk 스크립트

 OCR-example.ahk

 OCR 기능 활용 예제

 OCR-preview.ahk

 OCR 기능 활용 미리보기로 직관적으로 이해할 수 있는 예제

 OCR-tests.ahk

 OCR 예제이지만 이해불가?


일단 OCR-preview.ahk 를 실행해보세요.


핑크색 영역안의 문자를 인식해서 툴팁에 표시해줍니다.




이런식으로 나오죠.

직관적으로 바로 이해가 됩니다.


widthToScan=200
heightToScan=50


스크립트 내용에 있는 변수 설정에서 widthToScan, heightToScan이 말 그대로 스캔할 영역의 넓이와 높이를 픽셀 단위로 지정하는 겁니다.

넓이 200, 높이 50 픽셀이라는 말이죠.


스크립트가 돌아가는 구조를 설명하자면


마우스 위치를 기준으로 가로 200, 세로 50 픽셀의 영역을 Gdip.dll을 이용하여 캡쳐한 후 jpg로 저장합니다. ( Gdip.ahk 활용 )


저장된 jpg를 pnm 파일로 변환합니다. ( djpeg.exe 활용 )


pnm 파일을 gocr.exe로 읽어들여 문자를 txt 파일로 저장합니다. ( gocr.exe 활용 )


저장된 txt 파일을 오토핫키 FileRead로 읽어들이고 표시합니다.


간단하죠.


특정 영역을 주기적으로(Loop 활용)


GetOCR(topLeftX, topLeftY, widthToScan, heightToScan, options)


를 이용해서 문자를 입력받습니다.


topLeftX는 말그대로 왼쪽상단 좌표를 말합니다.

X,Y 좌표와 넓이 높이를 입력받아 스캔 영역을 지정합니다.

option은 입력 안 할수있고(default)

Debug 모드

Numeric 모드로 숫자만 인식합니다.


사실 OCR로 입력받은 값을 바로 사용하기는 힘듭니다.

배경과 기타 잡스러운 문자도 출력되기때문이죠. (예를 들면 , . _ ; : 이런식)


따라서 regExReplace()로 필요없는 문자를 걸러주는 작업이 필요하죠.


outputText:=RegExReplace(inputText,"\D","") ; inputText 내용 중에 숫자가 아닌(\D)것을 제거("") 합니다.



덧붙이자면 앞서 말한바와 같이

Gdip.ahk와 OCR.ahk, gocr.exe, djpeg.exe (ahk는 #include 이용, exe는 FileInstall 이용)

파일들이 필요합니다.


자신의 스크립트에 OCR을 적용시켜 보세요!


AutoHotKey(오토핫키) 설명서 Winamp

Posted by 발전소장
2014. 8. 14. 15:00 AutoHotKey/misc

Automating Winamp

This section demonstrates how to control Winamp via hotkey even when it is minimized or inactive. This information has been tested with Winamp 2.78c and should work for Winamp 2.x and possibly other major releases as well. Please post changes and improvements in the forum or contact the author.

This example makes the Ctrl+Alt+P hotkey equivalent to pressing Winamp's pause/unpause button:

^!p::
SetTitleMatchMode, 2
IfWinNotExist, - Winamp
	IfWinNotExist, Winamp 2.  ; Adjust this if your Winamp is not 2.x
		return
; Otherwise, the above has set the "last found" window for us:
ControlSend, ahk_parent, c  ; Pause/Unpause
return

Here are some of the keyboard shortcuts available in Winamp 2.x (may work in other versions too). The above example can be revised to use any of these keys:

Key to send Effect
c Pause/UnPause
x Play/Restart/UnPause
v Stop
+v Stop with Fadeout
^v Stop after the current track
b Next Track
z Previous Track
{left} Rewind 5 seconds
{right} Fast-forward 5 seconds
{up} Turn Volume Up
{down} Turn Volume Down
; This next example asks Winamp which track number is currently active:
SetTitleMatchMode, 2
SendMessage, 1024, 0, 120, - Winamp
if ErrorLevel <> FAIL
{
	ErrorLevel++  ; Winamp's count starts at 0, so adjust by 1.
	MsgBox, Track #%ErrorLevel% is active or playing.
}

AutoHotKey(오토핫키) 설명서 Time

Posted by 발전소장
2014. 8. 14. 15:00 AutoHotKey/misc

일자 시각

YYYYMMDDHH24MISS

FileGetTime(이)나FileSetTime,FormatTime그리고 사용되는 타임 스탬프는,YYYYMMDDHH24MISS의 포맷의 문자열이다.
이 포맷은, 이하의 것을 연결했다14자리수의 숫자열이다.

부분의미
YYYY 4자리수의 서기년
MM 월(01-12)
DD 일(01-31)
HH24 시(00-23)
MI 분(00-59)
SS 초(00-59)

상기 요소 중 도중까지 밖에 지정하지 않았던 경우(례:20040401), 나머지의 요소는 최소의 값(MM,DD하01,HH24,MI,SS하00)이다고 보인다.

EnvAdd(이)나EnvSub커멘드에서는, 이 포맷의 일자 시각을 더해 인 나무 할 수 있다.

제한

일자 시각으로서 취급할 수 있는 시각의 범위는,1601해부터9999해까지이다.

편입 변수

편입 변수그리고 현재 일시의YYYYMMDDHH24MISS형식 문자열이나, 연월일 시분초등의 요소를 참조할 수 있다.

AutoHotKey(오토핫키) 설명서 Threads

Posted by 발전소장
2014. 8. 14. 14:59 AutoHotKey/misc

Threads

AutoHotkey(은)는 실제는 퍼포먼스 저하를 막기 위해, 의사적인 multi-thread를 채용하고 있다.
현재의 Threads의 실행중에hot key,타이머,메뉴 아이템 선택에 의해 다른 Threads가 불려 가면, 세치기에 의해 새로운 Threads가 개시되어 현재의 Threads는 새로운 Threads가 종료할 때까지 정지한다.
세치기는 몇 겹이나 행해지는 것이 가능.
ErrorLevel and SetKeyDelay등의 변수나 설정은, Threads 마다 보관 유지되어 끼어들어 온 Threads내에서 변경되어도, 끼어들어진 Threads 측에는 영향을 주지 않는다.

Threads의 수에는 상한이 있어, 디폴트는10하지만,#MaxThreads지령으로1...20의 사이에 설정할 수 있다.
각 hot key로 불려 가는 Threads의 수에도 상한이 있어, 디폴트는1하지만,#MaxThreadsPerHotkey지령으로 최대20까지 설정할 수 있다.

(비고)KeyHistory커멘드등에서 키 이력을 표시하면, 실행중의 Threads수를 표시할 수 있다.
ListHotkeys그럼, 어느 hot key가 Threads를 실행하고 있을지를 알 수 있다.

Threads 우선도

모든 Threads의 우선도는 디폴트로0(이)가 된다.
Thread커멘드로, 현재의 Threads의 우선도를 변경할 수 있다.
Hotkey커멘드의 인수로, hot key의 우선도를 지정할 수 있다.
Hotstring(은)는 정의시의 옵션에 의해 우선도를 지정할 수 있다.
SetTimer커멘드의 인수로, 타이머 기동의 우선도를 지정할 수 있다.
Menu커멘드의 인수로, 커스텀 메뉴 아이템의 우선도를 지정할 수 있다.
현재의 Threads보다 우선도가 낮은 경우, 세치기는 행해지지 않고, 조작은 무시된다.

OnExit에 의한 호출은, 현재 Threads의 우선도에 관계없이 실행된다.


AutoHotKey(오토핫키) 설명서 Styles

Posted by 발전소장
2014. 8. 14. 14:58 AutoHotKey/misc

윈도우 스타일 일람

윈도우나 컨트롤로 사용하는 스타일.
스타일은32비트의 정수치로,2진수로 했을 때의 각 형이1(이)라면, 그 자리수에 대응하는 스타일이 설정되어 있다고 하게 된다.
「(style & 0x00400000)!=0」(와)과 같은 식에서, 「style」변수에 격납된 스타일치에 특정의 스타일이 설정되어 있는지를 판정할 수 있다.

윈도우용 스타일

Common styles
Name Value Description
default for gui creation   WS_POPUP, WS_CAPTION, WS_SYSMENU, WS_MINIMIZEBOX
forced for gui creation   WS_CLIPSIBLINGS
WS_BORDER0x00800000경계를 가지는 윈도우를 작성합니다.
WS_POPUP0x80000000팝업 윈도우를 작성합니다.WS_CHILD 스타일과 함께 사용할 수 없습니다.
WS_CAPTION0x00C00000타이틀 바를 가지는 윈도우를 작성합니다 (암묵에 WS_BORDER 스타일을 가집니다).WS_DLGFRAME 스타일과 함께 사용할 수 없습니다.
WS_DISABLED0x08000000초기 상태로 사용 금지의 윈도우를 작성합니다.
WS_DLGFRAME0x00400000이중 경계를 가져, 타이틀을 가지지 않는 윈도우를 작성합니다.
WS_HSCROLL0x00100000수평 스크롤 바를 가지는 윈도우를 작성합니다.
WS_MAXIMIZE0x01000000최대 표시된 윈도우를 작성합니다.
WS_MAXIMIZEBOX0x00010000최대 표시 버튼을 가지는 윈도우를 작성합니다.
WS_MINIMIZE0x20000000초기 상태로 아이콘화 된 윈도우를 작성합니다.반드시 WS_OVERLAPPED 스타일과 함께 사용합니다.
WS_MINIMIZEBOX0x00020000아이콘화 버튼을 가지는 윈도우를 작성합니다.
WS_OVERLAPPED0오버랩 윈도우를 작성합니다.오버랩 윈도우는, 통상 캡션과 경계를 가집니다.
WS_OVERLAPPEDWINDOW0x00CF0000WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU,WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX 스타일을 가지는 오버랩 윈도우를 작성합니다.
WS_POPUPWINDOW0x80880000WS_BORDER,WS_POPUP,WS_SYSMENU 스타일을 가지는 팝업 윈도우를 작성합니다.컨트롤 메뉴를 가시로 하려면 ,WS_CAPTION 스타일과 WS_POPUPWINDOW (을)를 조합하지 않으면 안됩니다.
WS_SIZEBOX 0x0000F2C0 +/-Resize. Creates a window that has a sizing border. Same as the WS_THICKFRAME style.
WS_SYSMENU0x00080000타이틀 바에 컨트롤 메뉴 박스를 가지는 윈도우를 작성합니다.타이틀 바를 가지는 윈도우에만 사용합니다.
WS_THICKFRAME0x00040000윈도우의 사이즈 변경에 사용할 수 있는, 굵은 테두리를 가지는 윈도우를 작성합니다.
WS_VSCROLL0x00200000수직 스크롤 바를 가지는 윈도우를 작성합니다.
WS_VISIBLE0x10000000초기 상태로 가시의 윈도우를 작성합니다.
WS_CHILD0x40000000아이 윈도우를 작성합니다.WS_POPUP 스타일과 함께 사용할 수 없습니다.
WS_GROUP0x00020000유저가 방향 키를 사용해 다음의 컨트롤로 이동할 수 있는 컨트롤의 그룹의, 최초의 컨트롤을 지정합니다.최초의 컨트롤의 다음에 WS_GROUP 스타일을 FALSE (와)과 지정해 정의한 컨트롤은, 모두 같은 그룹에 속합니다.다음의 WS_GROUP 스타일을 가지는 컨트롤은, 다음의 그룹을 개시합니다 (즉, 다음의 그룹의 시작이, 전의 그룹이 끝나게 됩니다).

컨트롤용 스타일

Checkbox, Radio, GroupBox, Button
Name Value Description
default   BS_MULTILINE
WS_TABSTOP (except for GroupBox) -- however, radio buttons other than the first of each radio group lack this style by default. In addition, radio buttons have BS_NOTIFY so that double clicks can be detected.
forced   Button: BS_PUSHBUTTON or BS_DEFPUSHBUTTON
Radio: BS_AUTORADIOBUTTON
Checkbox: BS_AUTOCHECKBOX or BS_AUTO3STATE
GroupBox: BS_GROUPBOX
BS_LEFT 0x0100 +/-Left. Left-aligns the text in the button rectangle on the right side of the check box.
BS_PUSHLIKE 0x1000 Makes a button (such as a check box, three-state check box, or radio button) look and act like a push button. The button looks raised when it isn't pushed or checked, and sunken when it is pushed or checked.
BS_RIGHT 0x0200 +/-Right. Right-aligns text in the button rectangle on the right side of the check box.
BS_RIGHTBUTTON 0x0020 +Right (i.e. +Right includes both BS_RIGHT and BS_RIGHTBUTTON, but -Right removes only BS_RIGHT, not BS_RIGHTBUTTON). Positions a check box square or radio button circle on the right side of the control's available width.
BS_BOTTOM 0x0800 Places the text at the bottom of the button rectangle.
BS_CENTER 0x0300 +/-Center. Centers the text horizontally in the button rectangle.
BS_DEFPUSHBUTTON 0x0001 +/-Default. Creates a push button with a heavy black border. If the button is in a dialog box, the user can select the button by pressing the ENTER key, even when the button does not have the input focus. This style is useful for enabling the user to quickly select the most likely option, or default.
BS_MULTILINE 0x2000 +/-Wrap. Wraps the button text to multiple lines if the text string is too long to fit on a single line in the button rectangle.
BS_TOP 0x0400 Places text at the top of the button rectangle.
BS_VCENTER 0x0C00 Vertically centers text in the button rectangle.
BS_FLAT 0x8000 Specifies that the button is two-dimensional; it does not use the default shading to create a 3-D image.
DropDownList, ComboBox
Name Value Description
default   WS_TABSTOP
DropDownList: WS_VSCROLL
ComboBox: WS_VSCROLL, CBS_AUTOHSCROLL
forced   DropDownList: CBS_DROPDOWNLIST
ComboBox: Either CBS_DROPDOWN or CBS_SIMPLE
CBS_AUTOHSCROLL0x0040유저가 줄 끝을 넘어 문자를 입력하면, 에디트 컨트롤내의 텍스트를 자동적으로 오른쪽으로 스크롤 합니다.이 스타일이 설정되어 있지 않으면 사각형 경계내에 들어가는 텍스트 밖에 받아들일 수 없습니다.
CBS_DISABLENOSCROLL0x0800리스트 박스가 스크롤 하는 만큼 항목을 가지고 있지 않을 때에, 수직 스크롤 바를 사용할 수 없는 상태로 표시합니다.이 스타일을 지정하지 않으면 스크롤 하는 만큼 항목을 가지고 있지 않은 경우, 스크롤 바는 표시되지 않습니다.
CBS_LOWERCASE 0x4000 +/-Lowercase. Converts to lowercase any uppercase characters that are typed into the edit control of a combo box.
CBS_NOINTEGRALHEIGHT0x0400재즈 악단 박스의 사이즈는, 재즈 악단 박스를 작성할 경우에 어플리케이션이 지정한 사이즈와 같게 됩니다.통상은, 일부 밖에 표시할 수 없는 항목을 표시하지 않게,Windows (은)는 재즈 악단 박스의 사이즈를 변경합니다.
CBS_OEMCONVERT0x0080재즈 악단 박스의 에디트 컨트롤에 입력된 텍스트는,ANSI 캐릭터 세트로부터 OEM 캐릭터 세트에 변환되어 그 후,ANSI 캐릭터 세트에 되돌려집니다.이것에 의해, 어플리케이션이 재즈 악단 박스내의 ANSI 문자열을 OEM 문자로 변환하기 위해서 Windows 함수 AnsiToOem (을)를 호출했을 때, 올바른 문자 변환이 확실히 행해집니다.이 스타일은 파일명을 보관 유지하는 재즈 악단 박스로 가장 유용합니다.CBS_SIMPLE 또는 CBS_DROPDOWN 스타일로 작성된 재즈 악단 박스에서만 지정할 수 있습니다.
CBS_SIMPLE0x0001리스트 박스를 항상 표시합니다.리스트 박스의 현재의 선택 항목이 에디트 컨트롤에 표시됩니다.
CBS_SORT0x0100리스트 박스내에 표시되는 문자열을 자동적으로 소트 합니다.
CBS_UPPERCASE 0x2000 +/-Uppercase. Converts to uppercase any lowercase characters that are typed into the edit control of a combo box.
ListBox
Name Value Description
default   WS_TABSTOP, LBS_USETABSTOPS, WS_VSCROLL, and WS_EX_CLIENTEDGE (extended style E0x200).
forced   LBS_NOTIFY (supports detection of double-clicks)
LBS_DISABLENOSCROLL0x1000리스트 박스가 스크롤 하는 만큼 항목을 가지고 있지 않을 때에, 수직 스크롤 바를 사용 금지 상태로 표시합니다.이 스타일을 지정하지 않을 때에 스크롤 하는 만큼 항목을 가지고 있지 않으면 스크롤 바는 표시되지 않습니다.
LBS_NOINTEGRALHEIGHT0x0100리스트 박스를 작성했을 때, 그 사이즈가 어플리케이션으로 지정한 사이즈와 정확하게 같게 되는 것을 지정합니다.통상, 일부 밖에 표시할 수 없는 항목을 표시하지 않게,Windows 하지만 리스트 박스의 사이즈를 변경합니다.
LBS_EXTENDEDSEL0x0800 Shift 키와 마우스, 또는 특수한 키의 편성을 사용하고, 유저가 복수의 항목을 선택할 수 있도록 합니다.
LBS_MULTIPLESEL0x0008유저가 문자열을 클릭 또는 더블 클릭 할 때마다, 문자열의 선택이 교체됩니다.문자열은 몇 개에서도 선택할 수 있습니다.
LBS_NOSEL 0x4000 +/-ReadOnly. Specifies that the user can view list box strings but cannot select them.
LBS_SORT0x0002리스트 박스내의 문자열을 알파벳순서에 소트 합니다.
LBS_USETABSTOPS0x0080리스트 박스가 문자열을 묘화 할 경우에, 탭 문자를 인식해, 전개합니다.디폴트의 탭 위치는 32 다이얼로그 단위입니다 (다이얼로그 단위란, 수평 또는 수직의 길이입니다.1 수평 다이얼로그 단위는, 현재의 다이얼로그의 기본폭단위의 4 분 1 입니다.다이얼로그의 기본 단위는, 현재의 시스템 폰트의 높이와 폭을 기준에 계산됩니다.Windows 함수 GetDialogBaseUnits (은)는, 현재의 다이얼로그의 기본 단위를 피크셀로 돌려줍니다).
ListView
Name Value Description
default   WS_TABSTOP, LVS_REPORT, LVS_SHOWSELALWAYS, LVS_EX_FULLROWSELECT, LVS_EX_HEADERDRAGDROP, WS_EX_CLIENTEDGE (E0x200)
LVS_ALIGNLEFT 0x800아이콘 뷰 및 작은 아이콘 뷰로, 컨트롤의 좌단에 따라서 아이템이 배치됩니다.
LVS_ALIGNTOP 0아이콘 뷰 및 작은 아이콘 뷰로, 컨트롤의 상단을 따라서 아이템이 배치됩니다.
LVS_AUTOARRANGE 0x100아이콘 뷰 및 작은 아이콘 뷰로, 아이콘이 자동적으로 정렬합니다
LVS_EDITLABELS 0x200아이템의 텍스트를 인플레이션 의자로 편집할 수 있도록 합니다.친윈도우는, 반드시 LVN_ENDLABELEDIT 통지 메세지를 처리합니다.
LVS_ICON 0아이콘 뷰를 지정합니다.
LVS_LIST 0x3리스트 뷰를 지정합니다.
LVS_NOCOLUMNHEADER 0x4000열헤더가 리포트 뷰에 표시되지 않게 합니다.디폴트에서는, 리포트 뷰의 열은 헤더를 가집니다.
LVS_NOLABELWRAP 0x80아이콘 뷰의 1 행에 아이템 텍스트를 표시합니다.디폴트에서는, 아이템 텍스트는 아이콘 뷰내에서 랩 됩니다.
LVS_NOSCROLL 0x2000스크롤을 금지합니다.모든 아이템이 클라이언트 영역내에 없으면 안됩니다.
LVS_NOSORTHEADER 0x8000버튼과 같이 동작하지 않는 열헤더를 지정합니다.리포트 뷰의 열헤더를 클릭해도 소트와 같은 동작을 실행하지 않을 때에, 이 스타일이 유용합니다.
LVS_OWNERDATA0x1000This style specifies a virtual list-view control (not directly supported by AutoHotkey).
LVS_OWNERDRAWFIXED 0x400리포트 뷰의 아이템을 오너 윈도우를 묘화 할 수 있도록(듯이) 합니다.각 아이템을 묘화 하기 위해서, 리스트 뷰 컨트롤은 WM_DRAWITEM 메세지를 보냅니다.각 서브 아이템에 다른 메세지를 보낼 것은 없습니다.지정한 리스트 뷰 아이템의 아이템 데이터는DRAWITEMSTRUCT 구조체의 itemData 멤버가 보관 유지하고 있습니다.
LVS_REPORT 0x1리포트 뷰를 지정합니다.
LVS_SHAREIMAGELISTS 0x40컨트롤이, 할당할 수 있었던 이미지 리스트의 소유권을 가지지 않는 것을 나타내 보입니다 (즉, 컨트롤이 파기될 때도 이미지 리스트는 파기되지 않습니다).이 스타일을 사용하고, 같은 이미지 리스트를 복수의 리스트 뷰 컨트롤에 할당할 수 있습니다.
LVS_SHOWSELALWAYS 0x8컨트롤에 포커스가 없어도, 선택되고 있으면 항상 선택 상태로 표시합니다.
LVS_SINGLESEL 0x4한 번에 1 개의 아이템만을 선택할 수 있도록 합니다.디폴트에서는, 복수의 아이템을 선택할 수 있습니다.
LVS_SMALLICON 0x2작은 아이콘 뷰를 지정합니다.
LVS_SORTASCENDING 0x10아이템 텍스트를 기초로 해서, 아이템을 승순에 소트 합니다.
LVS_SORTDESCENDING 0x20아이템 텍스트를 기초로 해서, 아이템을 내림차순에 소트 합니다.
ListView확장 스타일
Name Value Description
LVS_EX_BORDERSELECT LV0x8000 When an item is selected the border color of the item changes rather than the item being highlighted (might be non-functional in recent operating systems).
LVS_EX_CHECKBOXES LV0x4

+/-Checked. Displays a checkbox with each item. When set to this style, the control creates and sets a state image list with two images using DrawFrameControl. State image 1 is the unchecked box, and state image 2 is the checked box. Setting the state image to zero removes the check box altogether.

Windows XP or later: Checkboxes are visible and functional with all list-view modes except the tile view mode introduced in Windows XP. Clicking a checkbox in tile view mode only selects the item; the state does not change.

LVS_EX_FLATSB LV0x100 Enables flat scroll bars in the list view.
LVS_EX_FULLROWSELECT LV0x20 When a row is selected, all its fields are highlighted. This style is available only in conjunction with the LVS_REPORT style.
LVS_EX_GRIDLINES LV0x1 +/-Grid. Displays gridlines around rows and columns. This style is available only in conjunction with the LVS_REPORT style.
LVS_EX_HEADERDRAGDROP LV0x10 Enables drag-and-drop reordering of columns in a list-view control. This style is only available to list-view controls that use the LVS_REPORT style.
LVS_EX_INFOTIP LV0x400 When a list-view control uses the LVS_EX_INFOTIP style, the LVN_GETINFOTIP notification message is sent to the parent window before displaying an item's ToolTip.
LVS_EX_LABELTIP LV0x4000 If a partially hidden label in any list-view mode lacks ToolTip text, the list-view control will unfold the label. If this style is not set, the list-view control will unfold partly hidden labels only for the large icon mode. Requires Windows XP or later, or the DLLs distributed with Internet Explorer 5.0 or later.
LVS_EX_MULTIWORKAREAS LV0x2000 If the list-view control has the LVS_AUTOARRANGE style, the control will not autoarrange its icons until one or more work areas are defined (see LVM_SETWORKAREAS). To be effective, this style must be set before any work areas are defined and any items have been added to the control.
LVS_EX_ONECLICKACTIVATE LV0x40 The list-view control sends an LVN_ITEMACTIVATE notification message to the parent window when the user clicks an item. This style also enables hot tracking in the list-view control. Hot tracking means that when the cursor moves over an item, it is highlighted but not selected. See the Extended List-View Styles Remarks section for a discussion of item activation.
LVS_EX_REGIONAL LV0x200 Sets the list-view window region to include only the item icons and text using SetWindowRgn. Any area that is not part of an item is excluded from the window region. This style is only available to list-view controls that use the LVS_ICON style.
LVS_EX_SIMPLESELECT LV0x100000 In icon view, moves the state image of the control to the top right of the large icon rendering. In views other than icon view there is no change. When the user changes the state by using the space bar, all selected items cycle over, not the item with the focus. Requires Windows XP or later.
LVS_EX_SUBITEMIMAGES LV0x2 Allows images to be displayed for fields beyond the first. This style is available only in conjunction with the LVS_REPORT style.
LVS_EX_TRACKSELECT LV0x8 Enables hot-track selection in a list-view control. Hot track selection means that an item is automatically selected when the cursor remains over the item for a certain period of time. The delay can be changed from the default system setting with a LVM_SETHOVERTIME message. This style applies to all styles of list-view control. You can check whether hot-track selection is enabled by calling SystemParametersInfo.
LVS_EX_TWOCLICKACTIVATE LV0x80 The list-view control sends an LVN_ITEMACTIVATE notification message to the parent window when the user double-clicks an item. This style also enables hot tracking in the list-view control. Hot tracking means that when the cursor moves over an item, it is highlighted but not selected.
LVS_EX_UNDERLINECOLD LV0x1000 Causes those non-hot items that may be activated to be displayed with underlined text. This style requires that LVS_EX_TWOCLICKACTIVATE be set also.
LVS_EX_UNDERLINEHOT LV0x800 Causes those hot items that may be activated to be displayed with underlined text. This style requires that LVS_EX_ONECLICKACTIVATE or LVS_EX_TWOCLICKACTIVATE also be set.
TreeView
Name Value Description
default WS_TABSTOP, TVS_SHOWSELALWAYS, TVS_HASLINES, TVS_LINESATROOT, TVS_HASBUTTONS, WS_EX_CLIENTEDGE (E0x200)
TVS_CHECKBOXES 0x100 아이템에 체크 박스를 붙입니다.일단 이 스타일이 설정되면, 체크 박스를 없앨 수 없습니다.
TVS_DISABLEDRAGDROP 0x10 트리뷰가 친윈도우에 TVN_BEGINDRAG 통지 메세지를 보내지 않게 합니다.
TVS_EDITLABELS 0x8 유저가 트리뷰의 아이템의 텍스트를 편집할 수 있도록 합니다.
TVS_FULLROWSELECT 0x1000 아이템을 그 열전체로 선택할 수 있도록 합니다.아이템이 있는 열의 어느 부분을 클릭해도 그 아이템이 선택됩니다.선택되면 열전체가 강조 표시됩니다.TVS_HASLINES 스타일과 조합해 지정할 수 없습니다.
TVS_HASBUTTONS 0x1 아이 아이템을 가질 때 친아이템의 옆에 + (이)나 - 의 버튼을 표시합니다.
TVS_HASLINES 0x2 아이템을 선으로 잇습니다.
TVS_INFOTIP 0x800 트리뷰는 툴 팁 정보를 얻기 위해서 친윈도우에 TVN_GETINFOTIP 통지 메세지를 보냅니다.
TVS_LINESATROOT 0x4 맨 위의 아이템에 선을 붙입니다.TVS_HASLINES 스타일이 지정되어 있지 않은 경우는 무시됩니다.
TVS_NOHSCROLL 0x8000 +/-HScroll. Disables horizontal scrolling in the control. The control will not display any horizontal scroll bars.
TVS_NONEVENHEIGHT 0x4000 트리뷰에 TVM_SETITEMHEIGHT 메세지를 보내는 것으로, 아이템의 높이를 설정할 수 있도록 합니다.(디폴트에서는 아이템의 높이는 균등입니다.)
TVS_NOSCROLL 0x2000 트리뷰가 스크롤 하지 않게 합니다.스크롤 바도 표시하지 않습니다.
TVS_NOTOOLTIPS 0x80 아이템이 트리뷰 에서 비어져 나오고 있을 때 툴 팁이 붙지 않게 합니다.
TVS_RTLREADING 0x40 아라비아어나 헤브라이어등의 시스템에 대하고, 오른쪽에서 좌향에 표시합니다.일본어의 시스템에서는 지정할 수 없습니다.
TVS_SHOWSELALWAYS 0x20 트리뷰가 포커스를 가지고 있지 않은 상태에서도, 아이템 선택 상태가 표시되도록(듯이) 합니다.
TVS_SINGLEEXPAND 0x400 선택된 아이템만이 전개되도록(듯이) 합니다.
TVS_TRACKSELECT 0x200 마우스 커서가 아이템 위에 왔을 때에 밑줄이 붙습니다.
Edit
Name Value Description
default   WS_TABSTOP and WS_EX_CLIENTEDGE (extended style E0x200) If an Edit is auto-detected as multi-line due to its starting contents containing multiple lines, its height being taller than 1 row, or its row-count having been explicitly specified as greater than 1, the following styles will be applied by default: WS_VSCROLL, ES_WANTRETURN, and ES_AUTOVSCROLL If an Edit is auto-detected as a single line, it defaults to having ES_AUTOHSCROLL.
forced    
ES_AUTOHSCROLL0x0080유저가 줄 끝에 문자를 입력했을 때에, 텍스트를 자동적으로 10 문자분우에 스크롤 합니다.유저가 Enter 키를 누르면, 컨트롤은, 위치 0 에 되돌리도록(듯이) 텍스트 전체를 스크롤 합니다.
ES_AUTOVSCROLL0x0040유저가 맨 마지막 줄로 Enter 키를 눌렀을 때, 자동적으로 1 페이지 분죠에 텍스트를 스크롤 합니다.
ES_CENTER0x00011 행 또는 복수행의 에디트 컨트롤로, 텍스트를 centering로 표시합니다.
ES_LOWERCASE0x0010에디트 컨트롤에 입력된 문자를 모두 소문자로 변환합니다.
ES_NOHIDESEL0x0100통상, 에디트 컨트롤이 입력초점을 잃으면 선택이 통상의 표시로 돌아와, 입력초점을 받았을 때에 선택을 강조 표시합니다.ES_NOHIDESEL (은)는, 이 디폴트의 동작을 실시하지 않게 합니다.
ES_NUMBER 0x2000 +/-Number. Accepts into the edit control only digits to be typed.
ES_OEMCONVERT0x0400에디트 컨트롤에 입력된 텍스트를,ANSI 캐릭터 세트로부터 OEM 캐릭터 세트로 변환해, 그 후 ANSI 캐릭터 세트에 되돌립니다.이것에 의해, 어플리케이션이 재즈 악단 박스내의 ANSI 문자열을 OEM 문자열로 변환하기 위해서 Windows 함수 AnsiToOem (을)를 호출할 때, 올바른 변환이 확실히 행해집니다.이 스타일은, 파일명을 보관 유지하는 에디트 컨트롤에서는 가장 유용합니다.
ES_MULTILINE0x0004복수행의 에디트 컨트롤을 지정합니다 (디폴트는 1 행의 에디트 컨트롤입니다).ES_AUTOVSCROLL 스타일이 지정되어 있으면, 에디트 컨트롤은 가능한 한 많은 행을 표시해, 유저가 Enter 키를 눌렀을 때에 수직 방향으로 스크롤 합니다.ES_AUTOVSCROLL 하지만 지정되어 있지 않으면 에디트 컨트롤은 가능한 한 많은 행을 표시해, 그 이상 표시할 수 없게 되었을 때에 유저가 Enter 키를 누르면 beep음을 울립니다.ES_AUTOHSCROLL 스타일이 지정되면, 복수행의 에디트 컨트롤은, 카렛트가 컨트롤의 우단을 넘었을 때에 자동적으로 수평 방향으로 스크롤 합니다.새로운 행을 개시할 때는, 유저는 Enter 키를 누르지 않으면 안됩니다.ES_AUTOHSCROLL 하지만 지정되지 않으면 필요에 따라서 자동적으로 다음의 행의 초에 단어를 되풀이합니다.Enter 키를 눌러도 새로운 행이 시작됩니다.단어의 즉시 위치는, 윈도우의 사이즈에 의해서 정해집니다.윈도우의 사이즈가 변경되면, 즉시 위치도 변경되어 텍스트가 재표시됩니다.복수행의 에디트 컨트롤에는, 스크롤 바를 갖게할 수 있습니다.스크롤 바를 가지는 에디트 컨트롤은 자기 자신으로 스크롤 바 메세지를 처리합니다.스크롤 바를 가지지 않는 에디트 컨트롤에서는, 위에서 설명한 것처럼 스크롤을 해 친윈도우로부터 보내진 임의의 스크롤 메세지를 처리합니다.
ES_PASSWORD0x0020에디트 컨트롤에 입력된 모든 문자를 asterisk (*) 그리고 표시합니다.어플리케이션은 SetPasswordChar 멤버 함수를 사용하고, 표시하는 문자를 변경할 수 있습니다.
ES_READONLY0x0800에디트 컨트롤내에서 텍스트의 입력이나 편집을 할 수 없게 합니다.
ES_RIGHT0x00021 행 또는 복수행의 에디트 컨트롤로, 텍스트를 오른쪽맞춤으로 표시합니다.
ES_UPPERCASE0x0008에디트 컨트롤에 입력된 모든 문자를 대문자로 변환합니다.
ES_WANTRETURN0x1000유저가 다이얼로그 박스의 복수행의 에디트 컨트롤에 텍스트를 입력하고 있을 때 Enter 키를 누르면 왕복대 리턴이 삽입되는 것을 나타냅니다.이 스타일이 지정되어 있지 않을 때에 Enter 키를 누르면, 다이얼로그 박스의 디폴트의 푸쉬 버튼을 누른 것 것과 같게 됩니다.이 스타일은,1 행의 에디트 컨트롤에서는 효과가 없습니다.
Text,Picture
Name Value Description
default    
forced   Picture: SS_BITMAP
SS_BLACKFRAME0x07윈도우의 테두리와 같은 색으로 묘화 되는 테두리를 가지는 박스를 지정합니다.디폴트는 흑입니다.
SS_BLACKRECT0x04윈도우의 테두리의 묘화에 사용되는 색으로 전부 칠해진 사각형을 지정합니다.디폴트는 흑입니다.
SS_CENTER0x01단순한 사각형을 지정해, 그 중으로 지정된 텍스트를 centering로 표시합니다.텍스트는 표시되기 전에 서식화 됩니다.줄 끝을 넘는 단어는 자동적으로 다음의 행에 되접어 꺾이고 중앙에 가지런히 할 수 있습니다.
SS_ETCHEDFRAME 0x12 Draws the frame of the static control using the EDGE_ETCHED edge style.
SS_ETCHEDHORZ 0x10 Draws the top and bottom edges of the static control using the EDGE_ETCHED edge style.
SS_ETCHEDVERT 0x11 Draws the left and right edges of the static control using the EDGE_ETCHED edge style.
SS_GRAYFRAME0x08화면의 배경색 (데스크탑) (와)과 같은 색으로 묘화 되는 테두리의 박스를 지정합니다.디폴트는 회색입니다.
SS_GRAYRECT0x05화면의 백그라운드를 전부 칠하는데 사용하는 색으로 전부 칠해진 사각형을 지정합니다.디폴트는 회색입니다.
SS_LEFT0x0000단순한 사각형을 지정해, 그 중으로 지정된 텍스트를 왼쪽 가지런히 해로 표시합니다.텍스트는 표시되기 전에 서식화 됩니다.줄 끝을 넘는 단어는 자동적으로 다음의 행에 되접어 꺾이고 왼쪽으로 가지런히 할 수 있습니다.
SS_LEFTNOWORDWRAP0x0C단순한 사각형을 지정해, 그 중으로 지정된 텍스트를 왼쪽 가지런히 해로 표시합니다.텍스트는 표시되기 전에 서식화 됩니다.탭은 전개됩니다만, 단어는 되접어 꺾이지 않습니다.줄 끝을 넘는 텍스트는 클립 됩니다.
SS_NOPREFIX0x80이 스타일을 지정하지 않는 한,Windows (은)는 컨트롤의 텍스트내의 ampersand(&) (&) 문자를 가속기의 프레픽스 문자로서 해석합니다.이 경우, ampersand(&) (&) (은)는 제거되어 문자열중의 그 다음의 문자에 밑줄을 붙일 수 있습니다.스태틱 컨트롤이 이 기능을 필요로 하지 않는 텍스트를 가지고 있을 때는,SS_NOPREFIX (을)를 추가합니다.이 스태틱 컨트롤의 스타일은, 정의 떠날 수 있어 모든 스태틱 컨트롤에 포함할 수 있습니다.비트마다의 OR 연산자를 사용하고, 다른 스타일과 SS_NOPREFIX (을)를 조합해 지정할 수 있습니다.이 스타일은, 다이얼로그 박스의 스태틱 컨트롤에 파일명이나 ampersand(&) (&) (을)를 가지는 그 외의 문자열을 표시할 필요가 있을 때 등에 사용합니다.
SS_NOTIFY 0x0100 Sends the parent window the STN_CLICKED notification when the user clicks the control.
SS_RIGHT0x0002단순한 사각형을 지정해, 그 중으로 지정된 텍스트를 오른쪽맞춤으로 표시합니다.텍스트는 표시되기 전에 서식화 됩니다.줄 끝을 넘는 단어는 자동적으로 다음의 행에 되접어 꺾이고 오른쪽으로 가지런히 할 수 있습니다.
SS_SUNKEN 0x1000 Draws a half-sunken border around a static control.
SS_WHITEFRAME0x09윈도우의 배경색과 같은 색으로 묘화 되는 테두리를 가지는 박스를 지정합니다.디폴트는 흰색입니다.
SS_WHITERECT0x06윈도우의 백그라운드를 전부 칠하는데 사용되는 색으로 전부 칠해진 사각형을 지정합니다.디폴트는 흰색입니다.
Picture
Name Value Description
forced   아이콘과 커서에서는 「SS_ICON」, 그 외에서는 「SS_BITMAP」
SS_REALSIZECONTROL0x40[Windows XP or later] Adjusts the bitmap to fit the size of the control.
SS_CENTERIMAGE0x200Centers the bitmap in the control. If the bitmap is too large, it will be clipped. For text controls If the control contains a single line of text, the text is centered vertically within the available height of the control
Microsoft Windows XP: This style bit no longer results in unused portions of the control being filled with the color of the top left pixel of the bitmap or icon. Unused portions of the control will remain the background color.
UpDonw
Name Value Description
default   UDS_ARROWKEYS, UDS_ALIGNRIGHT, UDS_SETBUDDYINT, and UDS_AUTOBUDDY.
UDS_WRAP0x1범위의 시점 또는 종점을 넘어 증감되었을 때에 위치를 "랩" 합니다.
UDS_SETBUDDYINT0x2위치가 변경되었을 때에,WM_SETTEXT 메세지를 사용하고, 바디 윈도우의 텍스트를 컨트롤이 설정합니다.텍스트는,10 진문자열 또는 16 진문자열로서 서식화 된 위치로부터 완성됩니다.
UDS_ALIGNRIGHT0x4바디 윈도우의 우단의 근처에 스핀 버튼 컨트롤을 배치합니다.바디 윈도우의 폭은, 컨트롤의 폭에 따라 감소합니다.
UDS_ALIGNLEFT0x8바디 윈도우의 좌단의 근처에 스핀 버튼 컨트롤을 배치합니다.바디 윈도우의 폭은, 컨트롤의 폭에 따라 감소합니다.
UDS_AUTOBUDDY0x10컨트롤의 바디 윈도우로서Z 순서로 직전의 윈도우를 자동적으로 선택합니다.
UDS_ARROWKEYS0x20오름새의 화살표 또는 아래로 향한 커서 키가 밀렸을 때에, 컨트롤이 위치를 증감합니다.
UDS_HORZ0x40컨트롤의 화살표를 상하가 아니고, 좌우를 가리키도록(듯이) 합니다.
UDS_NOTHOUSANDS0x8010 진 3 자리수 마다 1000 단위의 단락을 삽입하지 않습니다.
UDS_HOTTRACK0x100Causes the control to exhibit "hot tracking" behavior. That is, it highlights the control's buttons as the mouse passes over them. This style requires Microsoft Windows 98 or Windows 2000. If the system is running Windows 95 NT4, the flag is ignored. The flag is also ignored on Windows XP when the desktop theme overrides it.
DateTime
Name Value Description
default   DTS_SHORTDATECENTURYFORMAT and WS_TABSTOP (+/-Tabstop)
DTS_UPDOWN 0x1 Provides an up-down control to the right of the control to modify date-time values, which replaces the of the drop-down month calendar that would otherwise be available.
DTS_SHOWNONE 0x2 Displays a checkbox inside the control that users can uncheck to make the control have no date/time selected. Whenever the control has no date/time, Gui Submit and GuiControlGet will retrieve a blank value (empty string).
DTS_SHORTDATEFORMAT 0x0 Displays the date in short format. In some locales, it looks like 6/1/05 or 6/1/2005. On older operating systems, a two-digit year might be displayed. This is why DTS_SHORTDATECENTURYFORMAT is the default and not DTS_SHORTDATEFORMAT.
DTS_LONGDATEFORMAT 0x4 Format word "LongDate". Displays the date in long format. In some locales, it looks like Wednesday, June 01, 2005.
DTS_SHORTDATECENTURYFORMAT 0xC Format word blank/omitted. Displays the date in short format with four-digit year. In some locales, it looks like 6/1/2005. If the system's version of Comctl32.dll is older than 5.8, this style is not supported and DTS_SHORTDATEFORMAT is automatically substituted.
DTS_TIMEFORMAT 0x9 Format word "Time". Displays only the time, which in some locales looks like 5:31:42 PM.
DTS_APPCANPARSE 0x10 Not yet supported. Allows the owner to parse user input and take necessary action. It enables users to edit within the client area of the control when they press the F2 key. The control sends DTN_USERSTRING notification messages when users are finished.
DTS_RIGHTALIGN 0x20 +/-Right. The calendar will drop down on the right side of the control instead of the left.
(colors inside the drop-down calendar)   The colors of the day numbers inside the drop-down calendar obey that set by the Gui Font command or the c (Color) option. To change the colors of other parts of the calendar, follow this example:
Gui +LastFound
SendMessage, 0x1006, 4, 0xFFAA99, SysDateTimePick321 ; 0x1006 is DTM_SETMCCOLOR. 4 is MCSC_MONTHBK (background color). The color must be specified in BGR vs. RGB format (red and blue components swapped).
MonthCal
Name Value Description
default   UDS_ARROWKEYS, UDS_ALIGNRIGHT, UDS_SETBUDDYINT, and UDS_AUTOBUDDY.
MCS_DAYSTATE 0x1 Makes the control send MCN_GETDAYSTATE notifications to request information about which days should be displayed in bold. [Not yet supported]
MCS_MULTISELECT 0x2 Named option "Multi". Allows the user to select a range of dates rather than being limited to a single date. By default, the maximum range is 366 days, which can be changed by sending the MCM_SETMAXSELCOUNT message to the control. For example:
Gui +LastFound
SendMessage, 0x1004, 7, 0, SysMonthCal321 ; 7 days. 0x1004 is MCM_SETMAXSELCOUNT.
MCS_WEEKNUMBERS 0x4 Displays week numbers (1-52) to the left of each row of days. Week 1 is defined as the first week that contains at least four days.
MCS_NOTODAYCIRCLE 0x8 Prevents the circling of today's date within the control.
MCS_NOTODAY 0x10 Prevents the display of today's date at the bottom of the control.
(colors)   The colors of the day numbers inside the calendar obey that set by the Gui Font command or the c (Color) option. To change the colors of other parts of the calendar, follow this example:
Gui +LastFound
SendMessage, 0x100A, 5, 0xFFAA99, SysMonthCal321 ; 0x100A is MCM_SETCOLOR. 5 is MCSC_TITLETEXT (color of title text). The color must be specified in BGR vs. RGB format (red and blue components swapped).
Tab
Name Value Description
default   WS_TABSTOP and TCS_MULTILINE
forced   WS_CLIPSIBLINGS
TCS_OWNERDRAWFIXED: forced on or off as required by the control's background color and/or text color.
TCS_SCROLLOPPOSITE 0x0001 Unneeded tabs scroll to the opposite side of the control when a tab is selected.
TCS_BOTTOM 0x0002 +/-Bottom. Tabs appear at the bottom of the control instead of the top.
TCS_RIGHT 0x0002 Tabs appear vertically on the right side of controls that use the TCS_VERTICAL style.
TCS_MULTISELECT 0x0004 Multiple tabs can be selected by holding down CTRL when clicking. This style must be used with the TCS_BUTTONS style.
TCS_FLATBUTTONS 0x0008 Selected tabs appear as being indented into the background while other tabs appear as being on the same plane as the background. This style only affects tab controls with the TCS_BUTTONS style.
TCS_FORCEICONLEFT 0x0010 Icons are aligned with the left edge of each fixed-width tab. This style can only be used with the TCS_FIXEDWIDTH style.
TCS_FORCELABELLEFT 0x0020 Labels are aligned with the left edge of each fixed-width tab; that is, the label is displayed immediately to the right of the icon instead of being centered. This style can only be used with the TCS_FIXEDWIDTH style, and it implies the TCS_FORCEICONLEFT style.
TCS_HOTTRACK 0x0040 Items under the pointer are automatically highlighted
TCS_VERTICAL 0x0080 +/-Left or +/-Right. Tabs appear at the left side of the control, with tab text displayed vertically. This style is valid only when used with the TCS_MULTILINE style. To make tabs appear on the right side of the control, also use the TCS_RIGHT style. This style might not function correctly on Windows XP and beyond if a visual theme is in effect. A possible workaround to also specify the "buttons" style; or use "Gui, -theme" prior to adding the tab control, and "Gui, +theme" afterward. This style will not correctly display the tabs if a custom background color or text color is in effect. To workaround this, specify -Background and/or cDefault in the tab control's options.
TCS_BUTTONS 0x0100 +/-Buttons. Tabs appear as buttons, and no border is drawn around the display area.
TCS_SINGLELINE 0x0000 +/-Wrap. Only one row of tabs is displayed. The user can scroll to see more tabs, if necessary. This style is the default.
TCS_MULTILINE 0x0200 +/-Wrap. Multiple rows of tabs are displayed, if necessary, so all tabs are visible at once.
TCS_RIGHTJUSTIFY 0x0000 The width of each tab is increased, if necessary, so that each row of tabs fills the entire width of the tab control. This window style is ignored unless the TCS_MULTILINE style is also specified.
TCS_FIXEDWIDTH 0x0400 All tabs are the same width. This style cannot be combined with the TCS_RIGHTJUSTIFY style.
TCS_RAGGEDRIGHT 0x0800 Rows of tabs will not be stretched to fill the entire width of the control. This style is the default.
TCS_FOCUSONBUTTONDOWN 0x1000 The tab control receives the input focus when clicked.
TCS_OWNERDRAWFIXED 0x2000 The parent window is responsible for drawing tabs.
TCS_TOOLTIPS 0x4000 The tab control has a tooltip control associated with it.
TCS_FOCUSNEVER 0x8000 The tab control does not receive the input focus when clicked.

확장 윈도우 스타일

ExStyle
Name Value Description
WS_EX_DLGMODALFRAME 0x00000001 이중의 경계선을 가지는 윈도우를 작성합니다.
WS_EX_NOPARENTNOTIFY 0x00000004 이 스타일로 작성된 아이 윈도우가 작성되거나 파기 되거나 할 때, 그 친윈도우에 WM_PARENTNOTIFY 메세지를 보내지 않게 지정합니다.
WS_EX_TOPMOST 0x00000008 맨 앞면윈도우를 작성합니다.윈도우가 비액티브한 상태에서도, 다른 윈도우의 전면에 표시됩니다. SetWindowPos 함수를 사용하면, 비맨 앞면윈도우로 변경할 수 있습니다.
WS_EX_ACCEPTFILES 0x00000010 드래그 앤드 드롭으로, 파일을 받아 들입니다.
WS_EX_TRANSPARENT 0x00000020 투과 윈도우를 작성합니다.이 윈도우아래에 있는 어떠한 윈도우도, 차단해지는 일 없이 표시됩니다.
WS_EX_MDICHILD 0x00000040 MDI 아이 윈도우를 작성합니다.
WS_EX_TOOLWINDOW 0x00000080 툴 윈도우를 작성합니다.툴 윈도우는 통상의 타이틀 바보다 작은 타이틀 바를 가집니다.태스크바에는 표시되지 않습니다.유저가[Alt]키와[Tab]키를 동시에 누르면 나타나는 다이얼로그내에도, 표시되지 않습니다.
WS_EX_WINDOWEDGE 0x00000100 윈도우가 분위기가 산 인연의 경계선을 가지도록(듯이) 지정합니다.
WS_EX_CLIENTEDGE 0x00000200 인연이 가라앉아 보이는 경계선을 가지는 윈도우를 지정합니다.
WS_EX_CONTEXTHELP 0x00000400 다이알로그 박스의 타이틀 바에[?]버튼을 추가합니다. 유저가 이 버튼을 클릭하면, 마우스 포인터에 물음표가 붙습니다.그 후, 유저가 다이알로그 박스내의 컨트롤을 클릭하면, 컨트롤은 WM_HELP 메세지를 받아들입니다.컨트롤은 다이얼로그의 처리에 그 메세지를 보냅니다.
WS_EX_RIGHT 0x00001000 오른쪽맞춤 된 프롭퍼티를 가지는 윈도우를 작성합니다.헤브라이어나 아라비아어를 서포트하고 있는 시스템으로 유효합니다.다른 언어로 이 스타일을 지정하면 에러가 됩니다.
WS_EX_LEFT 0x00000000 왼쪽 가지런히 해 된 프롭퍼티를 가지는 윈도우를 작성합니다.(디폴트)
WS_EX_RTLREADING 0x00002000 금방 다른 곳으로의 독해 순서를 가지는 프롭퍼티를 가진 윈도우를 작성합니다.헤브라이어나 아라비아어를 서포트하고 있는 시스템으로 유효합니다.다른 언어로 이 스타일을 지정하면 에러가 됩니다.
WS_EX_LTRREADING 0x00000000 왼쪽에서 오른쪽에의 읽어내 순서를 가지는 프롭퍼티를 가진 윈도우를 작성합니다.(디폴트)
WS_EX_LEFTSCROLLBAR 0x00004000 수직 스크롤 바가 클라이언트 영역의 좌측으로 놓여집니다.헤브라이어나 아라비아어를 서포트하고 있는 시스템으로 유효합니다.다른 언어로 이 스타일을 지정하면 에러가 됩니다.
WS_EX_RIGHTSCROLLBAR 0x00000000 수직 스크롤 바가 클라이언트 영역의 우측으로 놓여집니다.(디폴트)
WS_EX_CONTROLPARENT 0x00010000 유저가[Tab]키를 사용해 아이 윈도우간을 이동할 수 있도록 합니다.
WS_EX_STATICEDGE 0x00020000 유저의 입력을 받아들이지 않는 항목용의, 입체적으로 보이는 경계 스타일을 가지는 윈도우를 작성합니다.
WS_EX_APPWINDOW 0x00040000 윈도우가 최소화되면, 톱 레벨 윈도우가 태스크바상에 놓여집니다.
WS_EX_OVERLAPPEDWINDOW 0x00000300 WS_EX_WINDOWEDGE (와)과 WS_EX_CLIENTEDGE 의 편성입니다.
WS_EX_PALETTEWINDOW 0x00000188 WS_EX_WINDOWEDGE (와)과 WS_EX_TOOLWINDOW (와)과 WS_EX_TOPMOST 의 편성입니다.

AutoHotKey(오토핫키) 설명서 SendMessageList

Posted by 발전소장
2014. 8. 14. 14:58 AutoHotKey/misc

윈도우 메세지 일람

일반적인 메세지의 일람에 대해서는,WinAPI Database for VB Programmer의 알파벳순서 표시 「W」의 항등이 자세하다.

AutoHotKey(오토핫키) 설명서 PostMessage/SendMessage Tutorial

Posted by 발전소장
2014. 8. 14. 14:57 AutoHotKey/misc

PostMessage/SendMessage관련

윈도우 메세지에 대해

Windows의GUI(은)는, 시스템이나 어플리케이션이 윈도우나GUI컨트롤에 대해서 윈도우 메세지를 송신해, 윈도우를 소유하는 어플리케이션이 보내진 메세지에 대응한 동작을 실시하는 것으로 성립되고 있다.
AutoHotkey그렇지만,PostMessage(이)나SendMessage의 커멘드로 윈도우 메세지를 송신하는 것으로써, 윈도우에 대해서 여러가지 조작을 실시할 수 있다.

윈도우 메세지나 각 메세지의 동작에 대해서는,Web위에 많은 자료가 있다.
일반적인 메세지의 일람에 대해서는,WinAPI Database for VB Programmer의 알파벳순서 표시 「W」의 항등이 자세하다.

WM_COMMAND의 커멘드 번호를 조사한다

「WM_COMMAND」메세지를 보내면, 메뉴등의 커멘드를 실행시킬 수 있다.
WM_COMMAND(을)를 보내려면 ,Msg인수에 「0x111」(을)를 지정한다.
wParam인수에는 커멘드ID(을)를 지정한다.

커멘드ID(을)를 조사하는 간단한 방법은,Resource Hacker(을)를 사용하는 방법이다.
조사하고 싶은 실행 파일을 열어, 트리의 「Menu」이하를 보면,

MENUITEM "&File...   \tL",  40029

(와)과 같은 형식에서 메뉴 항목이 기술되고 있다.
제일 마지막 숫자가, 메뉴 항목에 대응하는 커멘드ID이다.

또, 트리의 「Accelerators」이하에서는,

VK_A, 40019, NOINVERT, CONTROL, VIRTKEY

(와)과 같은 행이 열거되고 있다.
커멘드명이 쓰여지지 않기 때문에 알기 힘들지만, 단축 키에 대응하는 커멘드ID하지만 조사할 수 있다.

이러한 방법에서는, 툴바 밖에 할당할 수 있지 않은 커멘드ID(을)를 조사하는 것은 할 수 없다.
거기서,툴바 버튼의 커멘드ID(을)를 조사하는 스크립트(을)를 작성했다.
표준적인 툴바이면, 버튼 번호에 대응하는 커멘드ID(을)를 조사할 수 있을 것이다.

Windows부속의 페인트의 툴 박스와 같은 표준적으로 없는 툴바의 경우, 이 스크립트에서도 커멘드ID(을)를 조사할 수 없지만,창콘등의 툴로 실행된 커멘드를 감시해 조사할 수 있는 경우도 있다.

Delphi(이)나VisualBasic등, 일부의 개발 환경에서 만들어진 소프트의 경우, 커멘드ID하지만 일정이 아니거나 하고, 커멘드ID(을)를 조사해도 도움이 되지 않는다.

by Rajat

This page discusses the PostMessage and SendMessage commands and will answer some questions like:

"How do I press a button on a minimized window?"
"How do I select a menu item when WinMenuSelectItem doesn't work with it?!"
"This is a skinnable window.... how do I send a command that works every time?"
"and what about hidden windows?!"


Requirements: AutoHotkey v1.0.09+ and Winspector Spy (http://www.windows-spy.com)

As a first example, note that WinMenuSelectItem fails to work with the menu bar on Outlook Express's "New Message" window. In other words, this code will not work:

WinMenuSelectItem, New Message,, &Insert, &Picture...

 

But PostMessage can get the job done:

PostMessage, 0x111, 40239, 0, , New Message

Works like a charm! But what the heck is that? 0x111 is the hex code of wm_command message and 40239 is the code that this particular window understands as menu-item 'Insert Picture' selection. Now let me tell you how to find a value such as 40239:

  1. Open Winspector Spy and a "New Message" window.
  2. Drag the crosshair from Winspector Spy's window to "New Message" window's titlebar (the portion not covered by Winspector Spy's overlay).
  3. Right click the selected window in the list on left and select 'Messages'.
  4. Right click the blank window and select 'Edit message filter'.
  5. Press the 'filter all' button and then dbl click 'wm_command' on the list on left. This way you will only monitor this message.
  6. Now go to the "New Message" window and select from its menu bar: Insert > Picture.
  7. Come back to Winspector Spy and press the traffic light button to pause monitoring.
  8. Expand the wm_command messages that've accumulated (forget others if any).
  9. What you want to look for (usually) is a code 0 message. sometimes there are wm_command messages saying 'win activated' or 'win destroyed' and other stuff.. not needed. You'll find that there's a message saying 'Control ID: 40239' ...that's it!
  10. Now put that in the above command and you've got it! It's the wParam value.

For the next example I'm taking Paint because possibly everyone will have that. Now let's say it's an app where you have to select a tool from a toolbar using AutoHotkey; say the dropper tool is to be selected.

What will you do? Most probably a mouse click at the toolbar button, right? But toolbars can be moved and hidden! This one can be moved/hidden too. So if the target user has done any of this then your script will fail at that point. But the following command will still work:

PostMessage, 0x111, 639,,,untitled - Paint

Another advantage to PostMessage is that the Window can be in the background; by contrast, sending mouse clicks would require it to be active.


Here are some more examples. Note: I'm using WinXP Pro (SP1) ... if you use a different OS then your params may change (only applicable to apps like Wordpad and Notepad that come with windows; for others the params shouldn't vary):

;makes writing color teal in Wordpad
PostMessage, 0x111, 32788, 0, , Document - WordPad

;opens about box in Notepad
PostMessage, 0x111, 65, 0, , Untitled - Notepad

;toggles word-wrap in Notepad
PostMessage, 0x111, 32, 0, , Untitled - Notepad

;play/pause in Windows Media Player
PostMessage, 0x111, 32808, 0, , Windows Media Player

;suspend the hotkeys of a running AHK script!
DetectHiddenWindows, on
SetTitleMatchMode, 2
PostMessage, 0x111, 32800,,,MyScript.ahk - AutoHotkey


This above was for PostMessage. SendMessage works the same way but additionally waits for a return value, which can be used for things such as getting the currently playing track in Winamp (see Automating Winamp for an example).

Here are some more notes:

  • The note above regarding OS being XP and msg values changing with different OSes is purely cautionary. if you've found a msg that works on your system (with a certain version of a software) then you can be sure it'll work on another system too with the same version of the software. In addition, most apps keep these msg values the same even on different versions of themselves (e.g. Windows Media Player and Winamp).
  • If you've set the filter to show only wm_command in Winspector Spy and still you're getting a flood of messages then right click that message and select hide (msg name)... you don't want to have a look at a msg that appears without you interacting with the target software.
  • The right pointing arrow in Winspector Spy shows the msg values and the blurred left pointing arrows show the returned value. A 0 (zero) value can by default safely be taken as 'no error' (use it with SendMessage, the return value will be in %ErrorLevel%).
  • For posting to partial title match add this to script:
    SetTitleMatchMode, 2
  • For posting to hidden windows add this to script:
    DetectHiddenWindows, On

Note: There are apps with which this technique doesn't work. I've had mixed luck with VB and Delphi apps. This technique is best used with C, C++ apps. With VB apps the 'LParam' of the same command keeps changing from one run to another. With Delphi apps... the GUI of some apps doesn't even use wm_command. It probably uses mouse pos & clicks.

Go and explore.... and share your experiences in the AutoHotkey Forum. Feedback is welcome!

This tutorial is not meant for total newbies (no offense meant) since these commands are considered advanced features. So if after reading the above you've not made heads or tails of it, please forget it.

-Rajat


AutoHotKey(오토핫키) 설명서 Performance

Posted by 발전소장
2014. 8. 14. 14:55 AutoHotKey/misc

Script & Hotkey Performance

Scripts are semi-compiled while they're being loaded and syntax-checked. In addition to reducing the memory consumed by the script, this process also enhances runtime performance (by orders of magnitude in some cases). The performance boost is greatest when SetBatchLines is -1, meaning that the script is running at maximum speed.

In addition to SetBatchLines, the following commands may also affect performance depending on the nature of the script: SetKeyDelay, SetMouseDelay, SetWinDelay, SetControlDelay, and SetDefaultMouseSpeed.

Here are the technical details of the semi-compiling process:

  • Input and output variables (when their names don't contain references to other variables) and group names are resolved to memory addresses.
  • Loops, blocks, IFs, and ELSEs are given the memory addresses of their related jump-points in the script.
  • The destination of each Hotkey, Gosub, and Goto is resolved to a memory address unless it's a variable.
  • Command names are replaced with their addresses in a jump table.
  • Each line is parsed into a list of parameters.
  • Each parameter is parsed into a list of variable references (if any).
  • Each variable reference is resolved to a memory address.

AutoHotKey(오토핫키) 설명서 Override

Posted by 발전소장
2014. 8. 14. 14:54 AutoHotKey/misc

Overriding or Disabling Hotkeys

You can disable all built-in Windows hotkeys except Win+L and Win+U by making the following change to the registry (should work on all OSes, reboot is probably required):
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
NoWinKeys REG_DWORD 0x00000001 (1)

But read on if you want to do more than just disable them all. Note that most of the below examples are not supported on Windows Me/98/95.

Hotkeys owned by another application can be overridden or disabled simply by assigning them to an action in the script. The most common use for this feature is to change the hotkeys that are built into Windows itself. For example, if you wish Win+E (the shortcut key that launches Windows Explorer) to perform some other action, use this:

#e::
MsgBox, This hotkey is now owned by the script.
return

In this next example, the Win+R hotkey, which is used to open the RUN window, is completely disabled:

#r::return

Similarly, to disable both Windows keys, use this:

Lwin::return
Rwin::return

To disable or change an application's non-global hotkey (that is, a shortcut key that only works when that application is the active window), consider the following example which disables Control+P (Print) only for Notepad, leaving the key in effect for all other types of windows:

$^p::
SetTitleMatchMode, 2
IfWinActive, - Notepad, , Return
Send, ^p
return

In the above example, the $ prefix is needed so that the hotkey can "send itself" without activating itself (which would otherwise trigger a warning dialog about an infinite loop).

You can try out any of the above examples by copying them into a new text file such as "Override.ahk", then launching the file.

AutoHotKey(오토핫키) 설명서 Languages

Posted by 발전소장
2014. 8. 14. 14:54 AutoHotKey/misc

A_Language변수에 격납되는 값과 대응하는 언어는 이하대로.일본어는 「0411」, 영어(미국)(은)는 「0409」.

코드 언어
0436 Afrikaans
041c Albanian
0401 Arabic_Saudi_Arabia
0801 Arabic_Iraq
0c01 Arabic_Egypt
1001 Arabic_Libya
1401 Arabic_Algeria
1801 Arabic_Morocco
1c01 Arabic_Tunisia
2001 Arabic_Oman
2401 Arabic_Yemen
2801 Arabic_Syria
2c01 Arabic_Jordan
3001 Arabic_Lebanon
3401 Arabic_Kuwait
3801 Arabic_UAE
3c01 Arabic_Bahrain
4001 Arabic_Qatar
042b Armenian
042c Azeri_Latin
082c Azeri_Cyrillic
042d Basque
0423 Belarusian
0402 Bulgarian
0403 Catalan
0404 Chinese_Taiwan
0804 Chinese_PRC
0c04 Chinese_Hong_Kong
1004 Chinese_Singapore
1404 Chinese_Macau
041a Croatian
0405 Czech
0406 Danish
0413 Dutch_Standard
0813 Dutch_Belgian
0409 English_United_States
0809 English_United_Kingdom
0c09 English_Australian
1009 English_Canadian
1409 English_New_Zealand
1809 English_Irish
1c09 English_South_Africa
2009 English_Jamaica
2409 English_Caribbean
2809 English_Belize
2c09 English_Trinidad
3009 English_Zimbabwe
3409 English_Philippines
0425 Estonian
0438 Faeroese
0429 Farsi
040b Finnish
040c French_Standard
080c French_Belgian
0c0c French_Canadian
100c French_Swiss
140c French_Luxembourg
180c French_Monaco
0437 Georgian
0407 German_Standard
0807 German_Swiss
0c07 German_Austrian
1007 German_Luxembourg
1407 German_Liechtenstei
408 Greek
040d Hebrew
0439 Hindi
040e Hungarian
040f Icelandic
0421 Indonesian
0410 Italian_Standard
0810 Italian_Swiss
0411 Japanese
043f Kazakh
0457 Konkani
0412 Korean
0426 Latvian
0427 Lithuanian
042f Macedonian
043e Malay_Malaysia
083e Malay_Brunei_Darussalam
044e Marathi
0414 Norwegian_Bokmal
0814 Norwegian_Nynorsk
0415 Polish
0416 Portuguese_Brazilian
0816 Portuguese_Standard
0418 Romanian
0419 Russian
044f Sanskrit
081a Serbian_Latin
0c1a Serbian_Cyrillic
041b Slovak
0424 Slovenian
040a Spanish_Traditional_Sort
080a Spanish_Mexican
0c0a Spanish_Modern_Sort
100a Spanish_Guatemala
140a Spanish_Costa_Rica
180a Spanish_Panama
1c0a Spanish_Dominican_Republic
200a Spanish_Venezuela
240a Spanish_Colombia
280a Spanish_Peru
2c0a Spanish_Argentina
300a Spanish_Ecuador
340a Spanish_Chile
380a Spanish_Uruguay
3c0a Spanish_Paraguay
400a Spanish_Bolivia
440a Spanish_El_Salvador
480a Spanish_Honduras
4c0a Spanish_Nicaragua
500a Spanish_Puerto_Rico
0441 Swahili
041d Swedish
081d Swedish_Finland
0449 Tamil
0444 Tatar
041e Thai
041f Turkish
0422 Ukrainian
0420 Urdu
0443 Uzbek_Latin
0843 Uzbek_Cyrillic
042a Vietnamese