vb调用shellexecute打开word文件,word一闪而过,何解?

soda1239 2011-05-30 08:13:02
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


..........................



Private Sub MSHFlexGrid1_DblClick()
Dim doc_path As String
doc_path = App.path & "\kindsof" & "\" & Trim(MSHFlexGrid1.Text)
Dim scr_hDC As Long
scr_hDC = GetDesktopWindow
myprogram = ShellExecute(scr_hDC, "open", doc_path, "", "c:\", 1)
End Sub



另外奇怪的是,这段代码最初是可以运行的,后来我对窗体进行了一些修改就不能用了。请问是怎么回事?
因为比较急,所以分比较多。


...全文
923 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
soda1239 2011-06-01
  • 打赏
  • 举报
回复
最后用
Set ap = CreateObject("word.application")
Set doc = ap.Documents.Open("d:\1.doc")
解决了问题。
中文名的问题始终没有得到解决,我也很无奈。
VISLIVE 2011-05-31
  • 打赏
  • 举报
回复
终极大法,在有问题的PC上重装Office
ShellExecute的代码我在XP+Office 2003和Win7+Office 2010上均试Run过没有出现问题
测试用的文件有"中文名.Doc"和"中文名.Docx"的

贝隆 2011-05-31
  • 打赏
  • 举报
回复
此外参考一下这个:
http://download.csdn.net/source/1627134
贝隆 2011-05-31
  • 打赏
  • 举报
回复
是不是路径有问题?你看看ShellExcute返回值是否是0?如果是0,表示执行函数失败。
Guitaralex 2011-05-31
  • 打赏
  • 举报
回复
LZ,那个不是退出,只是程序在后台跑,你看不到而已
soda1239 2011-05-31
  • 打赏
  • 举报
回复
回1楼:
是关闭。不好意思,是我没表达清楚。

回2楼:
现在可以打开资源管理器,不能打开doc文档,而pdf文档可以打开。另外:不是所有的doc都不能打开,而是只有中文文件名的doc文档不能打开。如果是英文文件名的,则是可以打开的。
soda1239 2011-05-31
  • 打赏
  • 举报
回复
To 10楼:在资源管理器中可以正常打开doc文件
To 11楼:这个做法我试过了
To 13楼:现在word程序在加载之后马上退出
To 14楼:ShellExecuteW试了,会报错,而且跟踪了ShellExecuteA调用,参数正确无误。再重申:pdf/jpg均可用此方式打开,唯独doc是一闪而过。
孤独剑_LPZ 2011-05-31
  • 打赏
  • 举报
回复
myprogram = ShellExecute(scr_hDC, "Open", doc_path, "", App.path & "\kindsof", 1)
咸清 2011-05-31
  • 打赏
  • 举报
回复
你看看你自己改哪里了啊?
什么叫一闪而过?

是 最小化了 还是 关闭?
两种情况是差别很大的
hpygzhx520 2011-05-31
  • 打赏
  • 举报
回复
试试ShellExecuteW
Guitaralex 2011-05-31
  • 打赏
  • 举报
回复
调用OFFICE的,要加上
.usercontrol = true
.visible = true
不然你只能在进程表中看到有个Word在跑,但不知道是跑的哪个文档
VISLIVE 2011-05-31
  • 打赏
  • 举报
回复
在开始运行里输入:
%userprofile%\Application Data\Microsoft\Templates
或:
"%userprofile%\Application Data\Microsoft\Templates"
运行后:
如果是Office 2003,删除Normal.dot
如果是office 2010,删除Normal.dotm
VISLIVE 2011-05-31
  • 打赏
  • 举报
回复
删除当前用户目录下的
\Application Data\Microsoft\Templates里的Normal.dot文件试一下

需要设置为显示隐藏和系统文件

孤独剑_LPZ 2011-05-31
  • 打赏
  • 举报
回复
是不是word版本问题,你电脑本身能打开中文名的.doc文档吗
shellexecute只是调用默认的方式打开文件,和电脑本身的关联软件有关
soda1239 2011-05-31
  • 打赏
  • 举报
回复
我用msgbox查看shellexecute的参数,是正确的。
函数调用的返回值是0x21,也就是33,函数调用成功。
请注意:pdf/jpg格式均能打开,而word是一闪而过,即退出。
VISLIVE 2011-05-31
  • 打赏
  • 举报
回复
猜测一下,是不是你的MSHFlexGrid取路径字符串部分的代码写错了?:-)
simon__sun 2011-05-31
  • 打赏
  • 举报
回复
ShellExecute(scr_hDC, "open", doc_path, "", "c:\", 1)
改成
ShellExecute(scr_hDC, "open", Chr(34) + doc_path + Chr(34), "", "c:\", 1)
VISLIVE 2011-05-31
  • 打赏
  • 举报
回复
myprogram是定义的Long值吧
调试一下,msgbox myprogram
看返回值是否小于等于32

返回 2
"File not found"
返回 3
"Path not found"
返回 5
"Access denied"
返回 8
"Out of memory"
返回 32
"DLL not found"
返回 26
"A sharing violation occurred"
返回 27
"Incomplete or invalid file association"
返回 28
"DDE Time out"
返回 29
"DDE transaction failed"
返回 30
"DDE busy"
返回 31
"No association for file extension"
返回 11
"Invalid EXE file or error in EXE image"

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧