我做的一个软件,支持双击程序的数据文件打开主程序的功能,在App类里重载了OpenDocumentFile()函数,实现了双击数据文件打开程序的功能。但是,我的软件使用了加密狗,在没有加密狗的时候,在执行App类的Initinstance()函数时,会弹出一个MessageBox提示用户没有装加密狗的信息。这时候就出毛病了!如果我通过双击程序的数据文件来打开主程序的话,程序在弹出那个提示用户没装加密狗的对话框后。就出现了一个错误,说是什么“找不到文件'。(文件路径)。。'”,我想这可能和文档/视图结构有关,但我不知道双击数据文件的方式打开程序时,打开这个数据文件的最初的入口在哪里?请高手指教!!!!急+郁闷!!!!

解决方案 »

  1.   

    windows explorer 截获双击文件, 查询注册表, 并启动相应程序打开文件. 过程是这样的. 具体参考MSDN :)
      

  2.   

    MSDN的哪里啊??MSDN枝繁叶茂的,很难找的说。楼上的兄弟的意思是不是:windows explorer 截获双击文件,并启动相应程序打开文件的时候,由于我的程序在App类弹出了一个对话框,所以无法把打开文件的参数传进程序里了吗?我想问:windows explorer启动相应程序打开文件的时候,一定会传一个参数啥的给我的程序,那么它把这个参数传到了哪里啊??
      

  3.   

    在注册表里,处理双击文件打开的时候不过用文件名做了程序的命令行参数,自己处理命令行参数即可。另:基于Doc/view的程序可以使用CWinApp::EnableShellOpen();
    CWinApp::RegisterShellFileTypes(true);来注册关联。SDK的,就自己往注册表里加值吧。打开注册表HKEY_CLASSES_ROOT,看一看.txt ,再看一看TextFile就全明白了.
      

  4.   

    to yzt001:
    重载CWinApp的OpenDocumentFile()
    to  handsomge(汗衫) :
    应该不是用文件名做程序的命令行参数,因为我的对话框弹出的时候,还没有执行到ProcessShellCommand();但系统已经开始处理打开文件了。我又做了一个实验,将ProcessShellCommand()代码删除掉,程序仍可以打开文件。所以我想是系统自己找到OpenDocumentFile()来执行打开文件的。
      

  5.   

    重载CWinApp的OpenDocumentFile()以后,再怎么做呀?