WPFと例えば
プロセスコードを受け取ります
受信トリガイベントを追加します。1.
this.Title = "フォーム名";
this.SourceInitialized + =新しいEventHandlerの(win_SourceInitialized)。
2.受信方法
ボイドwin_SourceInitialized(オブジェクト送信者、のEventArgs電子)
{
HwndSourceとしてHwndSource hwndSource = PresentationSource.FromVisual(本)
(!hwndSource = null)の場合は
{
hwndSource.AddHook(新しいHwndSourceHook(WndProcメソッド));
}
}
民間のconst int型WM_COPYDATA = 0x004A; //別のアプリケーション・コードは固定変更できない場合、アプリケーションは、データ転送にこのメッセージを送信する
保護された仮想のIntPtrのWndProc(のIntPtr HWND、INT MSG、のIntPtr wParamに、のIntPtr lParamに、処理さBOOL REF)
{
スイッチ(MSG)
{
ケースWM_COPYDATA:
//あなたのコード
HandleCollector(HWND、lParamに);
取扱= trueに、
BREAK;
}
IntPtr.Zeroを返します。
}
//によって必要とされるWM_COPYDATAメッセージデータ構造
パブリック構造体COPYDATASTRUCT
{
公共のIntPtr dwData;
公共INT CBDATA。
[MarshalAs(UnmanagedType.LPStr)]
パブリック文字列lpData。
}
プライベートボイドHandleCollector(System.IntPtr HWND、System.IntPtrのlParam)
{
COPYDATASTRUCT MMI =(COPYDATASTRUCT)Marshal.PtrToStructure(lParamに、typeof演算(COPYDATASTRUCT))。
(mmi.lpData == "最大化")であれば
{
this.ShowInTaskbar = TRUE。
ショー();
アクティブ();
this.WindowState = WindowState.Maximized。
}
}
送信者
//によって必要とされるWM_COPYDATAメッセージデータ構造
パブリック構造体COPYDATASTRUCT
{
公共のIntPtr dwData;
公共INT CBDATA。
[MarshalAs(UnmanagedType.LPStr)]
公共の文字列lpData。
}
公共CONSTはWM_COPYDATA = 0x004A INT;アプリケーションが別のアプリケーションにデータを渡すためのメッセージを送信する//固定コードは変更できない場合
//ウィンドウハンドルのウィンドウタイトルに目を通す
[DLLIMPORT( "User32.dllの"、エントリーポイント= "FindWindowを")]
プライベート静的にextern int型のFindWindow(lpClassName文字列、文字列lpWindowName)。
// DLLライブラリ機能でメッセージを送信します
[DLLIMPORT( "User32.dllの"、エントリーポイント= "のSendMessage")]
プライベート静的にextern int型のSendMessage
(
int型のハンドルhWndを、//ターゲットウィンドウ
//ここではメッセージ、int型WM_COPYDATA
INTのwParam、//最初のメッセージパラメータ
COPYDATASTRUCTのlParam //第2のメッセージパラメータREF
)。
トリガーの送信方法
VaRのMSG = "最大化";
COPYDATASTRUCTのCDS;
cds.dwData =(のIntPtr)1; //ここではいくつかのカスタムデータを渡されたが、唯一の4バイトの整数
cds.lpData = MSG; //文字のメッセージ文字列
cds.cbData = System.Text.Encoding.Default.GetBytes(MSG).LENGTH + 1; // ここで注目すべきは、カウントするバイト単位の長さである
のSendMessage(のFindWindow(NULL、 "名前の形式")、WM_COPYDATAを、0、REF CDS)。