;~ ==================================
;~ 1.ERWIN 파일 실행 되어 있어야 함
;~ 2.TOAD 를사용함
;~ 3.erwin script를 호출해야함(위치: 바탕화면)
;~ ==================================
;WinTitleMatchMode = Alters the method that is used to match window titles during search operations.
opt("WinTitleMatchMode",2);1=start,2=subStr,3,exact,4=advanced,=1 to =4 = Nocase
opt("GUIOnEventMode",1);
#include <Array.au3>
Global Const $VK_CAPITAL = 0x14
hotkeyset("{ESC}","_exit")
If _Key_Is_On($VK_CAPITAL) Then
MsgBox( 0, "", "캡스락 키가 켜져 있읍니다. 꺼주세요.",5)
;CAPS LOCK 끄기
Send("{CapsLock off}")
Exit
EndIf
global $cb;
;~ 0. ini 설정
;~ ===============================================================================================
;~ 1.ERWIN에 Pre & Post 스크립트를 세팅 합니다.
;~ ===============================================================================================
Erwin_Script_Setup()
;~ ===============================================================================================
;~ 2.엑셀에서 작업 대상 로딩
;~ ===============================================================================================
$str = Get_Excel_Data("통합") ; 인자는 윈도우 타이틀
$Array_Target = FileReadToArray(@ScriptDir&"\temp_file.lst")
;~ 3.자동화 반복 처리
$proc_count = Do_Loop_Work($Array_Target)
MsgBox(0,"",$proc_count-1 &"건 자동화 처리 완료 ",3)
;~ 2. 자동화 반복 작업 ===========================================================================
;클립보드에 값이 없을때까지 반복
;~ $i = 2
Func Do_Loop_Work($Array_Target)
For $i = 1 To $Array_Target[1] Step +1
;~ if StringLen(StringStripWS($Array_Target[$i+1],4)) <= 3 Then
;~ MsgBox(0,"",$i+1 &"건 종료 = "&$Array_Target[$i+1])
;~ $i = $i+1
;~ _exit()
;~ EndIf
;~ MsgBox(0,$i,$Array_Target[$i])
WinActivate("AllFusion","")
Send("{CTRLDOWN}{DOWN}{CTRLUP}")
Send("{CTRLDOWN}g{CTRLUP}")
;테이블 찾기
WinWaitActive ( "Go To Table","",3)
;~ Send("{CTRLDOWN}v{CTRLUP}{HOME}{END}")
Send($Array_Target[$i+1],1)
Send("{ALTDOWN}o{ALTUP}")
;ERWIN POSTSCRIPT 처리
Send("{ALTDOWN}b{ALTUP}")
Sleep(100)
Send("{p}")
Sleep(100)
Send("{t}")
WinWaitActive("Oracle Script Template")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{LEFT 5}")
Sleep(100)
Send("{RIGHT 1}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{CTRLDOWN}a{CTRLUP}")
Send("{CTRLDOWN}c{CTRLUP}")
Sleep(200)
Send("{ALTDOWN}{F4}{ALTUP}")
WinActivate("Toad","")
MouseClick("left",534,592,0)
if($i = 1 ) Then
WinWait("[CLASS:TfrmMain]")
ControlFocus ( "[CLASS:TfrmMain]", "", "TtdDScintilla1" )
Send("{CTRLDOWN}a{CTRLUP}")
Send("{DEL}")
EndIf
Send("{ENTER}")
Send("{CTRLDOWN}{END}{CTRLUP}")
Send("{ENTER}")
Send("{CTRLDOWN}v{CTRLUP}")
Next
return $i
EndFunc
Func _exit()
exit
endfunc
;~ Global Const $VK_CAPITAL = 0x14
;~ If _Key_Is_On($VK_CAPITAL) Then Send("{CAPSLOCK Toggle}")
;~ If _Key_Is_On($VK_CAPITAL) Then
;~ MsgBox( 0, "", "")
;~ EndIf
;캡스락키 확인
Func _Key_Is_On($nVK_KEY, $vDLL = 'User32.dll')
Local $a_Ret = DllCall($vDLL, "short", "GetKeyState", "int", $nVK_KEY)
Return Not @error And BitAND($a_Ret[0], 0xFF) = 1
EndFunc
Func FileReadBuffer($file_name)
Local $output_txt = ''
Local $file = FileOpen($file_name, 0)
; Check if file opened for reading OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
; Read in lines of text until the EOF is reached
While 1
Local $line = FileReadLine($file)
$line = $line & @CRLF
$output_txt = $output_txt & $line;
If @error = -1 Then ExitLoop
;~ MsgBox(0, "Line read:", $line)
WEnd
FileClose($file)
;~ 클립보드에 복사한다.
ClipPut($output_txt)
EndFunc
Func FileReadToArray($file_name)
Local $arry_return[1]=[""]
Local $file = FileOpen($file_name, 0)
; Check if file opened for reading OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
; Read in lines of text until the EOF is reached
$i = 0;
While 1
Local $line = FileReadLine($file)
If @error = -1 OR $line ="" Then ExitLoop
;~ MsgBox(0, "Line read:", $line)
;~ _ArrayInsert($arry_return,$i, $line)
_ArrayAdd($arry_return,$line)
$i = $i+1
;~ _ArrayAdd($arry_return,$line)
WEnd
_ArrayInsert($arry_return,1, $i)
FileClose($file)
Return $arry_return
EndFunc
Func Erwin_Script_Setup()
;ERWIN 스크립트 불러오기
;~ $erwin_script = FileReadBuffer(@ScriptDir&"\erwin_post_script_for_web.sql");
$erwin_script = FileReadBuffer(@ScriptDir&"\erwin_post_script.sql");
MsgBox(0,"ERWIN - POST 스크립트 적용 ", 'ERWIN에 POST SCRIPT 적용을 시작 합니다. ',2)
WinActivate("AllFusion","")
Send("{CTRLDOWN}{DOWN}{CTRLUP}")
Send("{ALTDOWN}b{ALTUP}")
Sleep(100)
Send("{p}")
Sleep(100)
Send("{t}")
WinWaitActive("Oracle Script Template")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{LEFT 5}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{CTRLDOWN}a{CTRLUP}")
Send("{CTRLDOWN}v{CTRLUP}")
Sleep(100)
Send("{TAB}")
Sleep(100)
Send("{TAB}")
Send("{ENTER}")
;~ ClipPut(''); 클립보드 비우기
EndFunc
;엑셀에서 처리대상 테이블을 가져온다.
Func Get_Excel_Data($title)
Local $arry_return[1] = [""]
Local $file = FileOpen(@ScriptDir&"\temp_file.lst", 2)
WinActivate($title,"")
If WinWaitActive($title,"",3) Then
;~ 클립보드 초기화
ClipPut('')
Send("{CTRLDOWN}g{CTRLUP}")
WinWaitActive("이동","",1)
Send("a1{ENTER}")
Sleep(100)
Send("{CTRLDOWN}{SHIFTDOWN}{DOWN}{SHIFTUP}{CTRLUP}")
Sleep(200)
Send("{CTRLDOWN}c{CTRLUP}")
Sleep(200)
$cb = ClipGet()
Sleep(100)
; Check if file opened for writing OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
;~ FileWrite($file, StringStripWS($cb,8))
FileWrite($file, StringReplace($cb," ",""))
FileClose($file)
If StringLen($cb) <= 2 Then
MsgBox(0,"","대상 복사 실패",3)
exit
endif
Else
MsgBox(0,"Error",$title & "-엑셀 인식 실패 ",3)
exit
EndIf
Return True
EndFunc