用C写了一个控制台程序,编译成exe,能否在main函数中判断这个exe是以哪种方式启动? 这里说的启动方式就是指命令行启动方式和鼠标双击启动方式,能否在程序中区分这两种启动方式。区分的目的是不想双击启动这个exe程序,只想在命令行方式下启动,双击无效,能否做到?

解决方案 »

  1.   

    这个启动过程都是shell来完成的吧,可以监视shell行为应该可以做到
      

  2.   

    命令行参数 main 可以带参数啊
      

  3.   

    可以自己添加命令行参数ParseCommandLine(),每次启动检测,如果是命令行启动,需要参数正确,如果是双击,命令行参数是没有的,可以直接return FALSE;
      

  4.   

    楼上的兄台们,这个exe程序,即使是命令行启动,也是可以不带参数的,所以通过参数有无判断,恐怕不行吧
      

  5.   

    哈哈, 我知道了!  可以通过环境变量。首先写一个小程序,  使用main函数的扩展版本。
    #include <iostream>
    int _tmain(int argc, _TCHAR* argv[], _TCHAR* envp[])
    {
    int i = 0;
    _TCHAR * pTemp = envp[i++];
    while (pTemp!= NULL)
    {
    _tprintf(pTemp);
    _tprintf(_T("\n"));
    pTemp = envp[i++];
    } getchar(); return 0;
    }
    把这个程序编译后 , 从Console里面启动的环境变量是:ALLUSERSPROFILE=C:\Documents and Settings\All Users
    APPDATA=C:\Documents and Settings\Administrator\Application Data
    CLIENTNAME=Console
    ClusterLog=C:\WINDOWS\Cluster\cluster.log
    CommonProgramFiles=C:\Program Files\Common Files
    COMPUTERNAME=JERRY
    ComSpec=C:\WINDOWS\system32\cmd.exe
    FP_NO_HOST_CHECK=NO
    HOMEDRIVE=C:
    HOMEPATH=\Documents and Settings\Administrator
    LOGONSERVER=\\JERRY
    NUMBER_OF_PROCESSORS=2
    OS=Windows_NT
    Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    PROCESSOR_ARCHITECTURE=x86
    PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 7, GenuineIntel
    PROCESSOR_LEVEL=15
    PROCESSOR_REVISION=0407
    ProgramFiles=C:\Program Files
    PROMPT=$P$G
    SESSIONNAME=Console
    SystemDrive=C:
    SystemRoot=C:\WINDOWS
    TEMP=D:\Temp
    TMP=D:\Temp
    USERDOMAIN=JERRY
    USERNAME=Administrator
    USERPROFILE=C:\Documents and Settings\Administrator
    VS90COMNTOOLS=E:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
    windir=C:\WINDOWS
    从Shell里面启动的环境变量是:
      

  6.   


    VCInstallDir=e:\program files\microsoft visual studio 9.0\vc\
    VisualStudioDir=C:\Documents and Settings\Administrator\My Documents\Visual Stud
    io 2008
    VS90COMNTOOLS=E:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
    VSInstallDir=e:\program files\microsoft visual studio 9.0\
    WecVersionForRosebud.FF4=2
    windir=C:\WINDOWS
    _ACP_ATLPROV=E:\Program Files\Microsoft Visual Studio 9.0\VC\Bin\ATLProv.dll
    _ACP_INCLUDE=E:\Program Files\Microsoft Visual Studio 9.0\VC\include;E:\Program
    Files\Microsoft Visual Studio 9.0\VC\atlmfc\include;C:\Program Files\Microsoft S
    DKs\Windows\v6.0A\\include;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include_ACP_LIB=E:\Program Files\Microsoft Visual Studio 9.0\VC\lib;E:\Program Files\Mi
    crosoft Visual Studio 9.0\VC\atlmfc\lib;E:\Program Files\Microsoft Visual Studio
     9.0\VC\atlmfc\lib\i386;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib;C:\Pr
    ogram Files\Microsoft SDKs\Windows\v6.0A\lib;E:\Program Files\Microsoft Visual S
    tudio 9.0\;E:\Program Files\Microsoft Visual Studio 9.0\lib
    _ACP_PATH=E:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\M
    icrosoft SDKs\Windows\v6.0A\\bin;E:\Program Files\Microsoft Visual Studio 9.0\Co
    mmon7\Tools\bin;E:\Program Files\Microsoft Visual Studio 9.0\Common7\tools;E:\Pr
    ogram Files\Microsoft Visual Studio 9.0\Common7\ide;C:\Program Files\HTML Help W
    orkshop;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;C:\WINDOWS\Microsoft.N
    ET\Framework\v2.0.50727;E:\Program Files\Microsoft Visual Studio 9.0\;C:\WINDOWS
    \SysWow64;;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
    .........
      

  7.   

    通过比较这2种启动方式, 发现如果是用 Console方式启动, 会多一个环境变量 “PROMPT”你直接用getenv去检测这个环境变量试试, exe应该也一样