J'ai condensé mon code de projet dans l'exemple ci-dessous pour montrer mon problème.Mon appel JNA SendInput() est-il défectueux?
Les concepts de référence d'exemples/extraits utilisés here et here. La sortie de la console affiche 4 événements envoyés; donc je m'attendais à ce que la sortie dans le bloc-notes soit "12", mais je vois seulement "1" dans le Bloc-notes. Quelqu'un peut me diriger dans la bonne direction? Le pot a été construit et exécuté sur Windows 10 x64.
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.WTypes.BSTR;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.BaseTSD;
import com.sun.jna.platform.win32.User32;
public class App {
public static void main(String[] args)
{
int KEYEVENT_SCANCODE = 0x0008;
int KEYEVENT_UP = 0x0002;
WinUser.INPUT[] inputArray = (WinUser.INPUT[]) new WinUser.INPUT().toArray(4);
inputArray[0].type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
inputArray[0].input.setType("ki");
inputArray[0].input.ki.time = new WinDef.DWORD(0);
inputArray[0].input.ki.wVk = new WinDef.WORD(0); //using scancodes instead
inputArray[0].input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);
inputArray[0].input.ki.dwFlags = new WinDef.DWORD(KEYEVENT_SCANCODE);
inputArray[0].input.ki.wScan = new WinDef.WORD(0x01);
inputArray[1].type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
inputArray[1].input.setType("ki");
inputArray[1].input.ki.time = new WinDef.DWORD(0);
inputArray[1].input.ki.wVk = new WinDef.WORD(0); //using scancodes instead
inputArray[1].input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);
inputArray[1].input.ki.dwFlags = new WinDef.DWORD(KEYEVENT_SCANCODE | KEYEVENT_UP);
inputArray[1].input.ki.wScan = new WinDef.WORD(0x01);
inputArray[2].type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
inputArray[2].input.setType("ki");
inputArray[2].input.ki.time = new WinDef.DWORD(0);
inputArray[2].input.ki.wVk = new WinDef.WORD(0); //using scancodes instead
inputArray[2].input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);
inputArray[2].input.ki.dwFlags = new WinDef.DWORD(KEYEVENT_SCANCODE);
inputArray[2].input.ki.wScan = new WinDef.WORD(0x02);
inputArray[3].type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);
inputArray[3].input.setType("ki");
inputArray[3].input.ki.time = new WinDef.DWORD(0);
inputArray[3].input.ki.wVk = new WinDef.WORD(0); //using scancodes instead
inputArray[3].input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);
inputArray[3].input.ki.dwFlags = new WinDef.DWORD(KEYEVENT_SCANCODE | KEYEVENT_UP);
inputArray[3].input.ki.wScan = new WinDef.WORD(0x02);
System.out.println("Make sure notepad is in focus...");
try { Thread.sleep(7000); } catch (Throwable ex) { System.out.println("Interrupted"); }
WinDef.DWORD sentInputs = User32.INSTANCE.SendInput(
new WinDef.DWORD(inputArray.length),
inputArray,
inputArray[0].size()
);
System.out.println("Sent Input Count: " + sentInputs.intValue());
}
}
sortie de la console:
E: \ SKGDE \ my-app \ target> java -jar my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Marque que le bloc-notes est mise au point ...
Envoyée le compte d'entrée: 4
E: \ SKGDE \ my-app \ target>