获取鼠标选中文本内容 
我想实现一个功能,就是当鼠标在任何窗口(比如explorer,   word,   notepad,   iexplore,   wordpad   等等能显示文字的窗口)上选中一些文本时,当双击鼠标右键时我的程序可以取得到鼠标所选中的内容。 这个功能与金山词霸的功能是不一样的,我要获取的是当前选中的文本,而不是鼠标所在的位置的文本,请问该怎么实现?希望大家给点建议或是相关的资料 
我用鼠标全局钩子的方式,当响应到WM_RBUTTONCLKDOWN消息时,则在.dll钩子程序中发出WM_COPY的消息, SendMessage(g_hWnd,WM_PASTE,0,0);但是好象没有能实现复制功能。真不知道windows是如何实现复制功能的。在网上还看到有的
使用API函数截获技术,截获ExtTextOut,TextOut   函数。当判断鼠标已经选择了一部分内容后,这时让选中的部分的窗口重画,就可以截获重画内容。 关键的问题:重画时是对整个窗口重画的,我怎样可以在截获函数中取得鼠标选中的内容。可不可以取到哪部分的文本被选中(反选)。 希望高手能够指点一下。先谢谢了。最好能用例子代码的方式解答。前段时间我也问过一个类似的问题但没有好的解答,希望这次我能表述清楚问题,能解决。

解决方案 »

  1.   

    这个没有统一的方法因为对方实现文字选中显示的方法并不唯一
    如果是直接用的EDIT控件就简单
    如果是自绘的文字,你最多取得文字内容,但是无法判断其是否选中。
      

  2.   

    那么windows 是如何实现这个功能的呢?当选中文本内容后,按下CTRL+C就能将选中的文本自动放到剪切板中,我现在就是想实现windows的这个复制功能,只不过我不通过按CTRL+C键,而是通过双击鼠标右键来实现啊
      

  3.   


    这个功能不是Windows实现的,而是各个软件自己实现的,只不过按照惯例选用了Ctrl+C作为复制的热键而已。
      

  4.   

    获取窗口句柄(选中文本的那个编辑框)用iskindof判断属于那种通用控件类,然后调用控件的复制功能
      

  5.   

    CEdit *pCommandLine = ( CEdit * )pWnd;
    if( 'A' == pMsg->wParam )
    {
    //全选
    pCommandLine->SetSel( 0, -1 );
    }
    else if( 'C' == pMsg->wParam )
    {
    pCommandLine->Copy();
    }
    else if( 'X' == pMsg->wParam )
    {
    pCommandLine->Cut();
    }
    else if( 'V' == pMsg->wParam )
    {
    pCommandLine->Paste();
    }
    else if( 'Z' == pMsg->wParam )
    {
    pCommandLine->Undo();
    }
    else
    {
    return pCommandLine->PreTranslateMessage( pMsg );
    }
    return TRUE;
      

  6.   

    CEdit *pCommandLine = ( CEdit * )pWnd;
    if( 'A' == pMsg->wParam )
    {
    //全选
    pCommandLine->SetSel( 0, -1 );
    }
    else if( 'C' == pMsg->wParam )
    {
    pCommandLine->Copy();
    }
    else if( 'X' == pMsg->wParam )
    {
    pCommandLine->Cut();
    }
    else if( 'V' == pMsg->wParam )
    {
    pCommandLine->Paste();
    }
    else if( 'Z' == pMsg->wParam )
    {
    pCommandLine->Undo();
    }
    else
    {
    return pCommandLine->PreTranslateMessage( pMsg );
    }
    return TRUE;
      

  7.   

    GetActivateWindows()             GetTopWindow()
      

  8.   

    大哥 最后实现了没有?最近我也在做类似功能,不过我用C#写代码,我一开始也是采用你的思路。
    先获取最前端窗口的句柄,然后调用SendMessage(hWnd,WM_COPY,0,0);函数。
    但是发现内容根本没有被复制到。