这么简单的VB语句,怎么会出错?

来源:百度知道 编辑:UC知道 时间:2024/06/22 11:42:09
XP下,清除打印任务太慢了。用BAT又弹出DOS对话框。没办法用VB写了几句。出了个莫名奇妙的问题。
Private Sub Command1_Click()
Printer.KillDoc
Shell "net stop spooler", vbHide
Kill "c:\windows\system32\spool\printers\*.*"
Shell "net start spooler", vbHide
End Sub
运行第一次,报错70,没有权限。关掉再运行一次,OK
加上On Error Resume Next语句后。单击一次没反应。再点OK。
懂VB的指点一下,怎么回事。
补充一下,1.我在这个文件夹下手工新建一个任意文件,就可以一次成功。这和服务是否关闭成功好象没有关系啊。2.一楼你的方法我试了,成功了,谢谢你了,不过还是第一个问题我想不通,能再指点一下吗。3.如果把C:\windows改成系统文件夹怎么写,好象不支持%systemroot%.我加分了。麻烦你了。

Shell "net stop spooler", vbHide
'第一运行时应该是关闭后台打印服务还未完成。
'在这中间加一条延时语句等待或是用其它方式等待服务关闭完成(用延时不太精确)。
Kill "c:\windows\system32\spool\printers\*.*"

'简单点的修改为下:
on Error resume next
Shell "net stop spooler", vbHide
do
sleep 500 'Sleep的声明不用我写了吧?
Kill "c:\windows\system32\spool\printers\*.*"
loop while len(dir("c:\windows\system32\spool\printers\*.*"))
Shell "net start spooler", vbHide

1、出错的原因还我认为还是因为关闭服务未完成。因为如果后台打印服务未完成的话,里面的文件是被打开的状态的。这时是无法删除的。
2、至于你说的在里面手工建一个文件夹,就不会出问题,我没有试过,所以也不太清楚。
3、获取系统目录用GetSystemDirectory就行,这个jwjsb已经写好了,我就不重复了。

3.获取系统路径"\Windows\System32"(WinXP)或"\WinNT\System32"(Win2000)的代码如下:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal l