Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将消息发送到窗口句柄 我尝试使用sEndoMeST将消息从C++应用程序传递到C<< /p> int _tmain(int argc, _TCHAR* argv[]) { COPYDATASTRUCT cpd; cpd.dwData = 0; LPCWSTR strDataToSend = L"http://google.com";; cpd.cbData = (wcslen(strDataToSend) + 1) * 2; cpd.lpData = (PVOID)strDataToSend; SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd); return 0; } public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } protected override void WndProc(ref Message m) { // Listen for operating system messages. switch (m.Msg) { // The WM_ACTIVATEAPP message occurs when the application // becomes the active application or becomes inactive. case 5555: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); Type mytype = mystr.GetType(); mystr = (COPYDATASTRUCT)m.GetLParam(mytype); MessageBox.Show ( mystr.cbData.ToString()); MessageBox.Show(mystr.lpData); break; } base.WndProc(ref m); } case WM_COPYDATA: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT)); if (mystr.cbData > 0) { byte[] data = new byte[mystr.cbData]; Marshal.Copy(mystr.lpData, data, 0, mystr.cbData); Encoding unicodeStr = Encoding.Unicode; char[] myString = unicodeStr.GetChars(data); string returnText = new string(myString); MessageBox.Show("Text is " + returnText); } break;_C#_C++_Sendmessage - Fatal编程技术网

C# 将消息发送到窗口句柄 我尝试使用sEndoMeST将消息从C++应用程序传递到C<< /p> int _tmain(int argc, _TCHAR* argv[]) { COPYDATASTRUCT cpd; cpd.dwData = 0; LPCWSTR strDataToSend = L"http://google.com";; cpd.cbData = (wcslen(strDataToSend) + 1) * 2; cpd.lpData = (PVOID)strDataToSend; SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd); return 0; } public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } protected override void WndProc(ref Message m) { // Listen for operating system messages. switch (m.Msg) { // The WM_ACTIVATEAPP message occurs when the application // becomes the active application or becomes inactive. case 5555: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); Type mytype = mystr.GetType(); mystr = (COPYDATASTRUCT)m.GetLParam(mytype); MessageBox.Show ( mystr.cbData.ToString()); MessageBox.Show(mystr.lpData); break; } base.WndProc(ref m); } case WM_COPYDATA: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT)); if (mystr.cbData > 0) { byte[] data = new byte[mystr.cbData]; Marshal.Copy(mystr.lpData, data, 0, mystr.cbData); Encoding unicodeStr = Encoding.Unicode; char[] myString = unicodeStr.GetChars(data); string returnText = new string(myString); MessageBox.Show("Text is " + returnText); } break;

C# 将消息发送到窗口句柄 我尝试使用sEndoMeST将消息从C++应用程序传递到C<< /p> int _tmain(int argc, _TCHAR* argv[]) { COPYDATASTRUCT cpd; cpd.dwData = 0; LPCWSTR strDataToSend = L"http://google.com";; cpd.cbData = (wcslen(strDataToSend) + 1) * 2; cpd.lpData = (PVOID)strDataToSend; SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd); return 0; } public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } protected override void WndProc(ref Message m) { // Listen for operating system messages. switch (m.Msg) { // The WM_ACTIVATEAPP message occurs when the application // becomes the active application or becomes inactive. case 5555: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); Type mytype = mystr.GetType(); mystr = (COPYDATASTRUCT)m.GetLParam(mytype); MessageBox.Show ( mystr.cbData.ToString()); MessageBox.Show(mystr.lpData); break; } base.WndProc(ref m); } case WM_COPYDATA: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT)); if (mystr.cbData > 0) { byte[] data = new byte[mystr.cbData]; Marshal.Copy(mystr.lpData, data, 0, mystr.cbData); Encoding unicodeStr = Encoding.Unicode; char[] myString = unicodeStr.GetChars(data); string returnText = new string(myString); MessageBox.Show("Text is " + returnText); } break;,c#,c++,sendmessage,C#,C++,Sendmessage,我尝试了SendMessageW,我还硬编码了句柄,这是正确的,我正在回电话,但没有得到任何数据 我的C#申请书是这样的 int _tmain(int argc, _TCHAR* argv[]) { COPYDATASTRUCT cpd; cpd.dwData = 0; LPCWSTR strDataToSend = L"http://google.com";; cpd.cbData = (wcslen(strDataToSend) + 1) * 2; cp

我尝试了SendMessageW,我还硬编码了句柄,这是正确的,我正在回电话,但没有得到任何数据

我的C#申请书是这样的

int _tmain(int argc, _TCHAR* argv[])
{

 COPYDATASTRUCT cpd;
 cpd.dwData = 0;    
 LPCWSTR strDataToSend = L"http://google.com";;

     cpd.cbData = (wcslen(strDataToSend) + 1) * 2;
     cpd.lpData = (PVOID)strDataToSend; 
 SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd);


return 0;
}
    public struct COPYDATASTRUCT
    {
        public IntPtr dwData;
        public int cbData;
        [MarshalAs(UnmanagedType.LPStr)]
        public string lpData;
    }


    protected override void WndProc(ref Message m)
    {
        // Listen for operating system messages.

        switch (m.Msg)
        {
            // The WM_ACTIVATEAPP message occurs when the application
            // becomes the active application or becomes inactive.
            case 5555:

                COPYDATASTRUCT mystr = new COPYDATASTRUCT();
                Type mytype = mystr.GetType();
                mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                MessageBox.Show ( mystr.cbData.ToString());
                MessageBox.Show(mystr.lpData);
                break;
             }
             base.WndProc(ref m);
           }
  case WM_COPYDATA:        

                    COPYDATASTRUCT mystr = new COPYDATASTRUCT();             

                    mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));

                    if (mystr.cbData > 0)
                    {
                        byte[] data = new byte[mystr.cbData];
                        Marshal.Copy(mystr.lpData, data, 0, mystr.cbData);
                        Encoding unicodeStr = Encoding.Unicode;
                        char[] myString = unicodeStr.GetChars(data);
                        string returnText = new string(myString);
                        MessageBox.Show("Text is " + returnText);
                    }


                    break;
我得到的消息框是空白的。。。。。。 我尝试使用COPYDATASTRUCT只有我传递的字符串plz可以帮助我。。 提前谢谢


C#代码


我对源代码做了一点修改,它可以正常工作。从C++代码中我使用这个调用< /p>
SendMessage((HWND)0x0020073C,WM_COPYDATA,0,(LPARAM)和cpd)

在C#应用程序中,我使用了以下内容

public const int WM_COPYDATA = 0x004A;
而且
COPYDATASTRUCT

 [StructLayout(LayoutKind.Sequential)]
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cbData;
            public IntPtr lpData;
        }
消息处理程序修改如下

int _tmain(int argc, _TCHAR* argv[])
{

 COPYDATASTRUCT cpd;
 cpd.dwData = 0;    
 LPCWSTR strDataToSend = L"http://google.com";;

     cpd.cbData = (wcslen(strDataToSend) + 1) * 2;
     cpd.lpData = (PVOID)strDataToSend; 
 SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd);


return 0;
}
    public struct COPYDATASTRUCT
    {
        public IntPtr dwData;
        public int cbData;
        [MarshalAs(UnmanagedType.LPStr)]
        public string lpData;
    }


    protected override void WndProc(ref Message m)
    {
        // Listen for operating system messages.

        switch (m.Msg)
        {
            // The WM_ACTIVATEAPP message occurs when the application
            // becomes the active application or becomes inactive.
            case 5555:

                COPYDATASTRUCT mystr = new COPYDATASTRUCT();
                Type mytype = mystr.GetType();
                mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                MessageBox.Show ( mystr.cbData.ToString());
                MessageBox.Show(mystr.lpData);
                break;
             }
             base.WndProc(ref m);
           }
  case WM_COPYDATA:        

                    COPYDATASTRUCT mystr = new COPYDATASTRUCT();             

                    mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));

                    if (mystr.cbData > 0)
                    {
                        byte[] data = new byte[mystr.cbData];
                        Marshal.Copy(mystr.lpData, data, 0, mystr.cbData);
                        Encoding unicodeStr = Encoding.Unicode;
                        char[] myString = unicodeStr.GetChars(data);
                        string returnText = new string(myString);
                        MessageBox.Show("Text is " + returnText);
                    }


                    break;

我对源代码做了一点修改,它可以正常工作。从C++代码中我使用这个调用< /p>
SendMessage((HWND)0x0020073C,WM_COPYDATA,0,(LPARAM)和cpd)

在C#应用程序中,我使用了以下内容

public const int WM_COPYDATA = 0x004A;
而且
COPYDATASTRUCT

 [StructLayout(LayoutKind.Sequential)]
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cbData;
            public IntPtr lpData;
        }
消息处理程序修改如下

int _tmain(int argc, _TCHAR* argv[])
{

 COPYDATASTRUCT cpd;
 cpd.dwData = 0;    
 LPCWSTR strDataToSend = L"http://google.com";;

     cpd.cbData = (wcslen(strDataToSend) + 1) * 2;
     cpd.lpData = (PVOID)strDataToSend; 
 SendMessage((HWND)0x0020073C,5555,0,(LPARAM)&cpd);


return 0;
}
    public struct COPYDATASTRUCT
    {
        public IntPtr dwData;
        public int cbData;
        [MarshalAs(UnmanagedType.LPStr)]
        public string lpData;
    }


    protected override void WndProc(ref Message m)
    {
        // Listen for operating system messages.

        switch (m.Msg)
        {
            // The WM_ACTIVATEAPP message occurs when the application
            // becomes the active application or becomes inactive.
            case 5555:

                COPYDATASTRUCT mystr = new COPYDATASTRUCT();
                Type mytype = mystr.GetType();
                mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                MessageBox.Show ( mystr.cbData.ToString());
                MessageBox.Show(mystr.lpData);
                break;
             }
             base.WndProc(ref m);
           }
  case WM_COPYDATA:        

                    COPYDATASTRUCT mystr = new COPYDATASTRUCT();             

                    mystr = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));

                    if (mystr.cbData > 0)
                    {
                        byte[] data = new byte[mystr.cbData];
                        Marshal.Copy(mystr.lpData, data, 0, mystr.cbData);
                        Encoding unicodeStr = Encoding.Unicode;
                        char[] myString = unicodeStr.GetChars(data);
                        string returnText = new string(myString);
                        MessageBox.Show("Text is " + returnText);
                    }


                    break;

您试图做的是一些基本的IPC(进程间通信)

<>这不是C语言的问题,但是C++是。p> 也许一些基本的COM会对你有所帮助。这非常简单,您不再需要使用SendMessage、窗口句柄等


您试图做的是一些基本的IPC(进程间通信)

<>这不是C语言的问题,但是C++是。p> 也许一些基本的COM会对你有所帮助。这非常简单,您不再需要使用SendMessage、窗口句柄等


这辆车看起来和你的不一样。(例如,
LayoutKind.Sequential
属性)。注释指的是
WM\u ACTIVATEAPP
COPYDATASTRUCT
建议
WM\u COPYDATA
,但5555两者都不是。是的,你是对的。。。。非常感谢。。。。。我没有想到。。。。谢谢你的HVD看起来和你的不一样。(例如,
LayoutKind.Sequential
属性)。注释指的是
WM\u ACTIVATEAPP
COPYDATASTRUCT
建议
WM\u COPYDATA
,但5555两者都不是。是的,你是对的。。。。非常感谢。。。。。我没有想到。。。。谢谢你的hvd