Как программно открыть меню приложения в приложении .NET CF 2.0 - PullRequest
0 голосов
/ 20 мая 2010

Я разрабатываю приложение на C # / .NET CF 2.0: оно должно использоваться с отключенным сенсорным экраном, а затем я ищу способ программно открыть меню приложения (не меню Windows). *

Глядя здесь Я пытался адаптировать код для .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


После ответа Ганса я отредактировал код до

Message msg = Message.Create(this.Handle, WM_SYSCOMMAND, 
    new IntPtr(SC_KEYMENU), new IntPtr(115));  // 's' key

и добавил опцию подменю как & Поиск, но это не имеет значения

1 Ответ

0 голосов
/ 21 мая 2010

Ну, это работает сейчас, но с использованием другого подхода: эмуляция клавиши ALT. Это сработало на моем устройстве (Psion NEO), но не в эмуляторе, но пока нормально.

Это код (в основном на основе этого поста )

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);
...