반응형

https://peuming.tistory.com/59

 

오토핫키로 비활성 키 매크로 만들기 - 준비 및 서론

서론비활성 키 매크를 여러분들과 같이 만들어볼까 합니다. 활성화 매크로를 처음부터 접하고, 그 다음으로 비활성화 매크로를 만드려고 했으나, 바로 접하게 되면 어느정도 이해하고 만들 수

peuming.tistory.com

 

https://peuming.tistory.com/60

 

오토핫키로 비활성 키 매크로 만들기1 - 비활성화를 위한 프로세스 정의

서론 오토핫키를 사용하여 비활성화 키보드 및 마우스 매크로를 만들기 위해서는 프로세스의 윈도우를 핸들링 해주어야합니다. 여기서 말하는 핸들링이란 무엇일까요? 정확히는, 윈도우 프로

peuming.tistory.com

 

 

 

서론

 

오토핫키 스크립트 파일만 가지고 제작을한다면, 사용자입장에서 많은 불편함이 있을 것입니다.

인터페이스 하나로 다음 행동으로 유도할 수 있는 시각적 자료를 제공함으로써 사용자는 더 많이 편리함을 느끼고 사용하는데 문제 없이 사용 가능할 것입니다.  

 

유저 인터페이스 ( User interfase )를 조금더 쉽게 설명하자면,

컴퓨터의 정보( 데이터 ) 와 사용자의 연결 매게체라고 생각하시면 됩니다. 

 

흔히, 모바일에서는 어플리케이션 화면, 컴퓨터 응용프로그램에서는 화면에 보여지는 창을 생각하면 되실텐데, 아래와 같은 창 모두 (graphical user interface, GUI) 라고 생각 하시면 됩니다

 

 

 

이와 같이, 사용자가 보는 화면의 창을 생각하시면 됩니다

저희는 이러한 GUI 를 제작할 예정입니다. 

 

오토핫키는 명백히 위 예시 이미지 처럼 디자인을 쉽고 빠르게 할 수 있는 스크립트 툴이 아닙니다. 

하지만, GUI도 프로그램에 중요한 부분으로써, 이를 간편하게 해결하기위해 skin 라이브러리가 존재하며, 

사용자가 개별로 img 혹은, gdip , brush를 통해 디자인을 할 수 있습니다.

 

 

 

 

왜 GUI를 만들어야하는가?

 

  • 사용자 편의성: GUI는 사용자에게 직관적인 인터페이스를 제공하여 프로그램을 쉽게 사용할 수 있게 합니다. 복잡한 명령어를 기억할 필요 없이 버튼, 체크박스, 드롭다운 등 다양한 기능을 제공하며 불편함 없이 편하게 작업할 수 있습니다.
  • 자동화의 범위 : AutoHotkey를 사용하여 GUI를 만들면, 자동화할 작업의 범위가 넓어집니다. 예를 들어 오늘은 사과를 작업하고 싶고, 내일은 수박을 작업하고 싶을때, 직접 스크립트를 수정하지 않고, 간편하게 사용할 수있도록 합니다.

  • 데이터 입력 및 출력: GUI를 사용하면 데이터 입력과 출력을 더 효율적으로 처리할 수 있습니다. 사용자가 입력해야 하는 데이터나 결과를 보기 좋게 표시할 수 있습니다.

 

 

 

 

어떻게 제작하는가?

 

https://peuming.tistory.com/4

 

오토핫키 강좌 - Smart Gui (스마트 구이) 다운로드

오토핫키 GUI 디자인 및 사용자편의를 위한 디스플레이 제작은 SmartGui를 사용하시면 됩니다. Duplicate Control : 컨트롤 복사 Move Control : 컨트롤 이동 Set Position : 컨트롤 위치,크기값 변경 Delete Control :

peuming.tistory.com

 

Smart Gui 프로그램을 이용할 예정 입니다.

제 블로그 주소이며, 없으신 분들은 포터블로 다운로드 가능하니, 설치해주시기 바랍니다.

 

실행파일

 

실행파일을 시작하면 처음보는 화면이 나올 것입니다. 

당황하실 필요 없습니다. 

 

이미지 이름 설명
Button 동작을 트리거하기 위해 누를 수 있는 푸시 버튼
CheckBox 켜짐/꺼짐, 예/아니요 등을 나타내기 위해 체크하거나 체크 해제할 수 있는 작은 상자
Radio 라디오 버튼은 체크(켜기) 또는 체크 해제(끄기)할 수 있는 작은 빈 원입니다.
Edit 사용자가 자유형 텍스트를 입력할 수 있는 영역입니다.
Text 사용자가 편집할 수 없는 테두리 없는 텍스트가 포함된 영역
GroupBox 사용자가 편집할 수 없는 테두리 없는 텍스트가 포함된 영역
Picture 이미지가 포함된 영역입니다. gif는 ActiveX 를통해 로드
DropDownList 작은 버튼을 누르면 표시되는 선택 목록
ComboBox DropDownList와 동일하지만 목록에서 항목을 선택하는 대신 
자유형 텍스트를 입력하는 것도 허용
ListBox 선택할 수 있는 선택 사항 목록을 포함하는 비교적 높은 상자
Listview  행과 열의 표 형식 보기를 표시하며,
가장 일반적인 예는 Explorer의 파일 및 폴더 목록 입니다 
DataTime 단일 줄 편집 컨트롤처럼 보이지만 대신 날짜 및/또는 시간을 허용하는 상자
MonthCal 한 달의 모든 날짜를 달력 형식으로 표시하는 키가 크고 넓은 컨트롤
Progress 일반적으로 작업 완료를 향해 얼마나 진행되었는지를 나타내는 데 
사용되는 2색 막대입니다.
Slider 사용자가 수직 또는 수평 트랙을 따라 움직일 수 있는 슬라이딩 바. 작업 표시줄 트레이의 표준 볼륨 컨트롤은 슬라이더
Hotkey 단일 줄 편집 컨트롤처럼 보이지만 대신 사용자가 누른 키보드 조합을 허용하는 상자
Tab 여러 페이지를 포함하는 큰 컨트롤로, 
각 페이지에는 다른 컨트롤을 넣어 관리할 수 있습니다.
UpDown 사용자가 값을 늘리거나 줄이기 위해 클릭할 수 있는 화살표 버튼 한 쌍
ChangFont 스마트 구이를 통해 만들어진 GUI에 사용되는 폰트를 설정할 수 있습니다.

 

 

 

 

 

 

 

GUI 콘트롤 객체를 만드는 방법

 

드래그 엔 드롭 입니다. 

 

 

이름을 변경 하실라면 객체 오른쪽클릭 -> 체인지 라벨 -> 선택해서 변경해주시면 됩니다

( 변경을 굳이 안하시고, 완성후 스크립트에서 수정가능합니다 )

 

 

 

 

간단하게 GUI 를 만들어봅시다. 

빨간색은, 매크로를 저장하고 불러올 수 있는칸

주황색은, 비활성 값을 보낼 프로세스 선택창, 

 

 

현재 GUI는 이미지는 아직없습니다. 

이미지쪽을 다룰때 넣겠습니다

 

#SingleInstance,Force

title:= "매크로 만들기"
Gui, Add, DropDownList, x12 y9 w160 h20 , DropDownList
Gui, Add, Button, x182 yp w50 h20 , +

Gui, Add, ListView, x12 y69 w220 h260 +grid,no| 내용 | 조작
LV_ModifyCol(1,40) LV_ModifyCol(2,85) LV_ModifyCol(3,80)
LV_SetImageList( DllCall( "ImageList_Create", Int,7, Int,30, Int,0x18, Int,1, Int,1 ), 1 )

Gui, Add, DropDownList, x12 y39 w220 h100, DropDownList

Gui, Add, Button, x12 y339 w70 h20 +Disabled,이름
Gui, Add, Edit, x92 yp w140 h20 ,

Gui, Add, Button, x12 y369 w220 h20 ,저장하기

Gui, Add, Button, x242 y9 w90 h20 +Disabled, 키보드
Gui, Add, DropDownList, x342 y9 w110 h20 , DropDownList
Gui, Add, Button, x462 y9 w30 h20 , +
Gui, Add, Button, x242 y39 w90 h20 +Disabled, 텍스트
Gui, Add, Edit, x342 y39 w110 h20 ,
Gui, Add, Button, x462 y39 w30 h20 , +
Gui, Add, Button, x242 y69 w90 h20 +Disabled, 마우스 [F1]
Gui, Add, Edit, x342 y69 w50 h20 ,
Gui, Add, Edit, x402 y69 w50 h20 ,
Gui, Add, Button, x462 y69 w30 h20 , +

Gui, Add, Button, x242 y369 w250 h20 ,시작하기

Gui, Show, x821 y389 h409 w503,% title
Return

GuiClose:
ExitApp

   

 

 

마치며

 

 

이번 강의는, GUI 인터페이스를 왜 만들어야하고, 어떻게 만드는지에 대해 알아보았습니다

천천히 따라와주세요

 

 

반응형
반응형

 

더망고 솔루션이 최근

AI 상품명 무료 번역 기능이 추가되었습니다.

 

 

대량으로 수집하는 상품의 특성상,

상품명을 하나씩 수정 버튼을 누르고 상품명 번역을 눌러 번역해야하는 

번거로움이 있습니다. 

 

 

아이디만 입력하고

카테고리 필터 및 수집처 항목을 불러와서 체크 후

시작하기만 눌러주시면, 해당 모든 상품들이 

AI 자동번역을 진행해 줍니다. 

 

 

해당 프로그램은, 마우스 매크로와 같이 마우스클릭하는 것이 아닙니다.

웹페이지를 띄우고 하는 것도 아니며, 

 

사용자가 시작하기 버튼만클릭하고 다른 업무를 보시면 됩니다  

 

 

아직도 마우스 매크로를 사용하여 잘 되지않는, 매크로를 사용하고 계신가요?

편하게 작업하실 분들은 하단 오픈채팅으로 연락주세요~

 

https://open.kakao.com/o/sFmocaHg

 

언어공작소2

#더망고 프로그램#더망고강의#더망고자동화프로그램 . -> 자동화 프로그램의 모든것

open.kakao.com

 

 

 

 

 

반응형
반응형

 

 

Clipboard 

Clipboard(클립보드)는 컴퓨터와 모바일 기기에서 데이터를 일시적으로 저장하고, 복사하거나 붙여넣기

작업을 할 때 사용하는 메모리 영역입니다. 보통 클립보드는 다음과 같은 기능을 제공합니다:

 

  • 복사: ( Ctrl + c ) 사용자가 선택한 데이터를 클립보드에 복사하여, 다른 위치에서 사용할 수 있도록 저장합니다.
  • 잘라내기: ( Ctrl + x ) 선택한 데이터를 클립보드에 복사하고, 원본 위치에서는 삭제합니다.
  • 붙여넣기: ( Ctrl + v )클립보드에 저장된 데이터를 현재 작업 중인 위치에 삽입합니다.

 

 

 

 

 

[  안녕하세요  ] 라는 글자를 드래그하여, 복사를 할 경우, 해당 문자 데이터는 어디에 저장될까요?

바로 Clipboard에 저장됩니다. 이는, 이미지 형식, 문자 데이터 형식, 파일 형식 등 다양한 데이터를 임시로 저장할 수 있는 공간을 의미합니다. 

 

 

오토핫키에서는 이 클립보드 명령어는 아래와 같습니다.

Clipboard

 

 

클립보드 ( Clipboard ) 에 데이터를 담기 

;1. 문자 데이터를 바로 넣는 법
Clipboard = 안녕하세요

;2. 문자 데이터를 바로 넣는 법
Clipboard := "안녕하세요"

 

 

클립보드 ( Clipboard ) 에 변수 데이터를 넣기

;1. 변수 데이터를 clipboard에 넣는법

Ver := "안녕하세요"
Clipboard := ver

;1. 변수 데이터를 clipboard에 넣는법
Ver = 안녕하세요
Clipboard = %ver%

 

 

클립보드 ( Clipboard ) 에 문자 데이터를 한 줄씩 읽어오기

data =
(
안녕하세요
반갑습니다
안녕히가세요
)

Clipboard:= data
Loop,Parse,Clipboard,`n
{
	msgbox,% A_LoopField
}

 

여기서 이쁜 코드를 짜기위해서는,

data =
(
안녕하세요
반갑습니다
안녕히가세요
)

Clipboard:= data
Loop,Parse,Clipboard,`n
	msgbox,% A_LoopField

 

괄호를 제거해주셔두됩니다.

 

 

클립보드 ( Clipboard ) 에 문자 데이터의 단어를 다른 단어로 치환하는 방법

Clipboard =
(
안녕하세요
반갑습니다
안녕히가세요
)

CB_data:= RegExReplace(Clipboard,"안녕하세요","안녕")
msgbox,% CB_data

 

 

클립보드 ( Clipboard ) 에 저장된 문자 데이터에 또 다른 문자 데이터를 추가하는법

;1. 클립보드에 문자열을 추가하는법
Clipboard = "안녕하세요"
final_data:= Clipboard . "`n" . "반갑습니다"

;2. 클립보드에 변수에 담긴 문자열을 추가하는법
Clipboard = "안녕하세요"
null_data:= "반갑습니다"
final_data:= Clipboard . "`n" . null_data

 

 

 

ClipboardAll

클립보드에 있는 모든 데이터를 가져오거나 설정할 때 사용하는 특수 변수입니다. ClipboardAll은 클립보드의 텍스트, 이미지, 파일 등 모든 형태의 데이터를 처리할 수 있게 해줍니다. 이 기능은 특히 클립보드의 내용을 복사하고, 수정하고, 다시 붙여넣을 때 유용합니다.

 

클립보드의 내용을 복사하고, 특정 작업을 한 뒤에 다시 붙여넣는 작업 예제입니다.

; 클립보드의 모든 데이터를 가져와서 변수를 설정
ClipboardData := ClipboardAll

 

부터 시작하여

ClipboardData := ClipboardAll 
FileAppend, %ClipboardData%, C:\path\to\yourfile.txt
ClipboardAll := ClipboardData
return

 

 

주의사항

 

  • ClipboardAll을 사용할 때는 클립보드에 있는 데이터의 형식과 크기에 주의해야 합니다.
    클립보드의 데이터 형식이 적절히 처리되지 않으면 예상치 못한 결과가 발생할 수 있습니다.
  • 클립보드에 너무 큰 데이터가 저장되어 있으면 성능 문제를 일으킬 수 있습니다.

 

반응형
반응형

서론

 

오토핫키를 사용하여 비활성화 키보드 및 마우스 매크로를 만들기 위해서는 프로세스의 윈도우를 핸들링 해주어야합니다. 여기서 말하는 핸들링이란 무엇일까요?

 

정확히는, 윈도우 프로세스 핸들링(Window Process Handling)은 소프트웨어 개발에서 윈도우 운영 체제의 프로세스와  관련된 다양한 작업을 관리하고 제어하는 것을 의미합니다

 

 

오토핫키를 설치하면 설치파일에 같이 동봉되는 Window Spy로 확인가능합니다. 

(window Spy는 오토핫키 설치파일 폴더안에 있습니다 C드라이브 -> 프로그램파일 -> autohotkey )

각 윈도우 창마다 Title , PID 등 고유 식별코드가 있습니다. 

 

오토핫키 에서도 이를 이용한 윈도우 창의 이벤트를 확인 및 조작을 할 수 있는데 

아래와 같습니다. 

 

  • WinExist: 특정 윈도우가 존재하는지 확인합니다.
  • WinActivate: 특정 윈도우를 활성화합니다.
  • WinClose: 특정 윈도우를 종료합니다.
  • WinGet: 윈도우 정보를 가져옵니다 (예: 핸들, 제목, 프로세스 ID).
  • Process /... 명령: 프로세스를 시작하거나 종료합니다.

 

이러한 식별코드를 통해, 정확한 이벤트를 전달하기위해 윈도우 타이틀 / PID 를 사용합니다.

현재 이 강좌에서 다루려고 하는 비활성 매크로는, 

 

스크립트 코드안에 특정 창의 윈도우 프로세스를 지정하여 비활성 매크로를 만드는 것이 아닌,

유동적으로 프로세스를 선택하여 다중 프로세스를 컨트롤 할 수 있는 비활성 매크로를 만들기 위해

현재 실행중인 윈도우 프로세스 정보를 취득하는 과정을 배워보려고합니다. 

 

 

 

앞서, 미리 말씀드리는 부분...

※ 특정 윈도우 창에서는 Window Spy 의 Focused 란의 ClassNN 값을 이용해야지만 작동되는 창이 있을 수 있고,
일반적인 비활성 매크로가 작동하지 않는 ( 소프트웨어식 입력을 제한한 특정 윈도우 프로그램 ) 창이 있을 수 있으니 참고 부탁드립니다. 

 

 

 

현재 활성된 창의 프로세스를 가져오기 위해 사용될 명령어

 

 

WinGet, OutputVar , SubCommand, WinTitle, WinText, ExcludeTitle, ExcludeText
WingetTitle, title, ahk_id %vartemp%

 

Winget : 윈도우의 다양한 속성과 정보를 가져오는 데 사용됩니다.

이 명령어를 사용하여 윈도우의 상태나 속성에 대한 정보를 수집할 수 있습니다.

 

WingetTitle : 특정 윈도우의 제목을 가져오는 데 사용됩니다.

 

 

 

 

 

 

소스코드 및 설명

 

#notrayicon  
#SingleInstance off  

winget,var,list
list_a := ""  
Loop,%var% {
    vartemp := var%A_Index%
    WingetTitle, title, ahk_id %vartemp%
    if (title != ""){
        count++                      
        id%count% := vartemp           
        list_a .= title "`n"
    }
}

msgbox,% list

 

 

 

한 줄씩 설명하자면,

 

#notrayicon   

  • 트레이드 아이콘을 표시하지 않습니다.

#SingleInstance off  

  • 이 프로그램을 여러개 킬 수 있습니다.

winget,var,list 

  • var: 결과를 저장할 변수입니다. var에 현재 열려 있는 모든 윈도우의 핸들이 저장됩니다.
  • List: Winget의 서브커맨드 중 하나로, 모든 열린 윈도우의 핸들을 리스트 형태로 가져옵니다.

 

list_a

  • 서브루틴시, list_a 의 변수를 초기화 시킵니다
    ( 리스트 항목이 들어갈 변수 )

Loop,%var% { }

  • 주어진 변수(var)의 목록만큼 반복합니다.

vartemp := var%A_Index%

  • 윈도우 id를 가져옵니다. 이는 var1 ...var2...var3...var4... 로 인식됩니다

WingetTitle, title, ahk_id %vartemp%

  • ahk_id 값으로 윈도우 id를 (var1...var2... 대입시켜서 타이틀 제목을 가져오고 title 변수에 저장합니다.

if (title != ""){
     count++                     
     id%count% := vartemp           
     list_a .= title "`n"
}

  • if(title != "") { }  : title 변수가 빈 데이터가 아니라면 = 데이터가 있어야지만 괄호 안에있는 코드를 이행합니다.
  • id%count% : id1 ... id2... 에 윈도우 id를 저장합니다
  • list_a .= title 변수를 줄바꿈형식으로 저장합니다.

 

 

 

 

 

 

 

 

다음으로 넘어가기 전

 

현재는 list 변수에 "`n" 줄바꿈 을 통해 나열을 했지만 이 항목들을 dropdownlist ( DDL ) 을 사용하여 격납해야하므로

if(count = 1){
	  list_a .= title "||"
}else{
	  list_a .= title "|"
}
////////////

if (StrLen(list) > 0)
    list := SubStr(list, 1, -1)

 

list_a .= (count = 1) ? title "||" : title "|"
///////////


if (StrLen(list) > 0)
    list := SubStr(list, 1, -1)

 

를 해서 ddl에 맞게 변환을 해주어야합니다

 

if (StrLen(list) > 0)
    list := SubStr(list, 1, -1)

 

 

위 코드는 Loop문이 끝나고 나서 추가해줘야합니다. 이는

마지막 | 문자를 삭제하는 코드입니다.

 

 

 

 

 

 

마치며

 

특정 윈도우창을 핸들링하기 위해, 각 프로세스의 정보를 취득하고 -> 타이틀을 받아오는 과정을

알아 보았습니다. 

 

이렇게 짜놓은 코드를 통해, 다음은 사용자 인터페이스 smartGui를 통해 쉽게 조작할 수있도록 구이를 

만드는 과정을 배워볼 것입니다. 

 

감사합니다.

반응형

+ Recent posts