[System.Security.SuppressUnmanagedCodeSecurity] [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern bool PeekMessage(out Message msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags); [DllImport("user32.dll", EntryPoint = "SendMessageA")] private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, string lParam); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
IntPtr hwnd;
private void WindowLoaded(object sender, EventArgs e) {
hwnd = new WindowInteropHelper(this).Handle; HwndSource.FromHwnd(hwnd).AddHook(new HwndSourceHook(WndProc));
} //接收windows消息
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { int WM_USER = 0x0400 + 111; if (msg == WM_USER) { //DecodeTouch(wParam, lParam); string dicom_file = Marshal.PtrToStringAnsi(wParam); handled = true; f_OpenDicom(dicom_file);
} return IntPtr.Zero; }
//发送windows消息
private void f_send_msg(string filePath) {
IntPtr hwnd_IFC; int WM_USER = 0x0400 + 111; hwnd_IFC = hwnd;//查找标题为frmPassive的窗体句柄
UnicodeEncoding encode = new UnicodeEncoding(); char[] chars = encode.GetChars(encode.GetBytes(filePath)); Message msg;
msg = Message.Create(hwnd_IFC, WM_USER, Marshal.StringToHGlobalAnsi(filePath), new IntPtr(0)); PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
} |