如何在 Cygwin 下检测 mintty 中失去的焦点?

问题描述 投票:0回答:1

Cygwin 下的mintty是否以任何方式支持失去和获得焦点的事件?

我正在寻找相当于 Windows 中的

WM_KILLFOCUS
autocmd FocusLost * call ...
中的
gvim
,但在 mintty 终端内的 Cygwin 下。

cygwin mintty
1个回答
0
投票

如果几天后没有实际答案,我将提供自己的答案,感谢@Philippe关于

GetForegroundWindow
的评论。

/* wait-focus-lost.cc */
#include <iostream>
#include <windows.h>

int main()
{
    const HWND initial_window = GetForegroundWindow();
    HWND current_window;
    while ((current_window = GetForegroundWindow()) == initial_window)
        Sleep(1);
    const auto title = new wchar_t[MAX_PATH*2];
    GetWindowTextW(current_window, title, MAX_PATH*2);
    std::wcout << title << std::endl;
}

免责声明:上述代码中没有错误检查

这段代码等待前台窗口发生变化,并将新前台窗口的标题打印到

mintty
控制台。

我现在可以在

bash
脚本中使用此可执行文件,以便在执行另一个依赖于被窃取的焦点的操作之前等待。


由于我的环境是 Cygwin,我提供 Makefile,以防有人出现并尝试自己编译上述内容:

CXX = x86_64-w64-mingw32-g++
CC = x86_64-w64-mingw32-gcc
LDFLAGS = -static
CXXFLAGS = -O2 -Wall -Wextra

all: wait-focus-lost.exe
wait-focus-lost.exe: wait-focus-lost

注意:由于

.exe
扩展,Cygwin 下需要额外的规则来利用 both
make
隐式规则 and 依赖项检查。仅使用
all: wait-focus-lost
可以进行编译,但会破坏依赖项检查。

© www.soinside.com 2019 - 2024. All rights reserved.