找回密码
 加入
搜索
查看: 4822|回复: 12

[AU3基础] [已解决]WINPE环境下判断当前计算机操作系统所在分区

 火.. [复制链接]
发表于 2012-4-19 16:19:51 | 显示全部楼层 |阅读模式
本帖最后由 zcx880517 于 2012-4-19 20:53 编辑

RT,在XP或WIN7环境下使用目录宏只能判断当前使用的操作系统所在的分区

在WINPE环境下不显示

请教高手帮忙解决下。

WINPE环境下能判断出双系统或多系统情况甚好!感谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-4-19 16:23:55 | 显示全部楼层
帮顶。、坐等高人
发表于 2012-4-19 16:55:19 | 显示全部楼层
回复 1# zcx880517

我认为如果是Windows系统, 读第1个分区下的 Boot.ini 文件肯定没错!
发表于 2012-4-19 17:57:35 | 显示全部楼层
帮顶,表示关注
发表于 2012-4-19 18:46:40 | 显示全部楼层
这是一个pe安装前段,看看有没有帮组。

Local $panfu[24] = [ "Z", "Y", "X", "W", "V", "U", "T", "S", "R", "Q", "P", "O", "M", "N", "L", "K", "J", "I", "H", "G", "F", "E", "D", "C"]
For $i = 23 To 0 Step -1;检测是否存在BOOT.INI
        If FileExists($panfu[$i] & ":\BOOT.INI") Then
                $sysdrv = $panfu[$i] & ":"
                ExitLoop
        EndIf
Next

If $sysdrv = "" Then ;不存在BOOT.INI即检测BOOTMGR
        For $i = 23 To 0 Step -1
                If FileExists($panfu[$i] & ":\BOOTMGR") Then
                        $sysdrv = $panfu[$i] & ":"
                        start56x(6)
                        ExitLoop
                EndIf
        Next
EndIf
发表于 2012-4-19 19:11:45 | 显示全部楼层
个人看法:
1、先确定硬盘数量。
2、确定硬盘活动分区
3、读取活动分区硬盘MBR,分析MBR类型。以前做过相关的东西,提供下几种不同引导的字符串特征如下:[["Windows NT 5.x 默认引导程序", "2c4463"],["Windows NT 6.x 默认引导程序", "627a99"],["Grub for Dos", "4d697373696e67204d42522d68656c7065722e"]]
4、参见5楼
发表于 2012-4-19 19:40:59 | 显示全部楼层

#include <file.au3>
$arr = DriveGetDrive("FIXED")
$msg_str = ""
For $i = 1 To $arr[0]
        $folder = _FileListToArray($arr[$i] & "\", "win*", 2)
        If @error Then ContinueLoop
        For $j = 1 To $folder[0]
                $kernel_path = $arr[$i] & "\" & $folder[$j] & "\system32\kernel32.dll"
                If FileExists($kernel_path) Then
                        $version = FileGetVersion($kernel_path)
                        $ver = StringLeft($version, 3)
                        Switch $ver
                                Case "5.0"
                                        $msg_str &=  $arr[$i] & " ---> Win2000" & @CRLF
                                Case "5.1"
                                        $msg_str &=  $arr[$i] & " ---> WinXP" & @CRLF
                                Case "5.2"
                                        $msg_str &=  $arr[$i] & " ---> Win2003" & @CRLF
                                Case "6.0"
                                        $msg_str &=  $arr[$i] & " ---> Vista" & @CRLF
                                Case "6.1"
                                        $msg_str &=  $arr[$i] & " ---> Win7" & @CRLF
                        EndSwitch
                EndIf
        Next
Next
MsgBox(0, "检测结果", $msg_str)

评分

参与人数 2金钱 +40 贡献 +5 收起 理由
xms77 + 20 好招!
zcx880517 + 20 + 5 高手啊。。

查看全部评分

发表于 2012-4-19 20:03:14 | 显示全部楼层
楼主兄找个能运行在PE下的系统检测软件,把它反了不就好了吗。
 楼主| 发表于 2012-4-19 20:52:15 | 显示全部楼层
回复 8# pusofalse


    P版什么意思呢,,话中有话嘛!
发表于 2012-4-19 21:21:27 | 显示全部楼层
回复 7# veket_linux
很另类的方法,不过如果硬盘上安装了多系统的话,就不是很准确了
发表于 2012-4-20 09:41:04 | 显示全部楼层
学习一下,不过这个估计比较复杂
发表于 2012-4-20 19:22:38 | 显示全部楼层
谢谢楼上的分享。
发表于 2012-4-20 23:19:43 | 显示全部楼层
留个记号,暂时用不到!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 13:30 , Processed in 0.103467 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表