반응형
크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널
경매하는 개발자
크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널
전체 방문자
오늘
어제
  • 분류 전체보기 (329)
    • IT (128)
      • 아두이노 (6)
      • C C++ (17)
      • C C++ 컴파일 에러 (3)
      • LINUX (3)
      • Git (1)
      • OpenGL (0)
      • IT 상식 (38)
      • EXCEL & VBA (9)
      • 정보처리기사 (20)
      • 무작정 웹사이트 만들기 (6)
      • 포토샵 (3)
      • 파이썬 & vscode (16)
      • 머신러닝 & 인공지능 & 데이터사이언스 (5)
    • 부동산 (91)
      • 부동산일반 (31)
      • 세금 (6)
      • 경매 (46)
      • 법, 소송 (8)
    • 개인사업자 (43)
      • 할 일 (11)
      • 꿀팁 (9)
      • 세금 (14)
      • 지원사업 (8)
    • 독후감 (25)
      • 독후감 (25)
    • 경제 (4)
      • 거시경제 (4)
    • Tistory (34)
      • 티스토리 (23)
      • 애드센스 (11)
    • 기타 (4)
      • 에세이 (2)
      • 퇴사준비 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 애드센스
  • 부가가치세
  • 온비드공인인증서
  • 개인사업자
  • 전입신고
  • 부의추월차선리뷰
  • 확정일자
  • 전자세금계산서
  • 부의추월차선독후감
  • 공매
  • 일반과세자
  • 온비드공동인증서
  • 티스토리애드센스
  • 부의추월차선
  • 부의추월차선줄거리
  • 부의추월차선서평
  • 경매
  • 부의추월차선요약
  • 온비드공매
  • 세금계산서

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널
IT/C C++

[C/C++] 키보드 매크로 프로그램 만들기

[C/C++] 키보드 매크로 프로그램 만들기
IT/C C++

[C/C++] 키보드 매크로 프로그램 만들기

2023. 3. 30. 15:44
반응형

[C/C++] 키보드 매크로 프로그램 만들기

반응형

 


회사에서 각 시험실의 안전 일일체크리스트를 수행하는 업무가 있는데, 좌표가 동일한 값들을 하나하나 찍어서 결재를 올리는 루틴한 업무라서 귀찮아서 C/C++ 언어를 이용하여 매크로를 하나 만들었다.

 

F2키를 눌러서 좌표를 확인할 수 있고, 그 좌표를 x/y,x1/y1,x2/y2,x3/y3 좌표에 넣으면 된다.

직접 코드를 복붙해서 빌드해보면 어떤 원리인지 알 것이다.

반응형
반응형
반응형

 

#include <stdio.h>
#include <Windows.h>
#include <iostream>
using namespace std;
void home();
int F10_exit();
int main(void)
{
POINT pt;
int x[100], y[100]; //통합개발센터 x,y좌표
int x1[100], y1[100]; //시험실1 x,y좌표
int x2[100], y2[100]; //시험실2 x,y좌표
int x3[100], y3[100]; //시험실3 x,y좌표
int i = 0; //프레임
system("mode con: cols=30 lines=13"); //화면 고정
home(); //home 함수 실행
int damp_x = 0, damp_y = 0; //날짜에 따라 x,y좌표에 더해져야 할 좌표 값
cout << "첫번째 월요일에서 x축으로 얼마나 떨어져 있나요?: ";
cin >> damp_x;
damp_x *= 245;
cout << "첫번째 월요일에서 y축으로 얼마나 떨어져 있나요?: ";
cin >> damp_y;
damp_y *= 122;
for (i = 0; i < 100; i++) { //초기화
x[i] = 0, y[i] = 0;
x1[i] = 0, y1[i] = 0;
x2[i] = 0, y2[i] = 0;
x3[i] = 0, y3[i] = 0;
}
{ //통합개발센터 x,y 좌표
x[0] = 493, y[0] = 381; //커버페이지 좌표
x[1] = 636, y[1] = 294;
x[2] = 760, y[2] = 390;
x[3] = 76, y[3] = 43; //저장
x[4] = 910, y[4] = 656;
x[5] = 1028, y[5] = 662;
x[6] = 199, y[6] = 44;
x[7] = 76, y[7] = 43;
x[8] = 911, y[8] = 654;
x[9] = 1030, y[9] = 659;
//시험실1 x,y 좌표
x1[0] = 493, y1[0] = 415; //커버페이지 좌표
x1[1] = 761, y1[1] = 294;
x1[2] = 638, y1[2] = 329;
x1[3] = 638, y1[3] = 361;
x1[4] = 638, y1[4] = 392;
x1[5] = 638, y1[5] = 456;
x1[6] = 638, y1[6] = 483;
x1[7] = 638, y1[7] = 515;
x1[8] = 638, y1[8] = 545;
x1[9] = 638, y1[9] = 578;
x1[10] = 638, y1[10] = 606;
x1[11] = 638, y1[11] = 640;
x1[12] = 638, y1[12] = 670;
x1[13] = 638, y1[13] = 698;
x1[14] = 76, y1[14] = 43; //저장
x1[15] = 910, y1[15] = 656;
x1[16] = 1028, y1[16] = 662;
x1[17] = 199, y1[17] = 44;
x1[18] = 74, y1[18] = 42;
x1[19] = 906, y1[19] = 654;
x1[20] = 1030, y1[20] = 659;
//시험실2 x,y 좌표
x2[0] = 493, y2[0] = 430; //커버페이지 좌표
x2[1] = 761, y2[1] = 294;
x2[2] = 638, y2[2] = 329;
x2[3] = 638, y2[3] = 361;
x2[4] = 638, y2[4] = 392;
x2[5] = 638, y2[5] = 456;
x2[6] = 638, y2[6] = 483;
x2[7] = 638, y2[7] = 515;
x2[8] = 638, y2[8] = 545;
x2[9] = 638, y2[9] = 578;
x2[10] = 638, y2[10] = 606;
x2[11] = 638, y2[11] = 640;
x2[12] = 638, y2[12] = 670;
x2[13] = 638, y2[13] = 698;
x2[14] = 638, y2[14] = 732;
x2[15] = 76, y2[15] = 43; //저장
x2[16] = 910, y2[16] = 656;
x2[17] = 1028, y2[17] = 662;
x2[18] = 199, y2[18] = 44;
x2[19] = 74, y2[19] = 42;
x2[20] = 906, y2[20] = 654;
x2[21] = 1030, y2[21] = 659;
//시험실3 x,y 좌표
x3[0] = 493, y3[0] = 445; //커버페이지 좌표
x3[1] = 761, y3[1] = 294;
x3[2] = 638, y3[2] = 329;
x3[3] = 638, y3[3] = 361;
x3[4] = 638, y3[4] = 392;
x3[5] = 638, y3[5] = 456;
x3[6] = 638, y3[6] = 483;
x3[7] = 638, y3[7] = 515;
x3[8] = 638, y3[8] = 545;
x3[9] = 638, y3[9] = 578;
x3[10] = 638, y3[10] = 606;
x3[11] = 638, y3[11] = 640;
x3[12] = 638, y3[12] = 670;
x3[13] = 638, y3[13] = 698;
x3[14] = 638, y3[14] = 732;
x3[15] = 76, y3[15] = 43;
x3[16] = 910, y3[16] = 656;
x3[17] = 1028, y3[17] = 662;
x3[18] = 199, y3[18] = 44;
x3[19] = 74, y3[19] = 42;
x3[20] = 906, y3[20] = 654;
x3[21] = 1030, y3[21] = 659;
}
while (1)
{
if (GetKeyState(VK_F2) < 0) //F2 키 누르면 날짜 수정 가능
{
cout << "첫번째 월요일에서 x축으로 얼마나 떨어져 있나요?: ";
cin >> damp_x;
damp_x *= 245;
cout << "첫번째 월요일에서 y축으로 얼마나 떨어져 있나요?: ";
cin >> damp_y;
damp_y *= 122;
}
if (GetKeyState(VK_F3) < 0) //F3 키 누르면 커서좌표 확인 가능 (
{
GetCursorPos(&pt);
cout << "커서 좌표 확인: " << pt.x << " , " << pt.y << endl;
Sleep(1000);
}
else if (GetKeyState(VK_F8) < 0) //F8 키를 누르면 매크로 재생
{
cout << "통합개발센터 매크로 실행" << endl;
cout << "중간종료를 원하면 언제든 F10을 꾹 누르고 계세요." << endl;
for (i = 0; i < 100; i++) {
if (i == 0) { //커버페이지 이동
cout << "배열 : " << i << endl;
SetCursorPos(x[i] + damp_x, y[i] + damp_y); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x[i] + damp_x, y[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x[i] + damp_x, y[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(5000);
i++;
}
cout << "배열 : " << i << endl;
SetCursorPos(x[i], y[i]); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x[i], y[i], 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x[i], y[i], 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(1000);
F10_exit();
if (x[i + 1] == 0) { Sleep(3000); cout << "통합개발센터 매크로 완료" << endl; break; }
}
cout << "시험실1 매크로 실행" << endl;
for (i = 0; i < 100; i++) {
if (i == 0) { //커버페이지 이동
cout << "배열 : " << i << endl;
SetCursorPos(x1[i] + damp_x, y1[i] + damp_y); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x1[i] + damp_x, y1[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x1[i] + damp_x, y1[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(5000);
i++;
}
cout << "배열 : " << i << endl;
SetCursorPos(x1[i], y1[i]); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x1[i], y1[i], 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x1[i], y1[i], 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(1000);
F10_exit();
if (x1[i + 1] == 0) { Sleep(3000); cout << "시험실1 매크로 완료" << endl; break; }
}
cout << "시험실2 매크로 실행" << endl;
for (i = 0; i < 100; i++) {
if (i == 0) { //커버페이지 이동
cout << "배열 : " << i << endl;
SetCursorPos(x2[i] + damp_x, y2[i] + damp_y); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x2[i] + damp_x, y2[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x2[i] + damp_x, y2[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(5000);
i++;
}
cout << "배열 : " << i << endl;
SetCursorPos(x2[i], y2[i]); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x2[i], y2[i], 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x2[i], y2[i], 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(1000);
F10_exit();
if (x2[i + 1] == 0) { Sleep(3000); cout << "시험실2 매크로 완료" << endl; break; }
}
cout << "시험실3 매크로 실행" << endl;
for (i = 0; i < 100; i++) {
if (i == 0) { //커버페이지 이동
cout << "배열 : " << i << endl;
SetCursorPos(x3[i] + damp_x, y3[i] + damp_y); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x3[i] + damp_x, y3[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x3[i] + damp_x, y3[i] + damp_y, 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(5000);
i++;
}
cout << "배열 : " << i << endl;
SetCursorPos(x3[i], y3[i]); //커서 이동
Sleep(400);
mouse_event(MOUSEEVENTF_LEFTDOWN, x3[i], y3[i], 0, GetMessageExtraInfo()); //마우스 누르기
mouse_event(MOUSEEVENTF_LEFTUP, x3[i], y3[i], 0, GetMessageExtraInfo()); //마우스 떼기
Sleep(1000);
F10_exit();
if (x3[i + 1] == 0) { Sleep(3000); home(); break; }
}
}
else if (GetKeyState(VK_F10) < 0) //F10 키를 누르면 종료
{
cout << "매크로 종료" << endl;
return 0;
}
Sleep(10); // Sleep(1000) = 1초 즉, 0.01초를 기다린 후 반복문 다시 실행
}
return 0;
}
void home() {
//홈화면
puts("---------------------------"); //puts함수는 자동으로 줄바꿈 처리를 함
puts("| |");
puts("| F2 : 날짜 수정 |");
puts("| F3 : 커서좌표 확인 |");
puts("| F8 : 매크로 재생 |");
puts("| F10 : 매크로 종료 |");
puts("| |");
puts("---------------------------");
}
int F10_exit() {
if (GetKeyState(VK_F10) < 0) //F10 키를 누르면 종료
{
cout << "매크로 종료" << endl;
exit(0);
}
}
반응형

'IT > C C++' 카테고리의 다른 글

[C/C++] float, double은 ==로 비교하면 안되는 이유  (0) 2023.09.27
[C/C++] math.h로 정확한 파이값 사용하는 방법  (0) 2023.05.25
[C/C++] 무조건 강제종료하기  (0) 2023.03.30
[C/C++] Break/Return/Continue 차이  (0) 2023.03.30
[C/C++] #Pragma pack(1) 의미  (0) 2022.12.09
  • [C/C++] 키보드 매크로 프로그램 만들기

크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널

'IT/C C++' 카테고리의 다른 글
  • [C/C++] float, double은 ==로 비교하면 안되는 이유
  • [C/C++] math.h로 정확한 파이값 사용하는 방법
  • [C/C++] 무조건 강제종료하기
  • [C/C++] Break/Return/Continue 차이
크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널
크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널
크몽 '경매하는 개발자' 님의 경매/부동산/IT/사업 채널입니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.