如何以编程方式在.NET CF 2.0应用程序中打开应用程序菜单

时间:2010-05-20 16:00:13

标签: c# windows-mobile windows-ce

我正在开发一个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,但它没有任何区别

1 个答案:

答案 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);