在Windows 10平板电脑模式下关闭win form应用程序后返回开始菜单

时间:2017-01-17 17:29:55

标签: c# windows winforms tablet

我有一个winform应用程序(C#),我在平板电脑模式下运行的Windows平板电脑上运行。然而,当我关闭应用程序时,屏幕会进入桌面,在平板电脑模式下,桌面只是一个空白屏幕的任务栏。直到你点击屏幕它才会拉出开始菜单。

由于某些原因,这似乎与在平板电脑模式下运行的任何winform应用程序一致,但无论如何我想在关闭应用程序后找到一种简单启动开始菜单的方法。

我尝试在应用程序关闭后通过调用模拟鼠标单击(信用到https://www.gamedev.net/topic/321029-how-to-simulate-a-mouse-click-in-c/):

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;    

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}

但这不起作用。我尝试使用任务栏设置来查看是否可以通过Windows修复它而没有运气。

有没有人知道如何在通过代码或设置关闭winform应用程序后简单地调出开始菜单?

1 个答案:

答案 0 :(得分:0)

我在这篇文章的帮助下解决了这个问题:SendKeys.Send and Windows Key

看起来不是发送鼠标点击,而是发送一个键,然后按下LWin键,这就是诀窍:

    [DllImport("user32.dll")]
    private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

    private const int KEYEVENTF_EXTENDEDKEY = 1;
    private const int KEYEVENTF_KEYUP = 2;


    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
         keybd_event((byte)Keys.LWin, 0, KEYEVENTF_EXTENDEDKEY, 0);
         keybd_event((byte)Keys.LWin, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }

当然,此代码需要一些额外的检查,以确保我们实际上处于平板电脑模式。