windows 切换窗口的解决方案

windows切换窗口最常用的方法是alt+tab或者win+tab但是这么做需要一个个的查找,我希望可以通过键盘过滤窗口标题,然后跳转到指定窗口,为此写了如下解决方案 要求依赖 编译套件 mingw ,依赖的package ivy

/*
gcc -o dianswitch.exe dianswitch.c
*/

#include <windows.h>
#include <stdio.h>

BOOL CALLBACK enum_windows_callback(HWND hwnd, LPARAM lParam)
{
    if (!IsWindowVisible(hwnd) || !IsWindowEnabled(hwnd))
    {
        return TRUE;
    }
    char title[1024];
    if (GetWindowText(hwnd, title, sizeof(title)) > 0)
    {
        printf("%s\n", title);
    }
    return TRUE;
}

void switch_to_window(const char *title)
{
    HWND hwnd = FindWindow(NULL, title);
    if (hwnd == NULL)
    {
        printf("Window not found: %s\n", title);
        return;
    }
    SetForegroundWindow(hwnd);
}

int main(int argc, char *argv[])
{

    if (argc == 1)
    {
        EnumWindows(enum_windows_callback, 0);
    }
    else
    {
        switch_to_window(argv[1]);
    }
    return 0;
}

编译后的可执行文件放到环境变量下,然后创建一个elisp函数

  (defun dian-switch ()
    "Call dianswitch.exe and get user input from ivy-read"
    (interactive)
    (let ((default-process-coding-system '(gbk . gbk)))
      (let* ((output-lines (process-lines "dianswitch.exe"))
             (selected-line (ivy-read "Select a line: " output-lines)))
        (when selected-line
          (shell-command (concat "dianswitch.exe \"" selected-line "\"")) 
          ))))
1 个赞

够硬核的,字数补丁

咋用呀?为啥在emacs的论坛中有这个窗口切换的方法呢,是在emacs中进行win的窗口切换吗?

用autohotkey啊。虽然语法有些蛋疼,但是还是很灵活的。 我现在的用快捷键绑定常用软件,例如浏览器,编辑器,终端。按一次切换,按两次最大化。

然后再预设一些layout。一键将想要的窗口放到想要的位置,比如左浏览器,右编辑器。

这样的好处是直接绑定肌肉记忆,大脑不需要再作反应。 常用的layout两三就够了。效率非常高。

哪里看不明白,大致流程就是编译c文件,然后把编写的elisp 函数放到配置文件里

用啊,为什么不用,但是不符合一切皆emacs的思路,我的ahk就配置了一下emacs的键位,emacs的ivy插件支持快速切换buffer,用相同的思路为什么不能有快速切换窗口

zig 可以编译吗