请问如何全局得到选择好(可以被copy, cut)的文本内容 请问如何全局得到选择好(可以被copy, cut)的文本内容。比如在一些编辑器,浏览器中选定的文本内容。用什么方法能做到?是否可以用api hook。如果可用,那么hook那个api函数呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 告诉你一个好办法,我刚刚做过。用IDataObject接口。 你要具体查IDataObject的用法。下面是个获得文本的例子:(我刚刚调试成功了)IDataObject *lpd;HRESULT hr;hr=OleGetClipboard(&lpd);FORMATETC fe;fe.cfFormat=CF_TEXT;fe.ptd=NULL;fe.tymed=TYMED_HGLOBAL;fe.dwAspect=DVASPECT_CONTENT;fe.lindex=-1;if(lpd->QueryGetData(&fe)==S_OK){ TRACE("OK!\n");}STGMEDIUM stg;lpd->GetData(&fe,&stg);LPSTR cp=(LPSTR)GlobalLock(stg.hGlobal);TCHAR szDisplayText[128];lstrcpyn(szDisplayText,cp,127);GlobalUnlock(stg.hGlobal);ReleaseStgMedium(&stg);lpd->Release();//CString str="";//str.Format("%s",szDisplayText);//MessageBox(str); 作一个简单的dialog程序,在按钮响应事件中加入这些代码。任意在浏览器中拷贝一些文本,再按那个按钮试试看,是不是看到MessageBox中的文本了? 感谢sjsj的帮助,但是我不能用.net框架,只能用mfc等传统的方法,就是说用vc6.0。我想先保留这个贴子,我另外给个贴子“sjsj进来领分”你一进来,我就给100分。我把需求再说清楚一点,可以用clipboard机制,最好不用,就是随时将用户选中的文本导到我的程序(可以是一个对话框)中。当用户在任意程序中选中文本时,按一下鼠标右健或给个快捷键就可以将文本导到我的程序中了。 if (!IsClipboardFormatAvailable(CF_TEXT)) return 0; if (!OpenClipboard()) return 0; hglb = GetClipboardData(CF_TEXT); if (hglb != NULL) { lptstr = (char*)GlobalLock(hglb); if (lptstr != NULL) { ... GlobalUnlock(hglb); } } CloseClipboard(); 如果你要随时监测剪贴板内容的改变,用: SetClipboardViewer() 关于不实时联网同步数据的系统功能是如何实现的? 高手请进,Vsual C++ 6.0编译出错,在线等 怎么全局HOOK剪切板? 如何获取窗体的颜色? 我在vc.net中写了一个程序,但是在别人的机器中不能运行。 Release下报这样的错,该怎么解决? 请问,游戏中的鼠标和桌面上的鼠标有什么区别。 请问动态连接dll的问题 BHO打包和发布,还有360的拦截问题 我快要发疯了!!!!???? C++的初级问题,送分 报这样的错是什么类型的问题?
IDataObject *lpd;
HRESULT hr;
hr=OleGetClipboard(&lpd);
FORMATETC fe;
fe.cfFormat=CF_TEXT;
fe.ptd=NULL;
fe.tymed=TYMED_HGLOBAL;
fe.dwAspect=DVASPECT_CONTENT;
fe.lindex=-1;
if(lpd->QueryGetData(&fe)==S_OK)
{
TRACE("OK!\n");
}
STGMEDIUM stg;
lpd->GetData(&fe,&stg);
LPSTR cp=(LPSTR)GlobalLock(stg.hGlobal);
TCHAR szDisplayText[128];
lstrcpyn(szDisplayText,cp,127);
GlobalUnlock(stg.hGlobal);
ReleaseStgMedium(&stg);
lpd->Release();
//CString str="";
//str.Format("%s",szDisplayText);
//MessageBox(str);
任意在浏览器中拷贝一些文本,再按那个按钮试试看,是不是看到MessageBox中的文本了?
我想先保留这个贴子,我另外给个贴子“sjsj进来领分”你一进来,我就给100分。
我把需求再说清楚一点,可以用clipboard机制,最好不用,就是随时将用户选中的文本导到我的程序(可以是一个对话框)中。当用户在任意程序中选中文本时,按一下鼠标右健或给个快捷键就可以将文本导到我的程序中了。
return 0;
if (!OpenClipboard())
return 0;
hglb = GetClipboardData(CF_TEXT);
if (hglb != NULL)
{
lptstr = (char*)GlobalLock(hglb);
if (lptstr != NULL)
{
...
GlobalUnlock(hglb);
}
}
CloseClipboard();