我使用Qt-4作为框架在C ++中编程,给定一个目录(即/ usr / bin)我想知道该程序是GUI还是控制台应用程序。
我遇到了一些关于如何使用这个窗口的信息,以及关于Linux(elf内)中类似(对Win)标识的不存在的信息。有没有其他方法可以在Linux上执行此操作?
我想:
EDIT0: 这个项目是一个应用程序启动器
EDIT1: 一旦我有分类的程序列表,我可以在用户选择非图形应用程序时启动终端模拟器
最终结论:
在人们回答和额外搜索之后,实际上无法可靠地辨别控制台和gui应用程序。我最好的办法是做一些考虑,例如搜索.desktop文件,做一些假设,比如在/ bin,/ sbin和/ usr / sbin等实用程序中列出的工具。
也许为每个找到的条目解析ldd的输出。
感谢。
答案 0 :(得分:1)
程序可以尝试作为GUI程序启动,然后切换到控制台。
(实际上一些程序确实表现出这种行为,例如emacs
)。它甚至可以随机执行,或者由于某些特定配置...
例如,假设vi
是控制台程序而emacs
是图形程序,以下简单程序可以随机成为GUI或控制台:
#include <unistd.h>
int main(int argc, char**argv) {
if (getpid()%2 == 0)
{ argv[0]="vi"; execv("/usr/bin/vi", argv); }
else
{ argv[0]="emacs"; execv("/usr/bin/emacs", argv); }
return EXIT_FAILURE;
}
最简单(但不是万无一失)的方法是测试getenv("DISPLAY")
是否返回NULL。更精细的方法是调用XOpenDisplay
,在失败时返回NULL
(并且有几个X11工具包可以这样做)。
所以,你的问题没有一个确切的答案,并没有真正的意义。
您可以使用ldd
....并手动添加firefox
等个人例外。
答案 1 :(得分:1)
如果您正在编写(又一个)应用启动器,请按照创建所有其他应用启动器的人员的操作,并使用.desktop
files。该规范已经定义了Terminal
选项,这正是您正在寻找的。 p>