본문 바로가기
인생이야기

오토핫키 웹파싱관련 소스 분석에 능력자의 답변

by mylife365 2015. 12. 24.

갑자기 프로그램을 키면...


구이창들이 겹쳐서 나오는대 왜이러는지 알수있을까요?


꼭좀 부탁드리겠습니다.


urldownloadtofile,http://www.sportinglife.com/,Intdate.txt

fileread,date,Intdate.txt

pos:= instr(date,"clock")

pos += 13

stringmid, date, date,%pos%, 8

StringReplace, date, date,/,,A

StringRight, yy, date,2

StringLeft, dd, date,2

StringMid, mm, date, 3, 2

Internetdate=%yy%%mm%%dd%

filedelete,Intdate.txt

Iniread,date, test.ini, Section1,1

if Internetdate = %date%

{

msgbox, 이미 1회 실행하셨습니다. 프로그램 종료.

exitapp

filedelete, %internetdate%, test.ini

}

else

{

msgbox, 프로그램을 1회 실행합니다.

IniWrite, %Internetdate%, test.ini, Section1,1

goto, 1

exitapp

}

exitapp

1:

gui,destroy

gui,-caption

Gui, Add, Edit, x42 y10 w150 h20 -e0x200 vPassWord +Password, 비밀번호

Gui, Add, Button, x42 y30 w60 h20 g접속, 접속

Gui, Show, x127 y87 h64 w246,

return

접속:

Guicontrol , Disable, 접속

Gui, submit, nohide

WinActivate

IF PassWord<>xkfhwjdgml95

{

 Soundplay, returns.mp3

 sleep 1

 BlockInput,Mousemove

 sleep 50000000000

 return

}

else

{

goto,2

}

exitapp

2:

#SingleInstance force

#notrayicon

gui,2:

gui,2:destroy

gui,-caption

Gui, Add, Button, x12 y20 w100 h30 g차계부, 차계부

Gui, Add, Button, x12 y70 w100 h30 g비품 , 비품목록

Gui, Add, Button, x12 y120 w100 h30 g배차관리, 배차관리

Gui, Add, Button, x142 y20 w100 h30 , Button

Gui, Add, Button, x142 y70 w100 h30 , Button

Gui, Add, Button, x142 y120 w100 h30 g종료, 종료

; Generated using SmartGUI Creator 4.0

Gui, Show, x500 y320 h180 w272, 짱렌트카 관리 프로그램

Return

종료:

ExitApp

return

차계부:

goto, 3

return

비품:

goto, 4

return

배차관리:

goto, 5

return

3:

#notrayicon

gui,3:

gui,3:destroy

gui,-caption

Gui, Add, GroupBox, x12 y10 w120 h80 +Center, 사고유무

Gui, Add, Radio, x22 y30 w100 h20 v사고o, 사고O

Gui, Add, Radio, x22 y60 w100 h20 v사고x, 사고X

Gui, Add, GroupBox, x12 y95 w120 h90 +Center, 보험

Gui, Add, Radio, x22 y115 w80 h20 v보없, 없음

Gui, Add, Radio, x22 y135 w80 h20 v보일, 일반자차

Gui, Add, Radio, x22 y155 w80 h20 v보완, 완전자차

Gui, Add, GroupBox, x12 y180 w120 h110 +Center, 차량

Gui, Add, Text, x22 y200 w100 h20 +Center, 차종

Gui, Add, DropDownList, x22 y215 w100 v차종, YF소나타|스타렉스|K5|올 뉴모닝|그랜드 카니발|뉴 카니발|아반떼|SM5

Gui, Add, Text, x22 y240 w100 h20 +Center, 차량번호

Gui, Add, Edit, x22 y260 w100 h20 v차량번호

Gui, Add, GroupBox, x142 y10 w170 h180 +Center, 배차및반납

Gui, Add, DateTime, x152 y50 w100 h20 v배차날짜,

Gui, Add, Text, x152 y30 w100 h20 +Center, 배차날짜

Gui, Add, DropDownList, x262 y50 w40 v배차시간, 07|08|09|10|11|12|13|14|15|16|18|19|20|21|22

Gui, Add, Edit, x152 y80 w100 h20 v배차담당

Gui, Add, Edit, x262 y80 w40 h20 v배차연료

Gui, Add, Text, x152 y110 w100 h20 +Center, 반납날짜

Gui, Add, DateTime, x152 y130 w100 h20 v반납날짜,

Gui, Add, DropDownList, x262 y130 w40 v반납시간, 07|08|09|10|11|12|13|14|15|16|18|19|20|21|22

Gui, Add, Edit, x152 y160 w100 h20 v반납담당,

Gui, Add, Edit, x262 y160 w40 h20 v반납연료

Gui, Add, GroupBox, x322 y10 w110 h120 +Center, 고객

Gui, Add, Text, x332 y30 w90 h20 +Center, 고객명

Gui, Add, Edit, x332 y50 w90 h20 v고객명

Gui, Add, Text, x332 y80 w90 h20 +Center, 전화번호

Gui, Add, Edit, x332 y100 w90 h20 v전화번호

Gui, Add, GroupBox, x322 y140 w110 h120 +Center, 정비

Gui, Add, Text, x332 y160 w90 h20 +Center, 정비내역

Gui, Add, Edit, x332 y180 w90 h20 v정비내역

Gui, Add, Text, x332 y210 w90 h20 +Center, 비고

Gui, Add, Edit, x332 y230 w90 h20 v비고

Gui, Add, Button, x142 y200 w80 h40 g차초기화 , 초기화

Gui, Add, Button, x142 y250 w80 h40 g배차관리 , 배차관리

Gui, Add, Button, x232 y200 w80 h40 g차저장 , 저장

Gui, Add, Button, x232 y250 w80 h40 g차불러오기 , 불러오기

; Generated using SmartGUI Creator 4.0

Gui, Show, x464 y390 h300 w450, 차계부

Return

차저장:

gui,submit,nohide

차계부첨부할파일내용=◈◈◈ 차계부 ( 현재시각 : %a_now% ) ◈◈◈`n`n

차계부첨부할파일내용=%차계부첨부할파일내용%사고%a_tab%보험%a_tab%차종%a_tab%%a_tab%차량번호%a_tab%배차날짜%a_tab%시간%a_tab%연료%a_tab%담당%a_tab%반납날짜%a_tab%시간%a_tab%연료%a_tab%담당%a_tab%고객명%a_tab%전화번호%a_tab%정비내역%a_tab%비고`n

차계부첨부할파일내용=%차계부첨부할파일내용%%사고o%%사고x%%a_tab%%보없%%보일%%보완%%a_tab%%차종%%a_tab%%차량번호%%a_tab%%a_tab%%배차날짜%%a_tab%%배차시간%%a_tab%%배차연료%%a_tab%%배차담당%%a_tab%%반납날짜%%a_tab%%반납시간%%a_tab%%반납연료%%a_tab%%반납담당%%a_tab%%고객명%%a_tab%%전화번호%%a_tab%%정비내역%%a_tab%%비고%`n`n

fileappend,%차계부첨부할파일내용%, 관리파일\차계부.txt

fileappend,%차계부첨부할파일내용%, C:\Program Files\차계부.txt

fileappend,%차계부첨부할파일내용%, C:\Program Files\차계부1.txt

run,차계부.txt

return

차불러오기:

gui,submit,nohide

run, c:\program files\차계부.txt

return

차초기화:

goto,3

return

4:

return

5:

#notrayicon

gui,4:

gui,4:destroy

gui,-caption

Gui, Add, GroupBox, x12 y10 w110 h170 +Center, 차량

Gui, Add, Text, x22 y30 w90 h20 +Center, 보험

Gui, Add, DropDownList, x22 y50 w90 v배차보험, 없음|일반자차|완전자차

Gui, Add, DropDownList, x22 y100 w90  v배차차종, YF소나타|스타렉스|K5|올 뉴모닝|그랜드 카니발|뉴 카니발|아반떼|SM5

Gui, Add, Text, x22 y130 w90 h20 +Center, 차량번호

Gui, Add, Edit, x22 y150 w90 h20 v배차차량번호,

Gui, Add, GroupBox, x132 y10 w170 h150 +Center, 배차 및 반납

Gui, Add, Text, x142 y30 w100 h20 +Center, 배차날짜

Gui, Add, DateTime, x142 y50 w100 h20 v배차배차날짜,

Gui, Add, DropDownList, x252 y50 w40 v배차배차시간, 07|08|09|10|11|12|13|14|15|16|18|19|20|21|22

Gui, Add, Edit, x142 y80 w100 h20 v배차배차담당,

Gui, Add, Edit, x252 y80 w40 h20 v배차배차연료,

Gui, Add, Text, x142 y110 w100 h20 +Center, 반납날짜

Gui, Add, DateTime, x142 y130 w100 h20 v배차반납날짜,

Gui, Add, DropDownList, x252 y130 w40 v배차반납시간, 07|08|09|10|11|12|13|14|15|16|18|19|20|21|22

Gui, Add, GroupBox, x312 y10 w110 h170 +Center, 비고

Gui, Add, Text, x322 y30 w90 h20 +Center, 고객명

Gui, Add, Edit, x322 y50 w90 h20 v배차고객명

Gui, Add, Text, x322 y80 w90 h20 +Center, 전화번호

Gui, Add, Edit, x322 y100 w90 h20 v배차전화번호

Gui, Add, Text, x322 y130 w90 h20 +Center, 비고

Gui, Add, Edit, x322 y150 w90 h20 v배차비고

Gui, Add, Button, x22 y190 w80 h30 g차계부가기, 차계부

Gui, Add, Button, x122 y190 w80 h30 g배차초기화, 초기화

Gui, Add, Button, x232 y190 w80 h30 g배차저장, 저장

Gui, Add, Button, x332 y190 w80 h30 g배차불러오기, 불러오기

Gui, Add, Text, x22 y80 w90 h20 +Center, 차종

; Generated using SmartGUI Creator 4.0

Gui, Show, x227 y336 h240 w435, 배차관리

Return

차계부가기:

goto, 3

return

배차초기화:

goto, 5

return

배차저장:

gui,submit,nohide

배차첨부할파일내용=◈◈◈ 배차관리 ( 현재시각 : %a_now% ) ◈◈◈`n`n

배차첨부할파일내용=%배차첨부할파일내용%보험%a_tab%%a_tab%차종%a_tab%차량번호%a_tab%배차날짜%a_tab%시간%a_tab%담당%a_tab%연료%a_tab%반납날짜%a_tab%시간%a_tab%고객명%a_tab%전화번호%a_tab%비고`n

배차첨부할파일내용=%배차첨부할파일내용%%배차보험%%a_tab%%배차차종%%a_tab%%배차차량번호%%a_tab%%배차배차날짜%%a_tab%%배차배차시간%%a_tab%%배차배차담당%%a_tab%%배차배차연료%%a_tab%%배차반납날짜%%a_tab%%배차반납시간%%a_tab%%배차고객명%%a_tab%%배차전화번호%%a_tab%%비고%`n

fileappend,%배차첨부할파일내용%, 관리파일\배차관리.txt

fileappend,%배차첨부할파일내용%, C:\Program Files\배차관리.txt

fileappend,%배차첨부할파일내용%, C:\Program Files\배차관리1.txt

Run, 관리파일\배차관리.txt

return

배차불러오기:

run, c:\program files\배차관리.txt

return

guiclose:

ExitApp

return

2guiclose:

ExitApp

return

3guiclose:

goto, 2

return

4guiclose:

goto, 2

return

!F12::

ExitApp

return


Gui가 중복으로 출력되는 문제를 해결한 소스 파일을 첨부해뒀습니다. (답변 최하단)

"형식그대로.ahk"는 질문자님이 써주신 원본소스를 그대로 작동만 되도록 수정해놓은것이고,

"정리.ahk"는 제 나름대로 올바르다고 생각하는 문법대로 수정해놓은 거에요.

(소스를 답변에 그대로 쓰기에는 지면이 너무 길어질거 같아서요)


일단 질문자님은 Gui에 대해서 아직 제대로 이해가 되지 않으신 상태인것 같습니다.

소스를 보고 문제점을 몇 가지 찾았는데요. 


Gui에 관련된 문제만 보시려면 1번만 보시고 나머지 답변은 안보셔도 됩니다.



1. Goto문을 이용한 Gui생성

Gui의 생성(Gui, Add)과 소멸(Gui: Destroy)은 너무 잦은 경우 하드웨어에 따라서 

부하가 심하게 올수도 있어요. 제가 "정리.ahk"에 작성한대로 한번만 Add 시켜놓고

출력(Gui, Show)과 숨김(Gui, Hide)으로 가져다 쓰기만 하는 형식을 추천해드리고 싶어요.


기존 원본 소스에서 겹쳐 보이는 문제는 Destroy가 제대로 되지 않아서 생긴 문제였어요.


Gui 지정자에 대한 도움말을 참고해보세요.

제가 수정해놓은 소스에 보면 Gui, 2:Add 이런걸 보실 수 있으실텐데, 

Gui, 2:Add, Text ....

이런식으로 번호를 붙여서 Gui를 지정할 수 있어요.

Gui를 제대로 묶어서 지정해줘야 Destoy나 Show, Hide 같은 Gui 키워드들이 제대로 실행되요.



2. 변수명과 라벨명

원본소스의 모든 변수와 라벨이 한글 혹은 의미없는 숫자로 되어있던데요.

만약 프로그램의 규모가 조금만 더 커지면 관리하는데 매우 어려울 수 있어요.

의미를 확실히 알수 있는 영단어로 하시는게 좋을듯 싶어요.


(한글변수나 한글라벨은 기본적으로 작동에 문제를 일으키지 않다면 취향의 문제일수 있어요)



2. 실행옵션의 소스 위치

원본 소스에 보니까 #SingleInstance, #Notrayicon 명령어를 넣어두셨던데,

#이 붙는 키워드들은 소스 최상단에 한번만 출력해주시는게 좋아요.



3. BlockInput

윤리적인 문제이긴 한데, 프로그램을 실행하는 컴퓨터 하드웨어는 실행한 사람의 소유입니다.

소스를 만든 사람이 프로그램의 제어권에 대한 권리는 있다고 할 지라도 하드웨어의 

제어여부를 관여해서는 안될거 같아요. 정말 필요에 따라 써야할 부분이 생길지도 모르지만

패스워드를 틀렸다고 마우스 움직임을 막는 형태는 윤리적으로 많이 어긋납니다.


차라리 프로그램을 종료 시키는 정도로 해두시는게 좋을 것 같아요.



4. 시간에 따른 인증

sportinglife.com 사이트에서 페이지를 읽어와서 시간에 대한 부분을 파싱해서 사용하고

계신데요. 이 사이트가 폐쇄되거나 소스코드를 조금만 수정해도 작동하지 않는 소스가

될 수 있습니다. 제대로된 시간을 얻는 공식적인 API를 사용하시는게 좋을듯 싶어요.



더 궁금하신점이 있으면 1:1 질문이나 메일, 의견남기기로 알려주세요 ^^

메일주소는 hyogo@naver.com 입니다.

반응형