如何显示WIndows开始菜单

时间:2009-09-02 20:39:47

标签: winapi

我需要在鼠标位置激活Windows开始菜单。

我知道我可以将CTRL + ESC或Win键发送到特定窗口,然后移动窗口,但它仍然会在原始位置显示菜单很短的时间(除非我安装了挂钩,这样就太过分了任务)。

我记得有一些方法可以做到这一点,使用一些dll调用或向shell发送一些消息或其他东西。

2 个答案:

答案 0 :(得分:1)

如果您以编程方式“按下”按钮,会得到相同的行为吗?

  // Find the Start button
  HANDLE hScreenDC = GetDC(0);
  DWORD height = GetDeviceCaps(hScreenDC, VERTRES);
  ReleaseDC(0, hScreenDC);
  hTaskBarWnd = FindWindow("Shell_TrayWnd", 0);
  hStartButtonWnd = GetWindow(hTaskBarWnd, GW_CHILD);

  // Now simulate a press on the Start button
  SendMessage(hButtonWnd, WM_LBUTTONDOWN,
        MK_LBUTTON, LOWORD(5) + HIWORD(height - 20));

否则,您可以使用WinSpy++或使用类似的实用程序浏览“Shell_TrayWnd”窗口,也许“开始”菜单是托盘窗口的子窗口。

答案 1 :(得分:1)

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow (string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
public static extern bool ShowWindow (IntPtr hWnd, ShowWindowCommand nCmdShow);

int ShowCmd = 5;
int HideCmd = 0;
ShowWindow(FindWindow("DV2ControlHost", "Start menu"), ShowCmd);

至少应该在Windows 7中做到这一点。使用“HideCmd”代替“ShowCmd”再次隐藏。