SendMessage(hWndEdit,WM_SETTEXT,0,sMess);
这个是API函数,我现在需要给一个TEXTBOX发送WM_SETTEXT消息,但是在C#中,我定义的文字内容是在sMess字符串里面的,但是SendMessage的4个参数都是int类型的,那么我这里的sMess如何传递给它?
我原本想的是传地址
SendMessage(hWndEdit,WM_SETTEXT,0,&sMess);可是这样还是不行,我还加了unsafe的都不行,请高手指点一下。很急,谢谢。
这个是API函数,我现在需要给一个TEXTBOX发送WM_SETTEXT消息,但是在C#中,我定义的文字内容是在sMess字符串里面的,但是SendMessage的4个参数都是int类型的,那么我这里的sMess如何传递给它?
我原本想的是传地址
SendMessage(hWndEdit,WM_SETTEXT,0,&sMess);可是这样还是不行,我还加了unsafe的都不行,请高手指点一下。很急,谢谢。
其实就是关于在C#中调用API时候的参数传递的问题,还有就是SendMessage中最后两个参数的使用问题。
{
[DllImport("user32.dll",CharSet=CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);
}根据需要传入相应的参数就可以了。获得IntPtr对象
1.如果是int,或long,可以用 IntPtr ptr = new IntPtr(int or long);
2.如果是string, 可以用IntPtr ptr = Marshal.StringToHGlobalAuto(str);----具体可参考System.Runtime.InteropServices.Marshal类(提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法)
3.消息的定义可以参考WinUser.h
我试了,我现在是能得到一个RICHEDIT的句柄了,但是我现在想对这个句柄下的输入框赋值,就是不行,我赋值如下
SendMessage(hWndEdit,WM_SETTEXT,0,Marshal.StringToHGlobalAuto("asdfasdf"));
请问如何解决?????
SendMessage(hWndEdit, WM_SETTEXT, IntPtr.Zero, Marshal.StringToHGlobalAuto("asdfasdf"));这样肯定没问题,如果还有问题,有两种情况的:
1、句柄找的不对
2、Richedit所在的应用程序对WM_SETTEXT做了处理,这样改不了Richedit的内容,就像最新版的qq一样,用这种方式是不可以的。