Posted on 2007-10-03 12:36
Bluekylin 阅读(201)
评论(1) 编辑 收藏 所属分类:
3.Workout

07.11.20 updated
后来发现不需要借助第三方编程工具,因为bat/cmd中命令也是串行执行的,不用另外搞进程监视了,也就是说
bat+photoshop的快捷批处理 就OK了。我用到的bat模式主要是for遍历文件夹和&来连接串行执行的命令:
for %%variable in (set) do command1 & command2 & ...
另外,值得一提的是ImageReady 虽然有后台处理功能,但是它的快捷批处理完成时监视不到,所以不能被灵活运用。至于Photoshop虽然没有后台处理功能,桌面会被霸占,但是有一个变相后台处理的办法,就是切换用户(Win+L),这个用户下在处理图片,换到另外一个用户下去干别的事,电脑配置不能太差哦,呵呵!

最近在工作中碰到一些机械性图片处理的活,我最讨厌干这种浪费生命的事情,于是稍稍研究了一下,结合Photoshop的快捷批处理(调用自定义动作)+VB+CMD实现了一个遍历文件夹处理图片的小工具,把需要干半天的活浓缩在半小时内。其实Photoshop的快捷批处理已经很很人性化了,超强,但是在实际处理中可能会遇到文件命名、存储位置等问题,你给它做点扫尾工作就可以了,我在VB中使用shell调用cmd来执行这个操作。
为了防止Shell并行执行,我加了下面这个doProcess来串行化执行cmd命令。
'For process control
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Const SYNCHRONIZE = &H100000
Const INFINITE = &HFFFFFFFF
Private Function doProcess(command As String)
Dim pId As Long
Dim pHnd As Long
pId = Shell(command)
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
If pHnd <> 0 Then
Call WaitForSingleObject(pHnd, INFINITE)
'等待,直到程序结束
Call CloseHandle(pHnd)
End If
End Function
之后就可以直接调用doProcess来串行执行Shell,例:
doProcess("cmd /c "+[cmd命令1])
doProcess("cmd /c "+[cmd命令2])
扫尾工作还需要引用Miscrosoft Scripting Runtime(scrrun.dll)来执行文件及文件夹遍历操作,随便哪本VB书里都有这个介绍,不写了。
写完发现,又是一篇文不对题的,嗨!
_____________________________________________________