PDA

View Full Version : [Java] Simulare il click del mouse (sendInput?)


AngeL)
24-08-2007, 14:43
dovrei scrivere un programma che, alla pressione di una determinata combinazione di tasti faccia cliccare rapidamente il tasto sinistro del mouse. Che funzione/classe devo usare? ricordo che scrissi una cosa del genere in c++ 5-6 mesi fa, ed usai sendInput, ma non ho idea di come fare in java..

:help:

cionci
24-08-2007, 15:49
Dubito che si possa fare in Java....si trattano di dettagli del sistema operativo e credo che Java non si addrentri in queste cose. Al limite puoi realizzare una JNI in C++ da poter richiamare da Java.

71104
24-08-2007, 16:22
dovrei scrivere un programma che, alla pressione di una determinata combinazione di tasti faccia cliccare rapidamente il tasto sinistro del mouse. Che funzione/classe devo usare? ricordo che scrissi una cosa del genere in c++ 5-6 mesi fa, ed usai sendInput, ma non ho idea di come fare in java..

:help: il fatto che tu lo faccia in Java significa che vuoi che funzioni anche su Linux, Mac... in generale su qualsiasi piattaforma che abbia una JVM aggiornata. ma non è detto che una funzionalità così specifica sia implementabile nel caso generale di piattaforma con JVM aggiornata; per esempio su Linux non so se è possibile :D
di conseguenza, giustamente, Java credo che non si addentri in queste cose, come dice cionci. qual è la piattaforma su cui vuoi far girare il programma? se è Windows allora tienti quello che hai fatto in C++ :p
se invece devi necessariamente fare in modo che un programma Java usi questa funzionalità solo quando gira su Windows, allora JNI.

andbin
24-08-2007, 16:29
dovrei scrivere un programma che, alla pressione di una determinata combinazione di tasti faccia cliccare rapidamente il tasto sinistro del mouse. Che funzione/classe devo usare? ricordo che scrissi una cosa del genere in c++ 5-6 mesi fa, ed usai sendInput, ma non ho idea di come fare in java..Qualcosa si può fare con la classe java.awt.Robot.

cionci
24-08-2007, 17:51
Java credo che non si addentri in queste cose,
Vedi...siamo dei malfidati...

^TiGeRShArK^
24-08-2007, 18:11
Qualcosa si può fare con la classe java.awt.Robot.

zizzì :O
Ma cmq per prendere l'input della combinazione di tasti la finestra java mi sa che deve avere il focus :fagiano:

AngeL)
24-08-2007, 22:16
il problema è che il pc su cui c'era questo programma in c++ è... come dire... passato a miglior vita :asd:

dovrei ritrovare il thread.. adesso spulcio la sezione :D

trovata: link (http://www.hwupgrade.it/forum/showthread.php?t=1264006)... quante cretinate che dicevo... :asd:

...ma pensandoci bene.. ancora le dico :fagiano: anche se almeno adesso ho capito cosa sono le costanti e cosa sono i puntatori :asd:

AngeL)
25-08-2007, 13:42
fatto :D
#define STRICT
#define NTDDI_VERSION NTDDI_VISTA
#define _WIN32_WINNT 0x0600
#define WINVER 0x0600
#include <windows.h>

BOOL Click(UINT times)
{
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.time = 0;

for(UINT i = 0; i < times; i++) {
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &input, sizeof(INPUT));
input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &input, sizeof(INPUT));
}

return TRUE;
}

int main ()
{
Sleep(2000);

Click(2);

return 0;
}

c'è solo un problema.. io dovrei premere una combinazione di tasti in un'altra applicazione e il mouse dovrebbe cliccare a ripetizione... si puo' fare o devo avviare il prog ogni volta (uscendo dall'altra applicazione) ?

andbin
25-08-2007, 15:28
c'è solo un problema.. io dovrei premere una combinazione di tasti in un'altra applicazione e il mouse dovrebbe cliccare a ripetizione... si puo' fare o devo avviare il prog ogni volta (uscendo dall'altra applicazione) ?Ma la combinazione dei tasti deve essere riconosciuta a livello globale, di sistema (indipendentemente dalla applicazione attiva) o per una applicazione specifica (e in tal caso è una "tua" applicazione o un'altra qualunque)?

AngeL)
26-08-2007, 19:46
Ma la combinazione dei tasti deve essere riconosciuta a livello globale, di sistema (indipendentemente dalla applicazione attiva) o per una applicazione specifica (e in tal caso è una "tua" applicazione o un'altra qualunque)?

da un'applicazione specifica, non scritta da me

cionci
26-08-2007, 20:33
da un'applicazione specifica, non scritta da me
E allora non credo che tu lo possa fare in Java...servirebbe un hook...

AngeL)
26-08-2007, 20:35
E allora non credo che tu lo possa fare in Java...servirebbe un hook...

infatti stavo pensando di fare tutto in c++, solo che sono mesi che non lo tocco :asd:
per fortuna ho ancora TICPP da qualche parte... devo ricominciare a leggerlo :asd: