SENDINPUT을 사용하여 가상 키를 누르면 열린 필드에서 내 응용 프로그램에 가장 적합합니다. 그게 바로 그게 맞아. :) 그러나. 최근에 RDP 세션에서 작동하지 않는다는 버그 보고서가 작성되었습니다. 그래서 내 컴퓨터에서 메모장을 발사하면 바코드가 스캔되고 (SENDINPUT이 어떻게 사용되는지) 문자열이 메모장에 저장됩니다. RDP 세션을 시작하여 메모장을 열면 아무것도 보내지지 않습니다. 메모장은 비어 있습니다. 그래서 이상한 이유로 SENDINPUT은 RDP 터널을 통과하지 못합니다. 나는 그것이 RDP 세션에서 더 많은 설정이라고 느낀다. 그러나 나는 내 코드가 잘못 될 수 있다고 생각하지 않을만큼 순진하지 않다. 코드는 특별한 것이 아니지만 중요한 부분을 게시 할 것이다. SEND INPUT에 대한 실제 호출)SENDINPUT은 RDP에 키 입력을 보내지 않습니다
public class User32Input
{
public static void DoPressRawKey(byte ascii)
{
var inputs = PressRawKey(ascii);
int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(INPUT));
SendInput((uint)inputs.Count, inputs.ToArray(), size);
}
internal static System.Collections.Generic.List<INPUT> PressRawKey(byte ascii)
{
var inputs = new System.Collections.Generic.List<INPUT>();
inputs.Add(GetRawKeyDown(ascii));
inputs.Add(GetRawKeyUp(ascii));
return inputs;
}
internal static INPUT GetRawKeyDown(byte key)
{
return GetRawKey(key, KEYEVENTF_KEYDN);
}
internal static INPUT GetRawKeyUp(byte key)
{
return GetRawKey(key, KEYEVENTF_KEYUP);
}
private static INPUT GetRawKey(byte key, uint flag)
{
return new INPUT
{
type = User32Input.INPUT_KEYBOARD,
u = new InputUnion
{
ki = new KEYBDINPUT
{
wVk = key,
wScan = 0,
dwFlags = flag,
dwExtraInfo = User32Input.GetMessageExtraInfo(),
}
}
};
}
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
}
RDP 세션에서 작동하지 않는 이유는 무엇입니까?
한 가지만 스캔 코드를 설정하고 있습니다. –
흥미 롭다. 좋아, 내가 살펴볼 것이다. 고맙습니다. –
MapVirtualKey에서 정보를 찾으십시오. –