VC编程中,想使用createprocess调用excel.exe来启动多个xls,该如何设置参数呢?
我想模拟鼠标左键双击的操作。双击c:\1.xls,这时候会创建一个excel.exe进程,然后这个进程会打开1.xls。这时候再去双击c:\2.xls,之前创建的进程,将...
我想模拟鼠标左键双击的操作。双击c:\1.xls,这时候会创建一个excel.exe进程,然后这个进程会打开1.xls。 这时候再去双击c:\2.xls,之前创建的进程,将会打开2.xls。即这时候的任务管理器中,只会存在一条excel.exe进程。
但是如果我使用createprocess(excel.exe, .xls, ...)来创建,则每调用一次,就会创建出一个excel.exe进程。调用两次之后,虽然1.xls与2.xls都打开了,但这是由两个进程打开的。任务管理器中也可以看到是两个excel.exe进程的。
如何用代码来实现一个excel.exe 打开多个xls的呢(就像直接双击一样的效果)?求高手指点 展开
但是如果我使用createprocess(excel.exe, .xls, ...)来创建,则每调用一次,就会创建出一个excel.exe进程。调用两次之后,虽然1.xls与2.xls都打开了,但这是由两个进程打开的。任务管理器中也可以看到是两个excel.exe进程的。
如何用代码来实现一个excel.exe 打开多个xls的呢(就像直接双击一样的效果)?求高手指点 展开
1个回答
展开全部
office系列都自带了防多开功能,其中word和excel用了很低级的dde,而ppt用了比较高端的事件对象,用createprocess可以直接绕过dde,但是无法直接绕过ppt这种机制,因此createprocess打开多个excel文件就会产生多个exe,但ppt只会有1个。
从注册表中找到xls文件的打开参数"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e
也就是说explore根本没有理想中的那样通过CreateProcess传文件名给excel.exe,另外还可以找到ddeexec键,说明是做了dde的,点进去可以发现open("%1"),也就是说explore只是启动了excel.exe,然后相当于给excel.exe发送消息,让他执行“打开文件”操作,这点可以用api monitor监视到,另外用api monitor监控结果表明,双击xls文件后执行CreateProcess,第一个参数是C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE,第二个参数是"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e,这时再双击一尺猜个xls文件发现压根就没执行CreateProcess了,说明explore内部做了一伏纯次检测,当打开一个xls文件的时候检测是否已经打开了excel.exe,如果已经打开了,就不需要CreateProcess了,而是直接告诉excel.exe让他执行“打开文件”操作
所以如果自己编程就要做到跟explore一样的事情,首先CreateProcess是已知的,但是用什么函数让excel.exe去执行“打开”操作我就不知道了,之前做过破缺困咐解office的这种机制实现多开,却没有反过来考虑过,只能帮你这么多了
从注册表中找到xls文件的打开参数"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e
也就是说explore根本没有理想中的那样通过CreateProcess传文件名给excel.exe,另外还可以找到ddeexec键,说明是做了dde的,点进去可以发现open("%1"),也就是说explore只是启动了excel.exe,然后相当于给excel.exe发送消息,让他执行“打开文件”操作,这点可以用api monitor监视到,另外用api monitor监控结果表明,双击xls文件后执行CreateProcess,第一个参数是C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE,第二个参数是"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e,这时再双击一尺猜个xls文件发现压根就没执行CreateProcess了,说明explore内部做了一伏纯次检测,当打开一个xls文件的时候检测是否已经打开了excel.exe,如果已经打开了,就不需要CreateProcess了,而是直接告诉excel.exe让他执行“打开文件”操作
所以如果自己编程就要做到跟explore一样的事情,首先CreateProcess是已知的,但是用什么函数让excel.exe去执行“打开”操作我就不知道了,之前做过破缺困咐解office的这种机制实现多开,却没有反过来考虑过,只能帮你这么多了
追问
说得非常对,我也感觉explorer与excel有奸情了。与winword的情况不一样。我得想想能否找出如何模拟发送消息
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询