本帖最后由 smooth 于 2015-3-11 18:43 编辑
情况是这样的,我写了一个监视打印服务的exe,内容如下:
While 1
If _ServGetState("Spooler") = "Stopped" Then
_Service_Start("Spooler")
EndIf
WEnd
把这个exe注册成服务后启动,打印服务spooler就无法停止了。
但是我用同样的方法写了一个自动清空回收站的exe,内容如下:
#NoTrayIcon
While 1
$recycle = _WinAPI_ShellQueryRecycleBin("")
If $recycle[1] > 0 Then
FileRecycleEmpty()
EndIf
WEnd
Func _WinAPI_ShellQueryRecycleBin($sRoot = '')
Local $tSHQRBI = DllStructCreate('align 4;dword_ptr;int64;int64')
DllStructSetData($tSHQRBI, 1, DllStructGetSize($tSHQRBI))
Local $Ret = DllCall('shell32.dll', 'long', 'SHQueryRecycleBinW', 'wstr', $sRoot, 'struct*', $tSHQRBI)
If @error Then Return SetError(@error, @extended, 0)
If $Ret[0] Then Return SetError(10, $Ret[0], 0)
Local $Result[2]
$Result[0] = DllStructGetData($tSHQRBI, 2)
$Result[1] = DllStructGetData($tSHQRBI, 3)
Return $Result
EndFunc ;==>_WinAPI_ShellQueryRecycleBin
用同样的方法把这个EXE注册成系统服务启动后,却不能自动清空回收站,双击这个exe是可以的。按照道理,注册成服务启动后,这个脚本就一直在循环了。
为什么会有这样的差异呢?分析了很久都找不到原因。如下图,两个服务对应的EXE文件都已在运行。谢谢!
把这个EXE加入开机自动启动,可以自动清空回收站。 |