ايران ويج

نسخه‌ی کامل: تعیین نوع ویندوز
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام
از کجا میشه فهمید که ویندوز 64 بیتی است یا 32 بیتی؟

این کد زیر هم کار نمی کند؟؟!!!!
کد:
{$IFDEF WIN32}
        Boo:=True; // win 32
     {$ELSE} {$IFDEF WIN64}
        Boo:=False; // win 64
     {$ENDIF}
     {$ENDIF}
یعنی وقتی فایل اجرایی شما 32 بیتی باشد و در ویندوز 64 بیتی اجراء کنید میگه ویندوز مورد نظر 32 بیتی است نه 64 بیتی؟؟؟؟؟

با تشکر فراوانRolleyes
میتونین از تابع IsWow64Process که تو kernel32.dll هست استفاده کنید

کد:
function Is64BitOS: Boolean;
type
  TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
var
  hKernel32 : Integer;
  IsWow64Process : TIsWow64Process;
  IsWow64 : BOOL;
begin
  Result := False;
  hKernel32 := LoadLibrary('kernel32.dll');
  if (hKernel32 = 0) then RaiseLastOSError;
  @IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
  if Assigned(IsWow64Process) then begin
    IsWow64 := False;
    if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
      Result := IsWow64;
    end
    else RaiseLastOSError;
  end;
  FreeLibrary(hKernel32);
end;

کد:
http://msdn.microsoft.com/en-us/library/ms684139%28VS.85%29.aspx
با سلام
لطفا میشه راهنمایی کنید که چطور بدون باز کردن فایل اجراء میشه فهمید که 64 بیتی است یا 32 بیتی؟؟؟؟
با تشکر
اینم بدون اجرای فایل ;)

کد:
// Detect 32 / 64 Applications
// Coded By Arash Veyskarami
//////////////////////////////

function Get_32_64(Filename:string):string;
var
Mch:Dword;
dos_header: IMAGE_DOS_HEADER;
pe_header: IMAGE_FILE_HEADER;
opt_header: IMAGE_OPTIONAL_HEADER;
fs:TFilestream;
signature: DWORD;
function DumpPEHeader(const h: IMAGE_FILE_HEADER):dword;
begin
Result:=h.Machine;
end;
begin
fs := TFilestream.Create(FileName, $0000 or $0040);
try
fs.read(dos_header, SizeOf(dos_header));
if dos_header.e_magic <> IMAGE_DOS_SIGNATURE then
Exit;
fs.seek(dos_header._lfanew, soFromBeginning);
fs.read(signature, SizeOf(signature));
finally
fs.read(pe_header, SizeOf(pe_header));
Mch:=DumpPEHeader(pe_header);
fs.Free;
end;
if Mch = $14C then Result:='32 Bit' ;
if Mch = $8664 then Result:='64 Bit';
end;
///////////////////////////////////////