我嘗試使用SendMessage函數從我的C++應用程序將消息傳遞給C#SendMessage函數窗口句柄
我的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;
}
我試着用SendMessageW也是我硬編碼的處理這是正確的我正在hetting回調,但沒有得到任何數據
我的C#應用程序是這樣的
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);
}
我得到的消息框空白...... 我試着用了用COPYDATASTRUCT只是我的傳球串PLZ任何一個可以幫助我..提前 感謝
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,WM_COPYDATA,0,(LPARAM)&cpd);
return 0;
}
C#代碼
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
public const int WM_COPYDATA = 0x4A;
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 WM_COPYDATA:
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);
}
的[建議'COPYDATASTRUCT'(http://www.pinvoke.net/default .aspx/Structures/COPYDATASTRUCT.html)似乎看起來不同於你的。 (例如'LayoutKind.Sequential'屬性)。 –
該註釋涉及'WM_ACTIVATEAPP','COPYDATASTRUCT'建議'WM_COPYDATA',但5555既不是那些。 – hvd
是的,你是對的....謝謝你v多.....我沒想過....謝謝你的hvd –