c – Linux,如何捕获屏幕,以及模拟鼠标移动
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – Linux,如何捕获屏幕,以及模拟鼠标移动,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2238字,纯文字阅读大概需要4分钟。
内容图文
![c – Linux,如何捕获屏幕,以及模拟鼠标移动](/upload/InfoBanner/zyjiaocheng/951/f641a9ca70724f9da71689dfc170e36f.jpg)
我需要捕捉屏幕(作为打印屏幕)以便我可以访问像素颜色数据,做一些图像识别,之后我需要在屏幕上生成鼠标事件,如左键单击,拖放(移动鼠标)按下按钮,然后释放它).完成后,图像将被删除.
注意:我需要捕获整个屏幕用户可以看到的所有内容,我需要模拟程序窗口外的点击(如果它有任何区别)
规格:Linux ubuntu
语言:C
性能不是很重要,“打印屏幕”功能每隔约10秒执行一次.
该过程的持续时间可长达24小时,因此方法需要稳定并且内存泄漏免费(因为通常:)
我能够在Windows中赢得GDI和一些Windows事件,但我不知道如何在Linux中做到这一点.
非常感谢
解决方法:
//sg
//Solution using Xlib for those who use Linux
#include <X11/Xlib.h>
#include<stdio.h>
#include<unistd.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
void mouseClick(int button)
{
Display *display = XOpenDisplay(NULL);
XEvent event;
if(display == NULL)
{
fprintf(stderr, "Cannot initialize the display\n");
exit(EXIT_FAILURE);
}
memset(&event, 0x00, sizeof(event));
event.type = ButtonPress;
event.xbutton.button = button;
event.xbutton.same_screen = True;
XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
event.xbutton.subwindow = event.xbutton.window;
while(event.xbutton.subwindow)
{
event.xbutton.window = event.xbutton.subwindow;
XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
}
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Error\n");
XFlush(display);
usleep(100000);
event.type = ButtonRelease;
event.xbutton.state = 0x100;
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Error\n");
XFlush(display);
XCloseDisplay(display);
}
int main(int argc,char * argv[]) {
int x , y;
x=atoi(argv[1]);
y=atoi(argv[2]);
Display *display = XOpenDisplay(0);
Window root = DefaultRootWindow(display);
XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);
mouseClick(Button1);
XFlush(display);
XCloseDisplay(display);
return 0;
}
构建它,然后在x处模拟点击,执行:
$./a.out x y
即
$g -lX11 sgmousesim2.cpp
$./a.out 123 13
以防你仍然感兴趣.
内容总结
以上是互联网集市为您收集整理的c – Linux,如何捕获屏幕,以及模拟鼠标移动全部内容,希望文章能够帮你解决c – Linux,如何捕获屏幕,以及模拟鼠标移动所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。