WPF 용 SendInput과 동일한 기능이 있습니까? 나는 AutomationPeer
클래스를 조사했지만 성공하지 못했습니다.WPF SendInput과 동일합니까?
간단히 Keydown (Enter 키)을 보내려고합니다. 단순히 시나리오 (RaiseEvent
)를 올리는 것은 내 시나리오에서 작동하지 않습니다.
다음은 현재 작동하고있는 작업입니다. 나는 관리 코드 대안을 선호하고 싶다. ,
SendKey(myComboBox, Key.Enter);
난 당신이 어딘가에 static class
이를 넣을 수 있습니다 가정 :
public void SendKey(UIElement sourceElement, Key keyToSend)
{
KeyEventArgs args = new KeyEventArgs(InputManager.Current.PrimaryKeyboardDevice, PresentationSource.FromVisual(sourceElement), 0, keyToSend);
args.RoutedEvent = Keyboard.KeyDownEvent;
InputManager.Current.ProcessInput(args);
}
당신은 다음과 같이 호출 할 수 :
private void comboSelectionChanged(object sender, SelectionChangedEventArgs args)
{
((ComboBox)sender).Focus();
// send keydown
INPUT input = new INPUT();
input.type = INPUT_KEYBOARD;
input.union.keyboardInput.wVk = 0x0D;
input.union.keyboardInput.time = 0;
SendInput(1, ref input, Marshal.SizeOf(input));
}
[DllImport("user32.dll", SetLastError = true)]
private static extern int SendInput(int nInputs, ref INPUT mi, int cbSize);
[StructLayout(LayoutKind.Sequential)]
private struct INPUT
{
public int type;
public INPUTUNION union;
};
[StructLayout(LayoutKind.Explicit)]
private struct INPUTUNION
{
[FieldOffset(0)]
public MOUSEINPUT mouseInput;
[FieldOffset(0)]
public KEYBDINPUT keyboardInput;
};
[StructLayout(LayoutKind.Sequential)]
private struct MOUSEINPUT
{
public int dx;
public int dy;
public int mouseData;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
};
[StructLayout(LayoutKind.Sequential)]
private struct KEYBDINPUT
{
public short wVk;
public short wScan;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
};
private const int INPUT_MOUSE = 0;
private const int INPUT_KEYBOARD = 1;
왜 그렇게 했습니까? –
@HighCore Im 편집 가능한 ComboBox를 사용하는 경우 드롭 다운에서 값을 선택하면 텍스트가 선택되어 지우겠습니다. –
OMG .. 그리고 당신은 SendKeys를 사용하여 그것을하고 싶습니까 ?? 그건 정말 나쁜 접근 방식이야. 왜 그냥 콤보 박스 텍스트 속성을 지우지 않았을까? –