本帖最后由 xia8520 于 2025-4-28 05:40 编辑
先感谢楼主,我来个c的完美替身,把原Typora.exe改名为Typora-ori.exe,再把下面的c编译成Typora.exe放进去就完事了,其他什么都不用动,启动项都不用加,直接双击md文件也没问题。
附x64成品
Typora.zip
(88.6 KB, 下载次数: 313)
[C] 纯文本查看 复制代码 #include <windows.h>
#include <stdio.h>
// 避免闪黑窗口
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 1. 获取当前日期,和Typora行为完全一致不带前导0
SYSTEMTIME st;
GetLocalTime(&st);
char dateStr[20];
sprintf(dateStr, "%d/%d/%d", st.wMonth, st.wDay, st.wYear);
// 2. 检查注册表项是否存在,如果不存在则创建
HKEY hKey;
LONG lRes = RegCreateKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Typora", 0, NULL, 0, KEY_SET_VALUE, NULL, &hKey, NULL);
if (lRes != ERROR_SUCCESS) {
return 1;
}
// 3. 更新注册表中的值
lRes = RegSetValueExA(hKey, "IDate", 0, REG_SZ, (const BYTE*)dateStr, (DWORD)(strlen(dateStr) + 1));
RegCloseKey(hKey);
if (lRes != ERROR_SUCCESS) {
return 1;
}
// 4. 构建命令行参数
char cmdLine[MAX_PATH * 10] = "Typora-ori.exe";
if (strlen(lpCmdLine) > 0) {
strcat(cmdLine, " ");
strcat(cmdLine, lpCmdLine);
}
// 5. 启动Typora-ori.exe并传递参数
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
if (CreateProcessA(NULL, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
}
|