WPF는 메시지 메커니즘을 통한 프로세스 간 통신(IPC)
7704 단어 WPF
[StructLayout(LayoutKind.Sequential)]
public struct CopyDataStruc
{
public IntPtr dwData;
public int cbData; //
[MarshalAs(UnmanagedType.LPStr)]
public string lpData; //
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
(PresentationSource.FromVisual(this) as HwndSource).AddHook(new HwndSourceHook(this.WndProc));
}
IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == MessageHelper.WM_DOWNLOAD_COMPLETED)
{
//CopyDataStruct cds = (CopyDataStruct)System.Runtime.InteropServices.Marshal.PtrToStructure(lParam, typeof(CopyDataStruct));
MessageBox.Show("I got it!");
}
return hwnd;
}
송신자 코드:
private void PostMessage()
{
Process proc = Process.GetProcessesByName("MyAppSample")[0];
//Process[] procs = Process.GetProcesses();
//foreach (Process p in procs)
//{
// if (p.ProcessName == "MyAppSample")
// {
// proc = p;
// }
//}
IntPtr hwnd = MessageHelper.FindWindow(null, "MainWindow");
MessageHelper.PostMessage(hwnd, MessageHelper.WM_DOWNLOAD_COMPLETED, IntPtr.Zero, IntPtr.Zero);
MessageHelper.PostMessage(proc.MainWindowHandle, MessageHelper.WM_DOWNLOAD_COMPLETED, IntPtr.Zero, IntPtr.Zero);
}
public class MessageHelper
{
public const int WM_DOWNLOAD_COMPLETED = 0x00AA;
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
//private static extern int SendMessage
//(
// IntPtr hWnd, //
// int Msg, //WM_COPYDATA
// int wParam, //
// ref CopyDataStruct lParam //
//);
[DllImport("User32.dll", EntryPoint = "PostMessage")]
public static extern int PostMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MaterialDesign의 ComboBox HasClearButton 크기 변경WPF MaterialDesign은 편리하지만 때로는 표시가 너무 크거나 약간 사용하기 쉽습니다. ComboBox를 사용할 때 선택한 버튼을 지우려면 지우기 버튼을 표시할 수 있습니다. 아래와 같은 표시가 됩니다 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.