标题: [其他] 批处理、VBS剪贴板操作专题 [打印本页]
作者: zqz0012005 时间: 2010-6-23 23:04 标题: 批处理、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、读取剪贴板中的文本- Set oIE = CreateObject("InternetExplorer.Application")
- oIE.Navigate "about:blank"
- Do Until oIE.readyState=4 : WScript.Sleep 200 : Loop 'complete
- clipboardText = oIE.document.parentWindow.clipboardData.getData("text")
- WScript.Echo clipboardText
- oIE.Quit
复制代码
- Set oDOM = CreateObject("htmlfile") 'xmlfile、mhtmlfile都可以
- clipboardText = oDOM.parentWindow.clipboardData.getData("text")
- WScript.Echo clipboardText
复制代码
- 'Set oDOM = GetObject("about:blank", "htmlfile") '灾难性故障?
- Set oDOM = GetObject("\", "htmlfile") '随便用个什么文件名,不管是否存在,一定要是本地路径(C:\bathome或\boot.ini之类的)
- 'WScript.Echo oDOM.readyState
- Do Until oDOM.readyState="complete" : WScript.Sleep 200 : Loop 'complete
- 'WScript.echo oDOM.documentElement.outerHTML
- clipboardText = oDOM.parentWindow.clipboardData.getData("text")
- WScript.Echo clipboardText
复制代码
- mshta.exe "javascript:s=clipboardData.getData('text');alert(s);close();"
复制代码
DOM组件可能受到系统的安全限制,不能往剪贴板写数据(包括清空),只能读取
IE7及以上版本据说写操作时也会出现安全提示框
2、将文本写到剪贴板- Set oIE = CreateObject("InternetExplorer.Application")
- oIE.Navigate "about:blank"
- Do Until oIE.readyState=4 : WScript.Sleep 200 : Loop 'complete
- strText = "www.bathome.net"
- oIE.document.parentWindow.clipboardData.setData "text", strText
- oIE.Quit
复制代码
- mshta.exe "javascript:clipboardData.setData('text', 'www.bathome.net');close();"
复制代码
- Set ws = CreateObject("WScript.Shell")
- ws.run "mshta ""javascript:clipboardData.setData('text', 'www.bathome.net');close();""", 0, true
- '最好设置等待标志为true,等待操作完成,保证后续语句能得到正确结果
- WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
3、清空剪贴板- Set oIE = CreateObject("InternetExplorer.Application")
- oIE.Navigate "about:blank"
- Do Until oIE.readyState=4 : WScript.Sleep 200 : Loop 'complete
- oIE.document.parentWindow.clipboardData.clearData
- oIE.Quit
复制代码
- mshta.exe "javascript:clipboardData.clearData();close();"
复制代码
- Set ws = CreateObject("WScript.Shell")
- ws.run "mshta javascript:clipboardData.clearData();close();", 0, true
复制代码
作者: zqz0012005 时间: 2010-6-23 23:04 标题: 复制文件(夹)到剪贴板
查看快捷方式的目标
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\lnkfile\shell\Target]
- @="查看目标(&F)"
-
- [HKEY_CLASSES_ROOT\lnkfile\shell\Target\command]
- @="mshta vbscript:CreateObject(\"WScript.Shell\").Run(\"explorer /n,/select,\"&CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").TargetPath)(close)"
复制代码
复制lnk快捷方式的目标路径及参数
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\lnkfile\shell\CopyLink]
- @="复制命令及参数(&G)"
-
- [HKEY_CLASSES_ROOT\lnkfile\shell\CopyLink\command]
- @="mshta vbscript:clipboardData.setData(\"text\",CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").TargetPath+chr(32)+CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").Arguments)(close)"
复制代码
复制URL快捷方式的目标地址
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\InternetShortcut\shell\CopyLink]
- @="复制链接(&F)"
-
- [HKEY_CLASSES_ROOT\InternetShortcut\shell\CopyLink\command]
- @="mshta vbscript:clipboardData.setData(\"text\",CreateObject(\"WScript.Shell\").CreateShortcut(\"%1\").TargetPath)(close)"
复制代码
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\CopyPath2Clip]
- @="复制文件路径到剪贴板(&W)"
-
- [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\CopyPath2Clip\command]
- @="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\""
复制代码
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\txtfile\shell\CopyText2Clip]
- @="复制文本内容到剪贴板(&X)"
-
- [HKEY_CLASSES_ROOT\txtfile\shell\CopyText2Clip\command]
- @="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- @echo off
- call :c2cb "%ProgramFiles%\microsoft frontpage"
- exit /b
-
- ::Copy2ClipBoard
- :c2cb
- setlocal
- set "f=%~1"
- set "f=%f:\\=\%"
- set "f=%f:\=\\%"
- mshta "javascript:moveTo(screen.width,0);document.write('<img id=\'x\' src=\'%f%\'>');i=document.body.createControlRange();i.add(x);i.execCommand('copy');close()"
- goto :eof
复制代码
未完待续……
[ 本帖最后由 zqz0012005 于 2010-6-30 20:32 编辑 ]
作者: zqz0012005 时间: 2010-6-23 23:04 标题: 右键菜单添加“保存剪贴板内容”
右键菜单添加“保存剪贴板内容”- Windows Registry Editor Version 5.00
- ; 保存剪贴板内容_所有文件右键_添加.reg
- [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\SaveClipText]
- @="保存剪贴板内容(&B)"
-
- [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\SaveClipText\command]
- @="mshta \"javascript:try{new ActiveXObject('Scripting.FileSystemObject').OpenTextFile(new Date().getTime()+'.txt',2,true).Write(clipboardData.getData('text'));}catch(e){alert('non-text');}close();\""
复制代码
- Windows Registry Editor Version 5.00
- ; 保存剪贴板内容_所有文件右键_删除.reg
- [-HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\SaveClipText]
复制代码
批处理如何在右键菜单中添加一键清空剪贴板的功能?
http://www.bathome.net/viewthread.php?tid=4541- Windows Registry Editor Version 5.00
- ; 清空剪贴板_空白处右键_添加.reg
- [HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ClearClipboard]
- @="{00000000-0000-0000-0000-000000000012}"
-
- [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}\InProcServer32]
- @=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,\
- 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,\
- 64,00,6f,00,63,00,76,00,77,00,2e,00,64,00,6c,00,6c,00,00,00
- "ThreadingModel"="Apartment"
-
- [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}\Instance]
- "CLSID"="{3f454f0e-42ae-4d7c-8ea3-328250d6e272}"
-
- [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}\Instance\InitPropertyBag]
- "method"="ShellExecute"
- "Param2"="mshta"
- "Param1"="vbscript:clipboardData.clearData()(close)"
- "command"="清空剪贴板"
- "CLSID"="{13709620-C279-11CE-A49E-444553540000}"
复制代码
- Windows Registry Editor Version 5.00
- ; 清空剪贴板_空白处右键_删除.reg
- [-HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ClearClipboard]
- [-HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000012}]
复制代码
[ 本帖最后由 zqz0012005 于 2010-6-28 20:47 编辑 ]
作者: Batcher 时间: 2010-6-25 13:42 标题: 相关帖子
批处理保存剪贴板信息
http://bbs.bathome.net/thread-7156-1-1.html
批处理将剪贴板中的内容保存为文件
http://bbs.bathome.net/thread-2875-1-1.html
批处理中如何将剪贴板里的文本赋给变量?
http://bbs.bathome.net/thread-7467-1-1.html
批处理如何清除剪贴板內容?
http://bbs.bathome.net/thread-3942-1-1.html
批处理怎样把需要的字符复制到windows剪贴板?
http://bbs.bathome.net/thread-2421-1-1.html
批处理结合VBS获取屏幕大小以及剪贴板内容
http://bbs.bathome.net/thread-7162-1-1.html
作者: shuaige100 时间: 2010-6-26 23:35 标题: 回复 1楼 的帖子
将文本写到剪贴板是不是第三个代码最好?因为它true,就不怕文本长度影响?
作者: shuaige100 时间: 2010-6-26 23:42
楼主太好了,乐于助人
作者: pdanniel66 时间: 2010-6-29 05:31
不了解Clip的应用范例为何? 直接 copy 过去不是可以吗 ?
為何需透過剪贴板 ?
作者: zqz0012005 时间: 2011-10-26 21:02
- Set ws = CreateObject("WScript.Shell")
- ws.run "mshta ""javascript:clipboardData.setData('text', 'www.bathome.net');close();""", 0, true
- '最好设置等待标志为true,等待操作完成,保证后续语句能得到正确结果
- WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
这里设置的是“www.bathome.net”这种简单文本,如果文本太复杂,比如有特殊字符、换行等,则最好通过环境变量传递数据。- Set ws = CreateObject("WScript.Shell")
- ws.Environment("process").item("@") = chr(34) & "a" & vbCrLf & "'b"
- ws.run "mshta ""javascript:clipboardData.setData('text', new ActiveXObject('WScript.Shell').Environment('process').item('@'));close();""", 0, true
- WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
作者: powerbat 时间: 2011-10-26 21:35
补充
使用Word(好像必须是常规安装的word,绿色版、精简版没有注册此组件)- '设置剪切板的内容
- Set Word = CreateObject("Word.Application")
- Word.Documents.Add
- Word.Selection.Text = "www.bathome.net"
- Word.Selection.Copy
- Word.Quit
复制代码
- '获取剪切板的内容
- Set Word = CreateObject("Word.Application")
- Word.Documents.Add
- Word.Selection.PasteAndFormat(22)
- Word.Selection.WholeStory
- str = Word.Selection.Text
- Word.Quit
- WScript.Echo str
复制代码
使用Microsoft Forms 2.0 Object Library(FM20.DLL),此组件好像也是office的一部分- '设置剪切板的内容
- Set Form = CreateObject("Forms.Form.1")
- Set TextBox = Form.Controls.Add("Forms.TextBox.1").Object
- TextBox.MultiLine = True
- TextBox.Text = "www.bathome.net"
- TextBox.SelStart = 0
- TextBox.SelLength = TextBox.TextLength
- TextBox.Copy
复制代码
- Set Form = CreateObject("Forms.Form.1")
- Set TextBox = Form.Controls.Add("Forms.TextBox.1").Object
- TextBox.MultiLine = True
- If TextBox.CanPaste Then
- TextBox.Paste
- WScript.Echo TextBox.Text
- End If
复制代码
作者: zqz0012005 时间: 2011-10-26 22:22
这两个都要依赖office,不太感冒,特别是word太大了。
以前用过Forms.Form.1,发现写剪贴板有时不成功,经测试这个控件好像是异步的,如果宿主程序过早退出,这个对象还没有完成操作就被销毁了。解决方法是TextBox.Copy之后用WScript.Sleep方法延时一段时间。
mshta.exe会造成屏幕闪烁一次,给人感觉不爽。有clip.exe的系统可用如下代码:- Set ws = CreateObject("WScript.Shell")
- YourText = chr(34) & "a" & vbCrLf & "'b"
- ws.Environment("process").item("@") = vbCrLf & YourText
- ws.run "cmd.exe /d /c set @|more +1|clip.exe", 0, true
- WScript.Echo CreateObject("htmlfile").parentWindow.clipboardData.getData("text")
复制代码
还是通过环境变量,会在文本末尾添加额外的空行(而且more会转换tab符为空格)。
当然如果文本简单,直接用echo或set/p就行了。
作者: guanzbin36o 时间: 2011-11-17 16:37 标题: 学习
学习学习了!!!!!!!!
作者: Bat_jiajia 时间: 2012-2-16 00:08
学习了,有没有html格式到剪贴板的例子呢
作者: garyng 时间: 2012-2-16 09:08
回复 7# pdanniel66
如果你要一切自动化呢?
有或者 你要 复制剪贴板内容中内容 却不想用户动手呢?
作者: rat 时间: 2012-2-29 16:52
mshta.exe会造成屏幕闪烁一次,给人感觉不爽。
先调用moveTo到屏幕外就不会了!
作者: batman 时间: 2012-2-29 17:04
rat你这家伙也知道回来。。。
作者: powerbat 时间: 2012-2-29 19:16
回复 14# rat
还是会闪,就算用WScript.Shell的run隐藏运行也一样。
作者: 我来了 时间: 2013-4-9 17:28
麻烦 高老师 看下这个:
http://www.bathome.net/viewthrea ... mp;page=1#pid128902
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |