naver / guitar

75 stars 18 forks source link

어플리케이션 윈도우 Style 얻어오기 #439

Open taiky opened 5 years ago

taiky commented 5 years ago

안녕하세요. GUITAR를 유용하게 사용하고 있습니다.

어플리케이션 윈도우의 Style과 ExStyle을 얻어오기 위해 링크를 참고하여 AutoIt 스크립트를 이용하여 아래와 같이 작성하였습니다.

; 기존에 열려진 notepad를 모두 종료
"$실행결과=processclose('notepad.exe')" 계산한다.

"$실행결과=ShellExecute('notepad.exe')" 계산한다.
notepad 프로세스선택한다. 

"$hwnd=WinGetHandle ('제목 없음 - 메모장')" 계산한다.
"$aStyle = DllCall('user32.dll', 'long', 'GetWindowLong', 'hwnd', $hwnd, 'int', -16)" 계산한다.
"$aExStyle = DllCall('user32.dll', 'long', 'GetWindowLong', 'hwnd', $hwnd, 'int', -20)" 계산한다.
"MsgBox(0, '', 'Style='&Hex($aStyle[0])&@cr&'ExStyle='&Hex($aExStyle[0]))" 계산한다.

그런데, 실행하면 다음과 같은 에러가 나면서 실패합니다.

"$aStyle = DllCall('user32.dll', 'long', 'GetWindowLong', 'hwnd', $hwnd, 'int', -16)" 계산한다.변수 정보 설정이 잘못 되었거나 값이 설정되지 않았습니다. : $hwnd, (최근 사용 이미지 좌표 : 190,375)명령수행 : DllCall('user32.dll', 'long', 'GetWindowLong', 'hwnd', (수행결과 : 실행실패 Code : 1)

AutoIt 스크립트 사용에 제한이 있는 것인가요?

ssmmhh commented 5 years ago

GUITAR는 autoit으로 제작된 프로그램입니다만, autoit 스크립트를 실행하는 프로그램은 아닙니다.

자체적으로 스크립트구조를 갖고 있으며, "실행"명령을 통해 autoit의 내장 명령을 수행할수 있습니다. 이것은 단일 명령줄로써, 사용하신 형태와 같이 스크립트 전체를 실행하는 형태는 맞지가 않습니다.

단순 명령줄이 아닌 스크립트 형태로 autoit 스크립트를 사용하고자 하신다면 예제스크립트의 "37_AU3실행" 부분을 참고하여 사용하시기 바랍니다.

여럽긴 하지만 아래와 같이 스크립트를 1줄 형태로 사용하시면 가능하긴 합니다만 가독성이 떨어집니다.

"$실행결과=ShellExecute('notepad.exe')" 계산한다.

notepad 프로세스선택한다. 

"$실행=MsgBox(0, '', 'Style='&Hex(DllCall('user32.dll', 'long', 'GetWindowLong', 'hwnd', WinGetHandle ('제목 없음 - 메모장'), 'int', -16)[0])&@cr&'ExStyle='&Hex(DllCall('user32.dll', 'long', 'GetWindowLong', 'hwnd', WinGetHandle ('제목 없음 - 메모장'), 'int', -20)[0]))" 계산한다.
taiky commented 5 years ago

답변 감사합니다. 많은 도움이 되었습니다.