Announcement

Collapse
No announcement yet.

String mit SendMessage senden und in MFC Anwendung auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String mit SendMessage senden und in MFC Anwendung auslesen

    Hi,
    Ich versuche mit C# einen string/string pointer per Windos Message mit Invoking zu schicken.

    Code:
            #region SendReceiveMessage
    
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string strClassName, string strWindowName);
    
            [DllImport("user32.dll")]
            public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr
            lParam);
    
            public const int WM_APP = 0x8000;
            public const int WM_MYMSG =WM_APP + 0x100;
            
    
            void SendMessageToUnmanaged()
            {
                IntPtr hWnd = FindWindow(null, "Fenstername");
    
                string s = "Somestring";
    
                IntPtr sNative = Marshal.StringToHGlobalAuto(s);
                IntPtr result = SendMessage(hWnd, WM_MYMSG, (IntPtr)1234, sNative);
                Marshal.FreeHGlobal(sNative);
              
    
                /*
                IntPtr ptr = Marshal.StringToHGlobalAnsi(Environment.CommandLine);
                IntPtr result = SendMessage(hWnd, WM_MYMSG, (IntPtr)1234, ptr);
                 */
    
    
            }
    
            #endregion
    Das ganze funktioniert auch problemlos.
    Aber wenn ich jetzt versuche die Message in einer MFC Anwendung zu empfangen:

    Code:
    BEGIN_MESSAGE_MAP(CIProgDlg, CDialog)
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_BUTTON2, &CIProgDlg::OnBnClickedButton2)
    
    	// Eigene Message
    	ON_MESSAGE ( WM_MYMSG, OnMyMsg )
    END_MESSAGE_MAP()
    
    
    // Eigene Message
    LRESULT CIProgDlg::OnMyMsg(WPARAM wParam, LPARAM lParam)
    {
    	int wP = wParam;
    	char* lP = (char*)lParam;
    
    	return MessageBox(L"Hello",L"Top",MB_OK);
    }
    Bekomme ich die Werte:
    Wparam = 1234

    Lparam = 84393680

    Der String:
    lp = 0x0048a018 “”
    oder
    0x004da1b8 “Y+Ö”
    oder andere kryptische sachen. Mit StringToHGlobalAnsi das Gleiche. Wie bekomme ich denn den richtigen string wieder raus?
    Mit freundlichen Grüßen
    Vielen Dank
Working...
X