2011년 7월 29일 금요일

소프트웨어기술자 경력을 구가에서 인정받고싶은분

소프트웨어 기술자 신고 제도라는 겁니다.

이 제도는 아래에의한 목적으로 추진 되었다고 하는군요.

소프트웨어기술자의 경력관리는 공공기관이 사업자를 선정할 때 채용인력에 대해 공신력 있는 검증을 할 수 있도록 하고, 소프트웨어기술자가
국내·외 취업 시 또는 소프트웨어 개발 관련 사업에 참여하고자 할 경우 필요로 하는 보유 기술 역량을 객관적으로 증명하는 수단으로 활용할 수
있도록 하기 위하여 도입된 제도입니다.
이러한 목적을 위하여 「소프트웨어산업진흥법」 제24조의3에서는 ‘소프트웨어기술자는 근무처·경력·학력 및 자격 등(이하 "경력등"이라 한다)의
관리에 필요한 사항을 지식경제부장관에게 신고할 수 있다” 고 규정하고 있습니다.
소프트웨어기술자의 경력 신고는 의무사항이 아니며, 소프트웨어기술자가 경력의 객관적 증명이 필요한 경우 언제나 신고하여 확인 받으실 수
있습니다.

한마디로 S/W 기술자 신고 제도 는 소프트웨어에 종사하는 사람들에 대한 경력을 국가에서 관리해 주는 제도입니다.

소프트웨어 기술협회에서 인정해주는 산출표입니다.(참고적으로 전 고급기술자 입니다.)

기타 자세한 사항은 http://career.sw.or.kr/ 에서 확인 가능합니다.

SW기술자의 등급 인정 범위 표(http://career.sw.or.kr/hrdict/front/guide/renew/sub1-4_popup.jsp)

 

소프트웨어산업 진흥법 시행령
[일부개정 2008.8.7 대통령령 제20965호]
제1조 (목적) 이 영은 「소프트웨어산업 진흥법」에서 위임된 사항과 그 시행에 관하여 필요한 사항을 규정함을 목적으로 한다.<개정 2006.10.12>
제1조의2 (소프트웨어기술자의 범위) 「소프트웨어산업 진흥법」(이하 "법"이라 한다) 제2조제5호에 따른 소프트웨어기술자의 기술등급 및 인정범위는 별표 1과 같다.
[본조신설 2008.8.7]

② 제1항에 따라 기술등급이 인정되는 자는 2009년 7월 31일까지의 경력 등을 법 제24조의3제1항에 따라 지식경제부장관에게 신고하여 자신의 기술등급을 확인받을 수 있다.
[별표1] 소프트웨어기술자의 기술등급 인정범위(1조의2 관련)
<
신설 2008.8.7>

기술등급

기술자격자

학력ㆍ경력자

기술사

ㆍ기술사

 

특급 기술자

ㆍ고급기술자 자격 취득 후 3년 이상 소프트웨어 기술 분야의 업무를 수행한 자

 

고급 기술자

ㆍ중급기술자 자격 취득 후 3년 이상 소프트웨어 기술 분야의 업무를 수행한 자
ㆍ박사학위를 가진 자로서 기사자격 또는 지식경제부장관이 고시하는 해당 등급의 공인민간자격을 취득한자

 

중급 기술자

ㆍ기사의 자격을 취득한 자로서 3년 이상 소프트웨어 기술 분야의 업무를 수행한 자
ㆍ산업기사의 자격을 취득한 자로서 7년 이상 소프트웨어 기술 분야의 업무를 수행한 자
ㆍ지식경제부장관이 고시하는 해당 등급의 공인민간자격을 취득한 자로서 3년 이상 소프트웨어 기술 분야의 업무를 수행한자
ㆍ기사자격 또는 지식경제부장관이 고시하는 해당 등급의 공인민간자격을 취득한 자로서 석사학위 취득 후 2년 이상 소프트웨어 기술 분야의 업무를 수행한자

 

초급 기술자

ㆍ기사 자격을 취득한 자
ㆍ산업기사 이상의 자격을 취득한 자
ㆍ지식경제부장관이 고시하는 해당 등급의 공인민간자격을 취득한 자

ㆍ전문학사 이상의 학위를 가진 자
ㆍ고등학교를 졸업한 후 3년 이상 소프트웨어 기술 분야의 업무를 수행한 자

고급 기능사

ㆍ산업기사의 자격을 취득한 자로서 4년 이상 소프트웨어 기능 분야의 업무를 수행한 자
ㆍ기능사의 자격을 취득한 자로서 7년 이상 소프트웨어 기능 분야의 업무를 수행한 자

 

중급 기능사

ㆍ산업기사의 자격을 취득한 자
ㆍ기능사의 자격을 취득한 자로서 3년 이상 소프트웨어 기능 분야의 업무를 수행한 자

 

초급 기능사

ㆍ기능사의 자격을 취득한 자

 

부칙 <20965,2008.8.7>
제1조(시행일) 이 영은 공포한 날부터 시행한다.
제2조(소프트웨어기술자의 기술등급 및 인정범위에 관한 특례)
① 별표 1의 개정규정에도 불구하고 2009년 7월 31일까지 다음 표에 의한 소프트웨어기술자의 등급별 인정범위에 해당하게 된 자는 별표 1의 개정규정에 따른 소프트웨어기술자의 기술등급을 보유하는 것으로 본다.

기술등급

기술자격자

학력ㆍ경력자

기술사

ㆍ기술사

 

특급 기술자

ㆍ기사자격을 가진 자로서10년 이상 해당 기술 분야의 업무를 수행한 자
ㆍ산업기사자격을 가진 자로서 13년 이상 해당 기술 분야의 업무를 수행한 자

ㆍ박사학위를 가진 자로서 3년 이상 해당기술 분야의 업무를 수행한 자
ㆍ석사학위를 가진 자로서 9년 이상 해당기술 분야의 업무를 수행한자
ㆍ학사학위를 가진 자로서 12년 이상 해당기술 분야의 업무를 수행한 자
ㆍ전문대학을 졸업한 자로서 15년 이상 해당기술 분야의 업무를 수행한 자

고급 기술자

ㆍ기사자격을 가진 자로서7년 이상 해당 기술 분야의 업무를 수행한 자
ㆍ산업기사자격을 가진 자로서 10년 이상 해당 기술 분야의 업무를 수행한 자

ㆍ박사학위를 가진 자
ㆍ석사학위를 가진 자로서 6년 이상 해당기술 분야의 업무를 수행한자
ㆍ학사학위를 가진 자로서 9년 이상 해당기술 분야의 업무를 수행한 자
ㆍ전문대학을 졸업한 자로서 12년 이상 해당기술 분야의 업무를 수행한자
ㆍ고등학교를 졸업한 자로서 15년 이상해당기술 분야의 업무를 수행한자

중급 기술자

ㆍ기사자격을 가진 자로서4년 이상 해당 기술 분야의 업무를 수행한 자
ㆍ산업기사자격을 가진 자로서 7년 이상 해당 기술 분야의 업무를 수행한 자

ㆍ석사학위를 가진 자로서 3년 이상 해당기술 분야의 업무를 수행한자
ㆍ학사학위를 가진 자로서 6년 이상 해당기술 분야의 업무를 수행한자
ㆍ전문대학을 졸업한 자로서 9년 이상 해당기술 분야의 업무를 수행한 자
ㆍ고등학교를 졸업한 자로서 12년 이상 해당기술 분야의 업무를 수행한자

초급 기술자

ㆍ기사자격을 가진 자
ㆍ산업기사자격을 가진 자

ㆍ석사학위를 가진 자
ㆍ학사학위를 가진 자
ㆍ전문대학을 졸업한 자
ㆍ고등학교를 졸업한 자로서 3년 이상 해당기술 분야의 업무를 수행한자

고급 기능사

ㆍ산업기사자격을 가진 자로서 4년 이상 해당 기능분야의 업무를 수행한 자
ㆍ기능사자격을 가진 자로서7년 이상 해당 기능 분야의 업무를 수행한 자

ㆍ기능대학 또는 전문대학을 졸업한 자로서 4년 이상 해당 기능분야의 업무를 수행한 자
ㆍ고등학교를 졸업한 자로서 7년 이상 해당기능 분야의 업무를 수행한자
ㆍ직업훈련기관의 교육을 이수한 자로서 7년 이상 해당 기능 분야의 업무를 수행한 자
ㆍ기능실기시험을 합격한 자로서 10년 이상 해당 기능 분야의 업무를 수행한자

중급 기능사

ㆍ산업기사자격을 가진 자
ㆍ기능사자격을 가진 자로서3년 이상 해당 기능 분야의 업무를 수행한 자

ㆍ기능대학 또는 전문대학을 졸업한 자
ㆍ고등학교를 졸업한 자로서 3년 이상 해당기능 분야의 업무를 수행한자
ㆍ직업훈련기관의 교육을 이수한 자로서 5년 이상 해당 기능 분야의 업무를 수행한 자
ㆍ기능실기시험을 합격한 자로서 5년 이상 해당 기능 분야의 업무를 수행한자
ㆍ그 밖에 10년 이상 해당 기능 분야의 업무를 수행한 자

초급 기능사

ㆍ기능사의 자격을 취득한 자

ㆍ고등학교를 졸업한 자
ㆍ직업훈련기관의 교육을 이수한 자
ㆍ기능실기시험을 합격한 자
ㆍ그 밖에 5년 이상 해당 기능 분야의 업무를 수행한 자

비고
1. “기술자격자”는 「국가기술자격법」의 기술자격종목 중 다음 각 목의 정보처리 분야 기술자격을 취득한 자 또는 「자격기본법」등 관계 법령에 따라 인증된 공인민간자격 중 지식경제부장관이 고시하는 자격을 취득한 자를 말하며 경력인정방법 및 절차 등은 지식경제부장관이 정한다. 이 경우 지식경제부장관은 공인민간자격을 단계별 등급으로 분류(초급ㆍ중급 등)하여 고시한다.
가. 기술사: 정보관리, 전자계산조직응용
나. 기사: 정보처리, 전자계산기조직응용
다. 산업기사: 정보처리, 사무자동화
라. 기능사: 정보처리
2. “학력ㆍ경력자”는 다음 각 목의 어느 하나에 해당하는 자를 말하며, 해당 전공학과의 범위, 교육기관, 경력인정방법 및 절차 등은 지식경제부장관이 정하여 고시한다.
가. 「초ㆍ중등교육법」 또는 「고등교육법」에 따른 해당 학교에서 소정의 과정을 이수하고 졸업한 자
나. 그 밖의 관계 법령에 따라 국내 또는 외국에서 가목과 동등 또는 그 이상의 학력이 있다고 인정되는 자
다. 지식경제부장관이 정하는 교육기관에서 소정의 소프트웨어기술(기능) 관련 교육과정을 이수한 자 라. 그 밖에 소프트웨어기술(기능)을 가진 자로서 소프트웨어사업자 신고업체 및 소프트웨어기술(기능)분야에서 일정기간 근무한 자
3. 소프트웨어기술(기능)분야의 업무를 수행한 자는 소프트웨어 관련 해당 분야에서 계획ㆍ설계ㆍ개발ㆍ시험ㆍ운영ㆍ유지보수ㆍ감리 등의 업무를 수행한 자를 말한다.

   

2011년 7월 20일 수요일

Textbox 내용저장

gui,add,edit,w300 h200 vtxt
gui,add,button,gok,ok
gui,show
return

ok:
gui,submit,nohide ;gui 내용을 전송
filename=%A_ScriptDir%\%A_TickCount%.txt
fileappend,%txt%,%filename%

loop
{
IfExist,%filename%
break
}

loop
{
FileRead,temp,%filename%
if txt=%temp%
break
}
return

2011년 7월 8일 금요일

Virtualbox 이미지 배포

리눅스를 설치하기 귀찬거나할때 http://virtualboxes.org/ 에서 받아서 쓰면된다.

 

여기도 있다고는 하는데 아래건 아직 안가 봄

http://virtualboximages.com/

2011년 7월 1일 금요일

[Autohotkey] GUI 항상위에

Gui, Add, CheckBox, vcheckalways x400 y80 w60 h20 , 항상위

Gui, Show, w479 h500, Untitled GUI
settimer,AlwaysOnTop,on
return

AlwaysOnTop:
guicontrolget,checkalways
if checkalways = 1
WinSet,AlwaysOnTop,On,ahk_class AutoHotkeyGUI
if checkalways = 0
WinSet,AlwaysOnTop,Off,ahk_class AutoHotkeyGUI
return

GuiClose:
ExitApp

[Autohotkey] GUI 안에 text 값변경하는것

Gui,Add,Edit,w100 vA gDiv,0
Gui,Add,Edit,w100 vB gDiv,0
Gui,Add,Text,w100 vResult
Gui,Show
SetFormat,Float,0.1
return
Div:
Gui,Submit,NoHide
GuiControl,,Result,% A/B
return

[autihotkey] 스크립트안에 이미지 첨부

http://www.autohotkey.com/forum/topic10957.html
http://www.autohotkey.com/forum/topic29199.html
별도의 외부 이미지 파일 없이 스크립트 안에 이미지를 포함시키는 방법입니다.
1. 이미지파일 변환
오직 BMP 포맷만 지원합니다.
다음 스크립트를 실행시키고 가장 위의 Edit창에 변환할 bmp파일의 이름을 적고 Open File 버튼을 눌러줍니다.
밑의 Edit 창에 16진수로 변환된 이미지 파일의 내용이 나타납니다.
전체를 복사해서 텍스트 파일로 저장해 두세요.
gui, add, edit, w400 vFile,
gui, add, button, w100 gOpen x+10,Open File
gui, add, edit, r40 w510 vOutput xm
gui, show

Open:
gui, submit, nohide
BinRead(file,data)
Bin2Hex(h,data,res)
guicontrol,,output,%h%
return

Bin2Hex(ByRef h, ByRef b, n=0) ; n bytes binary data -> stream of 2-digit hex
{ ; n = 0: all (SetCapacity can be larger than used!)
format = %A_FormatInteger% ; save original integer format
SetFormat Integer, Hex ; for converting bytes to hex

m := VarSetCapacity(b)
If (n < 1 or n > m)
n := m
Address := &b
h =
Loop %n%
{
x := *Address ; get byte in hex
StringTrimLeft x, x, 2 ; remove 0x
x = 0%x% ; pad left
StringRight x, x, 2 ; 2 hex digits
h = %h%%x%
Address++
}
SetFormat Integer, %format% ; restore original format
}

BinRead(file, ByRef data, n=0, offset=0)
{
h := DllCall("CreateFile","Str",file,"Uint",0x80000000,"Uint",3,"UInt",0,"UInt",3,"Uint",0,"UInt",0)
IfEqual h,-1, SetEnv, ErrorLevel, -1
IfNotEqual ErrorLevel,0,Return,0 ; couldn't open the file

m = 0 ; seek to offset
IfLess offset,0, SetEnv,m,2
r := DllCall("SetFilePointerEx","Uint",h,"Int64",offset,"UInt *",p,"Int",m)
IfEqual r,0, SetEnv, ErrorLevel, -3
IfNotEqual ErrorLevel,0, {
t = %ErrorLevel% ; save ErrorLevel to be returned
DllCall("CloseHandle", "Uint", h)
ErrorLevel = %t% ; return seek error
Return 0
}

m := DllCall("GetFileSize","UInt",h,"Int64 *",r)
If (n < 1 or n > m)
n := m
Granted := VarSetCapacity(data, n, 0)
IfLess Granted,%n%, {
ErrorLevel = Mem=%Granted%
Return 0
}

result := DllCall("ReadFile","UInt",h,"Str",data,"UInt",n,"UInt *",Read,"UInt",0)

if (!result or Read < n)
t = -3
IfNotEqual ErrorLevel,0, SetEnv,t,%ErrorLevel%

h := DllCall("CloseHandle", "Uint", h)
IfEqual h,-1, SetEnv, ErrorLevel, -2
IfNotEqual t,,SetEnv, ErrorLevel, %t%-%ErrorLevel%

Return Read
}
2. 다음 스크립트의 ~~~부분에 위에서 구한 16진수 데이터를 적당한 크기로 나눠서 넣어주시면 끝~
LoadBitmap1:
BMPH =
(
;~~~~~~~~~~~~~~~~~
)
BMPH =%BMPH%
(
;~~~~~~~~~~~~~~~~~
)
다음은 제가 직접 만들어서 확인한 예제입니다.
Gui 1:+LastFound
GUI1:=WinExist() , hDC:=DllCall("GetDC",UInt,Gui1)
Gui, Add, Text, w32 h32 0xE hwndhPic ; SS_BITMAP = 0xE
GoSub, LoadBitmap1
hBMP := DllCall( "CreateDIBitmap", UInt,hDC, UInt,(bmiHAddr:=&BMP+14)
,UInt,(CBM_INIT:=4), UInt,&BMP+NumGet(BMP,10), UInt,&BMP+14, UInt,(DIB_PAL_COLORS:=1) )
SendMessage, (STM_SETIMAGE:=0x172), (IMAGE_BITMAP:=0x0), hBMP,, ahk_id %hPic%
Gui, Show, w160 h120, sample
Return

GuiClose:
GuiEscape:
ExitApp
Return

LoadBitmap1:
BMPH =
(
424d360c000000000000360000002800000020000000200000000100180000000000000c000012170000121700000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff00000000000033ccff33ccff000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff00000000000033ccff33ccff33ccff000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff00000000000033ccff33ccff33ccff33ccff33ccff000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff00000000000033ccff33ccff33ccff33ccff000000000000000000000000000000ffff
)
BMPH =%BMPH%
(
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000033ccff33ccff33ccff33ccff33ccff0000006699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff0000006699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff0000006699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff0000006699cc6699cc6699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff0000006699cc000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff
)
BMPH =%BMPH%
(
ffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff0000006699cc0000006699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000033ccff33ccff33ccff0000006699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff00000033ccff33ccff33ccff0000006699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff0000006699cc6699cc6699cc6699cc6699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00000000000000000033ccff33ccff33ccff33ccff33ccff33ccff0000000000000000006699cc6699cc6699cc6699cc000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00000000000033ccff33ccff
)
BMPH =%BMPH%
(
33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000033ccff33ccff00000033ccff33ccff33ccff00000000000000000000000033ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff00000000000033ccff33ccff33ccff000000ffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff00000033ccff33ccff33ccff000000ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffff000000ffffff0000
)
BMPH =%BMPH%
(
00ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000000000000000000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
)
BMPH =%BMPH%
(
ffffffffffffffffffffffffffff00000033ccff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00000033ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff33ccff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00000000000000000033ccff33ccff33ccff33ccff33ccff33ccff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
)
BMPH =%BMPH%
(
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
)

; Laszlo's MCode() ; http://www.autohotkey.com/forum/viewtopic.php?p=135302#135302
nSize := StrLen(BMPH)//2
VarSetCapacity( BMP,nSize )
Loop % nSize
NumPut( "0x" . SubStr(BMPH,2*A_Index-1,2), BMP, A_Index-1, "Char" )
BMPH= ; empty it

Return

출처 http://www.autohotkey.pe.kr/bbs/board.php?bo_table=tip&wr_id=172&page=3

[Autohotkey] 다른스크립트 컨트롤하기

;다음 내용을 main.ahk라는 이름으로 저장해 주세요.
DetectHiddenWindows On
SetTitleMatchMode 2
OnExit,exit
return

;Start
^s::
run,a.ahk
run,b.ahk
return

;Pause
^p::
PostMessage,0x111,65306,,,a.ahk - AutoHotkey
PostMessage,0x111,65306,,,b.ahk - AutoHotkey
return

;Reload
^r::
PostMessage,0x111,65303,,,a.ahk - AutoHotkey
PostMessage,0x111,65303,,,b.ahk - AutoHotkey
return

;Close
^x::
PostMessage,0x111,65307,,,a.ahk - AutoHotkey
PostMessage,0x111,65307,,,b.ahk - AutoHotkey
return

exit:
PostMessage,0x111,65307,,,a.ahk - AutoHotkey
PostMessage,0x111,65307,,,b.ahk - AutoHotkey
exitapp
;다음 내용을 a.ahk라는 이름으로 저장해 주세요.
#SingleInstance force
#NoTrayIcon
CoordMode,ToolTip,Screen
Loop
{
Tooltip,%A_Index%,100,100
sleep,100
}
return
;다음 내용을 b.ahk라는 이름으로 저장해 주세요.
#SingleInstance force
#NoTrayIcon
CoordMode,ToolTip,Screen
Loop
{
Tooltip,%A_Index%,200,100
sleep,100
}
return
;-----------------------------------------------------------------
이제 main.ahk만 실행시켜 주세요.
main.ahk에서 a.ahk와 b.ahk를 제어할 수 있습니다.
Ctrl-S 로 a.ahk와 b.ahk를 시작할 수 있습니다.
Ctrl-P 는 Pause.
Ctrl-R 는 Reload.
Ctrl-X 는 a와 b를 종료시킵니다.

[Autohotkey] 서브루틴

Q. 서브루틴이 뭘까?
A. 순서대로 시행될 스크립트와 개별적인 특수적인 스크립트 (핫키에 의해 시행되지않는다)
Example ;
Gui, add, button
gui, show, w100 h100
return
Guiclose:
exitapp
-----------------------
저게 도데체 무어란말인가?
분명 스크립트를 틀면 순서대로 시행될것이고 결국 return에의해 끝날것이다.
시행되지도 않을 exitapp라는 명령어는 무엇이고 왜 guiclose:라는 말을 중간에 써줬을까?
핫키는 ::로 표기한다.
그러므로 저것은 문법에 어긋날것이다.
한번 스크립트를 복사해서 새스크립트를 작성해보자.
잘 실행되는가?
그럼 구이창의 X자를 눌러보자.
스크립트가 꺼졌는가?
바로 이것이다.
guiclose 라는 서브루틴이 마치 패시브스킬처럼 구이를 닫는이벤트를 알아채고 이하 스크립트를 실행시켜주는것이다.
X자를 눌러도 끄고싶지않다면
return이라는 명령어를 exitapp대신에 넣으면될것이다.
대충 감이오는가?
예제를 하나더 살펴보자.
Guiclose:
exitapp
Gui, add, button
gui, show, w100 h100
return
위스크립트를 실행시켜보자.
잘실행됬다면 또한번 X자를 눌러보자. 스크립트가 잘꺼지는가?
잘된다는 몇몇은 실행해보지 않은것일것이다.
사실 위스크립트는 문법상 어긋나지 않고 처음예제와 동일하지만 효과는 상반되게 나타난다.
이는 서브루틴이 이하 스크립트를 감싸지못한다는것을 모른채 가장많이 저지르는 실수이다.
스크립트는 순서대로 시행되고 exitapp를 만남과동시에 사라질것이다.
기억하자.
서브루틴은 처음에 나와선 의도하지않은일을 할수있다.
그렇다면 서브루틴은 언제사용하는것이 효율적일까?
위는 자동적으로 시행해주는 서브루틴의 예이지만
명시적으로 시행해주고싶을떄는
goto, gosub명령어로 해결할수있다.
다음예제를 보자.
Example ;
send, This script is a very Simple script.{enter}
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
send, but i can't love you. because my parents hate you...
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
send, do you understand? wait.... wait.....
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
내용은 보지말자.
구멍영어니까.. 하지만 이것만 봐두자.
스크립트 A B C B D B 가 순차적으로 시행되며
B의 스크립트는 상당히 길고 보기 좋지않다.
이를 어떻게 해결할까?
답이나오는가?
그렇다. b스크립트를 서브루틴으로 묶고 goto 명령어로 순차적으로 시행하면된다.
goto 명령어는 서브루틴으로 이동하는기능을 하니까.
send, This script is a very Simple script.{enter}
goto, B
send, but i can't love you. because my parents hate you...
goto, B
send, do you understand? wait.... wait.....
goto, B
return
B:
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
return
스크립트가 한결간결해진거같다.
틀어보자.
순서대로 잘나오는가?
엇!
A스크립트를 시행하고 B스크립트를 시행한뒤 꺼져버린다..
왜??
바로 goto는 서브루틴으로 이동해서 return을 만나면 끝내버리는 명령어기떄문이다..
그럼?남은 gosub로 바꾼다음에 스크립트를 시행해보자.
잘되는가?
gosub가 언제나 무조건 좋은것은아니다.
어떤떄는 goto가 필요하고 어떤때는 gosub가 필요할떄가 있다.
두스크립트를 얼마나 적절하게 이용하느냐가 얼마나 보기좋고 간결하며 이해하기쉬운 코딩이 될지는
여러분판단에 맡길것이다.
이만 서브루틴에 대한 말은.. 접어야할것같다.
그거아는가??
서브루틴뿐아니라 변수에도 한글사용이 가능하다는것
사랑=너뿐
gosub, 하하
return
하하:
msgbox, %사랑%
return
필자는 영어를 사용하는게 더멋잇는 스크립트라고 생각하지만 개개인생각이 다른것이니까,
역시 적당히 떄에맞게 혼용해서 사용하는것도 현명하리라 판단된다.
---------------------------------------------------------------------------------
오타있으면 지적, 내용틀린거 지적좀해주세요오옹.. 하핫

[Autohotkey] GUI 변수설정

a=0 ;a 라는 변수를 0으로 대입해줘요.
gui,add,button,,감사
GUI,show
return
F1:: ;F1을 누를시 a를 1로 바꿔주어요. 여기서 1은 님의설정에따라 달르게할수있죠.
a=1
return
button감사: ;감사라는 버튼을 누를시 a라는 변수를 대입해서 msgbox를 뛰우죠.. 여기서 if 간단한강좌입니다.. 이제 ;중에 찔러주실꺼있으면 말씀해주세요.급해서 가봅니다>^^
if a= 0

msgbox, a는%a%이에요.!!!!! 맞다
else
msgbox a는 %a%이에요.!!!!!. 아니다
return

[Autohotkey] 함수관련

우선 이글을 보기전에 변수의 기초이 대해 아시고, msgbox에 대해아시고, 연산자에 대해 아셔야합니다.
만약 모르신다면, 위의 세가지 내용먼저 익히시길 바랍니다.

함수가 왜 필요할까요?
여러번 반복해서 사용하고 싶은 균일한 명령어들이 필요할때, 간편하게 사용하기 위해서 쓰는것입니다.
반복해서 쓸것도 아닌데, 간편하게 만드는 경우는, 타인에게 함수를 제공할때정도 일것 같습니다
함수가 사실 어려운게 아닌데, 딱히 쉽게 이해될 팁이 없어서 힘들어 하시는분들이 계신듯합니다.
가급적 쉽게 오토핫키의 함수에 대해 적어보겠습니다.
1. 함수의 선언
함수이름(사용될변수1, 사용될변수2, 사용될변수3...)
{
실행될 명령들
return 반환값
}
함수이름 : 사용되어질 함수이름입니다.
사용될변수1,2,3... : 함수안에서 사용되어질 변수입니다.
{} 중괄호 : 꼭 중괄호로 묶여져야만 합니다.
실행될 명령들 : 함수내부에서 실행되어지는 명령들입니다.
반환값 : 함수를 실행하고 값을 반환받고 싶을때 사용되어집니다.
return : 반환하고싶은값이 없다면, return이 필요없습니다.
* 여기서부터 함수에 대해 설명할때 함수선언된 내부와 함수가 선언되지 않는 스크립트부분으로 구분하여 이해를 도왔습니다. (main으로 설명하기엔 애매한감이 있었습니다.)
2. 함수의 호출
우선 예제로 사용될 함수는 아래와 같습니다.
My_Add(a) ………………………… (3)
{
return a+1 …………………………… (4)
}
b=1 …………………………… (1)
b:=My_Add(b) ………………………… (2)
msgbox % b …………………………… (5)
우선 한가지 특성을 알려드리자면, 함수가 선언되면, 그에 해당하는 중괄호의 모든내용은 실제 스크립트에서
함수를 호출하지 않는이상 스크립트내용에 지장을 안줍니다.
그러므로 함수를 어디에 선언해도 무방합니다.
다르게 말하면, 여기서 중괄호는 if나 loop문에서 쓰이는 중괄호와 다소 다른 역할을 합니다. 스크립트내용에 영향을 안주는 영역설정을 하는것입니다.
스크립트내용에 대해 보겠습니다.
(1) b=1로 선언되었죠.
(2) 그리고 My_Add함수를 b를 넣어서 호출합니다. b는 1이므로 1값을 넣은것입니다.
(3) 그러면 이제 함수부분으로 갑니다.
여기가 중요합니다. b=1을 넣었으므로 함수안에선 a=1인 상태가됩니다.
즉 b와 a는 서로 다른곳에 위치한 변수입니다. 전혀 동일한 변수가 아니라는 얘기입니다.
(자세히 얘기하자면, a라는 변수는 함수를 실행할때만 일시적으로 생기는 변수입니다. 지역변수라고도 합니다.)
또 다르게 표현하자면, 스크립트에서 함수안에 a대신 b라고 써도 b=1로 선언한 변수와는 전혀 틀린 지역변수입니다.
다만 이름만 같을수 있을뿐입니다.
(4) return a+1 a에 1을 더한값을 반환한다는 얘기입니다.
(2) 다시 (2)로 돌아왔습니다. b:=My_Add(b)를 보면, My_Add(b)로부터 반환되는값을 b에 저장하겠다는 얘기입니다.
(5) 그러므로 msgbox % b 에서 b는 2가 출력됩니다.
사실 (1),(2),(5)는 좀더 간단히 표현할수 있습니다.
msgbox % My_Add("1")
한마디로 함수 My_Add에 1을 넣어서 반환받은값을 msgbox로 출력한다는 얘기입니다.
그러면 여기서 한가지 팁이 더 생겼죠?
값그자체로 넣을때는 My_Add("1")처럼 ""안에 넣고 변수형태로 넣을때는, My_Add(b)처럼 하면됩니다.
3. 두개이상의 반환값이 필요할때
보시다싶이 return 으론 반환을 하나밖에 못하게 되어있습니다.
return없이 반환을 가능하게 해주는 명령어 두개가 있습니다. global, byref입니다.
a=3
b=3
My_Add()
msgbox % a
msgbox % b

My_Add()
{
global a
a:=a+1
b:=b+1
}
보시다싶이 My_Add엔 아무값도 안넣어서 실행을 했습니다.
그런데 결과값을보면, a=4,b=3이 출력되네요
간단합니다.
함수안에서 global a라은 명령을 실행해주면, 함수안의 a는 일시적으로 사용하는 지역변수가 아닌 스크립트에서 사용되는 a값을 사용할수 있게 해줍니다. 그러므로 함수실행후 a는 4가 되고 b는 3이 되는것입니다.
b에도 영향을 주려면, global b 라고 쓰면 되겠죠 ^^
a=3
b=3
My_Add(a,b)
msgbox % a
msgbox % b

My_Add(Byref a, Byref c)
{
a:=a+1
c:=c+1
}
Byref라고 쓰고 함수에서 변수를 선언해주면, 함수호출시 My_Add(a,b) 대입대는 변수a,b에 간섭을 가능하게 해줍니다.
근데 이상하게 생각되실수 있겠지만, Byref c라고 했음에도 불구하고, 실제 스크립트에서 쓰인 b=3값이 변하여 4가 됩니다.
포인터가 아무래도 적용이 된듯한데, 여기까진 아시면 좋지만, 굳이 알필욘없습니다.
그냥, 간편히 생각하자면, 함수호출시 a,b라고쓰고 함수선언시에는 c,d라고 써도 실제 a,b값에 간섭을 줄수 있다는 것입니다.
------------------------------------------------------------------------------------------------------------------
아마도 여기서부턴 안보셔도 대부분 함수사용시 지장이 없으실듯 합니다.
이 아래 내용은 보실분만 보세요.
4. 함수호출시 값을 안넣어도 함수가 실행되게끔하기
msgbox % My_Add("3")
msgbox % My_Add("3","4")

My_Add(a,b=1)
{
return a+b
}
보시면 함수선언에는 My_Add(a,b=1) a,b 두개가 선언되어있습니다.
하지만 b=1이라고 지정하여, b값을 입력받지 않을시, b는 기본으로 1이 되는것을 의미합니다.
그러므로 msgbox % My_Add("3") 는 4가 나오고, msgbox % My_Add("3","4") 7이 나옵니다.
한가지 주의사항이 있다면, 기본값을 지정할 변수들은 값을 무조건 넣어야 하는 변수보다 뒤쪽에 선언되어야 합니다.
Byref로 선언된 변수는 ""를 사용하는데 굳이 설명하진 않겠습니다. 스크립트만 답니다.
c=2
msgbox % My_Add("3","4")
msgbox % c

My_Add(a,b=1,byref d="")
{
d:=d+1
return a+b
}
5. 함수 호출시만 변하는 static변수
c=10
My_Add(c)
My_Add(c)
My_Add(c)
msgbox % b
My_Add(a)
{
a+=1
static b=0
b+=1
msgbox static b값 : %b%`n지역변수 a값 : %a%
}
static변수란 함수호출시에 함수안에서만 계속 영향을 받는 변수를 말합니다.
함수호출시 처음엔 static b=0 이라고 선언되지만, 그 이후엔 b=0이란 것은 무시되고 static변수로써 취급만 합니다.
그렇다면, 당연히 함수 처음실행시 b값은 1, 다음엔 2, 그다음엔 3으로 출력이 됩니다.
이미 4번까지 읽으셨다면, 자세한 설명이 없어도 이해되시라 생각합니다.
6. 함수의 응용 재귀함수
우선 재귀의 국어사전 뜻을 보면,
재귀

[재ː―][再歸] <명사> 다시 본 곳으로 돌아옴. 재귀-하다 <자동사><여불규칙활용>
함수에서 얘기하자면, 함수내부에서 자신의 함수를 다시 돌아본다. 다시 실행한다 라고 얘기할수 있습니다.
스크립트에서 보겠습니다.
msgbox % My_Add("10") ………………………… (1)
My_Add(a) …………………………………………… (2)
{
if a=1 ………………………………………………… (3)
return "1"
else …………………………………………………… (4)
return a+My_Add(a-1)
}
(1) 우선 함수호출시 10을 넣습니다.
(2) 그럼 함수에서 지역변수 a는 10을 받습니다.
(4) else부분이 실행됩니다. 당연히 a=10이기 때문입니다.
a+My_Add(a-1)
즉 10+ My_Add(9)를 반환한다는 얘기입니다.
근데 My_Add(9)를 실행하면 또 반환을 받을수 있네요.
(2),(4)의 과정을 또 거치면, 10+9+My_Add(8)이 되겠네요.
그래서 a=1 될떄까지 계속 반복하다보면, 10+9+8+7+6+5+4+3+2+My_Add(1) 까지 오는데,
My_Add(1)은 1을 반환하므로 10+9+8+7+6+5+4+3+2+1이 됩니다.
간단히 설명하긴 했으나, Loop와는 다르게 이용할수 있습니다. ^^
* 여기까지 보셨다면, 직접 하나씩 함수를 만들어 보시거나, 사이트에 올라온 함수에 주석을 생각해 보시는건 어떠실까요?
최근에 올라온 MultipleSearch에 대해 보시는건 어떠실까요
제가 MBR님의 멀티플서치를 조금 수정해서 만든글을 보면, 재귀함수에 대해 조금은 보실수 있으실거예요
링크 : http://www.autohotkey.pe.kr/bbs/board.php?bo_table=script&wr_id=483