Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang检测是否聚焦或最小化_Go - Fatal编程技术网

Golang检测是否聚焦或最小化

Golang检测是否聚焦或最小化,go,Go,如何检测go CLI程序是否处于焦点或最小化状态 当前程序基于 我需要的功能,因为它是一个聊天程序,我想发送操作系统的通知,但只有当程序不在焦点或最小化 非常感谢您的帮助/指导,因为目前还不确定从何处开始。这在库本身是不可能的。命令行程序现在有焦点,但它运行的终端程序没有焦点 要实现这一点,如果可能的话,将依赖于操作系统、窗口管理器等。要完善提供的,我建议OP不要尝试使用API等 理由很简单。 当代用户习惯于在终端仿真器中运行程序,这些程序通常作为单独的窗口显示,因此用户自然会认为这些程序与GU

如何检测go CLI程序是否处于焦点或最小化状态

当前程序基于

我需要的功能,因为它是一个聊天程序,我想发送操作系统的通知,但只有当程序不在焦点或最小化


非常感谢您的帮助/指导,因为目前还不确定从何处开始。

这在库本身是不可能的。命令行程序现在有焦点,但它运行的终端程序没有焦点

要实现这一点,如果可能的话,将依赖于操作系统、窗口管理器等。

要完善提供的,我建议OP不要尝试使用API等

理由很简单。 当代用户习惯于在终端仿真器中运行程序,这些程序通常作为单独的窗口显示,因此用户自然会认为这些程序与GUI应用程序没有什么不同

但实际情况不同:终端仿真器(无论是否图形化)例如,所谓的are终端仿真器也确实模拟了一个真实的典型工作会话,在那里,一个程序只能在前台工作,切换到另一个程序的唯一方法是使用这些作业、bg和fg命令

换句话说,在终端中工作的程序的整个概念都有一个内置的假设,即终端始终是前台,因为在开发该概念时,终端是一个物理设备

现在请考虑终端仿真在当代系统中可能比您想象的更普遍:在UNIX类OS上的屏幕和TMUX是复用终端模拟器,它们可以在终端仿真器中运行,在Windows上有控制台窗口。™ 也可以被认为是某种终端仿真器

因此,采用API有几个技术问题:

终端仿真试图将使用该功能的程序与该功能的实际提供方式分离

简单地说,在X窗口系统上,没有简单的方法可以知道运行您的程序的终端仿真器所使用的窗口

为了使程序仍然有用,您需要涵盖不同的API集:Unix类系统上的X窗口系统、Mac OS、Windows™. 在Linux上运行的当代GUI堆栈倾向于切换到Wayland而不是X

在某些情况下,例如在嵌套终端仿真会话中运行程序,在xterm中运行的tmux窗口中的一个窗格,找出有关环境的这些事实几乎是不可能的

还有一个关键的问题是,如果你的程序真的需要知道它是否有重点,它实际上想要知道目前很难理解的概念。我的意思是,它想成为GUI。如果是这样,就让它成为GUI

事实上,这可能比你想象的要简单。程序的核心可能仍然是一个CLI应用程序,它周围有一个薄GUI包装器,可以使用任何类型的GUI与应用程序进行对话,如果需要,可能是双向的。
最简单的方法是将一些通常按行的数据写入程序的标准输入。

对于gui应用程序,您是指cli吗?哪个站台?哪种框架?这取决于很多因素,包括操作系统、GUI框架。我认为这是一个GUI应用程序,否则focus就不会真正相关了。等等@mh cbon抱歉,我只是想指定它,你也打败了我。我有使用GOCUI的CLI程序。@rob74 Linux和Windows会很好。我正在使用gocui作为CLI程序的gui。这是一个聊天应用程序,所以如果程序不在视图中或最小化,我想发送操作系统通知。CLI程序没有焦点概念。它甚至不知道它是否在窗口中运行,这是有道理的。我将深入挖掘,看看是否有任何API调用可以确定这一点。