(システム全体で一意であることが保証されている新しいウィンドウ メッセージを定義しRegisterWindowMessage
ます。メッセージの値は、メッセージを送信または投稿するときに使用できます。)
RegisterWindowMessage 関数は、通常、2 つの連携アプリケーション間で通信するためのメッセージを登録するために使用されます。
2 つの異なるアプリケーションが同じメッセージ文字列を登録すると、アプリケーションは同じメッセージ値を返します。メッセージは、セッションが終了するまで登録されたままになります。
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);
}
}