저는 최근에 고객을위한 가상 키보드 응용 프로그램을 개발했습니다. 프로그램이 거의 모든 프로그램에서 제대로 작동하지만 {ENTER}
또는 {DEL}
과 같은 특정 명령이 Citrix에서 작동하지 않습니다. 해결 방법이 있거나 SendKeys
의 대안이 있습니까?Citrix에서 작동하는 SendKeys 대안
편집 1 : SendInput 메서드 (Windows 입력 시뮬레이터에서 SendInput 사용)를 시도했지만 화살표 키와 함께 DEL 키가 여전히 작동하지 않습니다. 그러나 ENTER 키는 작동합니다.
편집 2 : 해결했습니다. 두 가지 버전의 Citrix에서 테스트되었습니다. This question helped me a lot. : MS는 그것이 사용되지 않고 당신은 그것을 얻을 수있는 시트릭스 클라이언트 aswell 물리적 스캔 코드를 제공 할 을 필요로 0이되어야 을 말한다하더라도
나는 Windows Input Simulator의 코드를 패치 :시트릭스 씬 클라이언트는 keybd_event의 스캔 코드 PARAM를 사용합니다. 또한 SendInput API를 사용하여 키보드 입력을 생성하는 중대한 문제가 있습니다.
// Function used to get the scan code
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
/// <summary>
/// Calls the Win32 SendInput method ...
/// </summary>
/// <param name="keyCode">The VirtualKeyCode to press</param>
public static void SimulateKeyPress(VirtualKeyCode keyCode)
{
var down = new INPUT();
down.Type = (UInt32)InputType.KEYBOARD;
down.Data.Keyboard = new KEYBDINPUT();
down.Data.Keyboard.Vk = (UInt16)keyCode;
// Scan Code here, was 0
down.Data.Keyboard.Scan = (ushort) MapVirtualKey((UInt16)keyCode, 0);
down.Data.Keyboard.Flags = 0;
down.Data.Keyboard.Time = 0;
down.Data.Keyboard.ExtraInfo = IntPtr.Zero;
var up = new INPUT();
up.Type = (UInt32)InputType.KEYBOARD;
up.Data.Keyboard = new KEYBDINPUT();
up.Data.Keyboard.Vk = (UInt16)keyCode;
// Scan Code here, was 0
up.Data.Keyboard.Scan = (ushort)MapVirtualKey((UInt16)keyCode, 0);
up.Data.Keyboard.Flags = (UInt32)KeyboardFlag.KEYUP;
up.Data.Keyboard.Time = 0;
up.Data.Keyboard.ExtraInfo = IntPtr.Zero;
INPUT[] inputList = new INPUT[2];
inputList[0] = down;
inputList[1] = up;
var numberOfSuccessfulSimulatedInputs = SendInput(2,
inputList, Marshal.SizeOf(typeof(INPUT)));
if (numberOfSuccessfulSimulatedInputs == 0)
throw new Exception(
string.Format("The key press simulation for {0} was not successful.",
keyCode));
}
감사 XSL에 전달 된 가상 키와 관련된 스캔 코드를 보내드립니다! 위대한 발견! 나는 InputSimulator (fab tool btw)를 사용하고 있었지만 MapVirtualKey (UInt16) keyCode, 0); 훌륭한 작업 - 많은 감사합니다 –
키 누르기 대신 전체 문자열을 보내는 방법이 있습니까? – Mathias