-
在受限的公司环境中,要实现一个单机动态网页,能够与Access数据库进行读写操作,并且不能安装任何额外的软件,这个需求有点挑战,但并非完全不可能。实现思路由于你不能使用服务器端脚本,比如ASP、PHP等,也不能安装任何其他软件,因此我们可以考虑以下方法:前端技术:前端通过HTML5和JavaScript实现数据收集和展示。Access数据库操作:利用ODBC(开放式数据库连接)和本地应用来操作Access数据库。通过VBScript或HTA:结合HTML页面和VBScript或HTA(HTML Application),在Windows环境中读取和写入Access数据库。步骤1. 创建Access数据库假设你的Access数据库已经准备好,并且放置在某个公共文件夹中。2. 编写HTML页面创建一个基本的HTML页面来收集用户输入数据。<!DOCTYPE html> <html> <head> <title>数据收集</title> </head> <body> <h1>数据收集表单</h1> <form id="dataForm"> <label for="name">姓名:</label><br> <input type="text" id="name" name="name"><br><br> <label for="age">年龄:</label><br> <input type="number" id="age" name="age"><br><br> <button type="button" onclick="saveData()">保存</button> </form> <h1>数据展示</h1> <button type="button" onclick="loadData()">加载数据</button> <div id="dataDisplay"></div> <script> function saveData() { var name = document.getElementById('name').value; var age = document.getElementById('age').value; if (window.external && 'Database' in window.external) { try { window.external.Database.save(name, age); alert("数据保存成功!"); } catch (e) { alert("数据保存失败:" + e.message); } } else { alert("当前环境不支持数据库操作"); } } function loadData() { if (window.external && 'Database' in window.external) { try { var data = window.external.Database.load(); document.getElementById('dataDisplay').innerHTML = data; } catch (e) { alert("数据加载失败:" + e.message); } } else { alert("当前环境不支持数据库操作"); } } </script> </body> </html>3. 编写VBScript(结合HTA)在HTML页面内嵌入VBScript代码来与Access数据库交互。将HTML文件保存为.hta文件,这样可以把HTML代码与VBScript结合在一起运行。<!DOCTYPE html> <html> <head> <title>数据收集</title> <hta:application id="app" applicationname="DataCollectionApp" /> </head> <body> <h1>数据收集表单</h1> <form id="dataForm"> <label for="name">姓名:</label><br> <input type="text" id="name" name="name"><br><br> <label for="age">年龄:</label><br> <input type="number" id="age" name="age"><br><br> <button type="button" onclick="saveData()">保存</button> </form> <h1>数据展示</h1> <button type="button" onclick="loadData()">加载数据</button> <div id="dataDisplay"></div> <script language="VBScript"> Function saveData() Dim connection, recordset, sql Set connection = CreateObject("ADODB.Connection") Set recordset = CreateObject("ADODB.Recordset") connection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\共享文件夹地址\database.accdb;" sql = "INSERT INTO YourTableName (Name, Age) VALUES ('" & document.getElementById("name").value & "', " & document.getElementById("age").value & ")" connection.Execute sql connection.Close MsgBox "数据保存成功!" End Function Function loadData() Dim connection, recordset, sql, display Set connection = CreateObject("ADODB.Connection") Set recordset = CreateObject("ADODB.Recordset") connection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\共享文件夹地址\database.accdb;" sql = "SELECT * FROM YourTableName" recordset.Open sql, connection display = "<table border='1'><tr><th>姓名</th><th>年龄</th></tr>" Do While Not recordset.EOF display = display & "<tr><td>" & recordset("Name") & "</td><td>" & recordset("Age") & "</td></tr>" recordset.MoveNext Loop display = display & "</table>" document.getElementById("dataDisplay").innerHTML = display recordset.Close connection.Close End Function </script> </body> </html>4. 保存并运行将这个文件保存为.hta扩展名(例如data_collection.hta),双击运行。这样可以在Windows内打开一个包含HTML和VBScript的应用程序,能够与Access数据库进行交互。总结这种方法利用了HTA和VBScript在Windows上的兼容性,实现了前端与Access数据库的读写操作。如果需要更多功能,可以进一步扩展VBScript和HTML页面。
-
在选择代理IP服务提供商时,一项重要的考虑因素就是计费方式。流量计费和数量计费,具体该如何进行选择呢?一、流量计费方式:流量计费是指根据使用的代理IP流量来计费。在这种计费模式下,代理IP服务提供商通常会根据您的实际使用情况,按照您使用的流量大小收费。这种计费方式的优点如下:1)灵活性:流量计费可以根据实际使用情况进行动态计费,您只需支付实际使用的流量费用,更加灵活。2)节约成本:如果您的使用需求不是很大,只需要偶尔使用代理IP进行数据采集或访问受限网站,流量计费可以节约成本,因为您只支付实际使用的流量费用。3)可控性:流量计费可以帮助您更好地控制成本,您可以根据自己的需求和预算限制,灵活选择使用代理IP的流量。然而,流量计费方式也存在一些缺点:1)预估难度:由于流量计费是根据实际使用情况计费,您在使用代理IP之前很难准确预估所需的流量量,可能会出现超出预算的情况。2)高峰时段成本增加:如果您的代理IP使用量在某些高峰时段较大,流量计费可能会导致成本增加,需要合理规划和控制使用时间,以避免不必要的费用支出。二、数量计费方式:数量计费是指根据购买的代理IP数量来计费。在这种计费模式下,代理IP服务提供商通常会提供一定数量的代理IP,您可以根据需求购买相应数量的代理IP。这种计费方式的优点如下:1)易于预估成本:数量计费可以更容易地预估成本,您可以根据预期的使用情况,选择购买适量的代理IP,避免超出预算。2)适合长期稳定使用:如果您需要长期稳定地使用代理IP进行数据采集、爬虫任务等,数量计费方式可能更为适合,因为您可以购买一定数量的代理IP,并长期使用而不受额外的流量计费影响。当然,数量计费方式同样存在一些缺点:1)资源利用率浮动:用户在采购一定数量的代理ip后,可能碰到因相关业务实际代理ip需求不高,导致购买的代理IP数量未能充分利用,这就可能存在ip资源闲置浪费的问题。2)需求变化:业务推进中,如果用户的的实际需求发生变化,就得及时调整代理IP的数量,这就可能需要重新购买或取消现有的代理IP,造成采购流程反反复复,不够灵活。
-
这篇文章主要介绍了vbs ShellExecute运行外部程序时如何判断外部程序执行成功与否,需要的朋友可以参考下需要vbs执行一些命令,比如 ""uwfmgr filter enable"" (统一写入筛选器), 但是这个uwfmgr.exe需要管理员权限才能运行相关命令目前我是这么写的Set sst = CreateObject("Shell.Application") Call sst.ShellExecute("uwfmgr","filter enable", ,"runas",0)这样可以以管理员身份运行命令, 但是我怎么才能判断uwfmgr执行是成功还是失败的? (管理员cmd运行命令会有返回值)原来我执行一些cmd命令都是用intReturn = WScript.CreateObject("wscript.shell").Run("xxxxxx",1,true)通过判断intReturn是否为0来判断命令执行成功失败, 但是这个不能执行需要管理员权限的命令, 有没有办法让Run能以管理员运行命令?如何隐藏运行Setup.bat文件'以管理员身份运行程序的命令admin.vbs Set objWMIServices = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set objWbemObjectSet = objWMIServices.ExecQuery(_ "SELECT * FROM Win32_Process WHERE " &_ "ExecutablePath='" & Replace(WScript.FullName,"\","\\") & "' and " & _ "CommandLine LIKE '%" & WScript.ScriptName & "%'") for each objWbemObject in objWbemObjectSet cmdline = objWbemObject.CommandLine next if WScript.Arguments.Count then file = WScript.Arguments(0) if file="/?" then call ShowHelp() WScript.Quit end if Set RegEx = new RegExp RegEx.IgnoreCase = true RegEx.Global = true RegEx.Pattern = "\\|\/|\||\(|\)|\[|\]|\{|\}|\^|\$|\.|\*|\?|\+" temp1 = RegEx.Replace(WScript.ScriptName, "\$&") temp2 = RegEx.Replace(file, "\$&") RegEx.Global = false RegEx.Pattern = "^.*?" & temp1 & "[""\s]*" & temp2 & """?\s*" args = RegEx.Replace(cmdline, "") 'WScript.Echo file, args else file = "Setup.bat" 'args = "/k cd /d """ & CreateObject("WScript.Shell").CurrentDirectory & Chr(34) end if '核心代码 Set sh = CreateObject("Shell.Application") call sh.ShellExecute( file, args, , "runas" ) function ShowHelp() dim HelpStr HelpStr = "以管理员身份运行程序。" & vbCrLf _ & vbCrLf _ & WScript.ScriptName & " [program] [parameters]..." & vbCrLf _ & vbCrLf _ & "program 要运行的程序" & vbCrLf _ & "parameters 传递给 program 的参数" & vbCrLf _ & vbCrLf WScript.Echo HelpStr end function
-
这个vbs代码主要实现的功能就是运行该程序,就会在进程中出现一个wscript.exe 它会每隔10s扫面一次进程中是否存在notepad.exe这个程序,不存在就启动。这个启动程序可能跟进程名不一样,好比tomcat应用,启动的是startup.bat,后台进程名为java.exe这个vbs代码主要实现的功能就是运行该程序,就会在进程中出现一个wscript.exe 它会每隔10s扫面一次进程中是否存在notepad.exe这个程序,不存在就启动。这个启动程序可能跟进程名不一样,好比tomcat应用,启动的是startup.bat,后台进程名为java.exe,这样就需要调整代码proname="java.exe"关于如果关掉监控 可以在运行下执行taskkill /f /im wscript.exe 或者在任务管理器 进程中找到wscript.exe 结束进程就可以了调整WshShell.Run("startup.bat")核心代码dim wmi,proc,procs,proname,flag,WshShell Do proname="notepadjb51.exe" '需要监测的服务进程的名称,自行替换这里的记事本进程名 set wmi=getobject("winmgmts:{impersonationlevel=impersonate}!\.rootcimv2") set procs=wmi.execquery("select * from win32_process") flag=true for each proc in procs if strcomp(proc.name,proname)=0 then flag=false exit for end if next set wmi=nothing if flag then Set WshShell = Wscript.CreateObject("Wscript.Shell") WshShell.Run ("notepadjb51.exe") end if wscript.sleep 10000 '检测间隔时VBS写个小脚本 实时监测指定程序是否运行 对运行的软件进行操作 最后关闭运行软件strComputer = "." Set objShell = CreateObject("Wscript.Shell") do Set wbemServices = Getobject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_process") For Each wbemObject In wbemObjectSet if wbemObject.name="QQ.exe" then WScript.Sleep 1000 objShell.SendKeys "{F12}" WScript.Sleep 1000 objShell.SendKeys "{ENTER}" dim WSHshell set WSHshell = wscript.createobject("wscript.shell") WSHshell.run "taskkill /im wscript.exe /f ",0 ,true end if Next loop批处理检测进程是否存在;这个我用来检测文化进程是否存在,因为是绿色版的,很容易被关闭,所以需要检测。tasklist /nh|find /i "ClientOfWatcher.exe" if ERRORLEVEL 1 (start C:\watcher\ClientOfWatcher.exe) else (exit)VBS定时检测进程是否存在,如果不存在就启动进程。option Explicit dim wmi,proc,procs,proname,flag,WshShell Do proname="ClientOfWatcher.exe" '需要监测的服务进程的名称,自行替换这里的记事本进程名 set wmi=getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set procs=wmi.execquery("select * from win32_process") flag=true for each proc in procs if strcomp(proc.name,proname)=0 then flag=false exit for end if next set wmi=nothing if flag then Set WshShell = Wscript.CreateObject("Wscript.Shell") WshShell.Run ("C:\Watcher\ClientOfWatcher.exe") end if wscript.sleep 50000 '检测间隔时间,这里是50秒 loop
-
1. 概述批处理,顾名思义就是进行批量的处理,也称为批处理脚本,英译为 BATCH,后缀名 .bat 就是取的前三个字母。它的构成没有固定格式,只要遵守 <每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是 DOS > 就可以了。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。2. 常用命令列表命令含义rem / ::注释命令,用于添加注释,该命令后的内容不执行rem 能回显:: 不会回显echo / @echo 用于打开或关闭回显,如果 @ 字符放在命令前将关闭该命令回显,无论此时 echo 是否打开状态pause暂停errorlevel程序返回码,默认为 0,一般出错会被置为 1title设置 cmd 窗口的标题栏color设置控制台前景和背景颜色mode配置系统设备goto / :跳转;: 后面跟标号,与 goto 结合起来执行跳转功能find在文件中查找字符串start批处理中调用外部程序的命令 (该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令assoc / ftype文件关联assoc 设置 ‘文件扩展名’ 关联,关联到 '文件类型’ftype 设置 ‘文件类型关联’,关联到 ‘执行程序和参数’pushd / popd切换当前目录pushd 保存当前目录,并切换到指定的目录popd 恢复当前目录为 pushd 保存的目录call在当前批处理执行过程中调用另一个批处理,当另一个批处理执行完成后,再继续执行原来的批处理if条件判断语句setlocal变量延迟 (用于在一行使用 ‘&’ 执行多条指令时 解决变量赋值问题)attrib显示或更改文件属性md创建目录2.1 rem / ::2.2 echo / @3. 常用特殊符号命令含义@命令行回显屏蔽符%批处理变量引导符> / >>输出重定向> 传递并覆盖>> 传递并在末尾追加< / >& / <&管道命令,一般不常用|命令管道符^转义字符,将特殊符号 < / > / & 的特殊功能去掉& / && / ||组合命令,就是把多个命令组合起来当一个命令执行& 命令是顺序执行的,从前往后执行&& 可以同时执行多条命令,当碰到执行出错的命令后,将不再执行后面的命令|| 可以同时执行多条命令,当第一个命令执行失败后,才执行第二条命令,当碰到执行正确的命令后将不再执行后面的命令“ ”字符串界定符号,相当于空格;当命令相同时,可以将不同的目标用 ; 来隔离,但执行效果不变,如果执行过程中发生错误,则只返回错误报告,但程序仍会执行( )小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行!在变量延迟问题中,用来表示变量,即 %var% 应该表示为 !var!
-
bat文件set /P StrInput="输入数字:" echo 输入的数字为%StrInput% set /P Flg="是否执行(y/n):" IF "%Flg%" equ "y" ( echo 执行命令 cscript abc.vbs "%StrInput%" )注意:等于号(=)之间不能有空格,不然会出错。判断值大小最好使用equ之类。条件判断后的括号的有空格。 VBS文件获取外部参数写文件WebAPI操作日期与TimeStamp变换 Dim WshShell Dim CurDir Dim oParam '取参数 Set oParam = WScript.Arguments if oParam.Count>0 Then Else WScript.Quit End if '获取当前路径 Set WshShell = WScript.CreateObject("WScript.Shell") CurDir = WshShell.CurrentDirectory '写文件操作 Function OutputData(filename) Dim objFSOW Dim objFileW Set objFSOW = WScript.CreateObject("Scripting.FileSystemObject") Set objFileW = objFSOW.OpenTextFile(filename,2,True) objFileW.Write(filename) objFileW.Write(vbCrLf) objFileW.Write(vbTab) Set objFileW = Nothing Set objFSOW =Nothing End Function 'WebAPI操作 'params = "{""method"":""get"",""ID"":""12""}" Function RequestAPI(url,params) Dim oHttp Set oHttp = CreateObject("MSXML2.ServerXMLHTTP") on error resume next oHttp.Open "POST",url,False If Err Then RequestAPI = Err.Description End If On Error Goto 0 oHttp.SetRequestHeader "Content-Type","application/json" oHttp.Send params If oHttp.readyState<>4 Then oHttp.waitForResponse(10) End If RequestAPI = oHttp.ResponseText Set oHttp = Nothing End Function 'TimeStamp -> Date Function FormatDate(timestamp) FormatDate = DateAdd("s",CLng(timestamp),"01/01/1970 00:00:00") End Function 'Date ->TimeStamp Function DateToTimeStamp(dateValue) DateToTimeStamp = DateDiff("s","01/01/1970 00:00:00",dateValue) End Function vbs服务器bat文件,window下批处理操作:bat文件中调用vbs@echo "kill CRT process" taskkill /F /IM SecureCRT.exe ::ping 127.0.0.1 -n 30 echo "start vos through CRT" echo off d: cd D:\tools\SecureCRT_x86 start SecureCRT.EXE /SCRIPT D:\Secure_vos\Start_vos.vbs echo "start vos through CRT end" ping 127.0.0.1 -n 4 pause上述代码的意思是:在.bat文件中执行Start_vos.vbs文件批处理执行文件之前首先需要下载SecureCRT.exe文件Start_vos.vbs文件内容如下:On Error Resume Next Dim result If crt.Session.Connected Then crt.Session.Disconnect ' connected to the '172.21.1.114' Set objtab = crt.Session.ConnectInTab("/SSH2 /PASSWORD root root@172.21.1.114",True) ' Capture error code and description (if any) nError = Err.Number strErr = Err.Description ' Now, tell the script host that it should handle errors as usual now: On Error Goto 0 ' change tab name objtab.caption = "Gdb_vos" ' enter the folder crt.Screen.Send "cd /home/test" & chr(13) crt.Screen.WaitForString chr(27) & "[32m(none) /home/test" & chr(27) & "[m # " End Sub上述代码主要是将手动输入的过程使用VBS脚本进行自动化首先:Set objtab = crt.Session.ConnectInTab("/SSH2 /PASSWORD root123 root@172.11.1.15",True)采用SSH2的方式连接linuxIP地址172.21.1.114,密码是root123,用户名是rootobjtab.caption = "Start_vos"将当前连接页面重命名为Start_voscrt.Screen.Send "cd /home/test" & chr(13)输入cd /home/test并回车crt.Screen.WaitForString chr(27) & "[32m(none) /home/test" & chr(27) & "[m # "等待页面下一行的内容为chr(27) & "[32m(none) /home/test" & chr(27) & "[m # "
-
背景介绍有些公司出于安全和保密工作考虑,会通过 Windows 组策略强制所有办公电脑在无操作的情况下 5 分钟或者 10 分钟自动锁屏,避免无关人士看到不该看的内容。作为程序员,十分反感这种一刀切的方案,一来很容易打断思路,比如正在写代码或者向别人展示时,突然锁屏了就挺恶心的;二来每次锁屏后都要输入密码,这简直就是浪费生命,不能忍!为了解决这个问题,我们可以编写一个简单的 vbs 脚本,在锁屏周期内模拟按键操作,从而避免 Windows 桌面被锁屏。之所以使用 vbs 脚本,而不是 Python、JavaScript 等更流行的高级语言,主要是因为这个程序的需求特别简单,而且 vbs 脚本可以在 Windows 系统中直接运行,不需要安装任何依赖。脚本程序下面给出两个脚本,你可以将它们命名为 never_lock.vbs 文件(先在 Windows 系统新建一个 txt 文本文件,粘贴代码,然后修改文件名)。复杂版本Set ws=Wscript.CreateObject("Wscript.Shell") If ws.expandenvironmentstrings("%strikkeyflag%")=("on")Then wscript.echo("Screen Never Lockout") ws.Environment("user").Item("strikkeyflag")="off" set mi=getobject("winmgmts:win32_process").instances_ for each p in mi if ucase(p.name)=ucase("wscript.exe")then p.terminate End If Next wscript.quit Else wscript.echo("Screen Never Lockout") ws.Environment("user").Item("strikkeyflag")="on" do set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys"{ScrollLock}" wscript.sleep(280000) 'ms Loop end if 简单版本 '先定义一个Shell对象 Set WshShell = WScript.CreateObject("WScript.Shell") '设置成正需要接续的时间 do '设置成比屏保时间短点就可以 WScript.Sleep 60000 '1min 60000ms WshShell.SendKeys "{ScrollLock}" loop 在 Windows 系统中双击 never_lock.vbs 脚本,即可运行。如需停止脚本,可以按 Ctrl + Shift + Esc 键打开任务管理器,找到 Microsoft ® Windows Based Script Host,结束任务即可。工作原理你应该已经猜到,never_lock.vbs 脚本的工作原理就是通过定时按一次 Scroll Lock 键,让系统认为一直有人为操作,只要定时时间在锁屏周期以内,就可以达到避免锁屏的效果。Scroll Lock 即“滚动锁定键”,是一个现存于大部分键盘上的按键,通常附有一个指示按键开关情况的灯号。这个按键曾经用来锁定所有软件的滚动功能,但已不为现今大部分软件所使用。因为这个按键已经不常用,所以部分键盘(例如笔记本)已经移除了这个键。不过系统还是保留了 Scroll Lock 按键的定义,因此我们可以借助这个没什么用的按键完成防止锁屏的功能,不会对系统造成任何影响。
-
本文用vb编写的 ping程序实现,具体如下:'判断当前VBS脚本是否由CScript执行 If InStr(LCase(WScript.FullName), "cscript.exe") = 0 Then '若不是由CScript执行,则使用CScript重新执行当前脚本 Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "cscript.exe", """" & WScript.ScriptFullName & """", , , 1 WScript.Quit '退出当前程序 End If '---------------------------------------------------------------------------------------------- Set objFSO = CreateObject("Scripting.FileSystemObject") '创建日志文件 Set fileLog = objFSO.CreateTextFile("Ping运行结果(" &_ Year(Now()) & "-" & Month(Now()) & "-" & Day(Now()) & " " &_ Hour(Now()) & "-" & Minute(Now()) & "-" & Second(Now()) & ").txt", True) '---------------------------------------------------------------------------------------------- 'Ping 方案类 Class PingScheme Public Address '目标地址 Public DisconnectionCount '断线计数 End Class Dim dicPingScheme '配置方案集合 Set dicPingScheme = CreateObject("Scripting.Dictionary") Dim strPingQuery 'Ping查询条件语句 strPingQuery = Null '添加Ping方案到方案集合 Public Sub AddPingScheme ( addr ) Set newPingScheme = New PingScheme newPingScheme.Address = addr newPingScheme.DisconnectionCount = 0 dicPingScheme.Add addr, newPingScheme '合成Ping查询条件语句 If IsNull( strPingQuery ) Then strPingQuery = "Address='" & addr & "'" Else strPingQuery = strPingQuery & "OR Address='" & addr & "'" End If End Sub '---------------------------------------------------------------------------------------------- AddPingScheme ( "8.8.8.8" ) AddPingScheme ( "8.8.4.4" ) AddPingScheme ( "192.168.1.8" ) '---------------------------------------------------------------------------------------------- Dim bEmailFlag '发送邮件标志 bEmailFlag = False Const LoopInterval = 5000 '循环间隔 Dim strDisplay '显示缓存字符串 Dim strLog '日志文件缓存字符串 '连接WMI服务 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Do strDisplay = "----" & Now & "----" & vbCrlf strLog = "" '通过WMI调用Ping命令,返回Ping执行结果集合 Set colPings = objWMIService.ExecQuery("SELECT * FROM Win32_PingStatus WHERE " & strPingQuery) '遍历结果集合 For Each objPing in colPings strLog = strLog & FormatDateTime(Now()) & vbTab &_ objPing.Address & vbTab & objPing.StatusCode & vbTab strDisplay = strDisplay & "[" & objPing.Address & "] - " Select Case objPing.StatusCode Case 0 strDisplay = strDisplay & objPing.ProtocolAddress &_ ", Size: " & objPing.ReplSize &_ ", Time: " & objPing.ResponseTime &_ ", TTL: " & objPing.ResponseTimeToLive & vbCrlf strLog = strLog & objPing.ProtocolAddress & vbTab & objPing.ReplSize & vbTab &_ objPing.ResponseTime & vbTab & objPing.ResponseTimeToLive Case 11002 strDisplay = strDisplay & "目标网络不可达" & vbCrlf strLog = strLog & "目标网络不可达" Case 11003 strDisplay = strDisplay & "目标主机不可达 " & vbCrlf strLog = strLog & "目标主机不可达" Case 11010 strDisplay = strDisplay & "等待超时" & vbCrlf strLog = strLog & "等待超时" Case Else If IsNull(objPing.StatusCode) Then strDisplay = strDisplay & "找不到主机 " & objPing.Address & vbCrlf strLog = strLog & "找不到主机 " & objPing.Address Else strDisplay = strDisplay & "错误:" & objPing.StatusCode & vbCrlf strLog = strLog & "错误:" & objPing.StatusCode End If End Select strLog = strLog & vbCrlf '判断 Ping返回结果是否执行成功 If objPing.StatusCode <> 0 Then '若不成功 将相应的 DisconnectionCount 加 1 dicPingScheme(objPing.Address).DisconnectionCount = dicPingScheme(objPing.Address).DisconnectionCount + 1 'DisconnectionCount = 10 时 置位 发送邮件标志 If dicPingScheme(objPing.Address).DisconnectionCount = 10 Then bEmailFlag = True End If Else '若成功 将相应的 DisconnectionCount 清零 dicPingScheme(objPing.Address).DisconnectionCount = 0 End If Next '输出显示 PrintLine strDisplay '保存日志 fileLog.WriteLine strLog '如果 发送邮件标志 被置位 清除标志 并 发送邮件 If bEmailFlag = True Then bEmailFlag = False '清除 标志 SendEmail "设备断线 " & Now, strDisplay End If '挂起指定时间,暂停 WScript.Sleep(LoopInterval) Loop '--------------------------------------------------------------------------------------- '标准输出 Public Sub Print ( tmp ) WScript.StdOut.Write tmp End Sub '标准输出以换行符结尾 Public Sub PrintLine ( tmp ) WScript.StdOut.Write tmp & vbCrlf End Sub '--------------------------------------------------------------------------------------- '发送邮件 Public Sub SendEmail(title, textbody) Set objCDO = CreateObject("CDO.Message") objCDO.Subject = title objCDO.From = "XXX@qq.com" objCDO.To = "XXX@qq.com" objCDO.TextBody = textbody cdoConfigPrefix = "http://schemas.microsoft.com/cdo/configuration/" Set objCDOConfig = objCDO.Configuration With objCDOConfig .Fields(cdoConfigPrefix & "smtpserver") = "smtp.qq.com" .Fields(cdoConfigPrefix & "smtpserverport") = 465 .Fields(cdoConfigPrefix & "sendusing") = 2 .Fields(cdoConfigPrefix & "smtpauthenticate") = 1 .Fields(cdoConfigPrefix & "smtpusessl") = true .Fields(cdoConfigPrefix & "sendusername") = "XXX" .Fields(cdoConfigPrefix & "sendpassword") = "XXX" .Fields.Update End With objCDO.Send Set objCDOConfig = Nothing Set objCDO = Nothing End Sub
-
需求分析微信是我们日常生活中必不可少的社交软件,很多人不止有一个微信,但通常会面临一个问题,在电脑上只能同时打开一个微信,今天我闲来无事,写了一个在电脑上可以微信多开的脚本,最初使用的是bat脚本,但bat需要面对的是终端,不适用于普通人,就学习并使用了vbs来实现双击桌面的vbs程序,打开输入框,输入启动的微信数量确定之后输入微信应用程序地址确定之后循环第一步的数量执行启动微信操作实现思路需要打开输入框并获取到输入的数量,这里使用inputbox方法输入微信应用程序地址并获取结果同样使用inputbox方法使用For...to循环使用WScript.Shell的Run方法启动微信具体代码 ' 打开微信的数量 dim count ' 微信应用程序地址 dim src ' wsh脚本终端 dim wsh ' fso读取文件信息 dim fso ' 设置wsh脚本终端 set wsh = WScript.CreateObject("WScript.Shell") ' 设置fso来读取文件 Set fso = CreateObject("Scripting.FileSystemObject") ' 调用函数打开输入框 Call GetCount() ' 定义一个函数用来打开输入框弹窗 Sub GetCount() ' 获取打开的微信数量,默认打开两个 count = inputbox("请输入微信多开数量","微信多开",2) ' 判断是否输入内容 if count = "" Then ' 如果点击取消,直接退出函数 if IsEmpty(count) Then WScript.quit else ' 如果点击确定则提示输入数量 msgbox("请输入打开微信的数量") Call GetCount() end If end If ' 获取微信可执行文件地址,默认是我本机的微信应用程序地址 src = inputbox("请输入微信程序地址","微信程序地址","E:\WeChat\WeChat.exe") ' 判断是否输入微信程序地址 if src = "" Then ' 如果点击取消,直接退出函数 if IsEmpty(src) Then WScript.quit else ' 如果点击确定则提示输入微信程序地址 msgbox("请输入微信可执行文件地址") Call GetCount() end If end If if count > 7 Then msgbox("最多打开7个微信") Call GetCount() elseif count < 0 Then msgbox("最少打开1个微信") Call GetCount() end If ' 检查文件路径是否存在 if Not fso.FileExists(src) Then msgbox("指定的微信启动程序不存在") Call GetCount() end If dim runStatus For i = 1 to count runStatus = wsh.Run(src) If runStatus <> 0 Then msgbox("程序出现异常") Exit Sub End If Next Set wsh = NoThing End Sub 最后将代码保存在桌面,并将后缀修改为.vbs,双击就可以直接运行啦收获vbs中定义变量可以使用dim通过CreateObject来创建一个对象通过Sub或Function来声明一个函数通过Call来调用一个函数不等于符号可以使用<>输入框可以使用inputbox控件消息弹框可以使用msgbox控件if条件判断必须以end if结束且大小写不敏感
-
前言最近对电脑或手机自动进行某些操作很感兴趣,于是去看了一下有关手机电脑微信自动回复消息相关的东西,发现很多恶搞代码不仅可以通过实现病毒的方式,同时用vb就可以实现一个常见的恶搞脚本。1、微信自动回复消息微信,作为日前最热最火的社交软件,应该是家喻户晓的了,年轻人,老人甚至小孩都在用手机玩微信,对于上班族来说用的最多的可能是微信电脑版,我们每天都在手工输入发送或者回复各类微信消息,难免会遇到一些情况我们需要电脑自动帮我们向指定人发送消息,而利用windows中的vbs的脚本我们就可以实现,我们首先了解一下vbs。vbs,全称Microsoft Visual Basic Script Edition,是微软开发的一个基于Visual Basic的脚本语言,可以在windows上直接打开。在vbs中我们可以通过sendkeys轻松的模拟发送各类按键和文字,但是直接发送中文字符会乱码,所以我们需要先将待发送的中文字符放入剪切板然后再从剪切板取出内容发送,在cmd中我们可以通过管道连接echo和clip.exe来将内容放入剪切板,echo 测试 | clip.exe 在cmd命令行窗口中输入以上命令,你会发现“测试”这两个字符被放入了剪切板,在vbs中我们只需要调用这个命令就可以实现将内容放到剪切板的操作 ws.Run "cmd.exe /c echo 测试 | clip.exe", 0, True 现在我们清楚如果发送消息,也知道如何发送中文了,但是要向微信发送消息我们还需要知道怎么在任意界面下唤醒微信,一般的应用我们可以通过appActivate来激活窗口,当然我们也可以通过快捷键来唤醒某个软件或执行特定的操作,比如在微信中我们可以通过Ctrl+Alt+W来唤醒微信,用Ctrl+F来唤醒查找好友功能。 通过快捷键唤醒微信方式发送消息最终的代码:Dim name,Msg,num '定义变量并分配内存 'Inputbox()函数进行输入 name=Inputbox("请输入你要给谁发送消息") Msg=Inputbox("请输入你发送消息的内容") num=Inputbox("请输入重复发送多少次消息") set ws=wscript.createobject("wscript.shell")'创建Windows的shell对象打开shell窗口 '在Windows的shell窗口执行cmd.exe /c echo " & Name & " | clip.exe"将name复制到剪切板中 ws.Run "cmd.exe /c echo " & Name & " | clip.exe",0,True ws.Run "mshta javascript:window.execScript('window.close','vbs')",0,True ws.sendKeys "^%w" '通过Ctrl+Alt+W快捷键打开微信 wscript.sleep 500 ws.sendKeys "^f" '执行ctrl + F快捷键在微信窗口唤醒搜索功能 wscript.sleep 500 ws.sendKeys "^v" '粘贴要搜索的name wscript.sleep 500 ws.sendKeys "{ENTER}" '按键盘的enter键,进入要发送消息的name联系人窗口 wscript.sleep 500 '在Windows的shell窗口执行cmd.exe /c echo " & Name & " | clip.exe"将发送的消息内容复制到剪切板中 ws.Run "cmd.exe /c echo " & Msg & " | clip.exe",0,True wscript.sleep 500 for i=1 to num '循环发送num次 ws.sendKeys "^v" '粘贴要发送的msg消息内容 wscript.sleep 500 ws.sendKeys "{ENTER}" '按enter键进行发送 next 通过执行WeChat.exe唤醒微信方式发送消息最终的代码:dim program1,name,Msg '定义变量并分配内存 'Inputbox()函数进行输入 name=Inputbox("请输入你要给谁发送消息") Msg=Inputbox("请输入你发送消息的内容") num=Inputbox("请输入重复发送多少次消息") 'program1表示WeChat.exe的位置 'program1="D:\other-systems\WeChat\WeChat.exe" 'program1="D:\other-systems\QQ\Bin\QQ.exe" program1=Inputbox("请输入WeChat.exe或QQ.exe的存储位置") set wshshell=CreateObject("wscript.shell") '创建Windows的shell对象打开shell窗口 '在Windows的shell窗口执行cmd.exe /c echo " & Name & " | clip.exe"将name复制到剪切板中 wshshell.Run "cmd.exe /c echo " & Name & " | clip.exe",0,True wshshell.Run "mshta javascript:window.execScript('window.close','vbs')",0,True '通过绝对路径的方式打开微信窗口 set oexec=wshshell.exec(program1) wscript.sleep 500 '停留500毫秒 wshshell.sendKeys "^f" '执行ctrl + F快捷键在微信窗口唤醒搜索功能 wscript.sleep 500 wshshell.sendKeys "^v" '粘贴要搜索的name wscript.sleep 500 wshshell.sendKeys "{ENTER}" '按键盘的enter键,进入要发送消息的name联系人窗口 wscript.sleep 500 '在Windows的shell窗口执行cmd.exe /c echo " & Name & " | clip.exe"将发送的消息内容复制到剪切板中 wshshell.Run "cmd.exe /c echo " & Msg & " | clip.exe",0,True wscript.sleep 500 for i=1 to num '循环发送num次 wshshell.sendKeys "^v" '粘贴要发送的msg消息内容 wscript.sleep 500 wshshell.sendKeys "{ENTER}" '按enter键进行发送 next wscript.quit 当然除了可以给微信发送消息,也可以qq发送消息,基本思想就是通过按键盘的各种快捷键实现复制粘贴以及搜索联系人的功能,通过按enter键进行发送2、vbs脚本运行方式如果你的电脑上没有安装任何编辑器没有关系,用电脑自带的记事本就可以编写脚本,右键->新建->文本文档,在新建的文本文档里编写vbs脚本,写完以后重命名,将后缀改为.vbs,出现以下提示,选择是。
-
一,编写vbs网页其中DDDDD是账号的位置,upass为密码,我在网上看的一些方法对于我这个并不适用,因此就结合他们的自己改了改。(有些代码是猜的之前没接触过vbs)在上面的情况下使用如下的代码登录(可以先创建一个txt文件之后将后缀改为vbs,如果看不到后缀,需要打开查看中的文件拓展名,就像本文的最后一个图一样)Dim username,password,IE,dom,form,Shell username = "*****" password = "*****" Set IE =CreateObject("InternetExplorer.Application") ie.FullScreen=0 IE.Visible = True IE.Navigate "http://10.20.3.2/" Do while IE.ReadyState<> 4 or IE.busy wscript.sleep 2000 loop IE.document.f3.DDDDD.value=username IE.document.f3.upass.value=password IE.document.f3.onsubmit其中http://10.20.3.2/是你要登录网站的网址,其中的f3是form的name,f3.DDDDD是在form表下面的账号的name,f3.upass是form下面的密码的name。(我一直想用f3.0MKKey表示那个登录按钮,但是不知道怎么用,后来试着发现onsubmit也可以当作提交登录)如果想让它自动退出,可以在最后加两句wscript.sleep 2000 IE.quit二,配置为开机自启这个比较简单,只需要将这个vbs文件放到下面目录中就可以了。C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp(注意ProgramData是个隐藏文件夹,想要显示隐藏文件夹可以打开查看中的隐藏的项目,如下图所示)补充:下面给大家分享一段有趣的代码,基于vbs实现恶搞无限弹窗,复制粘贴就能用。vbs简单实现弹窗直接新建txt文档,复制粘贴下面代码: do a =msgbox("你怕是个ZZ吧?",vbYesNoCancel,"一份认真的问卷调查") if a =vbYes then msgbox "emmmm,还算有点自知之明",,"恭喜你,真正的认识了自己!" exit do elseif a =vbNo then b =msgbox("心里没点AC数吗?",vbYesNo,"不要想太多,你就是!") if b =vbYes then msgbox "没点数,自己照照镜子啊!",,"这就是你学习好的原因啊" else msgbox "能认识错误还是好的",,"MDZZ" end if else d =msgbox("取消你吗呢",vbYesNo,"还想点取消?") if d =vbYes then msgbox "取消也没用",,"这是一个轮回" else msgbox "不取消就赶紧承认吧",,"ZZ" end if end if loop 保存,修改文件格式为vbs,确认,打开。“”双引号里面可以随意修改内容,看别人很多都是写表白的注意:第五行的 exit do 表示退出 就是说第一次点击yes之后可以点确定退出弹窗,否则无限循环。(把exit do这句去掉就是死循环了,但是可以通过结束进程来关闭,这个就不多说了,有问题多百度!)
-
背景介绍有些公司出于安全和保密工作考虑,会通过 Windows 组策略强制所有办公电脑在无操作的情况下 5 分钟或者 10 分钟自动锁屏,避免无关人士看到不该看的内容。作为程序员,十分反感这种一刀切的方案,一来很容易打断思路,比如正在写代码或者向别人展示时,突然锁屏了就挺恶心的;二来每次锁屏后都要输入密码,这简直就是浪费生命,不能忍!为了解决这个问题,我们可以编写一个简单的 vbs 脚本,在锁屏周期内模拟按键操作,从而避免 Windows 桌面被锁屏。之所以使用 vbs 脚本,而不是 Python、JavaScript 等更流行的高级语言,主要是因为这个程序的需求特别简单,而且 vbs 脚本可以在 Windows 系统中直接运行,不需要安装任何依赖。脚本程序下面给出两个脚本,你可以将它们命名为 never_lock.vbs 文件(先在 Windows 系统新建一个 txt 文本文件,粘贴代码,然后修改文件名)。复杂版本Set ws=Wscript.CreateObject("Wscript.Shell") If ws.expandenvironmentstrings("%strikkeyflag%")=("on")Then wscript.echo("Screen Never Lockout") ws.Environment("user").Item("strikkeyflag")="off" set mi=getobject("winmgmts:win32_process").instances_ for each p in mi if ucase(p.name)=ucase("wscript.exe")then p.terminate End If Next wscript.quit Else wscript.echo("Screen Never Lockout") ws.Environment("user").Item("strikkeyflag")="on" do set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys"{ScrollLock}" wscript.sleep(280000) 'ms Loop end if 简单版本 '先定义一个Shell对象 Set WshShell = WScript.CreateObject("WScript.Shell") '设置成正需要接续的时间 do '设置成比屏保时间短点就可以 WScript.Sleep 60000 '1min 60000ms WshShell.SendKeys "{ScrollLock}" loop 在 Windows 系统中双击 never_lock.vbs 脚本,即可运行。如需停止脚本,可以按 Ctrl + Shift + Esc 键打开任务管理器,找到 Microsoft ® Windows Based Script Host,结束任务即可。工作原理你应该已经猜到,never_lock.vbs 脚本的工作原理就是通过定时按一次 Scroll Lock 键,让系统认为一直有人为操作,只要定时时间在锁屏周期以内,就可以达到避免锁屏的效果。Scroll Lock 即“滚动锁定键”,是一个现存于大部分键盘上的按键,通常附有一个指示按键开关情况的灯号。这个按键曾经用来锁定所有软件的滚动功能,但已不为现今大部分软件所使用。因为这个按键已经不常用,所以部分键盘(例如笔记本)已经移除了这个键。不过系统还是保留了 Scroll Lock 按键的定义,因此我们可以借助这个没什么用的按键完成防止锁屏的功能,不会对系统造成任何影响。
-
对于vbs中ping的实现可以通过两种方式 :1、调用系统ping命令;2、使用wmi查询pingstate类处理。1、调用系统ping命令12Set wshell = CreateObject("WScript.Shell")wshell.run("ping 182.183.101.1",0.true)对于以上调用,如果想对其进行过滤,可以考虑将运行结果重定向到文件,在读到一个string中,查找其中是否有timeout或超时字符,判断是否超时。本打算直接拼接命令重定向到文件,但怎么都不成功,所以run调用一个bat,bat中写:ping 192.168.101.1 -n 1 -w 1200 2、使用wmi查询pingstate类处理:123456789101112'url = "www.baidu.com"url = "119.75.217.109"strComputer = "."Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & url & "'")For Each objPing in colPingsMsgBox url & " responded to ping." & vbcrlf &_"Responding Address: " & objPing.ProtocolAddress & vbcrlf &_"Responding Name: " & objPing.ProtocolAddressResolved & vbcrlf &_"Bytes Sent: " & objPing.BufferSize & vbcrlf &_"Time: " & objPing.ResponseTime & " ms"Next
-
vbs核心代码123456789101112Option ExplicitDim objWMIService,colProcessList,strComputerstrComputer = "."Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'excel.exe'")If colProcessList.Count>0 Then MsgBox "检测到EXCEL程序运行中,程序退出!" WScript.QuitEnd IfSet colProcessList = NothingSet objWMIService = NothingWScript.Quit当然你可以判断 winrar.exe等等下面附一个代码,原来中文命名的,脚本之家已经修改为英文命名并且正常运行了,因为时间问题,需要的朋友可以自行修改精简123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134'检测进程proname = "qq.exe"reName = IsProcess(proname)If reName = True Then msgbox "发现进程"ElseIf reName = False Then msgbox "没有发现进程"End If'检测进程 优化后的代码If IsProcess("qq.exe") = True Then msgbox "发现进程"Else msgbox "没有发现进程"End If'检测进程组proName_all = "qq.exe|notepad.exe"reName = IsProcessEx(proName_all)If reName = True Then msgbox "发现进程"ElseIf reName = False Then msgbox "没有发现进程"End If'检测进程组 优化后的代码If IsProcessEx("qq.exe|notepad.exe") = True Then msgbox "发现进程"Else msgbox "没有发现进程"End If'结束进程 前台执行proname = "qq.exe" Call CloseProcess(proname, 1)'结束进程 后台执行proname = "qq.exe" Call CloseProcess(proname, 0) '结束进程组 前台执行proName_all = "qq.exe|notepad.exe" Call CloseProcessEx(proName_all, 1)'结束进程组 后台执行proName_all = "qq.exe|notepad.exe" Call CloseProcessEx(proName_all, 0)'实例应用 结束进程 前台执行 10秒超时proname = "qq.exe"For i=1 to 10 Call CloseProcess(proname,1) Delay 1000 reName = IsProcess(proname) If reName = False Then Exit For End IfNextIf reName=True Then msgbox "结束进程失败"Else msgbox "结束进程成功"End If'实例应用 结束进程 前台执行 优化后的代码(直到型循环) 有些进程VBS检测不到 所以先关闭后检测Do Call CloseProcess("qq.exe",1) Delay 1000Loop While IsProcess("qq.exe")=Truemsgbox "结束进程成功"'实例应用 结束进程组 后台执行 10秒超时proName_all = "qq.exe|notepad.exe"For j=1 to 10 Call CloseProcessEx(proName_all,0) Delay 1000 reName = IsProcessEx(proName_all) If reName = False Then Exit For End IfNextIf reName=True Then msgbox "结束进程失败"Else msgbox "结束进程成功"End If'实例应用 结束进程组 后台执行 优化后的代码(直到型循环) 有些进程VBS检测不到 所以先关闭后检测Do Call CloseProcessEx( "qq.exe|notepad.exe",0) Delay 1000Loop While IsProcessEx( "qq.exe|notepad.exe")=Truemsgbox "结束进程成功"'函数 子程序部分代码'检测进程Function IsProcess(ExeName) Dim WMI, Obj, Objs,i IsProcess = False Set WMI = GetObject("WinMgmts:") Set Objs = WMI.InstancesOf("Win32_Process") For Each Obj In Objs If InStr(UCase(ExeName),UCase(Obj.Description)) <> 0 Then IsProcess = True Exit For End If Next Set Objs = Nothing Set WMI = NothingEnd Function'结束进程Sub CloseProcess(ExeName,RunMode) dim ws Set ws = createobject("Wscript.Shell") ws.run "cmd.exe /C Taskkill /f /im " & ExeName,RunMode Set ws = NothingEnd Sub'检测进程组Function IsProcessEx(ExeName) Dim WMI, Obj, Objs,ProcessName,i IsProcessEx = False Set WMI = GetObject("WinMgmts:") Set Objs = WMI.InstancesOf("Win32_Process") ProcessName=Split(ExeName,"|") For Each Obj In Objs For i=0 to UBound(ProcessName) If InStr(UCase(ProcessName(i)),UCase(Obj.Description)) <> 0 Then IsProcessEx = True Exit For End If Next Next Set Objs = Nothing Set WMI = NothingEnd Function'结束进程组Sub CloseProcessEx(ExeName,RunMode) dim ws,ProcessName,CmdCode,i ProcessName = Split(ExeName, "|") For i=0 to UBound(ProcessName) CmdCode=CmdCode & " /im " & ProcessName(i) Next Set ws = createobject("Wscript.Shell") ws.run "cmd.exe /C Taskkill /f" & CmdCode,RunMode Set ws = NothingEnd Sub
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
去报名 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签