1. 程式人生 > >winform與WPF間訊息處理

winform與WPF間訊息處理

當使用winform啟動WPF應用時,傳參比較簡單,直接使用程序之間傳遞引數,若winform向已啟動的WPF中傳引數,則使用訊息處理

winform程式,本例使用控制檯

實體類 

namespace ConsoleApplication1
{
     [StructLayout(LayoutKind.Sequential)]
        public struct Entity
        {
            public IntPtr dwData;

            public int cbData;

            [MarshalAs(UnmanagedType.LPStr)]

            public string lpData;

        } 
}
</pre><pre name="code" class="csharp">

傳送端(控制檯程式)

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string ch = ""; 
            while (ch.ToLower() != "q") 
            {

                if (!SendMessage("MainWindow",ch)) 
                {
                    Console.WriteLine("無視窗MainWindow");

                }; 
                ch = Console.ReadLine(); 
            } 
        }

         public static bool SendMessage(string windowName, string strMsg) 
        { 
            if (strMsg == null) return true; 
            IntPtr hwnd = (IntPtr)FindWindow(null, windowName   ); 
            if (hwnd != IntPtr.Zero) 
            {
                Entity entity;
                entity.dwData = IntPtr.Zero;
                entity.lpData = strMsg;
                entity.cbData = System.Text.Encoding.Default.GetBytes(strMsg).Length + 1; 
                int fromWindowHandler = 0;
               //處理為非0,未處理0
           int result = SendMessage(hwnd, 0x004A, fromWindowHandler, ref entity); 
           Console.WriteLine(result);
                return true; 
            } 
            return false; 
        } 

        [DllImport("User32.dll", EntryPoint = "FindWindow")] 
        private static extern int FindWindow(string lpClassName, string lpWindowName); 

        [DllImport("User32.dll", EntryPoint = "SendMessage")] 




        private static extern int SendMessage 
        ( 

        IntPtr hWnd, 

        int Msg, 

        int wParam,

         ref Entity lParam 

        ); 

    }
}
接收端(WPF)
namespace WpfApplication29
{
	/// <summary>
	/// MainWindow.xaml 的互動邏輯
	/// </summary>
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			this.InitializeComponent();

			// 在此點下面插入建立物件所需的程式碼。
		}


        IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {

            if (msg == 0x004A)
            {
                Entity obj = (Entity)System.Runtime.InteropServices.Marshal.PtrToStructure(lParam, typeof(Entity));
               if(obj.lpData.Trim()!="")
               {
                   MessageBox.Show(obj.lpData);
 <span style="white-space:pre">		</span>   handled = true;//指示訊息是否已處理
               }
            }

            return hwnd;

        }

        private void WindowLoaded(object sender, RoutedEventArgs e)
        {
            (PresentationSource.FromVisual(this) as System.Windows.Interop.HwndSource).AddHook(new System.Windows.Interop.HwndSourceHook(WndProc)); 
        } 

	}
}



相關推薦

winformWPF訊息處理

當使用winform啟動WPF應用時,傳參比較簡單,直接使用程序之間傳遞引數,若winform向已啟動的WPF中傳引數,則使用訊息處理 winform程式,本例使用控制檯 實體類  namespace ConsoleApplication1 { [StructLa

winFormWPF訊息處理

在學MFC 的第一課就是講windows的訊息機制,其中這一部分是通過WndProc這個函式來完成的,用一個訊息迴圈來捕捉訊息。 雖然在WPF裡 沒有 WndProc 這個函式,但是提供了另一種方法來完成掛鉤的功能。 在WinForm 裡 只需過載 Wnd

WinFormWPF互操作,在WPF的TextBox中無法輸入文字

問題:WinForm專案新增WPF專案後,在WPF的TextBox中無法輸入文字 解決方案:在窗體show()之前,新增中間那句話。 注意: 工程新增引用WindowsFormsIntegration,而且還需要新增PresentationCore、Presentation

WinformWPF對話方塊(MessageBox, Dialog)之比較

Winform:使用System.Windows.Forms名稱空間中相應控制元件; WPF則呼叫Microsoft.Win32。MessageBox:// WinForm        private void WFMessageBoxClicked(object send

Wpf WndProc 訊息處理

public MainWindow() { InitializeComponent(); this.SourceInitialized += new EventHandler(WSInitialized);

WPF訊息機制(三)- WPF內部的5個視窗之處理啟用和關閉的訊息視窗以及系統資源通知視窗

原文: WPF的訊息機制(三)- WPF內部的5個視窗之處理啟用和關閉的訊息視窗以及系統資源通知視窗 目錄 WPF的訊息機制(一)-讓應用程式動起來 WPF的訊息機制(二)-WPF內部的5個視窗 (1)隱藏訊息視窗 (2)處理啟用和關閉的訊息視窗和系統資源通知視窗

Windows程式和訊息機制(三):訊息程序通訊

自定義訊息與程序間通訊 視窗程式可以接收自定義的訊息型別,前提是通訊的程序聲明瞭這種訊息型別,宣告的方法很簡單,WM_USER加一個值就可以了,一般加的值從0x400開始,其他的值已經被系統使用了。 實現一個完整的自定義訊息需要進行以下步驟:

[Xcode10 實際操作]八、網路多執行緒-(18)PerformSelector訊息處理方法:由執行時系統,負責去呼叫物件的指定方法

本文將演示PerformSelector訊息處理方法。在專案資料夾上點選滑鼠右鍵彈出檔案選單。【New File】->【Swift File】->【Next】->【Save As】:iOSApp.swift->【Create】現在開始編寫程式碼,建立Swift類【iOSApp.swif

三、訊息處理過程叢集維護

一、Kafka訊息組織原理 1.磁碟重認識 當需要從磁碟讀取資料時,要確定讀的資料在哪個磁軌,哪個扇區:首先必須找到柱面,即磁頭需要移動對準相應磁軌,這個過程叫做尋道,所耗費時間叫做尋道時間;然後目標扇區旋轉到磁頭下,這個過程耗費的時間叫做旋轉時間;一次訪盤請求(讀/寫)完成過程由三個動作組成尋道

C# winform 控制元件執行緒更新問題處理方法

1、程式入口新增:Control.CheckForIllegalCrossThreadCalls = false; 2、重新整理控制元件上新增Invoke方法:this.Invoke(handler, new object[] { e });

Android WebViewJS互動及訊息處理

一、WebView與JS互動 1.JS呼叫本地方法 這個功能的實現還是比較容易的。直接呼叫WebView的該方法就可以新增介面了,不過先要啟動互動 ? 1 2 3 4 // 啟用javascript  mWebView.getSettin

Objective-C映客房訊息策略分析實現

最近直播這麼火,今天分析一下映客的房間訊息模組。 映客的房間訊息策略大體上是這樣的: • 訊息積累到一定量之後,便把之前的訊息丟棄掉。 • 訊息的顯示是有訊息則自動滾動到底部,如果使用者滑動訊息,則暫時停止滾動,5秒內不作操作則繼續自動滾動。 • 訊息在最

【Android 開發】: Android 訊息處理機制之一: Handler Message

    最近幾講內容,我們學習了Android中關於多執行緒的一些知識,上一講我們講解了非同步任務 AsyncTask 的操作,Android中還提供了其他的執行緒操作,如Handler Message MessageQueue Looper 等模組,這些就是Android

第四篇 :微信公眾平臺開發實戰Java版之完成訊息接受相應以及訊息處理

溫馨提示:      這篇文章是依賴前幾篇的文章的。 首先,我們看看原來寫的dopost方法: /** * 處理微信伺服器發來的訊息 */ public void doPost(HttpServletRequest request, Http

WPF中,ListBox資料的繫結

<Windowx:Class="ListBinding.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xa

Unity中接入高德地圖 UI疊加訊息處理

程式中有兩個UIView,高德地圖的View在下層,Unity的View在上層,當滑鼠點選到Unity中的UI或其他物件時,Unity截獲點選訊息,否則高德地圖處理點選訊息。 一:Unity設定NGUI Camera Clear Flags 設定為:Solid Color

WinformWPF、Silverlight、MFC區別聯絡

WinForm 在Windows中,諸如窗體繪製等功能由GDI(圖形裝置介面)實現,放在作業系統核心中。Windows Forms在底層使用的是GDI+。GDI+是GDI的“面向物件包裝”,使用C++實現。.NET Windows Forms應用程式中使用的GDI+其實

qt 訊息處理機制深入分析 (Qt訊息機制window程式訊息的對比)

理解Qt訊息機制刻不容緩,那我們從對比傳統的windows訊息處理機制對比來說起; 只有知道QT底層的訊息處理、對我們理解並學習Qt有很大幫助; 下面我將對windows程式與Qt對比,並在核心程式碼處並給出註釋進行對比、方便學習。 注意重點看程式碼中的注視進行對比:!

windows 訊息機制、視窗過程執行緒訊息傳遞

按照自己的理解好好整理一遍 訊息機制 windows是一個訊息驅動的系統,會有一個總的系統訊息的佇列,滑鼠、鍵盤等等都會流入到這個佇列中,同時會為每個執行緒維護一個訊息佇列(注意預設是有GUI呼叫的執行緒才有,對於沒有GUI或者視窗的執行緒,只有當線上程內呼叫get/pe

C#中訊息處理機制(事件委託)

編寫過Windows桌面應用程式的人都知道,微軟的Windows作業系統與應用程式之間的通訊絕大部分是基於訊息迴圈機制的。在VC++中,程式使用GetMessage,TranslateMessage,DispatchMessage語句從訊息佇列中獲取訊息,轉換訊息並且將訊息分發到目標視窗的過程函式,並由過程