[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理、VBS剪贴板操作专题

一、命令行工具:
winclip.exe
http://www.bathome.net/thread-1766-1-1.html
nircmd
http://www.nirsoft.net/utils/nircmd.html

二、系统组件的clipboardData对象:
1、InternetExplorer.Application
2、htmlfile、xmlfile、mhtmlfile(也是一种Automation Com组件,类似上面的;而不是网页文件,注意没有点哦)
3、mshta(也是利用DOM)

event对象的dataTransfer对象也有clearData、getData、setData这些方法

Maxthon、TheWorld、GreenBrowser、腾讯TT等IE核心的浏览器如果已经运行了,会劫持脚本对InternetExplorer.Application对象的调用,可能会因此出错

1、读取剪贴板中的文本
  1. Set oIE = CreateObject("InternetExplorer.Application")
  2. oIE.Navigate "about:blank"
  3. Do Until oIE.readyState=4 : WScript.Sleep 200 : Loop 'complete
  4. clipboardText = oIE.document.parentWindow.clipboardData.getData("text")
  5. WScript.Echo clipboardText
  6. oIE.Quit
复制代码
  1. Set oDOM = CreateObject("htmlfile") 'xmlfile、mhtmlfile都可以
  2. clipboardText = oDOM.parentWindow.clipboardData.getData("text")
  3. WScript.Echo clipboardText
复制代码
  1. 'Set oDOM = GetObject("about:blank", "htmlfile") '灾难性故障?
  2. Set oDOM = GetObject("\", "htmlfile") '随便用个什么文件名,不管是否存在,一定要是本地路径(C:\bathome或\boot.ini之类的)
  3. 'WScript.Echo oDOM.readyState
  4. Do Until oDOM.readyState="complete" : WScript.Sleep 200 : Loop 'complete
  5. 'WScript.echo oDOM.documentElement.outerHTML
  6. clipboardText = oDOM.parentWindow.clipboardData.getData("text")
  7. WScript.Echo clipboardText
复制代码
  1. mshta.exe "javascript:s=clipboardData.getData('text');alert(s);close();"
复制代码
DOM组件可能受到系统的安全限制,不能往剪贴板写数据(包括清空),只能读取
IE7及以上版本据说写操作时也会出现安全提示框


2、将文本写到剪贴板
  1. Set oIE = CreateObject("InternetExplorer.Application")
  2. oIE.Navigate "about:blank"
  3. Do Until oIE.readyState=4 : WScript.Sleep 200 : Loop 'complete
  4. strText = "www.bathome.net"
  5. oIE.document.parentWindow.clipboardData.setData "text", strText
  6. oIE.Quit
复制代码
  1. mshta.exe "javascript:clipboardData.setData('text', 'www.bathome.net');close();"
复制代码
  1. Set ws = CreateObject("WScript.Shell")
  2. ws.run "mshta ""javascript:clipboardData.setData('text', 'www.bathome.net');close();""", 0, true
  3. '最好设置等待标志为true,等待操作完成,保证后续语句能得到正确结果
  4. WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
3、清空剪贴板
  1. Set oIE = CreateObject("InternetExplorer.Application")
  2. oIE.Navigate "about:blank"
  3. Do Until oIE.readyState=4 : WScript.Sleep 200 : Loop 'complete
  4. oIE.document.parentWindow.clipboardData.clearData
  5. oIE.Quit
复制代码
  1. mshta.exe "javascript:clipboardData.clearData();close();"
复制代码
  1. Set ws = CreateObject("WScript.Shell")
  2. ws.run "mshta javascript:clipboardData.clearData();close();", 0, true
复制代码
2

评分人数

命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

复制文件(夹)到剪贴板

查看快捷方式的目标
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\lnkfile\shell\Target]
  3. @="查看目标(&F)"
  4. [HKEY_CLASSES_ROOT\lnkfile\shell\Target\command]
  5. @="mshta vbscript:CreateObject(\"WScript.Shell\").Run(\"explorer /n,/select,\"&CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").TargetPath)(close)"
复制代码


复制lnk快捷方式的目标路径及参数
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\lnkfile\shell\CopyLink]
  3. @="复制命令及参数(&G)"
  4. [HKEY_CLASSES_ROOT\lnkfile\shell\CopyLink\command]
  5. @="mshta vbscript:clipboardData.setData(\"text\",CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").TargetPath+chr(32)+CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").Arguments)(close)"
复制代码

复制URL快捷方式的目标地址
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\InternetShortcut\shell\CopyLink]
  3. @="复制链接(&F)"
  4. [HKEY_CLASSES_ROOT\InternetShortcut\shell\CopyLink\command]
  5. @="mshta vbscript:clipboardData.setData(\"text\",CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").TargetPath)(close)"
复制代码
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\CopyPath2Clip]
  3. @="复制文件路径到剪贴板(&W)"
  4. [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\CopyPath2Clip\command]
  5. @="mshta \"javascript:moveTo(-1000,-1000);document.write('<hta:application id=$ showInTaskbar=no />');fso=new ActiveXObject('Scripting.FileSystemObject');s=$.commandLine;q=String.fromCharCode(34);clipboardData.setData('text',s.match(new RegExp(q+'.*?'+q,'g')).pop().slice(1,-1));close();\" \"%1\""
复制代码
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\txtfile\shell\CopyText2Clip]
  3. @="复制文本内容到剪贴板(&X)"
  4. [HKEY_CLASSES_ROOT\txtfile\shell\CopyText2Clip\command]
  5. @="mshta \"javascript:moveTo(-1000,-1000);document.write('<hta:application id=$ showInTaskbar=no />');fso=new ActiveXObject('Scripting.FileSystemObject');s=$.commandLine;q=String.fromCharCode(34);f=s.match(new RegExp(q+'.*?'+q,'g')).pop().slice(1,-1);clipboardData.setData('text',fso.OpenTextFile(f).ReadAll());close();\" \"%1\""
复制代码
【代码技巧】批处理拷贝文件(夹)到剪贴板
http://www.bathome.net/thread-4223-1-1.html
  1. @echo off
  2. call :c2cb "%ProgramFiles%\microsoft frontpage"
  3. exit /b
  4. ::Copy2ClipBoard
  5. :c2cb
  6. setlocal
  7. set "f=%~1"
  8. set "f=%f:\\=\%"
  9. set "f=%f:\=\\%"
  10. mshta "javascript:moveTo(screen.width,0);document.write('<img id=\'x\' src=\'%f%\'>');i=document.body.createControlRange();i.add(x);i.execCommand('copy');close()"
  11. goto :eof
复制代码
未完待续……

[ 本帖最后由 zqz0012005 于 2010-6-30 20:32 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

右键菜单添加“保存剪贴板内容”

右键菜单添加“保存剪贴板内容”
  1. Windows Registry Editor Version 5.00
  2. ; 保存剪贴板内容_所有文件右键_添加.reg
  3. [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\SaveClipText]
  4. @="保存剪贴板内容(&B)"
  5. [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\SaveClipText\command]
  6. @="mshta \"javascript:try{new ActiveXObject('Scripting.FileSystemObject').OpenTextFile(new Date().getTime()+'.txt',2,true).Write(clipboardData.getData('text'));}catch(e){alert('non-text');}close();\""
复制代码
  1. Windows Registry Editor Version 5.00
  2. ; 保存剪贴板内容_所有文件右键_删除.reg
  3. [-HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\SaveClipText]
复制代码
批处理如何在右键菜单中添加一键清空剪贴板的功能?
http://www.bathome.net/viewthread.php?tid=4541
  1. Windows Registry Editor Version 5.00
  2. ; 清空剪贴板_空白处右键_添加.reg
  3. [HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ClearClipboard]
  4. @="{00000000-0000-0000-0000-000000000012}"
  5. [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}\InProcServer32]
  6. @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  7.   00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,68,00,\
  8.   64,00,6f,00,63,00,76,00,77,00,2e,00,64,00,6c,00,6c,00,00,00
  9. "ThreadingModel"="Apartment"
  10. [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}\Instance]
  11. "CLSID"="{3f454f0e-42ae-4d7c-8ea3-328250d6e272}"
  12. [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}\Instance\InitPropertyBag]
  13. "method"="ShellExecute"
  14. "Param2"="mshta"
  15. "Param1"="vbscript:clipboardData.clearData()(close)"
  16. "command"="清空剪贴板"
  17. "CLSID"="{13709620-C279-11CE-A49E-444553540000}"
复制代码
  1. Windows Registry Editor Version 5.00
  2. ; 清空剪贴板_空白处右键_删除.reg
  3. [-HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ClearClipboard]
  4. [-HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}]
复制代码

[ 本帖最后由 zqz0012005 于 2010-6-28 20:47 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

  1. Set ws = CreateObject("WScript.Shell")
  2. ws.run "mshta ""javascript:clipboardData.setData('text', 'www.bathome.net');close();""", 0, true
  3. '最好设置等待标志为true,等待操作完成,保证后续语句能得到正确结果
  4. WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码

这里设置的是“www.bathome.net”这种简单文本,如果文本太复杂,比如有特殊字符、换行等,则最好通过环境变量传递数据。
  1. Set ws = CreateObject("WScript.Shell")
  2. ws.Environment("process").item("@") = chr(34) & "a" & vbCrLf & "'b"
  3. ws.run "mshta ""javascript:clipboardData.setData('text', new ActiveXObject('WScript.Shell').Environment('process').item('@'));close();""", 0, true
  4. WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

这两个都要依赖office,不太感冒,特别是word太大了。
以前用过Forms.Form.1,发现写剪贴板有时不成功,经测试这个控件好像是异步的,如果宿主程序过早退出,这个对象还没有完成操作就被销毁了。解决方法是TextBox.Copy之后用WScript.Sleep方法延时一段时间。

mshta.exe会造成屏幕闪烁一次,给人感觉不爽。有clip.exe的系统可用如下代码:
  1. Set ws = CreateObject("WScript.Shell")
  2. YourText = chr(34) & "a" & vbCrLf & "'b"
  3. ws.Environment("process").item("@") = vbCrLf & YourText
  4. ws.run "cmd.exe /d /c set @|more +1|clip.exe", 0, true
  5. WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
还是通过环境变量,会在文本末尾添加额外的空行(而且more会转换tab符为空格)。
当然如果文本简单,直接用echo或set/p就行了。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表