Back to home

tk-wxy

openin

openin

Stars
0
Language
C
Created
Aug 7, 2026
Updated
Aug 15, 2026

Introduction

openin — Windows 应用启动命令生成工具

openin 为指定应用生成一条可在资源管理器地址栏或终端中直接调用的启动命令(如 vscodecursorclaude)。安装后,输入该命令即可以当前文件夹为参数启动对应应用,无需该应用自身支持地址栏调用。

文件

文件作用
openin.exe安装器(双击运行)
src/openin.c入口(无参数进 GUI,有参数走 CLI)
src/core.c引擎:安装/卸载、launcher 生成
src/detect.c应用自动检索
src/pathenv.cPATH / 安装目录操作
src/utils.c路径/校验工具
src/gui.cGUI 窗口逻辑
src/openin.h跨模块接口
scratch/launcher 模板工具链(bin2h 等,开发用)

使用

GUI 界面(推荐)

双击 openin.exe(或无参数运行)打开管理主窗口:每个应用一行(名称 + 路径框 + 浏览 + 安装 + 测试 + 卸载)。 窗口打开即自动检索并填入主程序路径,确认无误后点「安装」,再用「测试」一键拉起目标验证。

  • 顶部菜单栏「重新检测」重新扫描路径;「深度扫描」更彻底地扫描一次(单遍遍历 + 剪枝,检出启动扫描漏掉的深层安装, 如 Program Files\...\bin);「高级▾」菜单含卸载、添加自定义
  • 原生 CLI(如 claude code,自带地址栏可用的真实二进制):行按钮为「修复」、卸载置灰——openin 不卸载/不覆盖原生实现; 若命令二进制缺失,「修复」会从核心程序位置复制到安装目录恢复
  • 操作信息公开:安装/卸载时,左下角状态栏逐条快速闪过具体操作步骤(写 launcher、二进制 Patch、加 PATH、 App Paths 注册表、撤销标记等),让你看到程序在做什么
  • 无状态:只在安装目录创建启动文件(vscode.exe/.cmd),不产生任何配置文件、日志或外部文件夹; 自定义目标仅存于会话内存,关闭即失

命令行模式

openin.exe                                  :: 打开 GUI 主窗口
openin.exe -d "D:\Microsoft VS Code"        :: 指定应用目录安装(默认命令名 vscode)
openin.exe -d "D:\Microsoft VS Code" code   :: 自定义命令名
openin.exe -p C:\Users\you\bin -d "D:\VS Code"   :: 指定安装目录
openin.exe -u vscode                        :: 卸载指定命令
openin.exe -q -d "D:\..."                   :: 静默模式(不弹窗)
openin.exe -l                               :: 列出已安装的命令(打印到终端)
openin.exe -a                               :: 全部安装:自动检测到的预设一键全装

每个应用装一次,得到一个独立命令:openin.exe -d "D:\...\Code.exe的目录" vscodeopenin.exe -d "D:\...\cursor" cursoropenin.exe -d "D:\...\claude" claude……

从源码构建

需要 MinGW-w64(gcc),并确保 gcc 在 PATH 中:

:: 安装 gcc(已装则跳过)
winget install BrechtSanders.WinLibs.POSIX.UCRT

:: 编译(两步:先 windres 编 manifest 资源,再链接)
windres -Isrc src\openin.rc -O coff -o openin_res.o
gcc -O2 -s -municode -mwindows -o openin.exe src\openin.c src\core.c src\detect.c src\pathenv.c src\utils.c src\gui.c openin_res.o -Isrc -lshell32 -lole32 -lcomdlg32 -lcomctl32 -luxtheme

编译参数说明:

参数作用
-municode使用 wmain 宽字符入口,正确处理中文 / Unicode 路径
-mwindowsGUI 子系统,运行时不弹出黑框
-O2 -s优化并去符号瘦身(产物约 101 KB)
-lshell32 -lole32文件夹选择对话框与 COM 所需系统库
-lcomdlg32文件选择对话框(GetOpenFileName)

产物 openin.exe单文件便携程序,可拷到任何 Windows 机器直接双击运行, 目标机器无需安装编译器。

安装位置(自动选择通用目录)

启动器不放进专属文件夹,而是自动挑选一个通用、常用的用户 bin 目录(这些目录通常已在 PATH 中,因此多数情况无需修改 PATH):

优先级目录说明
1-p <目录>显式指定,完全自定义
2%USERPROFILE%\.local\binGitHub 风格用户 bin(claude 等工具在此),已在 PATH 则跳过修改
3%APPDATA%\npmNode 全局工具目录(codex 等在此),已在 PATH 则跳过修改
4创建 %USERPROFILE%\.local\bin目录不存在时自动创建
5回退 %LOCALAPPDATA%\Programs\openin上述都不可用时才使用专属目录
  • 所选目录已在 PATH → 不改动任何环境变量,仅放入文件
  • 所选目录不在 PATH(如自定义 -p)→ 自动追加到用户 PATH(HKCU,无需管理员权限)

生成的产物直接落在该目录:<name>.exe(始终,见下节)与 <name>.cmd(始终)。 源码与编译日志走临时目录、用完即删,目标目录零残留

双保险(冗余)机制

每次安装始终生成 <name>.cmd 批处理备用启动器(无需编译器), 并始终生成 <name>.exe:核心是免编译器的「二进制 Patch」——程序内置预编译好的 launcher 模板(约 22 KB),把其中预留的路径占位符原地替换为目标应用路径,毫秒级完成, 任何机器都能用。仅当 Patch 意外失败且系统装有 gcc 时,才降级为源码编译生成 .exe

生成物生成方式终端输入地址栏输入
<name>.exe二进制 Patch(免 gcc);失败且有 gcc 时源码编译vscode(PATHEXT 优先 exe)vscodevscode.cmd
<name>.cmd始终生成(纯批处理兜底)vscodevscode.cmd(地址栏不解析 PATHEXT,需带扩展名)

.cmd 按系统 ANSI 代码页(中文系统为 GBK)写入,含中文的路径也能被 cmd 正确解析。 若应用路径含 % ^ & 字符,批处理内会自动转义。

卸载

自动撤销安装的全部改动,卸载后系统与安装前一致:

  1. 删除安装目录里的 <name>.exe<name>.cmd
  2. 清理 App Paths 注册表键(CLI 目标)
  3. 仅当 openin 当时自行加入过 PATH、且该目录已无其他 openin 命令时,自动移除该 PATH 条目
  4. 仅当安装目录由 openin 创建、且已为空时,自动删除该目录

特性

  • 一个工具注入任意应用,每个应用一个独立命令,互不冲突
  • 安装在通用用户 bin 目录,已在 PATH 则完全不动环境变量,卸载只删几个文件
  • 冗余:.exe 免编译器生成(二进制 Patch),.cmd 永远兜底
  • 幂等:重复安装(openin 生成的 launcher)会覆盖,不产生重复 PATH 条目; 已存在的非 openin 同名文件拒绝覆盖,防止误毁真实工具
  • 冲突检测:同时检查 PATH 中是否已有同名 .exe / .cmd,有则提示优先解析到的位置
  • 兼容选中 bin 子目录:自动向上找到上级的主程序(如 Code.exe
  • 支持参数透传:vscode . -r(复用窗口)、vscode D:\some\file.txt
  • 固定参数预设dsh 一键在当前文件夹启动 DeepSeek Harness Web UI——launcher 内置固定参数 (内部用 node 直跑 dsh 的 bin.js 启动 server,绕开 npm exec 的卡死与 cmd /c 引号缺陷),无需任何额外输入; 启动后自动把当前文件夹登记为 dsh 工作区(左侧列表可见、幂等),并自动用默认浏览器打开 Web UI (http://127.0.0.1:3080);首次启动弹可见控制台窗口(可看 dsh 运行日志、Ctrl+C 或关窗停止), 已运行时只登记工作区并打开浏览器(幂等)
  • 两类预设:GUI 应用(vscode,传目录参数)与命令行工具(codex,继承 cwd、不传目录参数、经 Windows Terminal 打开可见终端运行)

路线图

  • VS Code 支持(首个应用)
  • 预设应用模板(19 个:15 GUI + 4 CLI)
  • 图形界面管理:多目标列表、安装/更新、卸载、添加自定义、移除、刷新
  • 无 gcc 环境默认分发预编译 launcher(二进制 Patch)
  • 系统托盘常驻 / 开机自启动

故障排查

  • 无 gcc<name>.exe 由内置模板二进制 Patch 生成,无需编译器;仅 Patch 失败且无 gcc 时才退化为纯 .cmd 模式
  • 编译失败:不影响使用,会保留 .cmd 备用并给出 gcc 输出
  • 换个应用/路径:重新运行选择新目录即可(会重新生成文件,PATH 通常不用动)
  • 新窗口不生效:已打开的终端/资源管理器需重启;Explorer 会自动刷新(WM_SETTINGCHANGE)

依赖

  • gcc 可选:仅作为二进制 Patch 失败时的兜底编译手段(MinGW-w64);无 gcc 也能正常工作
  • openin 本身是预编译 exe,运行它不需要任何编译器