반응형
[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 |