Bilgisayar Adını Öğren 2 - Microsoft Excel


Excel VBA üzerinde kullanılan API’lerden faydalanarak kullandığımız bilgisayarın ismini öğrenmeye çalışalım.

Kod

Öncelikle kullandığım excel versiyonu için (Microsoft Excel 2007 – 32 bit) kodu görelim. Kodun sade şekli anlaşılması için faydalı olabilir.


Option Explicit

Private Declare Function bilgisayarIsminiOgren Lib "kernel32" _
    Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub BilgisayarIsminiMesajOlarakGoster()
    Dim bilgisayarAdi As String * 256
    
    Call bilgisayarIsminiOgren(bilgisayarAdi, 256)
    
    MsgBox Left(bilgisayarAdi, InStr(1, bilgisayarAdi, Chr(0)) - 1)
End Sub

Gel gelelim bu fonksiyon deklarasyonunu 64 bit için biraz değiştirmek gerekiyor. Şimdi de hem excel hem de VBA sürümleri için dinamik olarak kullanılabilecek deklarasyon ile bu kodu görelim.


Option Explicit

'--------------------------------------------------
'Deklarasyon Kısmı
'--------------------------------------------------
#If VBA7 Then
     #If Win64 Then
        Private Declare PtrSafe Function bilgisayarIsminiOgren Lib "kernel32" Alias _
            "GetComputerNameA" (ByVal lpBuffer As String, nSize As LongPtr)
     #Else
        Private Declare Function bilgisayarIsminiOgren Lib "kernel32" _
          Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
     #End If
#Else
    Private Declare Function bilgisayarIsminiOgren Lib "kernel32" _
        Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

'--------------------------------------------------
'Kod Ve Kullanım Kısmı
'--------------------------------------------------
Sub BilgisayarIsminiMesajOlarakGoster()
    Dim bilgisayarAdi As String * 256
    
    Call bilgisayarIsminiOgren(bilgisayarAdi, 256)
    
    MsgBox Left(bilgisayarAdi, InStr(1, bilgisayarAdi, Chr(0)) - 1)
End Sub

Kod (Açıklamalı)


Option Explicit

'--------------------------------------------------
'Hash ile if (#if) kabaca şu işe yarıyor:
'Biz yaptığımız tanımlamaları derleme anına göre
'seçmek istiyoruz ve bu tarz bir tanımlamayı
'yapmada bu if işimize yarıyor.
'
'Burada kullanılan excel sürümünün içine
'gömülü VBA'nın sürümüne göre işlem yapacağız.
'--------------------------------------------------
#If VBA7 Then
     
      '--------------------------------------------------
      'Eğer kullandığınız excel 64 bit ise bu kısım çalışacak.
      'Eğer 32 bit excel kullanıyorsanız aşağıdaki fonksiyon
      'komple kırmızı renk olacak.
      '--------------------------------------------------
      #If Win64 Then
        Private Declare PtrSafe Function bilgisayarIsminiOgren Lib "kernel32" Alias _
            "GetComputerNameA" (ByVal lpBuffer As String, nSize As LongPtr)
        
     #Else
        
        '32 bit excel için fonksiyon deklarasyonu yapıyoruz.
        Private Declare Function bilgisayarIsminiOgren Lib "kernel32" _
          Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
          
     #End If

#Else

    '--------------------------------------------------
    'Eğer VBA sürümü 6 ve daha eski sürümler ise
    'direkt aşağıdaki deklarasyonu kullan.
     '--------------------------------------------------
     Private Declare Function bilgisayarIsminiOgren Lib "kernel32" _
        Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

Sub BilgisayarIsminiMesajOlarakGoster()
    
    '--------------------------------------------------
    'Bilgisayar adını atayacağımız değişkeni 256 
    'karakter kapasiteli olacak şekilde ayarladık.
    '
    'Bunu yapmamızın nedeni deklare ettiğimiz fonksiyon
    'ile alakalı. Eğer kapasitesini belirtmeseydik
    'hata verecekti.
    '
    'Alternatif olarak şu da yapılabilirdi:
    'Dim bilgisayarAdi As String
    'bilgisayarAdi = Space(100)
    '
    'String tanımlama yaptık ama 100 boşluk
    'ekleyerek bir nevi kapasitesini belirtmiş olduk.
    Dim bilgisayarAdi As String * 256
    
    'Yukarıda deklarasyonunu yaptığımız fonksiyonun
    'parametrelerini girdik ve çağırdık.
    '
    'Şimdi ikinci 256 sayısı nereden geldi, onu da
    '(anladığım kadarıyla) açıklayayım.
    'İlk parametre ile kapasiteyi ikinci parametreyle
    'boyutu belirliyoruz.
    '
    'Boyut da şu şekilde özetlenebilir:
    'Biz 256 karakter kapasiteli (kapasiteyi biz verdik)
    'string değişkene kaç karakterlik atama yapılmasını
    'istediğimizi belirliyoruz. Dikkat edilmesi gereken
    'nokta da şu: Bu sayı bilgisayar isminden en az
    'bir fazla olmalı ki sonuç olarak
    'boş bir şey çıkmasın,
    'bilgisayar ismi çıkabilsin.
    '
    '256 karakter kapasiteli bir değişkende boyut
    'olarak da 256 girdik, başka sayı da girebilirdik.
    'Çok da sıkıntı değil. Ama bilgisayar isminin
    '256 karakterden düşük olması çok yüksek bir
    'ihtimal olduğundan bilgisayar ismini rahatlıkla
    'alabiliyoruz.
    '--------------------------------------------------
    Call bilgisayarIsminiOgren(bilgisayarAdi, 256)
    
    '--------------------------------------------------
    'Bilgisayar ismini mesaj olarak göster.
    '--------------------------------------------------
    MsgBox Left(bilgisayarAdi, InStr(1, bilgisayarAdi, Chr(0)) - 1)
End Sub

Yararlanılan Kaynaklar
Etiketler
microsoft excel