Makale WScript.Network & WScript.Shell Metot ve Özellikleri

Bu Makale Yararlı Oldu mu?

  • Evet

  • Hayır


Sonuçlar yalnızca oylamadan sonra görülebilir.

Murat OSMA

Yönetici
Site Yöneticisi
Katılım
25 May 2018
Mesajlar
1,307
En iyi yanıt
10
Puanları
113
Konum
İstanbul
Web sitesi
excelarsivi.com
Ad Soyad
Murat OSMA
Office Versiyon
Office 365 TR+EN
@Zeki Gürsoy 'un hazırlamış olduğu makaledir, katkılarından dolayı teşekkür ederiz. (y)

Örneklerde "CreateObject" ile çağırılan "WScript" nesnesinin pek çok yeteneği vardır.
En sık ihtiyaç duyabileceğiniz metot ve özellikleri bu başlıkta topladım.

Ayrıca yazının sonunda arşivlemek isteyebileceğinizi düşündüğüm 27 sayfalık PDF formatında "WScript" dokümanı ekledim. (İngilizce)

Referans dosyası : C:\WINDOWS\System32\wshom.ocx
Başlığı : Windows Script Host Object Model

wshell.png


Bu başlığın içerik konuları:

WScript.Network Nesnesi

Özellikler
-ComputerName
-UserName
-UserDomain

Metotlar
-EnumNetworkDrives
-MapNetworkDrive
-RemoveNetworkDrive
-EnumPrinterConnections
-SetDefaultPrinter


WScript.Shell Nesnesi

Özellikler
-CurrentDirectory
-SpecialFolders
-ProcessID (Exec)
-Status (Exec)

Metotlar
-Popup
-SendKeys
-Run
-Exec
-RegRead
-RegWrite
-RegDelete
-CreateShortcut
-AppActivate

Wscript.Network Nesnesi

1 - ComputerName, UserName, UserDomain
PHP:
Sub Comp_Domain_User()
    Dim Wsh As Object, a As String, b As String, c As String
    Set Wsh = CreateObject("Wscript.Network")
    'Bilgisayar Adı
    a = Wsh.ComputerName
    'Domain Adı
    b = Wsh.UserDomain
    'Kullanıcı Adı
    c = Wsh.UserName
    MsgBox "Bilgisayar Adı :  " & a & Chr(10) & _
       "Domain    Adı :  " & b & Chr(10) & _
       "Kullanıcı   Adı  : " & c
End Sub
2 - EnumNetworkDrives
Bu metot ile bilgisayarınızın bağlı olduğu ağ sürücüleri listelenir.
PHP:
Sub Ag_Surucu_Listele()
    Dim Wsh As Object, a As String, i As Long
    Set Wsh = CreateObject("Wscript.Network")
    'Önce sürücü adı(döngüde çift sayı), sonra paylaşım yolu(tek sayı) düzeniyle listeleniyor.
    'Ör: i = 0 => "Z:",   i = 1 => "\\anemos\SharedDocs"
    For i = 0 To Wsh.EnumNetworkDrives.Count - 1 Step 2
        a = a & "Sürücü Adı: " & Wsh.EnumNetworkDrives(i) & _
        ",  Paylaşım: " & Wsh.EnumNetworkDrives(i + 1) & Chr(10)
    Next i
    MsgBox a
End Sub
3 - MapNetworkDrive
Bu metot ile bir ağ sürücüsüne kolayca bağlanılabilir.
PHP:
Sub Ag_Surucu_Baglan()
    Dim Wsh As Object, ShDrive As String, ShRemote As String, ShFold As String
    Set Wsh = CreateObject("Wscript.Network")
    ShDrive = "Y:"
    ShRemote = "\\anemos"
    ShFold = "SharedDocs"
    Wsh.MapNetworkDrive ShDrive, ShRemote & "\" & ShFold
End Sub
4 - RemoveNetworkDrive
Bu metot ile bağlı bir ağ sürücüsünün bağlantısı kesilir.
PHP:
Sub Comp_Domain_User()
    Dim Wsh As Object
    Set Wsh = CreateObject("Wscript.Network")
    Wsh.RemoveNetworkDrive "Y:"
End Sub
5 - EnumPrinterConnections, SetDefaultPrinter
Aşağıdaki prosedür, listelenen yazıcılardan birinin varsayılan yazıcı olarak atanıp atanmayacağını soran InputBox örneğidir.
PHP:
Sub Yazicilar()
    Dim Wsh As Object, a As String, sor As Byte, i As Byte
    Set Wsh = CreateObject("Wscript.Network")
    'Bilgisayara ait yazıcılar listesi
    a = "Varsayılan yazıcıyı değiştirmek ister misiniz?" & Chr(10) & Chr(10) & _
    "Değiştirmek isterseniz, 'OK' seçmeden önce bu listede görünen yazıcı kodunu yazın." & Chr(10) & Chr(10)
    
    a = a & "Bağlı Yazıcılar..." & Chr(10)
    
    For i = 0 To Wsh.EnumPrinterConnections.Count - 1
        a = a & Chr(10) & i + 1 & "-) " & Wsh.EnumPrinterConnections(i)
    Next
    
    sor = Val(InputBox(a, "Excel", 1))
    
    If sor = False Then Exit Sub
    'Varsayılan yazıcının değişimi
    Wsh.SetDefaultPrinter (Wsh.EnumPrinterConnections(sor - 1))
    MsgBox "Yazıcı değiştirildi.", vbInformation, "Excel"
End Sub


Wscript.Shell Nesnesi

1 - CurrentDirectory
VBScript
içinde bulunduğu dizini bildiren bu özellik, Excel makrolarında “Belgelerim” klasör yolunu döndürür.
PHP:
Sub Belgelerim()
    Dim Wsh As Object, MyDoc As String
    Set Wsh = CreateObject("Wscript.Shell")
    MyDoc = Wsh.CurrentDirectory
    MsgBox MyDoc, vbInformation, "Belgelerim"
End Sub
2 - SpecialFolders
Bu özellik ile sistemin kurulu olduğu sürücüdeki özel klasörlerin yolunu öğrenebilirsiniz.
PHP:
Sub Ozel_Klasorler()
    Dim Wsh As Object, a As String, i As Byte
    Set Wsh = CreateObject("Wscript.Shell")
    With Wsh
        For i = 0 To .SpecialFolders.Count - 1
            a = a & i & "-) " & .SpecialFolders(i) & Chr(10)
        Next i
    End With
    MsgBox a, vbInformation, "::.. Özel Klasörler ..::"
End Sub
3 - Popup
Popup
metodu ile projelerinizde belirli bir süre (sn) görünüp kaybolan mesaj penceresi görüntülenir.
PHP:
Sub Popup_Mesaj()
    Dim WSH As Object
    Set WSH = CreateObject("Wscript.Shell")
    WSH.Popup "Www.ExcelTurkey.Com", 1, "Zeki GÜRSOY", 0
    'Sabit  Değer   Açıklama
    'vbOK     1     OK button
    'vbCancel 2     Cancel button
    'vbAbort  3     Abort button
    'vbRetry  4     Retry button
    'vbIgnore 5     Ignore button
    'vbYes    6     Yes button
    'vbNo     7     No button
End Sub
4 - Run
-Kullanımı esnek bir metottur.
-Hem program hem de tek başına dosya çalıştırabilirsiniz.
-İsminde boşluk bulunan klasör ve dosyalara duyarlıdır. Bu nedenle dizeyi tırnak (“) içine almanız gerekir.
-Çalıştırılacak program veya dosyanın pencere stili ayarlanabilir.
-Prosedüriçinde Run ile çalıştırılan program veya dosya ile istenirse pencere kapanana kadar sonraki kod satırına geçmeden bekletilebilir. (True/False)
-DOS modunda çalışan programlara hatasız tuş gönderebilirsiniz. (SendKeys)
PHP:
Sub Popup_Mesaj()
    Dim Wsh As Object
    Set Wsh = CreateObject("Wscript.Shell")
    Wsh.Run """C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE """ & _
    """C:\Users\user\Desktop\ve-yada fonksiyonların dizi formüllerinde kullanılması.xls""", vbMaximizedFocus, True
    MsgBox "Dosya şimdi açılıyor.", vbInformation
End Sub
5 - Exec, AppActivate, ProcessID, Status
-Daha çok, bir komutu yerine getiren metottur.
-Exec ile dosyaları program belirtmeden çalıştıramazsınız.
-DOS modunda çalışan programları anahtarı (komutlar: -i, -x gibi) ile çalıştırabilirsiniz ve bu programlara tuş gönderemezsiniz. (SendKeys)
-İsminde boşluk bulunan dosya veya klasörlere duyarlı değildir. Tırnak içine almanız gerekmez.
-Windows ortamında çalışan bir programa tuş göndermek istediğinizde, programın ekrana tamamen yüklendiği zamanda tuşlar yollanır.
-Procedure içinde Exec ile çalıştırılan program veya dosya ile istenirse pencere kapanana kadar sonraki kod satırına geçmeden bekletilebilir.
PHP:
Sub Wsh_Exec()
    Dim Wsh As Object
    Set Wsh = CreateObject("Wscript.Shell")
    Set WsExec = Wsh.Exec("Notepad.exe")
    While Not Wsh.AppActivate(WsExec.ProcessID)
        'Program açılana kadar beklet
        DoEvents
    Wend
 
     '*******************************************
     'Programın kapanışını bekleme;
     'Set WsExec = Wsh.Exec("notepad")
     '    Do While WsExec.Status = 0
     '        '"0" çalışan, "1" kapanan programın durumunu ifade eder.
     '        'Program kapanana kadar beklet
     '         DoEvents
     '    Loop
     'MsgBox "Notepad, şimdi kapandı.", vbInformation
     '*********************************************
    
    Wsh.SendKeys "Www.ExcelTurkey.Com"
End Sub
6 - SendKeys(Run), AppActivate
DOS modunda çalışan bir programa tuş gönderme örneği. (Firebird)
PHP:
Sub Tus_Gonder()
    Dim Wsh As Object
    Set Wsh = CreateObject("Wscript.Shell")
    Wsh.Run """C:\Program Files\Firebird\Firebird_2_0\bin\isql.exe""", vbMinimizedNoFocus
    Do While WshShell.AppActivate("isql.exe") = False
        'Program görünene kadar beklet...
        DoEvents
    Loop
     'Yeni bir veritabanı oluşturmaya yarayan SQL tuşlarının gönderimi.
    With WshShell
        .SendKeys _
            "CREATE DATABASE 'C:\Test.fdb' USER 'SYSDBA' PASSWORD 'masterkey';" & vbCrLf
        .SendKeys _
            "EXIT;" & vbCrLf
    End With
    MsgBox "Veritabanı oluşturuldu.", vbInformation
End Sub
7 - RegRead
Bu metot ile Registry’ den değer okuyabilirsiniz.
Kaynak: Regedit Yardım

'Veri türü Açıklama
'REG_BINARY = İşlenmemiş ikili veri. Donanım bileşeni bilgilerinin çoğu ikili veri olarak saklanır ve Kayıt Defteri Düzenleyicisi'nde onaltılık biçimde görüntülenir.
'REG_DWORD = 4 bayt uzunluğunda bir sayıyla gösterilen veriler. Aygıt sürücüleri ve hizmetler için kullanılan parametrelerin çoğu bu türdedir ve Kayıt Defteri Düzenleyicisi'nde ikili, onaltılı veya onlu biçimde görüntülenir.
'REG_EXPAND_SZ = Değişken uzunluklu veri dizesi. Bu veri türü, bir program veya hizmet veriyi kullandığında çözülen değişkenleri içerir.
'REG_MULTI_SZ = Çoklu dize. Kullanıcıların okuyabileceği bir biçimde listeleri veya çok sayıda değerleri olan değerler genellikle bu türdendir. Girişler birbirinden boşluk, virgül veya başka işaretlerle ayrılmıştır.
'REG_SZ = Sabit uzunluklu metin dizesi.
'REG_FULL_RESOURCE_DESCRIPTOR = Bir donanım bileşeninin veya sürücünün kaynak listesini saklamak için tasarlanmış iç içe diziler serisidir.
PHP:
Sub Reg_Oku()
    Dim Wsh As Object, Reg_Deger As Variant
    Set Wsh = CreateObject("Wscript.Shell")
    Reg_Deger = Wsh.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Notepad\lfCharSet")
    MsgBox Reg_Deger, vbInformation, "Excel"
    'HKEY_CURRENT_USER   = HKCU
    'HKEY_LOCAL_MACHINE  = HKLM
    'HKEY_CLASSES_ROOT   = HKCR
    'HKEY_USERS          = HKEY_USERS
    'HKEY_CURRENT_CONFIG = HKEY_CURRENT_CONFIG
End Sub
8 - RegWrite
Registry’ e değer yazmak için kullanılır. Eğer isterseniz hazırladığınız programın ayarlarını da burada saklayabilirsiniz.
PHP:
Sub Reg_Yaz()
    Dim Wsh As Object
    Set Wsh = CreateObject("Wscript.Shell")
    Wsh.RegWrite "HKEY_CURRENT_USER\Zeki\Zeki", "Excel", "REG_SZ"
    MsgBox "Registry' e değer yazıldı.", vbInformation, "Excel"
End Sub
9 - RegDelete
Daha önceden yazdığınız değeri bu metodu kullanarak silebilirsiniz.
PHP:
Sub Reg_Sil()
    Dim Wsh As Object
    Set Wsh = CreateObject("Wscript.Shell")
    'Wsh.RegDelete "HKEY_CURRENT_USER\Zeki\Zeki" ' Değer silme
    Wsh.RegDelete "HKEY_CURRENT_USER\Zeki\" ' Anahtar silme
    MsgBox "Registry' den değer silindi.", vbInformation, "Excel"
End Sub
10 - CreateShortcut(Dosya)
Programınıza masaüstünde kısa yol yapmak için bu metodu kullanın.
PHP:
Sub KisaYol_Dosya()
    Dim Wsh As Object, Desktop As String
    Set Wsh = CreateObject("Wscript.Shell")
    Desktop = Wsh.SpecialFolders("Desktop") & "\"
    Set CShortcut = Wsh.CreateShortcut(Desktop & "Test.lnk")
    With CShortcut
        .TargetPath = "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
        .WindowStyle = 1    'Tam ekran
        'Icon belirtilmezse hedef uygulamanın iconu görünür.
        'Bir Icon dosyası yerine uygulama da gösterilebilir.
        .IconLocation = "D:\Test.ico"
        .Save
    End With
End Sub
11 - CreateShortcut(URL)
Son olarak masaüstünde forumumuza kısa yol oluşturun.
PHP:
Sub KisaYol_URL()
    Dim Wsh As Object, Desktop As String
    Set Wsh = CreateObject("Wscript.Shell")
    Desktop = Wsh.SpecialFolders("Desktop") & "\"
    Set CShortcut = Wsh.CreateShortcut(Desktop & "Test.url")
    With CShortcut
        .TargetPath = "Www.ExcelTurkey.Com"
        .Save
        MsgBox "'" & .FullName & "' oluşturuldu.", vbInformation
    End With
End Sub
 

Ekli dosyalar

  • WSHReferenceGuide.pdf
    62 KB · Görüntüleme: 3

l3oomerangg

Yeni Üye
Katılım
28 Ağu 2018
Mesajlar
14
En iyi yanıt
0
Puanları
3
Yaş
42
Konum
Sultangazi - İSTANBUL
Ad Soyad
Fatih Yanartaş
Zeki bey bu makale için çok çok teşekkür ederim. Çok değerli bir makale olduğunu düşünüyorum. Özellikle Wscript.Shell metodunun "Run" özelliği VBA'nın standart Shell özelliğine göre oldukça faydalı. Diğer özellikleri de inşallah en kısa zamanda inceleyeceğim. Saygılar...
 
Moderatör tarafında düzenlendi:

ozkansabanci

Excel VBA Developer
Uzman
Katılım
28 May 2018
Mesajlar
212
En iyi yanıt
6
Puanları
28
Yaş
35
Konum
İstanbul
Web sitesi
analistadam.com
Ad Soyad
Özkan Sabancı
Office Versiyon
Microsoft 365 Apps for enterprise TR
Sub Popup_Mesaj() Dim Wsh As Object Set Wsh = CreateObject("Wscript.Shell") Wsh.Run """C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE """ & _ """C:\Users\user\Desktop\ve-yada fonksiyonların dizi formüllerinde kullanılması.xls""", vbMaximizedFocus, True MsgBox "Dosya şimdi açılıyor.", vbInformation End Sub

Bu kodu çalıştıramadım. Kütüphaneyi ekledim ama aşağıdaki gibi hata veriyor.
1536591116596.png
 

askm

Yeni Üye
Katılım
19 Haz 2018
Mesajlar
9
En iyi yanıt
0
Puanları
3
Yaş
40
Konum
Kayseri
Officenin çalışma yerini kontrol edin. Versiyon kaynaklı değişiklik olabilir. Aynı hatayı bende de veriyordu. Office 2016 da root klasörü yok.
Kod:
Wsh.Run """C:\Program Files\Microsoft Office\Office16\EXCEL.EXE """ & _
 

ozkansabanci

Excel VBA Developer
Uzman
Katılım
28 May 2018
Mesajlar
212
En iyi yanıt
6
Puanları
28
Yaş
35
Konum
İstanbul
Web sitesi
analistadam.com
Ad Soyad
Özkan Sabancı
Office Versiyon
Microsoft 365 Apps for enterprise TR
askm haklıymışsınız dosya yolunda sorun varmış. Bu arada bende de 2016 var ama root klasörü var bende.

Teşekkürler

PHP:
C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE
 

askm

Yeni Üye
Katılım
19 Haz 2018
Mesajlar
9
En iyi yanıt
0
Puanları
3
Yaş
40
Konum
Kayseri
Sanırım offıce sürümü (32-64) ve işletim sistemine göre yol değişiyor. Bende Windows10 ve offıce 2016 64 bit var. Belirttiğim adresten çalıştı.
 
Üst Alt