Win32-C++编程:读取ini配置文件,延时启动另一个exe程序,取消命令行窗体

###需求场景 windows启动后,延时加载另一个exe程序,延时的毫秒数要不断调试得到一个合理值,并且不希望看到命令行窗体。 ###解决方案 编写一个C++程序,读取同目录下的ini配置文件,Win32为ini文件格式提供了内置API读写。配置文件中定义了延时毫秒数和运行exe的路径信息。延时指定毫秒数,调用指定exe程序。本人十分讨厌使用VC6.0或者VS2xxxx等IDE编写win32程序,总觉得这些IDE模糊了一些让人捉摸不透的东西,同时又引入了一些花里胡哨的东西,因此使用g++编译。 ###startup.c ``` #include #include using namespace std; int main() { int delay = GetPrivateProfileInt( TEXT("startrun") // 指向包含 Section 名称的字符串地址 ,TEXT("delay") // 指向包含 Key 名称的字符串地址 ,30000 // 如果 Key 值没有找到,则返回缺省的值是多少 ,TEXT(".\\conf.ini") // ini 文件的文件名 ); char filePath[MAX_PATH]; GetPrivateProfileString( TEXT("startrun") ,TEXT("filepath") ,TEXT("test.exe") ,filePath ,MAX_PATH ,TEXT(".\\conf.ini") ); printf("%d:%s\n", delay, filePath); Sleep(delay); //一些必备参数设置 STARTUPINFO si; memset(&si,0,sizeof(STARTUPINFO));//初始化si在内存块中的值(详见memset函数) si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOW; PROCESS_INFORMATION pi;//必备参数设置结束 if( !CreateProcess(TEXT(filePath), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi )){ exit(1); }else{ exit(0); } } ``` 使用g++编译的指令集成在sublime3中,参见: ``` { "cmd": ["g++", "-std=c++11", "-mwindows", "${file}", "-o","${file_path}/${file_base_name}"], "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:?(.*)$", "working_dir": "${file_path}", "encoding":"cp936", "selector": "source.c", "variants": [ { "name": "Run", "cmd": ["cmd","/C","start","cmd","/c", "${file_path}/${file_base_name}.exe &pause"] } ] } ``` 其中的`-mwindows`参数可以使编译出来的exe去掉黑屏命令行窗体。

丁丁生于 1987.07.01 ,30岁,英文ID:newflydd

  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • Git OSChina 上积极参与开源社区