Simple Hotkey 프로그램에서 아두이노 연결하기 (하드웨어 연동)

 소개.

심플핫키 (Simple Hotkey) 프로그램은 매크로 프로그램 입니다. 

심플핫키 버전 2.2.6 이상부터는 아두이노 하드웨어 연동 가능합니다. 

 

아두이노 레오나르도 소개.

아두이노는 오픈 소스기반의 단일 보드 마이크로 컨트롤입니다.  더 쉽게 얘기 하면

물리적으로 키보드, 마우스


기능을 할 수 있는

하드웨어 장비

입니다. 심플핫키에서 메모장에서는 동작이 되는데 다른 프로그램,게임에서

동작이 안되는 경우

에는

아두이노 보드를 사용하여 동작

시킬 수 있습니다.

 

사용범위.

1. 소프트웨어 방법으로 키입력와, 마우스 입력이 안 될때 사용.

 

아두이노 레오나르도로 R3 구매방법

아두이노는 온라인 쇼핑몰에서 쉽게 저렴하게 구매가 가능합니다.아래와 같이 두 개를 같이( 묶음 배송) 구매하면 사용하기가 더 편리 합니다.구매

할 때 주의점은 

 "아두이노 레오나르도 R3 "

모델을 구매 해야 정삭 동작이 됩니다.

 

 

 

 

아두이노 설정

구매한 아두이노를

PC와 USB 연결

하면 자동으로

드라이버가 자동 설치

가 됩니다.
심플핫키에서 키보드, 마우스 입력을 보내면

아두이노가 명령을 받아서 처리

를 해야 합니다.

우선, 아두이노 공식사이트에서

프로그램을 다운

받습니다 

사이트 : https://www.arduino.cc/en/software

 

 

설치된

아두이노를 실행

하여 아래와 같이

보드, 포트 설정

을 해줍니다.

보드 설정

 

포트 설정  

(포트번호를 기억하세요)

 

 

아두이노와 

연동하기 위해서 코드를 아두이노에 업로드

 해야 합니다.

아래 스케치

코드를 전부 복사

하세요.

#include <Keyboard.h>
#include <Mouse.h>
 
String GetString = "";
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  GetString = "";
  char data = -1;
  while (Serial.available()) {
    data = Serial.read();
    GetString.concat(data);
  }
    
  if (GetString != "") {
    String sub1 = GetString.substring(01);
    if (sub1 == "M") {
      String sub1 = GetString.substring(02);
      int sub2 = GetString.substring(2).toInt();
      if (sub1 == "MX") {
        Mouse.move(sub2, 00);
      }
      else if (sub1 == "MY") {
        Mouse.move(0, sub2, 0);
      }
      else if (sub1 == "MW") {
        Mouse.move(00, sub2);
      }      
    }
 
    else if (sub1 == "R") {
      String sub1 = GetString.substring(02);
      if (sub1 == "RC") {
        Mouse.click(MOUSE_RIGHT);
      }
      else if (sub1 == "RH") {
        Mouse.press(MOUSE_RIGHT);
      }
      else if (sub1 == "RR") {
        Mouse.release(MOUSE_RIGHT);
      }   
      else if (sub1 == "RD") {
        Mouse.click(MOUSE_RIGHT);
        Mouse.click(MOUSE_RIGHT);
      }
    }
 
    else if (sub1 == "L") {
      String sub1 = GetString.substring(02);
      if (sub1 == "LC") {
        Mouse.click(MOUSE_LEFT);
      }
      else if (sub1 == "LH") {
        Mouse.press(MOUSE_LEFT);
      }
      else if (sub1 == "LR") {
        Mouse.release(MOUSE_LEFT);
      }   
      else if (sub1 == "LD") {
        Mouse.click(MOUSE_LEFT);
        Mouse.click(MOUSE_LEFT);
      }
    }
 
    else if (sub1 == "C") {
      String sub1 = GetString.substring(02);
      if (sub1 == "CC") {
        Mouse.click(MOUSE_MIDDLE);
      }
      else if (sub1 == "CH") {
        Mouse.press(MOUSE_MIDDLE);
      }
      else if (sub1 == "CR") {
        Mouse.release(MOUSE_MIDDLE);
      }   
      else if (sub1 == "CD") {
        Mouse.click(MOUSE_MIDDLE);
        Mouse.click(MOUSE_MIDDLE);
      }
    }
   
    else if (sub1 == "K") {
      String sub1 = GetString.substring(02);
      String sub2 = GetString.substring(2);
      if (sub2 == "F1") {
        SendKey(sub1, KEY_F1);
      }
      else if (sub2 == "F2") {
        SendKey(sub1, KEY_F2);
      }
      else if (sub2 == "F3") {
        SendKey(sub1, KEY_F3);
      }
      else if (sub2 == "F4") {
        SendKey(sub1, KEY_F4);
      }
      else if (sub2 == "F5") {
        SendKey(sub1, KEY_F5);
      }
      else if (sub2 == "F6") {
        SendKey(sub1, KEY_F6);
      }
      else if (sub2 == "F7") {
        SendKey(sub1, KEY_F7);
      }
      else if (sub2 == "F8") {
        SendKey(sub1, KEY_F8);
      }
      else if (sub2 == "F9") {
        SendKey(sub1, KEY_F9);
      }
      else if (sub2 == "F10") {
        SendKey(sub1, KEY_F10);
      }
      else if (sub2 == "F11") {
        SendKey(sub1, KEY_F11);
      }
      else if (sub2 == "F12") {
        SendKey(sub1, KEY_F12);
      }
      else if (sub2 == "N0") {
        SendKey(sub1, 234);
      }
      else if (sub2 == "N1") {
        SendKey(sub1, 225);
      }
      else if (sub2 == "N2") {
        SendKey(sub1, 226);
      }
      else if (sub2 == "N3") {
        SendKey(sub1, 227);
      }
      else if (sub2 == "N4") {
        SendKey(sub1, 228);
      }
      else if (sub2 == "N5") {
        SendKey(sub1, 229);
      }
      else if (sub2 == "N6") {
        SendKey(sub1, 230);
      }
      else if (sub2 == "N7") {
        SendKey(sub1, 231);
      }
      else if (sub2 == "N8") {
        SendKey(sub1, 232);
      }
      else if (sub2 == "N9") {
        SendKey(sub1, 234);
      }
      else if (sub2 == "N10") {
        SendKey(sub1, 221);
      }
      else if (sub2 == "N11") {
        SendKey(sub1, 224);
      }
      else if (sub2 == "N12") {
        SendKey(sub1, 222);
      }
      else if (sub2 == "N13") {
        SendKey(sub1, 235);
      }
      else if (sub2 == "N14") {
        SendKey(sub1, 223);
      }
      else if (sub2 == "N15") {
        SendKey(sub1, 220);
      }      
      else if (sub2 == "LS") {
        SendKey(sub1, KEY_LEFT_SHIFT);
      }
      else if (sub2 == "RS") {
        SendKey(sub1, KEY_RIGHT_SHIFT);
      }
      else if (sub2 == "LC") {
        SendKey(sub1, KEY_LEFT_CTRL);
      }
      else if (sub2 == "RC") {
        SendKey(sub1, KEY_RIGHT_CTRL);
      }
      else if (sub2 == "LA") {
        SendKey(sub1, KEY_LEFT_ALT);
      }
      else if (sub2 == "RA") {
        SendKey(sub1, KEY_RIGHT_ALT);
      }
      else if (sub2 == "LW") {
        SendKey(sub1, KEY_LEFT_GUI);
      }
      else if (sub2 == "RW") {
        SendKey(sub1, KEY_RIGHT_GUI);
      }
      else if (sub2 == "AL") {
        SendKey(sub1, KEY_LEFT_ARROW);
      }
      else if (sub2 == "AU") {
        SendKey(sub1, KEY_UP_ARROW);
      }
      else if (sub2 == "AR") {
        SendKey(sub1, KEY_RIGHT_ARROW);
      }
      else if (sub2 == "AD") {
        SendKey(sub1, KEY_DOWN_ARROW);
      }
      else if (sub2 == "BS") {
        SendKey(sub1, KEY_BACKSPACE);
      }
      else if (sub2 == "SB") {
        SendKey(sub1, ' ');
      }
      else if (sub2 == "TB") {
        SendKey(sub1, KEY_TAB);
      }
      else if (sub2 == "ET") {
        SendKey(sub1, KEY_RETURN);
      }
      else if (sub2 == "EC") {
        SendKey(sub1, KEY_ESC);
      }
      else if (sub2 == "IT") {
        SendKey(sub1, KEY_INSERT);
      }
      else if (sub2 == "DT") {
        SendKey(sub1, KEY_DELETE);
      }
      else if (sub2 == "PU") {
        SendKey(sub1, KEY_PAGE_UP);
      }
      else if (sub2 == "PD") {
        SendKey(sub1, KEY_PAGE_DOWN);
      }
      else if (sub2 == "HM") {
        SendKey(sub1, KEY_HOME);
      }
      else if (sub2 == "ED") {
        SendKey(sub1, KEY_END);
      }
      else if (sub2 == "CL") {
        SendKey(sub1, KEY_CAPS_LOCK);
      }
      else {
        if (sub1 == "KD") {
          Keyboard.press(sub2[0]);
        }
        else if (sub1 == "KU") {
          Keyboard.release(sub2[0]);
        }
      }
    }
  }
}
 
void SendKey(String sub1, uint8_t sub2) {
  if (sub1 == "KD") {
    Keyboard.press(sub2);
  }
  else if (sub1 == "KU") {
    Keyboard.release(sub2);
  }
}
cs

스케치 코드는 엔지엠소프트웨어에 메일로 문의 후 참고해서 만들어 졌습니다.

 





 

 

 

복사한 코드를

아두이노에 붙여 넣고, 업로드

버튼을 클릭 합니다.

 

 

정상적으로 포트연결/보드선택이 잘 되었다면 아래와같이 업로드가 완료 됩니다!!!

 

 

 

 

다운로드 (Download) 64bit 전용

CommMG64_Install.zip
다운로드

 (심플핫키 아두이노 통신모듈 DLL 설치)

 

아두이노와 심플핫키가 통신을 하기위한 DLL 파일이 필요합니다. 

위에 첨부된 파일을 다운로드 받아서 압축을 해제 후, CommMG64_Install.exe을 실행 합니다. 

(설치가 되면, %Temp% 폴더 경로에 CommMG64.dll 파일이 생성 됩니다)


바이러스토탈 사이트에서 검사한 내용입니다

 - 바이러스 토탈은 구글의 자회사로, 바이러스나, 웜 트로이 등을 검사하고 막는 사이트 입니다 (나무위키)

 - 사용전, 다운 받은 zip 파일을 https://www.virustotal.com  한번 더 검사를 해보세요.  아래와 같이 바이러스 검사와 동일 해야 합니다.

 - 바이러스로 오진되는 경우, 백신 개발사에 요청하여, 예외 처리 작업을 하고 있습니다.

 

64bit 전용

https://www.virustotal.com/gui/file/8ef4e069609fc73100fd00026327a83e2e1e98e99d38d2e07d6de0ab1d7a135f/detection

 

0/67 engines detected this file  

Basic PropertiesMD5 331a4d82a1474501a6b6f4b2c9c6fdc9SHA-1 8accde5dc42ef71680ec670a4a90205d74c20884SHA-256 8ef4e069609fc73100fd00026327a83e2e1e98e99d38d2e07d6de0ab1d7a135fVhash ecf0ce78a3cf8245b6798f903ea5b48cSSDEEP 49152:IzEgdHKouwtzLTXVJkE2cuLhXhpM34URKCdQPaPKCCjeVdELUEyfLZecYMUA12s6:IzjdpXtP8zj1hO34URKC5PGaXlfCsG5TLSH T1C5C53355EEF6B7593114ABCB01C52EA31D22E227CA7222716DB780BB53DD1433E6F482File type ZIPMagic Zip archive data, at least v2.0 to extractMozilla Firefox browser extension (61.5%)TRiD ZIP compressed archive (30.7%)TRiD PrintFox/Pagefox bitmap (640x800) (7.6%)File size 2.56 MB (2684471 bytes)

 

 

 

 

 

심플핫키에서 사용방법
스크립트 생성기에서 키보내기->Set_Aduino 항목을 선택하여 사용 할 수 있습니다.
<Set_aduino,7> 선언 이후,  키보내기 및 마우스 이동은 아두이노를 통해서 수행 됩니다.

숫자 7은 아두이노 포트번호

를 의미 합니다.

개인 설정에 맞게 변경

해주셔야 합니다.

 

 

 

 

 

아두이노 마우스 이동

하드웨어 방식에서는 윈도우에 설정된 마우스 포인터 옵션과, 이동속도를 인지 할 수  없습니다.

아래와 같이 기본값으로 되어 있어야 마우스 커서이동이 정상 작동됩니다.

심플핫키에서 아두이노를 연결 한 후, 마우스 이동명령을 사용하면 아래와 같이 자동으로 설정이 변경 됩니다. 

 

 

 

심플핫키 하드웨어 사용방법 3줄 요약
1. 준비물 : 아두아노 레오나르도로 구매 ( 보드+케이스+배송비=9,000원)

2. PC에 연결 후 아두아노 보드에 코드 업로드 (스케치 소스 위에 코드)

3. Download에 있는 통신모듈설치 후 스크립트에서 사용

 

 

버그나, 기능개선 관련 내용을 메일로 주시면, 확인 후 처리 하겠습니다.
사용법 및 기타 문의 댓글은 임의로 삭제 될 수 있음을 알려드립니다.
메일주소 : hiperv@naver.com

 

 

사용 전에 꼭 읽어주세요

이 프로그램은 마우스 및 키보드 입력을 해주는 매크로 프로그램 입니다. 게임에 직접 간섭은 없습니다.

하지만 "리그 오브 레전드" 제 3자 간섭 프로그램으로 계정이 영구정지 될 수 있으니 사용에 주의 해주시기 바랍니다.

"디아블로3"  게임에서는 메크로 프로그램 제재가 없음을 확인 하였습니다.

 

이 프로그램으로 행한 모든 행위의 결과에 따른 손해 및 불법행위에 대한 모든 민, 형사상 책임 및 배상의

책임을 지지 않으며 그 책임은 사용자에게 있습니다.

 

이 프로그램은 바이러스 및 랜섬웨어, 악성코드가 포함되어 있지 않습니다.

자동화 개발언어 특성상 바이러스로 오진 되는 경우가 있습니다. 이런 경우, 실시간 검사를 중지 하시거나, 예외 처리를 해주세요.

심플 핫키를 다운 받으실 때는, 이 블로그에서만 받아주세요!! (hiperv.tistory.com)

 

심플핫키 프로그램은 후원 프로그램 입니다. 8분에 한번씩 매크로 기능이 1분간 기능정지 되는 제약이 있습니다
후원을 하신 사용자는 시리얼 키를 발급 받습니다. 등록 후, PC 1대에서만 제약 없이 영구적으로 사용 가능합니다. 
위에 언급한 기능을 감안하고 사용하실 분만 다운로드 부탁 드립니다.

 

발급받은 시리얼키를 다른 사람에게 판매 하는경우, 해당 키는 자동 폐기 됩니다.

 

문의는 메일로 해주세요. hiperv@naver.com. 

사용법 및 기타 문의 댓글은 임의로 삭제 될 수 있음을 알려드립니다.

 

 

 

 

 

댓글()