Jak dodać 32/64-bitowy test do swojego menu kontekstowego
Utwórz plik tekstowy o nazwie exetest. reg i zawierający ten kod:
Windows Registry Editor Version 5.00
; What will appear in the contextual menu when right-clicking on a .exe file
[HKEY_CLASSES_ROOT\exefile\shell\command32_64]
@="32/64 bit test"
; What to do with it
; here, %1 is the file given as argument of the script
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
@="\"c:\temp\x86TestStart.bat\" \"%1\""
Stwórz plik tekstowy o nazwie x86TestStart.bat
zawierający właśnie tę linię kodu i zapisz go w C:\temp:
c:\temp\x86or64.vbs %1
Stwórz plik tekstowy o nazwie x86or64.vbs
zawierający ten kod i zapisz go w C:\temp:
rem Reading binary file in VBScript: http://stackoverflow.com/questions/21249440/modify-first-two-bytes-of-a-file-using-vbscript
rem Info on executables: https://dmoj.ca/problem/exe
rem x86/64 signature is located dinamycally; its position is addressed
rem from bytes in 0x3C-0x3D position.
rem Possible signatures;
rem "PE..L" (hex code: 50.45.00.00.4C) = 32 bit
rem "PE..d†" (hex code: 50.45.00.00.64.86) = 64 bit
' ------------------------------------
' Source code by Jumpkack 2015
' ------------------------------------
' Read all arguments from command line:
Set args = Wscript.Arguments
' Store first argument (full path to file)
FileName = args(0)
' Find address of executable signature:
FirstChars = readBinary(FileName)
FirstChars = FirstChars
Addr1 = asc(mid(FirstChars,61,1))
Addr2 = asc(mid(FirstChars,62,1))
AddrFinal = Addr2*256 + Addr1 + 1
' Check signature:
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "4C" then Wscript.Echo Filename & " is a 32 bit executable."
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "64" then Wscript.Echo Filename & " is a 64 bit executable."
Function readBinary(path)
Dim a, fso, file, i, ts
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.getFile(path)
If isNull(file) Then
wscript.echo "File not found: " & path
Exit Function
End If
Set ts = file.OpenAsTextStream()
'a = makeArray(file.size)
a=""
i = 0
While (Not ts.atEndOfStream) and (i<60000)
'a(i) = ts.read(1)
a = a + ts.read(1)
i = i + 1
Wend
ts.close
readBinary = a
End Function
Kliknij dwukrotnie na exetest. reg file: nowy klucz zostanie dodany w rejestrze Windows:
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
Pojawi się on jako “ 32/64 bit test” w menu kontekstowym po kliknięciu prawym przyciskiem myszy na plik wykonywalny.
Kliknięcie elementu spowoduje uruchomienie pliku wsadowego `c:\temp\x86TestStart.bat# Jak dodać 32/64-bitowy test do swojego menu kontekstowego
Utwórz plik tekstowy o nazwie exetest. reg i zawierający ten kod:
Windows Registry Editor Version 5.00
; What will appear in the contextual menu when right-clicking on a .exe file
[HKEY_CLASSES_ROOT\exefile\shell\command32_64]
@="32/64 bit test"
; What to do with it
; here, %1 is the file given as argument of the script
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
@="\"c:\temp\x86TestStart.bat\" \"%1\""
Stwórz plik tekstowy o nazwie x86TestStart.bat
zawierający właśnie tę linię kodu i zapisz go w C:\temp:
c:\temp\x86or64.vbs %1
Stwórz plik tekstowy o nazwie x86or64.vbs
zawierający ten kod i zapisz go w C:\temp:
rem Reading binary file in VBScript: http://stackoverflow.com/questions/21249440/modify-first-two-bytes-of-a-file-using-vbscript
rem Info on executables: https://dmoj.ca/problem/exe
rem x86/64 signature is located dinamycally; its position is addressed
rem from bytes in 0x3C-0x3D position.
rem Possible signatures;
rem "PE..L" (hex code: 50.45.00.00.4C) = 32 bit
rem "PE..d†" (hex code: 50.45.00.00.64.86) = 64 bit
' ------------------------------------
' Source code by Jumpkack 2015
' ------------------------------------
' Read all arguments from command line:
Set args = Wscript.Arguments
' Store first argument (full path to file)
FileName = args(0)
' Find address of executable signature:
FirstChars = readBinary(FileName)
FirstChars = FirstChars
Addr1 = asc(mid(FirstChars,61,1))
Addr2 = asc(mid(FirstChars,62,1))
AddrFinal = Addr2*256 + Addr1 + 1
' Check signature:
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "4C" then Wscript.Echo Filename & " is a 32 bit executable."
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "64" then Wscript.Echo Filename & " is a 64 bit executable."
Function readBinary(path)
Dim a, fso, file, i, ts
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.getFile(path)
If isNull(file) Then
wscript.echo "File not found: " & path
Exit Function
End If
Set ts = file.OpenAsTextStream()
'a = makeArray(file.size)
a=""
i = 0
While (Not ts.atEndOfStream) and (i<60000)
'a(i) = ts.read(1)
a = a + ts.read(1)
i = i + 1
Wend
ts.close
readBinary = a
End Function
Kliknij dwukrotnie na exetest. reg file: nowy klucz zostanie dodany w rejestrze Windows:
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
Pojawi się on jako “ 32/64 bit test” w menu kontekstowym po kliknięciu prawym przyciskiem myszy na plik wykonywalny.
Kliknięcie elementu spowoduje uruchomienie pliku wsadowego , który uruchamia plik VBscript x86or64.vbs
, który odczytuje sygnaturę exe i pokazuje wynik.
Jeśli nie możesz lub nie chcesz ingerować w rejestr, skopiuj plik .vbs w pasku QuickLaunch i przeciągnij nad nim plik wykonywalny.