我一直在研究如何以编程方式打开“开始”菜单,但问题是我希望它在我正在创建的应用程序旁边打开它。
我正在屏幕顶部制作一个工具栏,带有一个打开开始菜单的按钮,但我希望开始菜单在按钮下方而不是任务栏附近打开。我正在使用这个问题的答案中提供的代码,它只发送所需的按键 (LWin) 来打开开始菜单。
这在 C# 中可能吗?如果是这样,我该怎么做?
编辑:显然,这仅适用于英文版的 Windows,因为每个翻译中的“开始菜单”都不同。不过,这仍然有效(只要 Windows 安装为英文)。
我得到了它!这行得通,虽然我不知道它有多漂亮:
public partial class Form1 : Form {
private void button1_Click(object sender, EventArgs e) {
int ShowCmd = 5;
MoveWindow(FindWindow("DV2ControlHost", "Start menu"), X_POS, Y_POS, WIDTH_HERE, HEIGHT_HERE, false);
ShowWindow(FindWindow("DV2ControlHost", "Start menu"), ShowCmd);
}
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint);
}
这是SO 上的这个问题和针对 C# 修改的这篇 MSDN 文章的混合体。同样,我不确定代码有多好,但它可以完成工作。