Mit folgender Klasse ist es möglich, spezif. Strings an ein Fenster zu senden. Die Auswertung dieser Messages innerhalb eigener Anwendungen ist in folgendem Artikel beschrieben: Link
- Aufruf-Beispiel:
CAppCtrlObj wc = new CAppCtrlObj(); // Fenster-Handle eines geöffneten Fensters holen IntPtr hWnd = wc.GetWindowHandle("MeinFensterName1", null); if ((int)hWnd != 0) { // an das gefundene Fenster eine Nachricht schicken, auf Ausführung warten IntPtr err = wc.SendStringMessageToWindow(hWnd, IntPtr.Zero, "Hallo."); if ((int)err != 0) { // Fehler beim Übermitteln } }
- Klasse:
using System.Runtime.InteropServices; /// <summary> /// Struct für die Stringübergabe an andere Fenster /// </summary> public struct SCopyData { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } public class CAppCtrlObj { #region Message-Konstanten aus der Windows.h public const int WM_COPYDATA = 0x4A; #endregion #region Importfunktionen aus User32.dll // http://www.pinvoke.net/default.aspx/user32.FindWindow [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); // http://boycook.wordpress.com/2008/07/29/c-win32-messaging-with-sendmessage-and-wm_copydata/ // http://craigcook.co.uk/samples/MessageHelper.cs.txt [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SendMessage(IntPtr hWnd, uint uiMsg, IntPtr wParam, ref SCopyData lParam); #endregion public CAppCtrlObj() { } /// <summary> /// ermittelt Fensterhandle /// </summary> /// <param name="sWindowTitle">Fenstertitel</param> /// <param name="sWindowClassName">Name der zugehörigen Fensterklasse, kann null sein</param> /// <returns>Handle</returns> public IntPtr GetWindowHandle(string sWindowTitle, string sWindowClassName) { return FindWindow(sWindowClassName, sWindowTitle); } /// <summary> /// String mittels WM_COPYDATA an ein Fenster senden, wartet auf Ausführung /// </summary> /// <param name="hWnd">Fensterhandle</param> /// <param name="wParam">1. Parameter, wenn nicht benötigt, dann IntPtr.Zero setzen</param> /// <param name="sMessage">2. Parameter als Nachrichtenstring</param> /// <returns>Status</returns> public IntPtr SendStringMessageToWindow(IntPtr hWnd, IntPtr wParam, string sMessage) { byte[] sarr = Encoding.Default.GetBytes(sMessage); SCopyData cds; cds.dwData = IntPtr.Zero; cds.lpData = sMessage; cds.cbData = sarr.Length + 1; // SCopyData an Zielfenster übermitteln return SendMessage(hWnd, WM_COPYDATA, wParam, ref cds); } }