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">
傳送端(控制檯程式)
接收端(WPF)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 ); } }
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));
}
}
}
相關推薦
winform與WPF間訊息處理
當使用winform啟動WPF應用時,傳參比較簡單,直接使用程序之間傳遞引數,若winform向已啟動的WPF中傳引數,則使用訊息處理 winform程式,本例使用控制檯 實體類 namespace ConsoleApplication1 { [StructLa
winForm和WPF的訊息處理
在學MFC 的第一課就是講windows的訊息機制,其中這一部分是通過WndProc這個函式來完成的,用一個訊息迴圈來捕捉訊息。 雖然在WPF裡 沒有 WndProc 這個函式,但是提供了另一種方法來完成掛鉤的功能。 在WinForm 裡 只需過載 Wnd
WinForm與WPF互操作,在WPF的TextBox中無法輸入文字
問題:WinForm專案新增WPF專案後,在WPF的TextBox中無法輸入文字 解決方案:在窗體show()之前,新增中間那句話。 注意: 工程新增引用WindowsFormsIntegration,而且還需要新增PresentationCore、Presentation
Winform與WPF對話方塊(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 WebView與JS互動及訊息處理
一、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
Winform、WPF、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語句從訊息佇列中獲取訊息,轉換訊息並且將訊息分發到目標視窗的過程函式,並由過程