Windows un 64 Bit Olduğunu Algılama

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Windows un 64 Bit Olduğunu Algılama

Mesaj gönderen sabanakman »

Windows un 64 Bit olduğunu algılayan kod.

Kod: Tümünü seç

function IsWOW64: Boolean;
type TIsWow64Process = function(Handle: THandle;var Res: BOOL):BOOL;stdcall;
var
  IsWow64Result: BOOL;
  IsWow64Process: TIsWow64Process;
begin
  IsWow64Process := GetProcAddress(GetModuleHandle('kernel32'), 'IsWow64Process');
  if Assigned(IsWow64Process) then begin
    if not IsWow64Process(GetCurrentProcess, IsWow64Result) then
      raise Exception.Create('Geçersiz fonksiyon adresi!...');
    Result := IsWow64Result;
  end else Result := False;
end;
Örnek..:

Kod: Tümünü seç

if IsWOW64 then Label1.Caption:='64 bit Windows x64' else Label1.Caption:='32 bit Windows x86';
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
zeynel6363
Üye
Mesajlar: 25
Kayıt: 27 Kas 2014 02:32

Re: Windows un 64 Bit Olduğunu Algılama

Mesaj gönderen zeynel6363 »

delphide yeniyim. bilgisayarın 32 bit mi yoksa 64 bit mi olduğunu öğrenmek için fonksiyon kullanmadan nasıl öğrenirim...koddan hiç bir şey anlamadım :(
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Windows un 64 Bit Olduğunu Algılama

Mesaj gönderen sabanakman »

İyi günler. Okuma yazma bilmeden edebi eser yazmaya niyetlenmişsiniz anlaşılan. :mrgreen: . Delphi'nin kullandığı kod blokları hakkında biraz çalışma yapmanız gerekmektedir. Probleminizin çözüme kavuşması açısından bir kaç meseleye değinmek lazım.
unit xyz; //-->modülün isminin tanımlandığı satır

interface
//bu modülde tanımlı ama başka modüllerde de kullanıma açık olacak fonksiyon, prosedür ve sınıfların sadece tanımları, kod olmaz burada

uses ....;//başka modüllerde tanımlı ama kullanılmak istenen fonksiyon, prosedür, sınıf gibi hazır kütüphanelerin modül ismi. interface kod bloğunda yazılacak tanımlar için gerekli modüllerin ismi


implemetation
//interface bloğunda tanımlı fonksiyon, prosedür ve sınıfların kod blokları burada bulunur. Ayrıca gerek duyulursa ek olarak başka prosedür, fonksiyon ve sınıflar da eklenebilir

uses ...://interface bloğunda yazılmamış ama implemetation bloğu için lazım olan modüllerin isimlerinin listesi


end.//modülün sonu
yukarıdaki örnekten önce tanımlanan IsWOW64 fonksiyonunu implementation satırından sonra bir yerde yazın hatta interface bloğunda da tanımlayın, daha sonra lazım olduğu zaman istediğiniz yerde örnekteki gibi kullanabilirsiniz.

Mesela projenizin Unit1.pas dosyasında kodu yazdığınızı var sayarsak!

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
//bileşenler
//formlar
//v.s.
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

function IsWOW64: Boolean;

implementation

{$R *.dfm}

function IsWOW64: Boolean;
type TIsWow64Process = function(Handle: THandle;var Res: BOOL):BOOL;stdcall;
var
  IsWow64Result: BOOL;
  IsWow64Process: TIsWow64Process;
begin
  IsWow64Process := GetProcAddress(GetModuleHandle('kernel32'), 'IsWow64Process');
  if Assigned(IsWow64Process) then begin
    if not IsWow64Process(GetCurrentProcess, IsWow64Result) then
      raise Exception.Create('Geçersiz fonksiyon adresi!...');
    Result := IsWow64Result;
  end else Result := False;
end;

//bileşenler
//formlar
//v.s.

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsWOW64 then begin
    ShowMessage('64 bit Windows x64');
  end else begin
    ShowMessage('32 bit Windows x86');
  end;
end;

end.
Burada önemli nokta, çağıracağınız fonksiyonun daha önceden muhakkak tanımlanmış olması şarttır. Eğer fonksiyonu tanımlamadan önce çağırırsanız, daha sonra tanımlanmış olması bir işe yaramayacaktır. Ayrıca temel bazı meselelerin üzerinde yeteri kadar çalışma yapmanız gerekmektedir. Henüz dört işlemi öğrenmeden denklem çözemezsiniz. Temel konuları iyice yerine oturtmanız gerekmektedir. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla