Да, с перемещением курсора оказалось сложновато, там перемещение идет как в процедуре mover. Да и были проблемы со скоростью движения мыши, и сейчас не слишком шустро работает, но приемлимо. Если кто-нибудь разберется с отправкой сообщений в порт через DLL, будет работать мгновенно.
Дописал все мышкины процедуры. Скетч для ардуино:
#include <Mouse.h>
#include <Keyboard.h>
unsigned long par = 0;
String instring = "";
int kmfunct = 0;
int x_cor = 0;
int y_cor = 0;
int mult = 0;
void setup() {
Serial.begin(9600);
Mouse.begin();
Keyboard.begin();
}
void loop() {
while (Serial.available() > 0) {
int inchar = Serial.read();
if (isDigit(inchar)) {
instring += (char)inchar;
}
if (inchar == '\n') {
par = instring.toInt();
instring = "";
}
}
if (par > 0) {
kmfunct = par/16777216 ;
switch (kmfunct) {
case 1: //Mouse.click
Mouse.click(par - kmfunct*16777216);
break;
case 2: // Mouse.move
x_cor = (par - kmfunct*16777216)/256;
y_cor = par - x_cor*256 - kmfunct*16777216;
if (x_cor > 127) x_cor = 127 - x_cor;
if (y_cor > 127) y_cor = 127 - y_cor;
Mouse.move(x_cor, y_cor, 0);
break;
case 3: //Mouse.press
Mouse.press(par - kmfunct*16777216);
break;
case 4: //Mouse.release
Mouse.release(par - kmfunct*16777216);
break;
case 5: //Mouse.dblclick
Mouse.click(par - kmfunct*16777216);
delay(50);
Mouse.click(par - kmfunct*16777216);
break;
case 6: //wheel.down.up
mult = par - kmfunct*16777216;
if (mult > 127) mult = 127 - mult;
Mouse.move(0, 0, mult);
}
}
par = 0;
}
Библиотека для кликермана, сверху все процедуры, незабывать про номер порта:
//#name "Arduino_mouse"
$comport = 5 //незабываем нужный порт прописывать
////////////////////////////////////////////////
// Все процедуры с мышью через ардуино
//micro_move ($x_cor, $y_cor)
//micro_lclick ($x_cor, $y_cor)
//micro_rclick ($x_cor, $y_cor)
//micro_mclick ($x_cor, $y_cor)
//micro_ldown ($x_cor, $y_cor)
//micro_rdown ($x_cor, $y_cor)
//micro_mdown ($x_cor, $y_cor)
//micro_lup ($x_cor, $y_cor)
//micro_rup ($x_cor, $y_cor)
//micro_mup ($x_cor, $y_cor)
//micro_dblclick ($x_cor, $y_cor)
//micro_wheeldown ($mult)
//micro_wheelup ($mult)
//move
SUB(micro_move, $x_cor, $y_cor)
WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
$x_temp = $_xmouse
$y_temp = $_ymouse
$x_dist = $x_cor - $_xmouse
$y_dist = $y_cor - $_ymouse
IF($x_dist < 0)
$x_dist = 127 + int(SQRT(abs($x_dist*4)))
else
$x_dist = int(SQRT(abs($x_dist*4)))
END_IF
IF($y_dist < 0)
$y_dist = 127 + int(SQRT(abs($y_dist*4)))
else
$y_dist = int(SQRT(abs($y_dist*4)))
END_IF
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 33554432 + $x_dist*256 + $y_dist))
WHILE(($x_temp = $_xmouse)&($y_temp = $_ymouse))
waitms(50)
END_CYC
END_CYC
END_SUB
//lclick
SUB(micro_lclick, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 16777217))
END_SUB
//rclick
SUB(micro_rclick, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 16777218))
END_SUB
//mclick
SUB(micro_mclick, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 16777219))
END_SUB
//ldown
SUB(micro_ldown, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 50331649))
END_SUB
//rdown
SUB(micro_rdown, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 50331650))
END_SUB
//mdown
SUB(micro_mdown, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 50331651))
END_SUB
//lup
SUB(micro_lup, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 67108865))
END_SUB
//rup
SUB(micro_rup, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 67108866))
END_SUB
//mup
SUB(micro_mup, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 67108867))
END_SUB
//dblclick
SUB(micro_dblclick, $x_cor, $y_cor)
micro_move($x_cor, $y_cor)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 83886081))
END_SUB
//wheeldown
SUB(micro_wheeldown, $mult)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 100663423 + $mult))
END_SUB
//wheelup
SUB(micro_wheelup, $mult)
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", 100663296 + $mult))
END_SUB
Все не тестировал, если что не работает, пиши.
Ах да, в файле shfile.bat , его в отдельную папку.
@echo off
Mode com%1 baud=9600 parity=n data=8 stop=1
echo %2 > com%1
На этот файл делаем ярлык, в свойствах "свернуто в значек", убираем расширение - "shfile", кидаем в папку со скриптом. Vint, спасибо за идею.
Добавлено:
Добавил кручение колеса мыши wheel.down.up . Немного оптимизировал код.