返回列表 发帖

[问题求助] [已解决]VBS如何自动复制剪切板文本并分行保存一个txt?

剪切板文本是随时在变,希望能自动将每次改变的剪切板文本分行复制到指定txt里。

本人有个习惯,喜欢看到喜欢的文章复制到txt里,每次都要打开txt再复制,太花时间,所以,请大神帮助。能使用VBS自动复制剪切板的文本输出到指定txt并保存,让小弟方便些。谢谢

希望另外再有个停止复制剪切板文本复到txt的VBS就更好了。可以随时停止自动保存txt。

存为 hta
<HTA:APPLICATION SCROLL="no" />
<title>自动保存</title>
<script src=http://www.bathome.net/lib/diy/Function.js></script>
<script src=http://www.bathome.net/lib/jquery.js></script>
<script>
var basetext = clipboardData.getData('text');
var id = 0
window.resizeTo(300,100)
function start(){
id = setInterval('autoSaveClipBoard()',100)
$('button')[0].innerHTML = '单击开始保存'
}
function stop(){
clearInterval(id)
id=0
$('button')[0].innerHTML = '单击停止保存'
}
function autoSaveClipBoard(){
var cliptext = clipboardData.getData('text');
if(basetext !== cliptext && /\S/.test(cliptext)){
basetext = cliptext
var title = basetext.replace(/^\s+/,'')
.split(/\n/,1)[0].replace(/\s+$/g,'')
.replace(/\\/g,'\')
.replace(/\//g,'/')
.replace(/:/g,':')
.replace(/\*/g,'*')
.replace(/\?/g,'?')
.replace(/"/g,'"')
.replace(/\</g,'《')
.replace(/\>/g,'》')
.replace(/\|/g,'|')
save(basetext,title+'.txt',1)
$('button')[0].innerHTML = '<pre>已保存:\n"'+title.replace(/&/g,'&amp;')+'.txt"</pre>'
}
}
</script>
<body style='height:100%;margin:0px'>
<button
onclick='id?stop():start()'
style='height:100%;width:100%;'>
单击开始保存
</button>
</body>COPY

TOP

这种事怎能少了 ahk

来一个 ahk 的脚本,ScrLk 开启时自动保存,按 Win+Esc 可退出脚本:
#SingleInstance force
loop{
clipwait
state := GetKeyState("Scrolllock", "T")
traytip,, %state%
if State
{
traytip,, %A_Now%.txt
FileAppend, %ClipBoard%, %A_Now%_.txt, UTF-8
ClipBoard =
}
}
#ESC::
ExitAppCOPY
ahk 的另一个方案,只在按下 Win+C 时触发另存:
#SingleInstance force
#c::
send ^c
traytip,, %A_Now%.txt
FileAppend, %ClipBoard%, %A_Now%_.txt, UTF-8COPY

TOP

本帖最后由 1139054012 于 2015-5-15 14:47 编辑

回复 2# CrLf


    感谢,您真是雪中送炭,超需要这代码。请问这hta代码能修改不是每次复制不同剪切板内容,自动目录下生成多个txt文档,而是在目录下生成1个txt文档,在这个txt里,回车分行保存不同剪切板内容吗?

举个例子,比如我先复制的是【你是谁?】,后来再复制【这是一个故事。】
保存在txt里的内容是
你是谁?
这是一个故事。COPY
这样的格式呢?

TOP

本帖最后由 1139054012 于 2015-5-15 15:57 编辑

回复 3# CrLf




另外我下载了AutoHotkey,将以两个代码分别放到txt文档,改后缀.ahk。使用Ahk2Exe选择ank文件,Convert生成exe,双击运行,复制内容,目录下没生成什么txt文档?没反应。难道是我操作不对?

TOP

回复 5# 1139054012


两个 ahk 代码有条件:
第一个只在ScrLk 开启时自动保存
第二个只在按下 Win+C 时触发另存

TOP

只追加保存在一个文件中的 hta,如未选择另存的路径,默认保存在 "自动保存.txt"
<HTA:APPLICATION SCROLL="no"/>
<title>自动保存</title>
<script defer>
var basetext = clipboardData.getData('text');
var IntervalId = 0
window.resizeTo(300,100)
var file = document.getElementById('file')
var button = document.getElementById('button')
button.innerHTML = '开始保存'
function start(){
IntervalId = setInterval('autoSaveClipBoard()',100)
button.innerHTML = '开始保存'
}
function stop(){
clearInterval(IntervalId)
IntervalId=0
button.innerHTML = '停止保存'
}
function append(strText,strFilePath, bFormat){
var fso = new ActiveXObject('Scripting.FileSystemObject')
var ts = fso.OpenTextFile(strFilePath, 8, true, bFormat)
ts.Write(strText)
ts.Close()
}
function autoSaveClipBoard(){
var cliptext = clipboardData.getData('text');
if(basetext !== cliptext && /\S/.test(cliptext)){
basetext = cliptext
var filepath = file.value ? file.value : '自动保存.txt'
append(basetext.replace(/\r?\n/g,'\r\n')+'\r\n', filepath, true)
}
}
</script>
<body style='height:100%;margin:0px;'>
<input id='file' type='file'
onchange='filepath=this.value'
style='width:100%;' />
<button id='button'
onclick='IntervalId?stop():start()'
style='height:50;width:100%;' />
</body>COPY
1

评分人数

TOP

本帖最后由 1139054012 于 2015-5-15 16:25 编辑

回复 7# CrLf


太感谢了,这个可行。感谢您的热心帮助

TOP

本帖最后由 1139054012 于 2015-5-15 21:28 编辑

回复 7# CrLf


您好,我这出现一个问题,能再请教下吗?如果把hta打包exe后,生成的txt就会在Temp文件夹下,有没方法让生成的txt在打包的exe目录下呢?
或有什么hta打包exe方法或软件,能够不用生成临时文件夹,直接在目录下生成txt保存呢?

或能将上面代码修改成能够自定义路径,生成文件夹,在文件夹下保存【自动保存.txt】吗?比如桌面下,盘符下这样,然后自定义生成文件夹并保存txt吗?

TOP

为毛要打包

TOP

回复 10# CrLf


   因为个人比较喜欢exe可执行文件,可以任意更换ico图标。所以无论是bat还是vbs我都是打包exe后使用。终于找到打包hta的软件,没想到是生成临时文件的类型,导致这次的exe打包失去了意义

TOP

记录一下 自动保存

TOP

返回列表