日期:2014-05-20  浏览次数:20896 次

请问怎么在C#里用API函数SendMessage来显示标题栏的系统菜单???
如题!!!


------解决方案--------------------
[DllImport( "User32.dll ")]
static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport( "User32.dll ")]
static extern int SendMessage(IntPtr hWnd,int msg,int wParam,ref int lParam);
用this.Handle得到当前窗口的Handle,然后传递给SendMessage IntPtr 参数,消息编号根据你需要使用的功能自己查阅
------解决方案--------------------
这样试试看:
[DllImport( "User32.dll ")]
public static extern IntPtr GetSystemMenu(IntPtr hWnd, int bRevert);
[DllImport( "user32.dll ", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool TrackPopupMenuEx(IntPtr hmenu, int fuFlags, int x, int y, IntPtr hwnd, TPMPARAMS tpm);
private void btnShowSysMenu_Click(object sender, EventArgs e)
{
IntPtr hMenu;
Point location = this.Location;
hMenu = GetSystemMenu(this.Handle, 0);
TrackPopupMenuEx(hMenu, 0x42, location.X, location.Y, this.Handle, null);
}

------解决方案--------------------
using System.Runtime.InteropServices;

const uint TPM_LEFTBUTTON = 0;
const uint TPM_RIGHTBUTTON = 2;
const uint TPM_LEFTALIGN = 0;
const uint TPM_CENTERALIGN = 4;
const uint TPM_RIGHTALIGN = 8;
const uint TPM_TOPALIGN = 0;
const uint TPM_VCENTERALIGN = 0x10;
const uint TPM_BOTTOMALIGN = 0x20;
const uint TPM_RETURNCMD = 0x100;
const uint WM_SYSCOMMAND = 0x0112;

#region DllImport
[DllImport( "User32.dll ")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport( "User32.dll ")]
static extern bool GetCursorPos(out Point lpPoint);
[DllImport( "User32.dll ")]
static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags,
int x, int y, int nReserved, IntPtr hWnd, out Rectangle prcRect);
[DllImport( "User32.DLL ")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
#endregion

private void button1_Click(object sender, EventArgs e)
{
Point vPoint;
Rectangle vRect;
GetCursorPos(out vPoint);
SendMessage(Handle, WM_SYSCOMMAND, TrackPopupMenu(
GetSystemMenu(Handle, false),
TPM_RETURNCMD | TPM_LEFTBUTTON, vPoint.X, vPoint.Y,
0, Handle, out vRect), 0);
}

------解决方案--------------------
加入TPM_RETURNCMD就会返回用户点击菜单的Command值
然后发送WM_SYSCOMMAND消息模拟