【发布时间】:2012-11-12 03:35:42
【问题描述】:
WPF 是否有与 SendInput 等效的方法?我查看了AutomationPeer 课程,但没有成功。
我只是想发送一个 Keydown(回车键)。简单地引发事件 (RaiseEvent) 在我的场景中不起作用。
这是我所拥有的,它正在工作。我希望有一个托管代码替代方案。
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 我使用可编辑的组合框,当您从下拉列表中选择一个值时,文本被选中,我想清除它。
-
OMG.. 你想通过使用 SendKeys 来做到这一点?这是一个非常糟糕的方法.. 为什么不清除组合框文本属性?
-
如果您使用 WPF,最好熟悉推荐的技术,例如 MVVM 和 DataBinding。发送键盘信号来操作 UI 是一种非常糟糕的方法。
-
我不想清除文本,只是文本选择,不能通过 MVVM/Databinding 执行此操作。组合框甚至不显示文本选择
标签: c# .net wpf keyboard automation