아두이노 레오나르도의 키보드 기능을 이용해 NirCmd를 사용하는 사례입니다.
NirCmd는 윈도우 커맨드라인 툴로서, 커맨드라인을 통해 윈도우를 제어할 수 있습니다.
win + r 키를 눌러보면 실행 창이 나오는데, 이를 이용해 커맨드라인에 진입하지 않고서도 NirCmd를 활용할 수 있습니다.
즉, win + r 입력 후, 원하는 문구를 쓰고 엔터를 치면 원하는대로 작동이 됩니다.
아두이노 레오나르도가 받은 시리얼 입력으로 적용해보면 다음 코드와 같습니다.
(문제점이 있습니다. 뒤에 설명!!)
#include "Keyboard.h"
void setup() {
Serial.setTimeout(100);
Serial.begin(9600);
Keyboard.begin();
}
void loop() {
if (Serial.available() > 0) {
String msg = Serial.readString();
Serial.println(msg);
//입력 예 : exec,nircmd
if (msg.indexOf("exec") >= 0) {
int idx = msg.indexOf(",");
String cmd = msg.substring(idx + 1, msg.length());
Keyboard.press(KEY_LEFT_GUI); // win 키
Keyboard.press('r');
Keyboard.releaseAll();
delay(100); //딜레이가 짧은경우, 입력이 씹힐 수 있음
Keyboard.print(cmd);
}
}
}
시리얼 입력으로 exec,nircmd 를 입력하면 잘 작동했습니다.
하지만 한글이 입력되지 않는 치명적인 문제가 있습니다...
특정 창을 활성화 시키려면 한글이 필수이므로 다른 방법을 찾아야 합니다.
찾은 방법은, ctrl + v 단축키 입력입니다.
#include "Keyboard.h"
void setup() {
Serial.setTimeout(100);
Serial.begin(9600);
Keyboard.begin();
}
void loop() {
if (Serial.available() > 0) {
String msg = Serial.readString();
Serial.println(msg);
if (msg.indexOf("exec") >= 0) {
Keyboard.press(KEY_LEFT_GUI); //win 키
Keyboard.press('r');
Keyboard.releaseAll();
delay(100); //딜레이가 짧은경우, 입력이 씹힐 수 있음
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('v');
Keyboard.releaseAll();
Keyboard.write(KEY_RETURN);
}
}
}
다행히 이 방법은 잘 작동 합니다.
복사할 문구는 clipboard 기능으로 다양한 언어와 환경에서 제어가 가능합니다.
잘만 하면, 브라우저 + 아두이노만으로 윈도우 제어가 가능할 것 같습니다.
[끝].
728x90
'하드웨어 > 아두이노' 카테고리의 다른 글
[아두이노] 아두이노 레오나르도 시리얼 키보드 만들기 (22) | 2022.04.20 |
---|---|
[아두이노] 키보드를 이용한 윈도우 활성화 (0) | 2022.02.22 |
[아두이노] 브라우저와 통신하기 - Web serial (1) | 2022.02.19 |
[아두이노] IDE 설치하기 (5) | 2022.02.09 |
[아두이노] ESP32 블루투스로 SSID 업데이트하기(EEPROM 이용) (0) | 2021.05.23 |
댓글