需要帮助的RegisterWindowMessage和SendMessage从c++到c#

Need help with RegisterWindowMessage and SendMessage from c++ to c#

本文关键字:c++ SendMessage 帮助 RegisterWindowMessage      更新时间:2023-10-16

我在c#中有以下代码:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern uint RegisterWindowMessage(string lpProcName);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(
   IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

,我需要将它从c++转换为c#:

UINT UWM_UART_CTRL_TRS = ::RegisterWindowMessage(_T("BT_UARTCTRL_TRANSFER"));
::SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, 0, 0);

:

UINT UWM_UART_CTRL_TRS = ::RegisterWindowMessage(_T("BT_UARTCTRL_TRANSFER"));
::SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, 1, 0);

Thanks in advance

应该非常直接。您需要将PInvoke定义更改为包含它们的类中的public:

public class Win32Api
{
   [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
   public static extern uint RegisterWindowMessage(string lpString);
   [DllImport("user32.dll", SetLastError = true)]
   public static extern IntPtr SendMessage(
      IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
}

对于调用,它们看起来像这样:

uint UWM_UART_CTRL_TRS = Win32Api.RegisterWindowMessage("BT_UARTCTRL_TRANSFER");
Win32Api.SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, (IntPtr)0, (IntPtr)0);

:

uint UWM_UART_CTRL_TRS = Win32Api.RegisterWindowMessage("BT_UARTCTRL_TRANSFER");
Win32Api.SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, (IntPtr)1, (IntPtr)0);