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

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

不明白请查看:http://community.csdn.net/Expert/topic/5293/5293542.xml?temp=.3471643

------解决方案--------------------
[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 参数,消息编号根据你需要使用的功能自己查阅
------解决方案--------------------
//楼主分散了,别光给我一人...

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);
}

------解决方案--------------------
首先你得标题栏的窗口句柄~~ 用FindWindow 和FindWindowEx 比较通用点
[DllImport( "user32.dll ")]
public static extern IntPtr FindWindow(string IpClassName, string IpWindowName);