我有一个现有的MFC应用程序,我正在尝试扩展它以接受命令行参数并运行无人参与。
在 InitInstance()完成并且现有GUI已经完全加载后,我需要启动一些事件。我看过winmain.cpp,但是我不清楚如何运行我的事件,因为它似乎启动了一个线程并从调试器中“消失”(即接下来执行的是什么?必须是MFC循环,对吧?是否有可能进入那里?)我是新手,我完全有可能错过了更高层次的洞察力,这不是那么容易用Google搜索。感谢指针。
感谢。
答案 0 :(得分:1)
我会像往常一样解析InitInstance
中的命令行,但不是立即处理你找到的所有命令,而是为你关心的那些命令添加一些特殊处理(例如)将消息发回给你自己的消息队列,所以当你准备开始处理消息时,它们将显示为第一个要做的事情。
要做到这一点,我可能从CComandLineInfo
派生一个类,并覆盖ParseParam
来处理你关心的命令(并让它发送任何其他参数它无法识别回CComandLineInfo::ParseParam
正常处理)。然后,在InitInstance中,替换这段代码:
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
使用自定义命令行解析器:
MyCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
然后 ParseCommandLine
将为命令行上的每个参数调用ParseParam
,为您提供第一次决定它意味着什么以及如何处理它的机会。您可能希望查找CComandLineInfo
已经理解的“标准”命令,除非确实需要更改它们,否则请将它们单独保留。
答案 1 :(得分:1)
拦截命令行参数的最简单方法是引用全局变量__targv(定义为LPCTSTR* __targv
或类似的东西)和__argc(定义为int
)。
例如:
for(int i = 0; i < __argc; ++i) {
DoSomethingWithArg(__targv[i]);
}
基本上就像任何其他控制台应用程序一样。
答案 2 :(得分:0)
你可以重载PreTranslateMessage而不是跳过那里的消息