Я работаю над переносом некоторого кода с c ++ на c #, и у меня возникли некоторые проблемы с получением PostMessage для работы в приложении c #.Я не очень хорош (пока) в MFC и думаю, что делаю несколько основных ошибок.Что происходит в коде c ++, так это то, что байтовый массив публикуется в окне:
unsigned long result[5] = {0};
//Put some data in the array
unsigned int res = result[0];
Text winName = "window name";
HWND hWnd = FindWindow(winName.getConstPtr(), NULL);
BOOL result = PostMessage(hWnd, WM_COMMAND, 10, res);
Я использую следующий код c # (на основе кода здесь ) в попыткесделать то же самое:
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern Int32 FindWindow(String lpClassName, String lpWindowName);
[DllImport("User32.dll", EntryPoint = "PostMessage")]
public static extern int PostMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.SafeArray)]
public byte[] lpData;
}
public static int sendWindowsByteMessage(int hWnd, int wParam, byte[] data)
{
int result = 0;
if (hWnd > 0)
{
int len = data.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = data;
cds.cbData = len + 1;
result = PostMessage(hWnd, WM_COPYDATA, wParam, ref cds);
}
return result;
}
byte[] result = getResults();
int hWnd = MessageHelper.FindWindow(null, "window name");
int status = MessageHelper.sendWindowsByteMessage(hWnd, 10, result);
Значение status всегда равно 0, что в соответствии с документами PostMessage означает сбой.Какие-нибудь указатели на (возможно простые) ошибки, которые я делаю?