我正在开发一个C#/ .NET CF 2.0应用程序:它应该在停用触摸屏的情况下使用,然后,我正在寻找一种以编程方式打开应用程序菜单(而不是Windows菜单)的方法。
看here我试图将代码改编为.NET CF 2,但它不起作用 (既没有错误消息也没有)
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_KEYMENU = 0xF100;
private void cmdMenu_Click(object sender, EventArgs e)
{
Message msg = Message.Create(this.Handle, WM_SYSCOMMAND,
new IntPtr(SC_KEYMENU), IntPtr.Zero);
MessageWindow.SendMessage(ref msg);
}
有什么想法吗?
TIA,Pablo
Hans回答后,我将代码编辑为
Message msg = Message.Create(this.Handle, WM_SYSCOMMAND,
new IntPtr(SC_KEYMENU), new IntPtr(115)); // 's' key
并添加了一个子菜单选项作为& Search,但它没有任何区别
答案 0 :(得分:0)
嗯,它现在正在运行,但使用不同的方法:模拟ALT键。它在我的设备上做了一个技巧(一个Psion NEO),但不是在模拟器中,但它现在没问题。
这是代码(主要基于this post)
private void cmdMenu_Click(object sender, EventArgs e)
{
const int VK_MENU = 0x12;
SendKey(VK_MENU);
}
public static void SendKey(byte key)
{
const int KEYEVENTF_KEYUP = 0x02;
const int KEYEVENTF_KEYDOWN = 0x00;
keybd_event(key, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
}
[System.Runtime.InteropServices.DllImport("coredll", SetLastError = true)]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);