看看RegisterWindowMessage
(定义一个新的窗口消息,保证在整个系统中是唯一的。消息值可以在发送或发布消息时使用。)
RegisterWindowMessage 函数通常用于注册消息,以便在两个协作应用程序之间进行通信。
如果两个不同的应用程序注册相同的消息字符串,则应用程序返回相同的消息值。该消息保持注册状态,直到会话结束。
static public class WinApi
{
[DllImport("user32")]
public static extern int RegisterWindowMessage(string message);
public static int RegisterWindowMessage(string format, params object[] args)
{
string message = String.Format(format, args);
return RegisterWindowMessage(message);
}
}
在启动应用程序之前注册消息
public class Program
{
public static readonly int WM_SHOWFIRSTINSTANCE =
WinApi.RegisterWindowMessage("WM_SHOWFIRSTINSTANCE|{0}", "ANY_UNIQUE_STING");
public static void Main()
{
}
}
在应用程序的主要形式
protected override void WndProc(ref Message message)
{
if (message.Msg == PROGRAM.WM_SHOWFIRSTINSTANCE) {
//show the window
}
base.WndProc(ref message);
}
从其他应用程序恢复窗口
public class OtherProgram
{
[DllImport("user32")]
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
[DllImport("user32")]
public static extern int RegisterWindowMessage(string message);
public static readonly int WM_SHOWFIRSTINSTANCE =
WinApi.RegisterWindowMessage("WM_SHOWFIRSTINSTANCE|{0}", "ANY_UNIQUE_STING");
public static void Main()
{
//public const int HWND_BROADCAST = 0xffff;
PostMessage(
(IntPtr)WinApi.HWND_BROADCAST,
WM_SHOWFIRSTINSTANCE,
IntPtr.Zero,
IntPtr.Zero);
}
}