使用gdk_screen_get_monitor_geometry,我可以得到像素的总面积和每个监视器的相对位置,即使有两个或更多用作单个屏幕.
但是,我想获得每个监视器的可用区域(即不包括面板).我发现的唯一的东西是_NET_WORKAREA,但这是一个跨越所有显示器的巨大区域.根据分辨率和排列,该区域内可能有面板.
如何获得每台显示器的实际可用面积?理想情况下,仅使用Gtk/Gdk,没有X11特定的.
现在我感觉非常愚蠢.我想在Qt Creator中用xlib做一些事情.
我的代码:
#include <QtCore/QCoreApplication>
#include <X11/Xlib.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Display *display = XOpenDisplay(NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
只需一行代码并给我:
/main.cpp:8: undefined reference to `XOpenDisplay'
Run Code Online (Sandbox Code Playgroud)
它在Xlib.h中定义为
extern Display *XOpenDisplay(
_Xconst char* /* display_name */
);
Run Code Online (Sandbox Code Playgroud)
我觉得我错过了一些非常基本的东西.
如何使用python-xlib调整窗口大小/移动窗口?我有X窗口ID.什么是等效的python-xlib片段wmctrl -i -r $id -e $gravity,$x,$y,$width,$height?
在我家的Kubuntu机器上,我正在运行一个脚本,在每个按键上发出蜂鸣声,无论哪个窗口或应用程序都有焦点,都可以从这个有见地的页面改编而来
#!/usr/bin/env python
from Xlib.display import Display
import os
import sys
ZERO=[]
for i in range(0,32):
ZERO.append(0)
ignorelist=[ZERO]
def main():
if os.getuid()==0:
os.system("modprobe pcspkr")
print("Speaker enabled, start as normal user")
sys.exit()
print("If no beep is heard, then run as root to enable pcspkr")
disp = Display()
while 1:
keymap=disp.query_keymap()
if keymap not in ignorelist:
os.system("beep")
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
这个脚本运行得很好,但是我的双核Intel机器的两个CPU都是80%左右,所以我对这台机器几乎没什么用.如何在不干扰其操作的情况下降低此简单脚本的CPU要求?换句话说,无论什么窗口或应用程序具有焦点,它仍应在按键时刻发出蜂鸣声.
如果在Python中无法做到这一点,我应该关注哪些其他技术?C?我会假设有一些内核组件通知应用程序的按键:KDE如何处理全局快捷方式?如何让我的申请也能收到这些通知?
我的目标是在按下每个按键时发出哔哔声,因为我正在训练我的手指在机械键盘上键入而不会在没有丢失按键的情况下触底.我刚从Cherry Browns毕业到Cherry Blues,缺乏战术反馈需要一些时间来适应.
请注意,无论哪个窗口具有焦点,任何解决方案都必须发出蜂鸣声.此程序旨在用作将在我使用的所有应用程序的后台运行的守护程序.
谢谢.
我尝试编写一个程序,它挂钩键盘消息,在Ubuntu(KDE)中按下时发出每个键的名称; 不干扰程序中键盘的正常操作(只是宣布键名).
这是我的计划:
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
void SendPressKeyEvent(Display *display, XKeyEvent xkey)
{
Window current_focus_window;
int current_focus_revert;
XGetInputFocus(display, ¤t_focus_window, ¤t_focus_revert);
xkey.type = KeyPress;
xkey.display = display;
xkey.window = current_focus_window;
xkey.root = DefaultRootWindow(display);
xkey.subwindow = None;
xkey.time = 1000 * time(0);
xkey.x = 0;
xkey.y = 0;
xkey.x_root = 0;
xkey.y_root = 0;
xkey.same_screen = True;
XSendEvent(display, InputFocus, True, KeyPressMask, (XEvent *)(&xkey));
}
void SendReleaseKeyEvent(Display *display, XKeyEvent xkey)
{
Window current_focus_window;
int …Run Code Online (Sandbox Code Playgroud) 计算机图形学中的"颜色图"是什么的一般概念或定义?您有时会在某些库中偶然发现这个术语 - 所以我可以假设彩色地图打算具有特定的功能和用途吗?
我到底需要什么颜色地图以及何时需要?
此外,在这个问题上是否有一些资源 - 我该搜索什么?
对于抱怨这个问题是多么具体的问题:xlib和giflib中的颜色映射有什么区别?
我正在使用Xtst扩展来键入并使用鼠标执行操作我没有遇到任何问题,直到我开始使用xtst移动并单击鼠标.
例如,这里有一组动作:移动359,216并点击(XTestFakeMotionEvent(显示,-1,359,216,0);)移动378,213并点击移动376,391并点击输入amousa1990@gmail.com,adel_ahmed @ something.com(字符串坏了到字符然后XTestFakeKeyEvent(显示,键码,True,0);这段代码在过去的几个月里一直运行正常,直到我开始使用鼠标移动并点击移动438,727并点击
大量其他点击
所发生的事情是所有鼠标移动工作正常,输入事件不会发送/同步,除非我使用usleep:100之前每个字母键入500之前每次点击700000之前每个鼠标移动
鼠标移动usleeps严重减慢应用程序的代码如下鼠标移动:
XFlush(display);
usleep(700000);
XTestFakeMotionEvent(display,-1,x_coordinate,y_coordinate,0);
XFlush(display);
XCloseDisplay(display);
Run Code Online (Sandbox Code Playgroud)
我应该保持显示打开并使用指针代替(我在一个函数中调用这些函数)我应该更多/更少经常刷新
谢谢
我正在尝试使用Xlib来深入了解Linux GUI程序的工作原理.我写了一个简单的程序,在一个窗口中显示"Hello,world",但它看起来很不合时宜,因为文本没有消除锯齿.
在X11中显示消除锯齿文本的最佳方法是什么?如何在GTK,Qt和其他工具包中实现抗锯齿?
等待X11窗口映射和查看的正确方法是什么?确切地说,我想等到我可以安全地调用XSetInputFocus()而不会遇到以下错误导致X服务器回火的任何风险:
// X Error of failed request: BadMatch (invalid parameter attributes)
// Major opcode of failed request: 42 (X_SetInputFocus)
Run Code Online (Sandbox Code Playgroud)
目前这种错误经常发生,尤其是在慢速X服务器上或者在使用libXrandr更改了监视器分辨率后立即尝试打开新窗口时.
我已经有了这个问题的解决方案,但它非常hacky因为它轮询window属性所以我想知道是否有更清洁的版本.
这是我目前的做法:
static Bool predicate(Display *display, XEvent *ev, XPointer arg)
{
return(ev->type == MapNotify);
}
static void waitmapnotify(struct osdisplayinfo *osd)
{
XEvent ev;
XWindowAttributes xwa;
XPeekIfEvent(osd->display, &ev, predicate, NULL);
do {
XGetWindowAttributes(osd->display, osd->window, &xwa);
usleep(1);
} while(xwa.map_state != IsViewable);
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作得很好,但它很hacky所以我在这里讨论它 - 以防万一有一个更干净的方式来做这件事.
是否可以使用 xlib 绘制没有标题栏、关闭按钮、鼠标按钮响应的透明窗口。所以只是用特定的颜色和宽度边框?就像是
这个橙色矩形是我需要创建的。此外,我希望有可能以编程方式移动、调整大小、关闭并使其闪烁(更改计时器的边框颜色)。
我设法创建没有标题栏的透明窗口,并在窗口的每一侧绘制矩形以制作边框效果:
#define W_WIDTH 640
#define W_HEIGHT 480
#define X_POS 100
#define Y_POS 120
#define BORDER_WIDTH 2
Display *dpy;
Window w;
XRectangle rectangles[4] =
{
{ X_POS, Y_POS, W_WIDTH, BORDER_WIDTH },
{ X_POS, Y_POS, BORDER_WIDTH, W_HEIGHT },
{ X_POS, W_HEIGHT - BORDER_WIDTH, W_WIDTH, BORDER_WIDTH },
{ W_WIDTH - BORDER_WIDTH, Y_POS, BORDER_WIDTH, W_HEIGHT }
};
int main(int argc, char *argv[])
{
GC gc;
XGCValues gcv;
int run = 1;
dpy = XOpenDisplay(NULL);
XVisualInfo vinfo;
XMatchVisualInfo(dpy, DefaultScreen(dpy), 32, TrueColor, …Run Code Online (Sandbox Code Playgroud) xlib ×10
x11 ×5
linux ×4
c ×3
c++ ×2
python ×2
antialiasing ×1
colormap ×1
cpu ×1
gdk ×1
graphics ×1
keyboard ×1
performance ×1
qt ×1
terminology ×1