TC官方合作论坛

标题: TC直接调用VBS,无须创建vbs文件,带返回值,有源码 [打印本页]

作者: a837198    时间: 2014-12-12 17:16
标题: TC直接调用VBS,无须创建vbs文件,带返回值,有源码
本帖最后由 a837198 于 2015-1-29 11:17 编辑

[attach]18422[/attach]

TC直接调用VBS,无须创建vbs文件,而且还带有返回值的哦

思路来源   http://bbs.tyuyan.com/thread-47614-1-1.html  5楼   q273814的   的回复    直接在TC里使用ScriptControl对象调用VBScript代码
于是自己搜索了一下 ,真的可行呢  

源码如下  只要知道了原理  你也可以进行txt文本操作了  像不删除文件覆盖写入    文件夹隐藏  等等   目前先做这些吧 其他的可以去查vbs的操作
[attach]18424[/attach]


只需要把 变量  strProgram  这个填正确就可以
  其他的几乎一样  看源码吧


  1. 功能 当前所有盘符()
  2.         //这里添加你要执行的代码
  3.         strProgram ="Function yingpan(ff): On Error Resume Next:  Set fso=CreateObject(\"Scripting.filesystemobject\"): Set objdrives=fso.Drives: For Each objdrive In objdrives:  ff=ff&\"|\"&objdrive: Next: yingpan=ff:  End Function"
  4.         sc = com("ScriptControl")
  5.         sc.language = "VBScript"
  6.         sc.addcode(strProgram)
  7.         返回 字符串.移除(sc.run("yingpan",""),1,真)
  8. 功能结束

  9. 功能 进程关闭窗口(窗口句柄,进程名="")
  10.         //这里添加你要执行的代码
  11.         如果(进程名=="")
  12.                 len1,返回值
  13.                 字符串.分割(窗口.获取路径(窗口句柄),"\\",返回值)
  14.                 数组空间.大小(返回值,len1)   
  15.                 进程名=返回值[len1-1]
  16.         如果结束
  17.         strProgram ="Sub PidClosed(Pidname): On Error Resume Next:  set WshShell = CreateObject(\"WScript.Shell\"): WshShell.run \"cmd /c taskkill /f /im \"&Pidname,0: set WshShell = Nothing:  End Sub"   
  18.         sc = com("ScriptControl")
  19.         sc.language = "VBScript"      
  20.         sc.addcode(strProgram)
  21.         sc.run("PidClosed",进程名)
  22. 功能结束

  23. 功能 枚举当前所有进程()
  24.         strProgram ="Function GetPidInfo(PidInfo): On Error Resume Next:  st = \".\": Set objp = GetObject(\"winmgmts:\\\\\" & st):Set objs = objp.instancesof(\"Win32_Process\"): For Each ps In objs: PidInfo=PidInfo&\"|进程名-\"&ps.Name&\"++PID-\"&ps.ProcessID&\"++所在位置-\"&ps.commandline: Next: GetPidInfo=PidInfo: End Function"
  25.         sc = com("ScriptControl")
  26.         sc.language = "VBScript"
  27.         sc.addcode(strProgram)   
  28.         返回 字符串.移除(sc.run("GetPidInfo",""),1,真)
  29. 功能结束

  30. 功能 创建快捷方式(文件源路径="",快捷方式名="",快捷方式路径="")        
  31.        如果(文件源路径=="")
  32.           文件源路径=窗口.获取路径(窗口.自身句柄())
  33.        如果结束
  34.        选择(快捷方式名)
  35.            条件 "":
  36.            len1,返回值,返回值2
  37.            字符串.分割(文件源路径,"\\",返回值)
  38.            数组空间.大小(返回值,len1)
  39.            字符串.分割(返回值[len1-1],".",返回值2)
  40.            快捷方式名=返回值2[0]
  41.            条件 "窗口标题":
  42.            快捷方式名=窗口.得到标题(窗口.自身句柄())
  43.            默认:
  44.            快捷方式名=字符串.替换(快捷方式名,".lnk","")
  45.        选择结束      
  46.        strProgram ="Sub Shortcut(filepath,lnkpath): On Error Resume Next:  set WshShell = CreateObject(\"WScript.Shell\"): "
  47.        如果(快捷方式路径=="")
  48.                 //在桌面创建快捷方式
  49.                快捷方式名=快捷方式名&".lnk"
  50.                strProgram =strProgram &"strDesktop = WshShell.SpecialFolders(\"Desktop\"): set oShellLink = WshShell.CreateShortcut(strDesktop &\"\\\"&lnkpath): "   
  51.        否则
  52.               //指定位置的快捷方式
  53.               快捷方式名=快捷方式路径&"\\"&快捷方式名&".lnk"  
  54.               strProgram =strProgram &"set oShellLink = WshShell.CreateShortcut(lnkpath): "
  55.        如果结束   
  56.        strProgram =strProgram &"oShellLink.TargetPath = filepath: oShellLink.Save: Set oShellLink = Nothing: Set WshShell = Nothing: End Sub"
  57.        sc = com("ScriptControl")
  58.        sc.language = "VBScript"
  59.        sc.addcode(strProgram)
  60.        sc.run("Shortcut",文件源路径,快捷方式名)   
  61. 功能结束

  62. 功能 获取快捷方式(快捷方式路径)
  63.         strProgram="Function GetShortcut(lnkpath): On Error Resume Next: Set WshShell = CreateObject(\"WScript.Shell\"): Set oShellLink = WshShell.CreateShortcut(lnkpath): GetShortcut = oShellLink.TargetPath: Set oShellLink =nothing: Set WshShell =nothing: End Function"
  64.         sc = com("ScriptControl")
  65.        sc.language = "VBScript"
  66.        sc.addcode(strProgram)   
  67.        返回 sc.run("GetShortcut",快捷方式路径)
  68. 功能结束

  69. 功能 文本覆盖写入(文本路径,文本内容)
  70.     //tc中这个功能暂时是不支持的  估计很快就会更改了  无须删除原文件,是把原文件中的所有字全部清空  并写入新的字  如果重要资料请注意慎用
  71.     如果(!文件.是否存在(文本路径))
  72.         文件句柄=文件.创建(文本路径,"读写")
  73.         文件.关闭(文件句柄)
  74.     如果结束
  75.     strProgram="Sub ReWrite(FilePath,str): On Error Resume Next:Set FileSys=CreateObject(\"Scripting.FileSystemObject\"):Set ForWrite=FileSys.opentextfile(FilePath,2) : ForWrite.Write str: ForWrite.close: Set FileSys=nothing: End Sub"
  76.     sc = com("ScriptControl")
  77.     sc.language = "VBScript"
  78.     sc.addcode(strProgram)   
  79.     sc.run("ReWrite",文本路径,文本内容)
  80. 功能结束

  81. 功能 文件夹and文件属性(文本路径,属性="")
  82.     设置属性="-r -h -s"
  83.     选择(属性)
  84.         条件 "隐藏":        
  85.         设置属性="+h"        
  86.         条件 "显示":
  87.         设置属性="-h"        
  88.         条件 "只读":
  89.         设置属性="+r"        
  90.         条件 "读写":
  91.         设置属性="-r"        
  92.         条件 "系统":
  93.         设置属性="+s"         
  94.         条件 "用户":
  95.         设置属性="-s"        
  96.         条件 "隐藏系统":
  97.         设置属性="+s +h"        
  98.         条件 "隐藏用户":
  99.         设置属性="-s +h"        
  100.         条件 "显示用户":
  101.         设置属性="-s -h"         
  102.     选择结束   
  103.     strProgram="Sub SetFoldandFile(FilePath,style): On Error Resume Next:Set ObjSet=CreateObject(\"wscript.shell\"):ObjSet.run \"attrib \"& style &\" \"& FilePath,0: Set ObjSet = Nothing: End Sub"   
  104.     //'attrib指令的格式和常用参数为
  105.     //'ATTRIB [+R | -R] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
  106.     //'  +   设置属性。    //'  -    清除属性。    //'  R   只读文件属性。    //'  S   系统文件属性。    //'  H   隐藏文件属性。
  107.     //'  [drive:][path][filename]    //'      指定要处理的文件属性。    //'  /S  处理当前文件夹及其子文件夹中的匹配文件。    //'  /D  也处理文件夹。   

  108.     sc = com("ScriptControl")
  109.     sc.language = "VBScript"
  110.     sc.addcode(strProgram)   
  111.     sc.run("SetFoldandFile",文本路径,设置属性)
  112. 功能结束

  113. 功能 消息框(文本,提示类型=0,标题="VBS操作",句柄=0)
  114.     如果(句柄==0)
  115.         句柄=窗口.自身句柄()
  116.     如果结束
  117.     strProgram="Function MsgboxTip(Text,TextStyle,TextTitle): MsgboxTip = MsgBox(Text, TextStyle, TextTitle): End Function"
  118.     sc = com("ScriptControl")
  119.     sc.language = "VBScript"
  120.     sc.SitehWnd=句柄
  121.     sc.addcode(strProgram)   
  122.     返回 sc.run("MsgboxTip",文本,提示类型,标题)   
  123.    
  124.     //'MsgBox类型参数的取值:
  125.     //'符号常量                值    作 用
  126.     //'vbOKOnly                0    只显示“确定”按钮
  127.     //'vbOKCancel            1    只显示“确定”及“取消”按钮
  128.     //'vbAbortRetryIgnore    2    显示“放弃”、“重试”和“忽略”按钮
  129.     //'vbYesNoCancel        3    显示“是”、“否”和“取消”按钮
  130.     //'vbYesNo                4    显示“是”和“否”按钮
  131.     //'vbRetryCancel        5    显示“重试”和“取消”按钮
  132.    
  133.     //'图 标 样 式
  134.     //'vbCritical            16    显示系统叉号图标有声音
  135.     //'vbQuestion            32    显示系统问号图标
  136.     //'vbExclamation        48    显示系统叹号图标有声音
  137.     //'vbInformation        64    显示系统信息图标有声音
  138.    
  139.     //'默 认  按 钮
  140.     //'vbDefaultButton1        0    第一个按钮为默认按钮
  141.     //'vbDefaultButton2        256    第二个按钮为默认按钮
  142.     //'vbDefaultButton3        512    第三个按钮为默认按钮
  143.     //'vbDefaultButton4        768    第四个按钮为默认按钮
  144.    
  145.     //'强制 返回
  146.     //'vbApplicationModal    0        应用程序强制返回
  147.     //'vbSystemModal        4096     系统强制返回
  148.    
  149.     //'MsgBox函数返回值
  150.     //'常数            值    描述
  151.     //'vbOK            1    单击了“确定”按钮。
  152.     //'vbCancel        2    单击了“取消”按钮。
  153.     //'vbAbort        3    单击了“终止”按钮。
  154.     //'vbRetry        4    单击了“重试”按钮。
  155.     //'vbIgnore        5    单击了“忽略”按钮。
  156.     //'vbYes        6    单击了“是”按钮。
  157.     //'vbNo            7    单击了“否”按钮。
  158.    
  159. 功能结束


复制代码
有带有返回值  也有不带返回值的  纯TC操作  无需创建vbs文件


作者: a837198    时间: 2014-12-12 17:23
嘿嘿  
作者: lyyaj    时间: 2014-12-12 17:48
楼主英明,我正在找这方面的知识呢,你就给送来了
作者: rainshine    时间: 2014-12-12 20:19
= =好像早就有了
作者: rainshine    时间: 2014-12-12 20:19
不过开源精神不错
作者: 君笨笨    时间: 2014-12-12 22:32
rainshine 发表于 2014-12-12 20:19
不过开源精神不错

RR老湿,别哭,站起来撸~~~
作者: 67800461    时间: 2014-12-12 23:43

作者: 千叶de悠一    时间: 2014-12-13 07:24
难得看到开源了
作者: a837198    时间: 2014-12-13 09:22
rainshine 发表于 2014-12-12 20:19
= =好像早就有了

这个没看见过  而且搜索关键词vbs也没见到  呵呵
作者: a837198    时间: 2014-12-13 09:23
千叶de悠一 发表于 2014-12-13 07:24
难得看到开源了

嗯嗯
作者: rainshine    时间: 2014-12-13 10:00
a837198 发表于 2014-12-13 09:22
这个没看见过  而且搜索关键词vbs也没见到  呵呵

嗯 有执行js的 一样用scriptcontrol       .language=“javascript”
作者: rainshine    时间: 2014-12-13 10:01
君笨笨 发表于 2014-12-12 22:32
RR老湿,别哭,站起来撸~~~

……你能纯洁点不
作者: a837198    时间: 2014-12-13 10:01
rainshine 发表于 2014-12-13 10:00
嗯 有执行js的 一样用scriptcontrol       .language=“javascript”

嗯  这个是见过的
作者: rainshine    时间: 2014-12-13 10:03
君笨笨 发表于 2014-12-12 22:32
RR老湿,别哭,站起来撸~~~

= =我记得好像是清风写的常规库 用scriptcontrol执行的js、、、
话说,我同学假期要弄个教学 有这么个想法  本来想讲客户端封包   后来因为种种原因又改成了post= =坑逼一个 跟我学。。
作者: rainshine    时间: 2014-12-13 10:05
a837198 发表于 2014-12-13 09:23
嗯嗯

有些短命令其实可以用eval直接执行得返回值、还可以用来表达式求值~
作者: q273814    时间: 2014-12-13 11:17
本帖最后由 q273814 于 2014-12-13 11:54 编辑
a837198 发表于 2014-12-13 09:22
这个没看见过  而且搜索关键词vbs也没见到  呵呵

不过搜索ScriptControl是肯定有的
不光vbs还有js之类的都可以
譬如字符编码转换之类的
如果用js脚本来做就方便很多
在需要用到post的时候使用js来做字符编码转换很方便
在涉及到本地计算机操作用vbs就比较好
当然如果能直接用TC就不要用那些了 毕竟会慢一些
哈哈找到以前的帖子了
http://bbs.tyuyan.com/thread-45312-1-1.html

作者: 君笨笨    时间: 2014-12-13 17:45
rainshine 发表于 2014-12-13 10:01
……你能纯洁点不

RR大哥,好久么见~
作者: rainshine    时间: 2014-12-14 14:48
a837198 发表于 2014-12-13 10:01
嗯  这个是见过的

其实原理都一样,好像那个activex控件还支持其他的语言 不过没研究。
作者: apaik    时间: 2015-3-29 10:13
1。软件位于当前目录
2。XXXX.bat位于当前目录\dir子目录内。
3.要求点击一个按钮,就隐藏运行XXXX.bat


4。在bat里面可以调用vbs隐藏,但是运行还是会弹出窗口闪一下。bat代码:
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM

5。还有一种窗口不会闪,vbs代码为:
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "dir\XXXX.bat",0



求助
求高手帮忙弄一弄,自己弄不好。




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1