我现在想编一个程序关联的软件,就是不管用户点击什么应用程序,都要先执行我的程序,然后我的程序启动后在启动用户想要执行的那个程序。我在注册表中
HKEY_CLASSES_ROOT\\exefile\\shell\\open\\command位置将键值改为我的程序的路径,然后用函数AfxGetApp()->m_lpCmdLine的到用户点击的那个程序的路径,问题是每次这个函数返回的值都是空啊,我的程序每次都会运行,但是用户点击的那个程序却不会运行,请高手指点一下到底是怎么回事啊?谢谢
HKEY_CLASSES_ROOT\\exefile\\shell\\open\\command位置将键值改为我的程序的路径,然后用函数AfxGetApp()->m_lpCmdLine的到用户点击的那个程序的路径,问题是每次这个函数返回的值都是空啊,我的程序每次都会运行,但是用户点击的那个程序却不会运行,请高手指点一下到底是怎么回事啊?谢谢
GetCommandLine()返回LPTSTR
你直接AfxMessageBox(GetCommandLine());试试
用GetCommandLine()获取到的命令行参数是这样的
比如"D:\myprogram\debug\myprogram.exe" D:\text.exe
可以看出第一个参数就是我们的程序所在的路径,
而空格后的就是我们双击执行程序的路径,它是作为一个参数传递过来的
GetCommandLine()得到的命令行参数是通过空格来分隔的。
然后就是通过字符串处理将我们双击执行程序的路径提取出来,
再通过CreateProcess或者是SHellExecute这样的函数调用执行我们通过双击执行程序
注意路径中文件和文件名带空格的情况,要特殊处理一下
不知道说明白了没有 呵呵
你注册表键值是怎么设置的?
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="\"D:\\myprogram\\debug\\myprogram.exe\" \"%1\" %*"
修改成你程序的路径
保存为.reg文件,导入再试试
这样的话得到的应该是
"D:\myprogram\debug\myprogram.exe" "D:\test.exe"
上面是我的另一个问题,帮我解决一下吧,谢谢了。