找回密码
 立即注册
收起左侧

屏幕划词(是系统问不是程序)

5
回复
8852
查看
[复制链接]
累计签到:912 天
连续签到:3 天
来源: 2017-4-23 20:12:50 显示全部楼层 |阅读模式
5Qter豆
我想做一个屏幕划词(取词也行)的软件,下面是我弄的代码,但是这样写,打印出来的文本是原来剪贴板的文本,而不是像系统发送Ctrl+c的进行复制的文本,所有我想问问有没有其他的方法可以取的屏幕的文本?或者是这样写的代码有问题?还有Qt有没有想系统发送键盘消息的函数或类?

        QString strOriginal;
        QClipboard *clipBoard = QApplication::clipboard();
        strOriginal = clipBoard->text();

        keybd_event(VK_CONTROL, 0, 0, 0);
        keybd_event(0x43, 0, 0, 0);
        keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
        keybd_event(0x43, 0, KEYEVENTF_KEYUP, 0);

        qDebug() << clipBoard->text();
        
        clipBoard->setText(strOriginal);

回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2017-4-24 08:55:01 显示全部楼层
不知道楼主的屏幕文本是啥,没听懂,但是向系统发送键盘或鼠标消息那是一定可以的哦~~~
可以看看这个
http://blog.csdn.net/zerokkqq/article/details/6684696
回复

使用道具 举报

累计签到:912 天
连续签到:3 天
2017-4-24 16:33:17 显示全部楼层

RE: 屏幕划词(是系统而不是程序)

我所说的屏幕文本是指每一个程序上在屏幕上显示的文本,如QQ、浏览器等那些可以复制的文本。
QWSServer::sendKeyEvent这个函数在Qt 5.3中找不到了。
向下面这样写发送键盘,QWidget::focusWidget()得到的是0x0,会引发中断,请问这个该怎么改?
QKeyEvent myKeyEvent(QEvent::KeyPress, Qt::Key_C, Qt::NoModifier);
QCoreApplication::sendEvent(QWidget::focusWidget(), &myKeyEvent);
回复

使用道具 举报

累计签到:912 天
连续签到:3 天
2017-4-25 20:38:46 显示全部楼层
Since 发表于 2017-4-24 08:55
不知道楼主的屏幕文本是啥,没听懂,但是向系统发送键盘或鼠标消息那是一定可以的哦~~~
可以看看这个
http: ...

我看了QCoreApplication::sendEvent和QCoreApplication::sendPostedEvents的文档,怎么觉得他只能发送给本程序的消息,而不能发送给桌面上的其他程序
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2017-4-26 11:51:37 显示全部楼层
红尘氵梦 发表于 2017-4-25 20:38
我看了QCoreApplication::sendEvent和QCoreApplication::sendPostedEvents的文档,怎么觉得他只能发送给 ...

那就是我看错了,这两个函数确实是给自己发送事件的,抱歉抱歉,
楼主大大如果方便,也可以把这个代码发给我看看,让我再研究研究~~
回复

使用道具 举报

累计签到:912 天
连续签到:3 天
2017-4-26 14:30:56 显示全部楼层
Since 发表于 2017-4-26 11:51
那就是我看错了,这两个函数确实是给自己发送事件的,抱歉抱歉,
楼主大大如果方便,也可以把这个代码发 ...

你说的是什么代码?
我就是想做一个像有道那样屏幕取词或屏幕划词的东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了