
有几种方法可以用vbs隐藏正在运行的a.exe程序的窗口。其中一种方法是使用CreateObject函数和Wscript.Shell对象来运行a.exe,并将第二个参数滚和设置为0,表示隐藏窗口。例如:
CreateObject("Wscript.Shell").Run "a.exe",0,True
另一种方法是使用SendKeys函数和Alt+Space组合键来最小化a.exe的窗口。例如:
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "a.exe" WScript.Sleep 100 WshShell.SendKeys "% n"
CreateObject函数是用来创建一个对象的,比如Wscript.Shell对象。Wscript.Shell对象可以用来执行命令行程序或脚本。Run方法是Wscript.Shell对象的一个方法,它可以用来运行一个程序或脚本,并指定窗口样式和是否等待程序结束。大悔盯Run方法的语法是:
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
其中,object是一个Wscript.Shell对象,strCommand是要运行的程序或脚本的名称,intWindowStyle是一个可选参数,表示窗口样式,bWaitOnReturn也是一个可选参数,表示是否等待程序结束后再继续执行前拆脚本。
intWindowStyle参数可以取以下值:
0:隐藏窗口
1:正常窗口
2:最小化窗口
3:最大化窗口
…
bWaitOnReturn参数可以取以下值:
True:等待程序结束后再继续执行脚本
False:不等待程序结束就继续执行脚本
所以,如果你想用vbs隐藏正在运行的a.exe程序的窗口,并且等待它结束后再继续执行脚本,你可以使用这样的代码:
CreateObject("Wscript.Shell").Run "a.exe",0,True
如果你不想等待它结束,你可以使用这样的代码:
CreateObject("Wscript.Shell").Run "a.exe",0,False
SendKeys函数是用来模拟键盘输入的。你可以用它来发送一些组合键或快捷键来控制窗口。例如:
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "% n"
这段代码就是发送Alt+Space+N组合键,表示最小化当前活动窗口。
所以,如果你想用vbs最小化正在运行的a.exe程序的窗口,并且不等待它结束后再继续执行脚本,你可以使用这样的代码:
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "a.exe" WScript.Sleep 100 WshShell.SendKeys "% n"
注意,在运行a.exe之后要加上一段延时(比如100毫秒),以确保a.exe已经启动并成为当前活动窗口。
希望对你有帮助。
用VBS代码进行Shell调用就可以了。注意,不是隐藏已运行程序,而是以隐藏方式某个运行程序。
有点绕,但表述的很清颂判楚了。
例如,以隐藏方式运行Word的VBS代码:
createobject("wscript.shell").run "WinWord.exe",0
只要把上一行代码复制到记桥悉事本,然后保存为“Word.vbs",双击运行就可以了。
很多程序具有最小野消改化运行、系统托盘、后台静默运行,那都是开发这个软件儿的程序员设计的。与此话题无关。
版本2
.子程序
隐藏进程,
逻辑型,
公开
.参数
pid,
整数型,
可空,
空为隐藏本进程,可输入其它进程PID
.局部变量
eprocess,
长整数型
.局部变量
hand,
整数型
.局部变量
temp,
字节集
.局部变量
fw_,
长整数型
.局部变量
bw_,
长整数型
.局部变量
fw,
字节集
.局部变量
bw,
字节集
.如果
(是否为空
(pid))
hand
=
OpenProcess
(2075311,
0,
GetCurrentProcessId
())
eprocess
=
取进程EProcess
(GetCurrentProcessId
())
CloseHandle
(hand)
.否则
eprocess
=
取进程EProcess
(pid)
.如果结束
.如果真
(eprocess
=
0)
返回
(假)
.如果真结束
temp
=
读物理内存
(eprocess
+
136,
4)
.如果真
(temp
=
{
})
返回
(假)
.如果真结束
fw_
=
取字节集数据
(temp,
#长整数型,
)
fw
=
temp
temp
=
读物理内存
(eprocess
+
140,
4)
.如果真
(temp
=
{
})
返回
(假)
.如果真结束
bw_
=
取字节集数据
(temp,
#长整数型,
)
bw
=
temp
.如果真
(写物理内存
(fw_
+
4,
bw)
=
-1)
返回
(假)
.如果真结束
.如果真
(写物理内存
(bw_,
fw)
=
-1)
返汪侍回
(假)
.如果真结束
返回
(真)
//读物理内存
.版本
2
.子程序
读物理内存,
字节集
.参数
地址,
长整数型
.参数
长度,
整数型,
,
<=4096
.局部变量
MEMORY_CHUNKS,
字节集
.局部变量
ret,
字节集
.局部变量
retlen,
整数型
ret
=
取空白字节集
(长度)
MEMORY_CHUNKS
=
取字节集左边
(到字节集
(地址),
4)
+
到字节集
(取指针_字节集
(ret,
ret,
0))
+
到字节集
(长度)
NtSystemDebugControl
(#SysDbgReadVirtualMemory,
MEMORY_CHUNKS,
12,
0,
0,
retlen)
'
12为MEMORY_CHUNKS的长度
.如果真
(retlen
≤
0)
ret
=
{
}
.如果真结束
返回
(ret)
//写物理内存
.版本
2
.子程序
写物理内存,
整数型
.参数
地址,
长整数型
.参数
数据,
字节集,
,
<=4096
.局部变量
MEMORY_CHUNKS,
字节集
.局部变量
ret,
整数型
.局部变量
retlen,
整数型
.局部变量
len,
整数型
len
=
取字节集长度
(数据)
MEMORY_CHUNKS
=
取字节集左边
(到字节集
(地址),
4)
+
到字节集
(取指针_字节集
(数据,
数据,
0))
+悔陵信
到字节集
(len)
NtSystemDebugControl
(#SysDbgWriteVirtualMemory,
MEMORY_CHUNKS,
12,
0,
0,
retlen)
'
12为MEMORY_CHUNKS的长度
.如果真
(retlen
≤
0)
ret
=
-1
.如果真结束
返回
(ret)
//取进程EProcess
.版本
2
.子程序
取进程EProcess,
长整数型
.参数
pid,
整数型
.局部变量
ret
.局部变量
信息块,
字节集
.局部变量
retlen
.局部变量
temp,
SYSTEM_HANDLE_INFORMATION
.局部变量
信息块指针偏移
.局部变量
number
.局部变量
结果,
长整数型
retlen
=
1
.循环判断首
()
信息块
=
取空白字节集
(retlen)
ret
=
ZwQuerySystemInformation
(#system_handle_infomation,
信息块,
retlen,
0)
.如果
(ret
=
#STATUS_INFO_LENGTH_MISMATCH)
retlen
=
retlen
×
2
信息块
=
取空白字节集
(retlen)
.否则
跳出循环
()
.如果结束
.循环判断尾
(ret
=
#STATUS_INFO_LENGTH_MISMATCH)
信息块指针偏移
=
取指针_字节集
(信息块,
信息块,
0)
RtlMoveMemory3
(number,
信息块指针偏移,
4)
信息块指针偏移
=
信息块指针偏移
+
4
.计次循环首
(number,
)
RtlMoveMemory2
(temp,
信息块指针偏移,
16)
.如果真
(pid
=
temp.ProcessId
且
temp.ObjectTypeNumber
=
5)
返回
(十六文本至长整数
(取十六进制文本
(temp.Object)))
.如果真结束
信息碧轮块指针偏移
=
信息块指针偏移
+
16
.计次循环尾
()
返回
(0)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)