- Katılım
- 25 May 2018
- Mesajlar
- 1,610
- En iyi yanıt
- 14
- Puanları
- 113
- Konum
- İstanbul
- Web sitesi
- excelarsivi.com
- Ad Soyad
- Murat OSMA
- Office Vers.
- Microsoft 365 TR+EN
@Zeki Gürsoy 'un hazırlamış olduğu makaledir, katkılarından dolayı teşekkür ederiz. 
Ö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

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
2 - EnumNetworkDrives
Bu metot ile bilgisayarınızın bağlı olduğu ağ sürücüleri listelenir.
3 - MapNetworkDrive
Bu metot ile bir ağ sürücüsüne kolayca bağlanılabilir.
4 - RemoveNetworkDrive
Bu metot ile bağlı bir ağ sürücüsünün bağlantısı kesilir.
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.
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.
2 - SpecialFolders
Bu özellik ile sistemin kurulu olduğu sürücüdeki özel klasörlerin yolunu öğrenebilirsiniz.
3 - Popup
Popup metodu ile projelerinizde belirli bir süre (sn) görünüp kaybolan mesaj penceresi görüntülenir.
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)
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.
6 - SendKeys(Run), AppActivate
DOS modunda çalışan bir programa tuş gönderme örneği. (Firebird)
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.
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.
9 - RegDelete
Daha önceden yazdığınız değeri bu metodu kullanarak silebilirsiniz.
10 - CreateShortcut(Dosya)
Programınıza masaüstünde kısa yol yapmak için bu metodu kullanın.
11 - CreateShortcut(URL)
Son olarak masaüstünde forumumuza kısa yol oluşturun.
Ö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

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
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
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
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
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
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
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
-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
-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
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
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
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
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
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
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