V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
JeffersonQin
V2EX  ›  分享创造

关于我想要快速最小化于是乎就重写了最大化这档子事

  •  
  •   JeffersonQin ·
    JeffersonQin · 2021-09-21 12:58:28 +08:00 · 2085 次点击
    这是一个创建于 1192 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于我想要快速最小化于是乎就重写了最大化这档子事

    看到这个轻小说标题一样的标题就可以知道这个项目必定不是在干什么正事。因为作者是学生,所以需要精通 Alt + tab / Win + Down 之类的技巧。然而,Windows 10 2004 以后 Alt + Tab 就开始抽风(可能会跳到莫名其妙的进程),所以只能放弃转而使用 Win + Down 。而 Win + Down 也会带来问题,那就是在最大化时需要按两下快捷键,对于我这种懒人无疑是灾难性的。所以,写这个。

    功能如题。主要使用 win32apiSetWindowsHookEx , WH_CBT 完成。

    功能演示

    截图:

    正常情况下最大化窗口:需要按两次 (Win + Down) 才能最小化

    开启 Hook 后,按住 Shift 最大化窗口:只需按一次 (Win + Down) 才能最小化

    项目结构

    .
    └── Max4Min
        ├── Max4Min                       # WPF 项目
        ├── Max4MinCore                   # C++ / dll 项目
        ├── Max4MinCoreConsoleTest        # 测试项目 可以忽略
        ├── Max4MinCoreRuntimeHook        # dll 的 Wrapper
        └── Max4MinCoreRuntimeUnHook      # 同上
    

    之所以要做一层 Wrapper,是因为:

    • 32 位的 dll 只能 hook 32 位的进程,64 位的 dll 只能 hook 64 位的进程
    • 32 位的 .NET 程序只能调用 32 位的 dll,64 位的 .NET 程序只能调用 64 位的 dll

    所以直接写了一层 Wrapper 封装成 exe 再进行调用。

    生成目录结构:

    .
    ├── ...
    ├── Max4MinCore-x86.dll
    ├── Max4MinCore-x64.dll
    ├── Max4MinCoreRuntimeHook-x86.exe
    ├── Max4MinCoreRuntimeHook-x64.exe
    ├── Max4MinCoreRuntimeUnHook-x86.exe
    ├── Max4MinCoreRuntimeUnHook-x64.exe
    └── <.net target>
        ├── ...
    	└── Max4Min.exe
    

    请执行 <.net target>/Max4Min.exe 来启动,其他都是支持文件。

    编译方法

    如果是 32 位系统,直接编译 x86 Target 即可。如果是 64 位系统,先编译 x86 Target (运行时可能报错,无所谓),再编译 x64 Target (因为 64 位下也需要 Hook 32 位程序)。

    第 1 条附言  ·  2021-09-21 13:32:42 +08:00
    链接了: https://github.com/JeffersonQin/Max4Min

    欢迎 star pr (雾
    8 条回复    2021-09-25 22:43:14 +08:00
    wangritian
        1
    wangritian  
       2021-09-21 13:05:36 +08:00
    Windows 10 2004 以后 Alt + Tab 就开始抽风(可能会跳到莫名其妙的进程)
    是不是指也在 edge 选项卡里切换了?可以在设置里关掉
    JeffersonQin
        2
    JeffersonQin  
    OP
       2021-09-21 13:07:38 +08:00
    @wangritian 不是这个,是在高速反复切换 alt tab 的时候可能会跳转到无关窗口(第三个之类的)
    JeffersonQin
        3
    JeffersonQin  
    OP
       2021-09-21 13:08:12 +08:00
    @wangritian 这个 bug 现在有没有修好我不确定,也可能和我有键盘钩子有关,不过之前因为这个 bug 出过事故,现在也不大敢用了🤣
    JeffersonQin
        4
    JeffersonQin  
    OP
       2021-09-21 13:10:56 +08:00
    啊 忘记放链接了: https://github.com/JeffersonQin/Max4Min

    欢迎 star pr (雾
    wangritian
        5
    wangritian  
       2021-09-22 09:51:52 +08:00
    @JeffersonQin 先给你的动手能力点个赞。如果是跳到第三个窗口,也可能是 tab 键连击了,我贪便宜买的红轴就是 p 键偶尔连击
    JeffersonQin
        6
    JeffersonQin  
    OP
       2021-09-22 09:55:59 +08:00
    @wangritian 我这里倒应该不是轴体的问题 因为当时让朋友也复现了(他是自己的客制化键盘,然后没有设置键盘 hook (不过还是大感谢(求个 star (雾
    Emrys365
        7
    Emrys365  
       2021-09-25 02:27:08 +08:00
    想问下左下角显示按下按键是怎么做到的呀?
    JeffersonQin
        8
    JeffersonQin  
    OP
       2021-09-25 22:43:14 +08:00   ❤️ 1
    @Emrys365 用 carnac
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:33 · PVG 04:33 · LAX 12:33 · JFK 15:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.