主要原理:利用易语言,取出Dos的结果,再来判断“Virutal”特殊关键字字符,若寻找到关键字字符“Virutal”的话就是虚拟机,反之没有关键字字符“Virutal”就是物理机。
.版本 2
.支持库 console
.支持库 EThread
.程序集 程序集1
.程序集变量 控制台, 控制台对象
.程序集变量 hw, 整数型
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
控制台.输出 (, , 假, 8, 1, “此系统仅用于测试,禁止应用于其他![程序若无法启动,请以管理员身份运行!]By:NVK|QQ:2459846709” + #换行符 + #换行符)
控制台.输出 (, , 假, 11, 1, “正在进行相关操作,请等待片刻”)
启动线程 (&login, , hw)
启动线程 (&tike, , )
标准输入 ()
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 login
.计次循环首 (10, )
控制台.输出 (, , 假, 11, 1, “.”)
延时 (1500)
.计次循环尾 ()
.子程序 tike
.判断开始 (寻找文本 (Take_the_Dos_Execution_Results (), “Virutal”, , 假) ≠ -1)
强制结束线程 (hw)
控制台.输出 (, , 假, 15, 1, #换行符 + #换行符 + “反馈回执结果:当前模式为”)
控制台.输出 (, , 假, 10, 1, “虚拟机”)
控制台.输出 (, , 假, 15, 1, “模式” + #换行符 + #换行符)
控制台.输出 (, , 假, 8, 1, “单击_任意键退出程序”)
.默认
强制结束线程 (hw)
控制台.输出 (, , 假, 15, 1, #换行符 + #换行符 + “反馈回执结果:当前模式为”)
控制台.输出 (, , 假, 10, 1, “物理机”)
控制台.输出 (, , 假, 15, 1, “模式” + #换行符 + #换行符)
控制台.输出 (, , 假, 8, 1, “单击_任意键退出程序”)
.判断结束
.子程序 Take_the_Dos_Execution_Results, 文本型, , 这个子程序返回的,是Dos 的回执结果,Dos命令:Systeminfo | findstr /i "System Model"
.局部变量 SECURITY_ATTRIBUTES, SECURITY_ATTRIBUTES
.局部变量 STARTUPINFO, STARTUPINFO
.局部变量 PROCESS_INFORMATION, PROCESS_INFORMATION
.局部变量 hWrite, 整数型
.局部变量 hRead, 整数型
.局部变量 txt, 字节集
.局部变量 len, 整数型
.局部变量 EXIT, 整数型
.局部变量 retext, 文本型
SECURITY_ATTRIBUTES.nLength = 12
SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0
SECURITY_ATTRIBUTES.bInheritHandle = 1
CreatePipe (hRead, hWrite, SECURITY_ATTRIBUTES, 0)
STARTUPINFO.cb = 68
STARTUPINFO.dwFlags = 位或 (#STARTF_USESHOWWINDOW, #STARTF_USESTDHANDLES)
STARTUPINFO.wShowWindow = #SW_HIDE
STARTUPINFO.hStdOutput = hWrite
STARTUPINFO.hStdError = hWrite
.如果 (取操作系统类别 () ≤ 2)
CreateProcess (0, “command.com /c Systeminfo | findstr /i ” + #引号 + “System Model”, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION) ' 代码
.否则
CreateProcess (0, “cmd.exe /c Systeminfo | findstr /i ” + #引号 + “System Model”, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION) ' 代码
.如果结束
CloseHandle (hWrite)
.判断循环首 (len ≠ -1)
PeekNamedPipe (hRead, 0, 0, 0, len, 0)
.如果 (len ≠ 0)
txt = 取空白字节集 (1024)
ReadFile (hRead, txt, 1023, len, 0)
retext = retext + 取字节集数据 (txt, #文本型)
.否则
GetExitCodeProcess (PROCESS_INFORMATION.hProcess, EXIT)
.如果真 (EXIT ≠ #STILL_ACTIVE)
CloseHandle (hRead)
跳出循环 ()
.如果真结束
.如果结束
处理事件 ()
.判断循环尾 ()
返回 (retext)