Что нового

[Файловая система] Как узнать разрядность исполняемого файла

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt 3.3.8.1
Вопрос в том, как можно узнать разрядность исполняемого файла на примере
Код:
FileGetVersion

Только хочу узнать не версию а разрядность x64 или x32. Не запущенного.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
_WinAPI_GetPEType() из WinAPIEx.au3.

Код:
Switch _WinAPI_GetPEType($sFile)
	Case $IMAGE_FILE_MACHINE_I386
		; x86
	Case $IMAGE_FILE_MACHINE_IA64, $IMAGE_FILE_MACHINE_AMD64
		; x64
	Case Else
		; Other
EndSwitch
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
ivsatel
Еще один вариант:

Код:
$ADDR=FileOpenDialog('Выберите исполнимый файл','','Исполнимые файлы (*.exe)')
$OPEN=FileOpen($ADDR,16)
$CODE=FileRead($OPEN,1024)
FileClose($OPEN)
$R=StringMid($CODE,StringInStr($CODE,'50450000')+50,2)
If $R=1 Then
 MsgBox(0,'','32-разрядный')
ElseIf $R=2 Then
 MsgBox(0,'','64-разрядный')
EndIf
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
snoitaleR
Спасибо, но уже на основе помощи Yashied получилось так:

Код:
#include <Array.au3>
#include <WinAPIEx.au3>
#include <FileOperations.au3>

$var = StringRegExp(RegRead("HKCR\http\shell\open\command", ""), '.*[\\](.*?)[\.]exe', 1)
If @error Then
	MsgBox('','', @error)
	Exit
EndIf
$BPD = _ArrayToString($var, '')&'.exe'

$sFile = _FO_FileSearch(@HomeDrive, $BPD, True, 5, 1, 0)

Switch _WinAPI_GetPEType($sFile)
    Case 0x014C
        $BB = 'X86' ; x86
    Case 0x0200, 0x8664
        $BB = 'X64' ; x64
    Case Else
        MsgBox('','', '?'); Other
EndSwitch

If $BB = 'X86' Then
MsgBox(0, '', $BPD&' = x86')
Else
MsgBox(0, '', $BPD&' = x64')
EndIf

Но суть понятна.
 
Верх