XFetchName 始终返回 0

2023-11-21

我试图编写一个 C 代码来获取 Linux 系统中活动窗口的标题,但函数 XFetchName 总是返回零,我也尝试过 XGetWMName,相同的结果... 但是使用 xprop,我可以看到“WM_NAME”属性中有一个字符串

谁能告诉我我的代码有什么问题吗?

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdarg.h>


int main( int argc, char* argv[] )
{
      Display *display;
      Window focus;
      char *window_name;
      int revert;

      display = XOpenDisplay(NULL);
      XGetInputFocus(display, &focus, &revert);
      int ret = XFetchName(display, focus, &window_name);
      printf("ret = %d\n", ret);
      if (window_name) printf("Title = %s\n", window_name);
      return 0;
}

thanks.


您可以尝试使用XGetWMName功能。虽然描述XGetWMName and XFetchName双方均表示将归还WM_NAME属性,似乎各有不同。有时,它们返回相同的名称。有些时候,仅仅XGetWMName返回名称。

您还可以使用xwininfo -root -tree获取所有窗口的名称,并与结果进行比较XFetchName and XGetWMName.

此代码可以列出所有窗口并打印窗口 ID 和结果XFetchName and XGetWMName。您可以使用窗口 ID 在输出中查找xwininfo -root -tree.

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

void enum_windows(Display* display, Window window, int depth) {
  int i;

  XTextProperty text;
  XGetWMName(display, window, &text);
  char* name;
  XFetchName(display, window, &name);
  for (i = 0; i < depth; i++)
    printf("\t");
  printf("id=0x%x, XFetchName=\"%s\", XGetWMName=\"%s\"\n", window, name != NULL ? name : "(no name)", text.value);

  Window root, parent;
  Window* children;
  int n;
  XQueryTree(display, window, &root, &parent, &children, &n);
  if (children != NULL) {
    for (i = 0; i < n; i++) {
      enum_windows(display, children[i], depth + 1);
    }
    XFree(children);
  }
}

int main() {
  Display* display = XOpenDisplay(NULL);
  Window root = XDefaultRootWindow(display);
  enum_windows(display, root, 0);
}

下面的输出显示两个函数的结果可能不同。

id=0x2c7, XFetchName="(no name)", XGetWMName="(null)"
    id=0x400001, XFetchName="(no name)", XGetWMName="(null)"
    id=0x800036, XFetchName="(no name)", XGetWMName="(null)"
        id=0x1400001, XFetchName="(no name)", XGetWMName="c - XFetchName always returns 0 - Stack Overflow - Chromium"
    id=0x1000001, XFetchName="terminator", XGetWMName="terminator"
        id=0x1000002, XFetchName="(no name)", XGetWMName="(null)"
    id=0x1200001, XFetchName="chromium", XGetWMName="chromium"
        id=0x1200002, XFetchName="(no name)", XGetWMName="(null)"

这是输出的一部分xwininfo -root -tree显示这些窗口的名称。 xwininfo:窗口 ID:0x2c7(根窗口)(没有名称)

  Root window id: 0x2c7 (the root window) (has no name)
  Parent window id: 0x0 (none)
     29 children:
     0x1200001 "chromium": ("chromium" "Chromium")  10x10+10+10  +10+10
        1 child:
        0x1200002 (has no name): ()  1x1+-1+-1  +9+9
     0x1000001 "terminator": ("terminator" "Terminator")  10x10+10+10  +10+10
        1 child:
        0x1000002 (has no name): ()  1x1+-1+-1  +9+9
     0x800036 (has no name): ()  1364x741+0+25  +0+25
        1 child:
        0x1400001 "c - XFetchName always returns 0 - Stack Overflow - Chromium": ("Chromium" "Chromium")  1364x741+0+0  +1+26
     0x400001 (has no name): ()  10x10+-20+-20  +-20+-20
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XFetchName 始终返回 0 的相关文章

  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 如何在不需要设置 LD_LIBRARY_PATH shell 变量的情况下输入“cargo run”?

    我构建了一个 Rust 程序 通过 C 接口调用 C 函数 为了执行该程序 我必须运行 export LD LIBRARY PATH
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Android Webview的shouldOverrideUrlLoading方法

    When is shouldOverrideUrlLoading方法调用 webView setWebViewClient new WebViewClient Override public boolean shouldOverrideUr
  • 如何判断

    我看到媒体元素接口公开类似的属性paused seeking and ended 然而 列表中缺少的是playing 我知道有playing events当元素出现时会发生火灾starts演奏 以及timeupdate events播放时定
  • 无法创建 django_migrations 表(ORA-02000:缺少 ALWAYS 关键字)

    我正在 Django 2 0 1 中使用数据库 Oracle 11g 启动一个项目 当我运行 python manage py migrate 时 出现错误 django db migrations exceptions Migration
  • 如何在unix shell脚本中获取最后一个下划线(_)之后的子字符串

    我有一个像这样的字符串 this is test string1 22 this is also test string12 6 我想分割并提取最后一个下划线周围的字符串 那就是我想要这样的输出 this is test string1 a
  • 如何将回调作为参数传递给另一个函数

    我是 ajax 和回调函数的新手 如果我对概念的理解有误 请原谅我 Problem 我可以发送一个回调函数作为另一个将执行回调的函数的参数 function firstFunction some code a callback functi
  • HTML5 类似占位符

    CKEditor 4 x 是否有插件或内置功能可以像 HTML5 输入 文本区域占位符一样工作 我唯一发现的是http ckeditor com addon placeholder 但这似乎有很大不同 您可以使用配置助手插件 Demo ht
  • 打印/全屏/电子邮件图标

    在 Plone 2 中 对象视图中有打印 全屏和电子邮件图标 如何在 Plone 4 中启用这些功能 它们似乎不存在于 Plone 4 1 的默认安装中 但我一定缺少一些东西 我想知道什么 Thanks IIRC 可以在 Plone 4 的
  • JavaScript 正则表达式替换整个单词

    我有一个变量 var str devtest11 devtest1 我用这种方式来替换 devtest1与另一个字符串 str replace new RegExp devtest1 g aaaa 然而 其结果 aaaa1 aaaa 不是我
  • C# 中有 SFTP 通信吗? [复制]

    这个问题在这里已经有答案了 可能的重复 适用于 NET 的 SFTP 库 C 中有 SFTP 通信吗 有一个 NET 组件称为SFTP黑匣子正是这样做的 功能列表对我来说似乎足够了 他们甚至对各种 NET SFTP 实现进行了比较here
  • 一次读取 4 个字节

    我正在加载一个充满整数的大文件 我刚刚开始使用 C 并且正在尝试文件流内容 从我读过的所有内容来看 我似乎只能以字节为单位读取 所以我必须设置一个 char 数组 然后将其转换为 int 指针 有没有办法可以一次读取 4 个字节 并消除对
  • sklearn 的 PLSRegression:“ValueError:数组不得包含 infs 或 NaN”

    使用时sklearn cross decomposition PLSRegression import numpy as np import sklearn cross decomposition pls2 sklearn cross de
  • 如何使用 PFX(Bouncy Castle 或其他)以编程方式对可执行文件进行代码签名

    我正在尝试确定使用 Bouncy Castle 托管代码或 C 中的非托管代码对可执行文件进行代码签名的最佳方法 由于 CAPICOM 现已被弃用 我想如果需要以非托管方式完成 那么 mssign32 dll 中的 SignerSign 方
  • 使用 scipy truncnorm 拟合数据

    我有遵循高斯分布的数据 然而 数据仅对于一系列值 xa xb 来说才是真正的高斯分布 所以我想使用以下方法拟合截断正态分布scipy stats truncnorm同时利用我知道范围 xa xb 的事实 我的目标是找到地点和规模 我不明白如
  • sqlite:如何在内存中使用

    我正在尝试将数据存储在内存中 这就是我现在所拥有的 sq lite driver Class forName org sqlite JDBC database path if it s new data base it will be cr
  • 如何在父元素和父元素的兄弟元素上方显示子元素?

    我的问题与这个问题相关 使用 CSS 在父元素上方显示子元素 该问题的答案 设置overflow visible 仅适用于一个孩子的一位家长 然而 我有这些元素的行 我需要孩子显示在父母上方的父母行 我可以让孩子显示在原始父母之上 但我无法
  • Oozie/yarn:src 文件系统上的资源已更改

    我有一个 Oozie 工作流程 其中一个步骤是 java 步骤 运行存储在本地文件系统上的 jar 该 jar 存在于所有节点上 最初 该 jar 是通过 RPM 安装的 因此它们都具有相同的时间戳 在实验时 我手动复制了这个 jar 的新
  • 样式需要时间加载 - Next.js

    当我输入我的作品集时 它会加载未样式化的 html 页面 并且仅在几秒钟后才会加载样式 我该如何解决这个问题 注意 我正在使用样式组件 When I enter the page After a few seconds 我尝试寻找样式组件与
  • Android:蓝牙 UUID 如何工作?

    我不明白蓝牙 UUID 表示什么 UUID 是否表示协议 例如RFCOMM 如果是这样 为什么要这样做createRfcommSocketToServiceRecord 方法需要 UUID 当它们在名称中指定 rfcomm 时 为什么 Bl
  • Android 上的方位角/偏航角和滚动角方向传感器值不一致

    我无法获得良好的方向传感器读数 传感器读数似乎不可靠 因此我针对两个免费的传感器测试应用程序测试了我的代码 传感器测试仪 Dicotomica and 传感器监控 R 的软件 我发现 虽然我的读数通常与传感器测试应用程序一致 但有时方位角
  • XFetchName 始终返回 0

    我试图编写一个 C 代码来获取 Linux 系统中活动窗口的标题 但函数 XFetchName 总是返回零 我也尝试过 XGetWMName 相同的结果 但是使用 xprop 我可以看到 WM NAME 属性中有一个字符串 谁能告诉我我的代