2010-05-20 4 views
0

Je développe une application C#/.NET CF 2.0: elle est censée être utilisée avec l'écran tactile désactivé, alors, je cherche un moyen de ouvrir par programme le menu de l'application (pas le menu Windows).Comment ouvrir par programme le menu de l'application dans une application .NET CF 2.0

Vous cherchez here J'ai essayé d'adapter le code aux FC .NET 2, mais il ne fonctionne pas (aucun message d'erreur ni)

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

Toutes les idées?

TIA, Pablo


Après Hans réponse, j'edited le code à

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

et a ajouté une option de sous-menu comme & recherche, mais il ne fait aucune différence

Répondre

0

Eh bien, ça marche maintenant, mais en utilisant une approche différente: émuler la touche ALT. Il a fait l'affaire sur mon appareil (un Psion NEO), mais pas dans l'émulateur, mais ça va pour l'instant.

C'est le code (la plupart du temps basé sur 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); 
Questions connexes