zig
Debug输出大小: 2.3MB
ReleaseSmall输出大小:11.3kB
const std = @import("std");
const x11 = @cImport({
@cInclude("X11/Xlib.h");
});
// Converts between numeric types: .Enum, .Int and .Float.
pub inline fn as(comptime T: type, from: anytype) T {
switch (@typeInfo(@TypeOf(from))) {
.Enum => {
switch (@typeInfo(T)) {
.Int => return @intFromEnum(from),
else => @compileError(@typeName(@TypeOf(from)) ++ " can't be converted to " ++ @typeName(T)),
}
},
.Int => {
switch (@typeInfo(T)) {
.Enum => return @enumFromInt(from),
.Int => return @intCast(from),
.Float => return @floatFromInt(from),
else => @compileError(@typeName(@TypeOf(from)) ++ " can't be converted to " ++ @typeName(T)),
}
},
.Float => {
switch (@typeInfo(T)) {
.Float => return @floatCast(from),
.Int => return @intFromFloat(from),
else => @compileError(@typeName(@TypeOf(from)) ++ " can't be converted to " ++ @typeName(T)),
}
},
else => @compileError(@typeName(@TypeOf(from) ++ " is not supported.")),
}
}
pub fn main() !void {
// const allocator = std.heap.page_allocator;
const display = x11.XOpenDisplay(null);
if (display == null) {
std.debug.print("Failed to open display\n", .{});
return;
}
defer _ = x11.XCloseDisplay(display);
const screen = x11.XDefaultScreen(display);
const root_window = x11.XRootWindow(display, screen);
const height = x11.DisplayHeight(display, screen);
const width = x11.DisplayWidth(display, screen);
std.debug.print("Screen size: {}x{}\n", .{ width, height });
const m = as(f32, height) / as(f32, width);
var i: i32 = 0;
while (i < width) : (i += 1) {
const j = as(i32, as(f32, i) * m);
_ = x11.XWarpPointer(display, x11.None, root_window, 0, 0, 0, 0, i, j);
_ = x11.XFlush(display);
std.time.sleep(50 * std.time.ns_per_us);
}
}
// zig build-exe src/x11_control_mouse_cursor.zig -lX11 -lc
// -I .: 添加当前目录作为包含路径,这对于包含项目内的其他文件很有用。
c++
c++ source: https://gist.github.com/aliva/3372331
输出大小:16.8 kB
#include <X11/Xlib.h>
#include <iostream>
#include <unistd.h>
int main(void) {
Display* dpy = XOpenDisplay(0);
int scr = XDefaultScreen(dpy);
Window root_window = XRootWindow(dpy, scr);
int height = DisplayHeight(dpy, scr);
int width = DisplayWidth(dpy, scr);
std::cout << "Screen size : " << width << "x" << height << std::endl;
float m = (float)height/(float)width;
int j;
for(int i=0; i<width; i++){
j = m*i;
XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, i, j);
XFlush(dpy);
usleep(50);
}
}
// g++ x11_control_mouse_cursor.cpp -o x11_ctrl_cursor -lX11
标签:std,const,++,c++,return,zig,vs,x11,display
From: https://www.cnblogs.com/nolca/p/18316478