[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); } |