SendMessage(hWndEdit,WM_SETTEXT,0,sMess);
这个是API函数,我现在需要给一个TEXTBOX发送WM_SETTEXT消息,但是在C#中,我定义的文字内容是在sMess字符串里面的,但是SendMessage的4个参数都是int类型的,那么我这里的sMess如何传递给它?
我原本想的是传地址
SendMessage(hWndEdit,WM_SETTEXT,0,&sMess);可是这样还是不行,我还加了unsafe的都不行,请高手指点一下。很急,谢谢。

解决方案 »

  1.   

    各位,帮帮忙吧,这个问题我想了好久了可是还是没能想通,大家给我说说如何解决,先谢谢大家了。
    其实就是关于在C#中调用API时候的参数传递的问题,还有就是SendMessage中最后两个参数的使用问题。
      

  2.   

    SendMessage(hWndEdit,WM_SETTEXT,0,(LPARAM)sMess);
      

  3.   

    用wsprintf写入sMess中,再SendMessage(hWndEdit,WM_SETTEXT,0,sMess);
      

  4.   

    public class API
    {
        [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
      

  5.   

    还是不行?
    我试了,我现在是能得到一个RICHEDIT的句柄了,但是我现在想对这个句柄下的输入框赋值,就是不行,我赋值如下
    SendMessage(hWndEdit,WM_SETTEXT,0,Marshal.StringToHGlobalAuto("asdfasdf"));
    请问如何解决?????
      

  6.   

    各位CSDN的朋友,到底谁知道呀?我现在真不知道如何来处理了,我现在Richedit的句柄是得到了,但是就是不知道如何在C#里面向该句柄的Richedit里面填写类容,而且上边几位朋友的方法我都有试过,但是还是不行。
      

  7.   

    const int WM_SETTEXT = 0x000C;
    SendMessage(hWndEdit, WM_SETTEXT, IntPtr.Zero, Marshal.StringToHGlobalAuto("asdfasdf"));这样肯定没问题,如果还有问题,有两种情况的:
    1、句柄找的不对
    2、Richedit所在的应用程序对WM_SETTEXT做了处理,这样改不了Richedit的内容,就像最新版的qq一样,用这种方式是不可以的。