내 프로젝트 코드를 아래 예제로 압축하여 내 문제를 표시했습니다.내 JNA SendInput() 호출에 결함이 있습니까?
예제/스 니펫은 here 및 here의 개념을 참조합니다. 콘솔 출력에 4 개의 이벤트가 전송되었습니다. 그래서 메모장의 출력이 "12"가 될 것으로 예상했지만 메모장에서 "1"만 볼 수 있습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까? jar 파일은 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());
}
}
콘솔 출력 :
E : \ SKGDE \ 내 - 응용 프로그램 \ 대상> 자바 -jar 내-응용 프로그램-1.0-SNAPSHOT - 항아리 -와 - dependencies.jar
만들기 반드시 메모장 ... 초점이
보낸 입력 개수 : 4
E : \ SKGDE \ 내 - 응용 프로그램 \ 대상>