我有一个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应用程序后简单地打开“开始”菜单吗?

最佳答案

我在这篇文章的帮助下解决了这个问题: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);
    }

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

10-07 14:19
查看更多