c# 怎么使用 SendMessage() 这个api呀,最好是code事例 谢谢

解决方案 »

  1.   


    [DllImport("user32.dll", EntryPoint="SendMessageA")] 
    private static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, string lParam); 
    //调用: 
    string s = "hello"; 
    SendMessage(this.textBox1.Handle, WM_SETTEXT, IntPtr.Zero, s); 可以对lParam使用不同的数据类型以重载.这里只写出其中之一
      

  2.   

    SendMessage(IntPtr 目标窗口句柄,UINT 消息编号,UINT wParam,UINT lParam);
      

  3.   

    .函数原型:
    LRESULT SendMessage(
    HWND hWnd, // 目标窗口句柄
    UINT Msg, // 被发送的消息
    WPARAM wParam, // 第一个消息参数
    LPARAM lParam // 第二个消息参数
    );
    .参数:
    hWnd
    窗口过程接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被送到子窗口。
    Msg 
    指定被发送的消息; 
    wParam 
    指定附加消息的特定信息; 
    lParam 
    指定附加消息的特定信息。 
    .返回值:
    返回值返回消息处理的结果,其依赖于所发送的消息。
    .备注:
    需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。
    如果指定的窗口通过调用线程被创建,则窗口过程作为子程序被立即调用。如果指定的窗口通过调用不同线程被创建,则系统切换到该线程并调用适当的窗口过程。线程间的消息只有在接收线程执行消息检索代码时才被处理。发送线程将被阻塞到接收线程处理完消息为止。
    Windows CE:Windows CE不支持Windows桌面平台所支持的所有消息。在使用SendMessage函数之前,应检查发送的消息是否被Windows CE所支持。
    .使用环境:
    Windows NT: 3.1及以上版本;
    Windows:95及以上版本;
    Windows CE:1.0及以上版本;
    头文件:winuser.h;
    输入库:user32.lib;
    Unicode:在WindowsNT(Windows2000)环境下以Unicode和ANSI方式实现。
    .示例代码:case WM_KEYDOWN:
            switch (wParam)
            {
            case VK_HOME:
                 SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
                 break ;        case VK_END:
                 SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ;
                 break ;        case VK_PRIOR:
                 SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ;
                 break ;
            ...
            }
            return 0 ;
        ....常见问题
    1)使用SendMessage来实现剪切、复制和粘贴
    SendMessage(hwnd, WM_COPY, 0, 0);
    SendMessage(hwnd, WM_CUT, 0, 0);
    SendMessage(hwnd, WM_PASTE, 0, 0);
    2)SendMessage与PostMessage的区别
    PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回 
    3)SendMessage发送WM_COPYDATA消息在进程间传送数据
    WM_COPYDATA消息主要目的是允许在进程间传递少量只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。
    例如:std:string strData = "VC知识库 VCKBASE.COM";
    COPYDATASTRUCT cds;
    cds.dwData = 0;
    cds.cbData = strData.Length();
    cds.lpData = strData.c_str();
    ::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds);
      

  4.   

    UINT 消息编号(第二个参数)  ?
    UINT wParam (第三个参数)是什么意思呀?没用过 第一次接触,请别见笑
      

  5.   

    .函数原型:
    LRESULT SendMessage(
    HWND hWnd, // 目标窗口句柄
    UINT Msg, // 被发送的消息
    WPARAM wParam, // 第一个消息参数
    LPARAM lParam // 第二个消息参数
    );
    .参数:
    hWnd
    窗口过程接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被送到子窗口。
    Msg 
    指定被发送的消息; 
    wParam 
    指定附加消息的特定信息; 
    lParam 
    指定附加消息的特定信息。 
    .返回值:
    返回值返回消息处理的结果,其依赖于所发送的消息。
    .备注:
    需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。
    如果指定的窗口通过调用线程被创建,则窗口过程作为子程序被立即调用。如果指定的窗口通过调用不同线程被创建,则系统切换到该线程并调用适当的窗口过程。线程间的消息只有在接收线程执行消息检索代码时才被处理。发送线程将被阻塞到接收线程处理完消息为止。
    Windows CE:Windows CE不支持Windows桌面平台所支持的所有消息。在使用SendMessage函数之前,应检查发送的消息是否被Windows CE所支持。
    .使用环境:
    Windows NT: 3.1及以上版本;
    Windows:95及以上版本;
    Windows CE:1.0及以上版本;
    头文件:winuser.h;
    输入库:user32.lib;
    Unicode:在WindowsNT(Windows2000)环境下以Unicode和ANSI方式实现。
    .示例代码:case WM_KEYDOWN:
            switch (wParam)
            {
            case VK_HOME:
                 SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
                 break ;        case VK_END:
                 SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ;
                 break ;        case VK_PRIOR:
                 SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ;
                 break ;
            ...
            }
            return 0 ;
        ....常见问题
    1)使用SendMessage来实现剪切、复制和粘贴
    SendMessage(hwnd, WM_COPY, 0, 0);
    SendMessage(hwnd, WM_CUT, 0, 0);
    SendMessage(hwnd, WM_PASTE, 0, 0);
    2)SendMessage与PostMessage的区别
    PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回 
    3)SendMessage发送WM_COPYDATA消息在进程间传送数据
    WM_COPYDATA消息主要目的是允许在进程间传递少量只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。
    例如:std:string strData = "VC知识库 VCKBASE.COM";
    COPYDATASTRUCT cds;
    cds.dwData = 0;
    cds.cbData = strData.Length();
    cds.lpData = strData.c_str();
    ::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds);
      

  6.   

    UINT Msg, // 被发送的消息              --被发送的消息, 这个整型的数 到底是什么呀? 添HWND_BROADCAST 编译器显示  当前上下文中不存在名称“HWND_BROADCAST”
    WPARAM wParam, // 第一个消息参数      --第一个消息参数
    LPARAM lParam // 第二个消息参数 
      

  7.   

    WPARAM wParam, // 第一个消息参数      --2楼添IntPtr.Zero , 是什么意思呀? 
    LPARAM lParam // 第二个消息参数       --已经有了第一个消息参数,还要这个消息参数做什么?