2010-11-15 59 views
1

我有一个现有的MFC应用程序,我试图扩展接受命令行参数并运行无人参与。MFC - 扩展应用程序从命令行运行

我需要在之后启动一些事件InitInstance()已完成并且现有的GUI已完全加载。我看过winmain.cpp,但是我不清楚如何运行我的事件,因为它似乎启动了一个线程并从调试器中'消失'(即接下来要执行什么?必须是MFC循环,对吗?是否有可能挂钩?)我对此很陌生,完全有可能我错过了更高级别的洞察力,这并非易事。感谢指针。

谢谢。

回答

0

你可以重载的PreTranslateMessage比跳过的邮件有

1

我会分析命令行中InitInstance就像往常一样,但不是立即处理所有找到的命令,你所关心的那些添加一些特殊的处理(例如)将消息发回给自己的消息队列,所以当你准备好开始处理消息时,它们将首先显示出来。

为了做到这一点,我想大概派生一类从CComandLineInfo,并覆盖ParseParam来处理你所关心的命令(并将其发送给它不承认任何其他参数回CComandLineInfo::ParseParam被正常处理)。使用自定义命令行分析器

// Parse command line for standard shell commands, DDE, file open 
CCommandLineInfo cmdInfo; 
ParseCommandLine(cmdInfo); 

随着一个:然后,在InitInstance中,代替这段代码

MyCommandLineInfo cmdInfo; 
ParseCommandLine(cmdInfo); 

ParseCommandLine然后将调用您ParseParam在命令行上的每一个参数,给你第一次有机会决定它的含义以及如何处理它。你可能想要查看CComandLineInfo已经理解的“标准”命令,并且让它们保持单独,除非你真的真的需要改变它们。

1

拦截命令行参数的最简单方法是引用全局变量__targv(定义为LPCTSTR* __targv或类似的东西)和__argc(定义为int)。

例如:

for(int i = 0; i < __argc; ++i) { 
    DoSomethingWithArg(__targv[i]); 
} 

基本上就像任何其他控制台应用程序。