The basic idea is to find the Start menu button window and simulate the user to click
Void pop ()
{
User32.EnumWindows (new EnumProc (Enum), 0 );
}
Private bool Enum (IntPtr hWnd, uint param)
{
User32.STRINGBUFFER buffer = new User32.STRINGBUFFER ();
User32.GetClassName (hWnd, ref buffer, 256 );
If (buffer. szText = "Shell_TrayWnd ")
{
User32.EnumChildWindows (hWnd, new EnumProc (Enum2), 0 );
Return false;
}
Else return true;
}
IntPtr lastForeGroundWindow;
Private bool Enum2 (IntPtr hWnd, uint param)
{
User32.STRINGBUFFER buffer = new User32.STRINGBUFFER ();
User32.GetClassName (hWnd, ref buffer, 256 );
If (buffer. szText = "Button ")
{
If (User32.SendMessage (hWnd, WndMsg. BM_GETSTATE, 0, 0) = User32.BST _ PUSHED)
{
User32.SetForegroundWindow (lastForeGroundWindow );
}
Else
{
LastForeGroundWindow = User32.GetForegroundWindow ();
User32.SetForegroundWindow (hWnd );
User32.PostMessage (hWnd, WndMsg. BM_CLICK, 0, 0 );
}
Return true;
}
Else
Return false;
}