我有一个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);
}
当然,这段代码需要一些额外的检查,以确保我们实际上处于平板电脑模式。