C# 选项卡提示单击&;123键编程
我有一个利用Windows8键盘的C#winForms应用程序 我通过启动tabtip.exe打开键盘 我可以使用如下PostMessage命令关闭键盘:C# 选项卡提示单击&;123键编程,c#,winforms,C#,Winforms,我有一个利用Windows8键盘的C#winForms应用程序 我通过启动tabtip.exe打开键盘 我可以使用如下PostMessage命令关闭键盘: public static void HideOnScreenKeyboard() { uint WM_SYSCOMMAND = 274; uint SC_CLOSE = 61536; IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null); Pos
public static void HideOnScreenKeyboard()
{
uint WM_SYSCOMMAND = 274;
uint SC_CLOSE = 61536;
IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
}
我认为使用PostMessage,只要传递正确的值,就可以通过编程方式模拟几乎任何内容
我刚刚在互联网上找到的用于关闭键盘(274和61536)的值
看起来可以使用Spy++或其他一些工具获取这些值,但我无法做到这一点
谁能告诉我模拟按下&123键所需的值,以便键盘切换到数字键盘
或者,有人知道如何获得这些值吗
我试过Spy++,但是有太多的消息不断传递,我不知道该去哪里看
看看屏幕上的图像,看看我指的是什么键
您可以尝试使用在虚拟键盘窗口的&123按钮上模拟鼠标单击事件
下面是一个如何使用SendInput将鼠标单击(左下+左上)发送到按钮的示例,但我没有包含通过编程查找窗口和获取窗口大小的代码
[StructLayout(LayoutKind.Sequential)]
public struct MINPUT
{
internal uint type;
internal short dx;
internal short dy;
internal ushort mouseData;
internal ushort dwFlags;
internal ushort time;
internal IntPtr dwExtraInfo;
internal static int Size
{
get { return Marshal.SizeOf(typeof(INPUT)); }
}
}
const ushort MOUSEEVENTF_ABSOLUTE = 0x8000;
const ushort MOUSEEVENTF_LEFTDOWN = 0x0002;
const ushort MOUSEEVENTF_LEFTUP = 0x0004;
// programatically determine the position and size of the TabTip window
// compute the location of the center of the &123 key
int coordinateX = ...
int coordinateY = ...
var pInputs = new[] {
new MINPUT() {
type = 0×01; //INPUT_KEYBOARD
dx = coordinateX,
dy = coordinateY;
dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
time = 0;
dwExtraInfo = IntPtr.Zero;
},
new MINPUT() {
type = 0×01; //INPUT_KEYBOARD
dx = coordinateX,
dy = coordinateY;
dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;
time = 0;
dwExtraInfo = IntPtr.Zero;
}
};
SendInput((uint)pInputs.Length, pInputs, MINPUT.Size);
为什么不将编辑控件的输入范围设置为数字?具有正确属性的新内置编辑控件在触摸时自动触发数字模式
不要对触摸输入面板进行黑客攻击,因为触摸输入面板在不同的地区显示不同,等等。将文本框的
InputScope
设置为Number
,让Windows发挥神奇的作用。嗨,Miky,我认为这不是我问题的答案。在Windows 8上,当您运行TabTip.exe时,屏幕上会弹出一个键盘。这有一个我想按的&123键。我在我的原始问题中添加了一个图像,以使问题更清楚。你说得对。。我似乎误解了你的问题,不如用鼠标事件来代替。您可以使用SendInput模拟鼠标单击,并根据TabTip窗口的位置以编程方式确定&123键的坐标。这确实有效,但并不是真正想要的效果。现在键盘弹出字母数字,然后我模拟鼠标按键,然后键盘切换到数字。因此,用户可以看到交换。不太理想。但这和我想解决的问题是一样的,所以你的答案是正确的。我将从我的应用程序中删除它,因此如果需要,用户必须手动切换到数字键盘。