wmi etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
wmi etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

6 Eylül 2020 Pazar

Windows Management Instrumentation

Giriş
Windows Management Instrumentation (WMI) teknolojisi ile işletim sistemindeki bir çok bilgiye erişmek mümkün.

PowerShell ile Kullanımı
get-wmiobject ile wmi nesnelerine erişilebilir.
>get-wmiobject Win32_LogicalDisk

C# ile Kullanımı
wmi C# ile de kullanılabiliyor.

Nesneler
Sanırım bir sürü nesne çeşidi var. Şimdiye kadar karşıma çıkanlar şunlar.
  • Win32_DiskDrive
  • Win32_LogicalDisk
  • Win32_MappedLogicalDisk
  • Win32_NetworkAdapterConfiguration
  • Win32_SerialPort
  • Win32_PhysicalMedia
ManagementScope sınıfı
Constructor
Şöyle yaparız.
ManagementScope scope = new ManagementScope();
Başka bir bilgisayara erişmek için şöyle yaparız.
var options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.Default;
options.Impersonation = ImpersonationLevel.Impersonate;
options.EnablePrivileges = true;

scope = new ManagementScope(@"\\" + machine + "\\root\\CIMV2", options);
Connect metoduŞöyle yaparız.
scope.Connect();
ManagementObjectSearcher sınıfı
ManagementObjectSearcher sınıfı yazısına taşıdım

ManagementObjectCollection Sınıfı
Şu satırı dahil ederiz.
using System.Management;
FirstOrDefault metodu
Örnek
Şöyle yaparız
ManagementObject managementObject = moc.FirstOrDefault();
if (managementObject == null) {
  // Handle error (output text or throw exception)
  Console.WriteLine("Could not find a management object!");
} else {
  ...
}
Örnek
Bu sınıfı döngü içinde kullanmak için şöyle yaparız.
ManagementObjectSearcher mSearch;
= new ManagementObjectSearcher("Select * from ...");
ManagementObjectCollection mReturn = mSearch.Get();

foreach (ManagementObject mObj in mReturn)
{
  ...
}

26 Mayıs 2016 Perşembe

ManagementEventWatcher Sınıfı

Giriş
WMI ile bazı olayları izleyebilmemizi sağlar.

Constructor
Şöyle yaparız.
WqlEventQuery query = new WqlEventQuery("...");
ManagementEventWatcher watcher = new ManagementEventWatcher(query);
EventArrived Event
Şöyle yaparız.
// Set up the delegate that will handle the change event.
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
Handler şöyledir.
void HandleEvent(object sender, EventArgs e){...}
Start metodu
Şöyle yaparız.
// Start listening for events.
watcher.Start();

21 Mart 2016 Pazartesi

Ağ Arayüzleri

NetworkInterface sınıfı
NetworkInterface Sınıfı yazısına taşıdım.

MAC Adresini Alma
WMI ile ağ arayüzleri dolaşılır
ManagementObjectSearcher mos = new ManagementObjectSearcher
("select * from Win32_NetworkAdapterConfiguration");
foreach (ManagementObject mo in mos.Get())
{
  string mac = mo["MACAddress"].ToString();
  
}
IP Adresi Atama
Bazen statik bir IP adresi atamak isteriz.WMI kullanılabilir.
private static void SetIP(string ip_address, string subnet_mask)
{
  ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  ManagementObjectCollection objMOC = mc.GetInstances();

  foreach (ManagementObject objMO in objMOC) {
    if ((bool)objMO("IPEnabled")) {
      try {
        ManagementBaseObject setIP = default(ManagementBaseObject);
        ManagementBaseObject newIP = objMO.GetMethodParameters("EnableStatic");

        newIP("IPAddress") = new string[] { ip_address };
        newIP("SubnetMask") = new string[] { subnet_mask };

        setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
      }
      catch (Exception generatedExceptionName) {
        throw;
      }
    }

  }
}
Arayüzün Bağlı Olduğunu AnlamaÖrnek
ConnectionProfile internetCon = GetInternetConnectionProfile();

if (internetConnectionProfile != null)
{
    this.IsInternetAvailable = internetConn.GetNetworkConnectivityLevel() ==
                                         NetworkConnectivityLevel.InternetAccess;

   if (internetConnec.NetworkAdapter.IanaInterfaceType != 71) 
   {
     var isRoaming = internetConnectionProfile.GetConnectionCost().Roaming;

    //user is Low on Data package only send low data.
    var isLowOnData = internetConn.GetConnectionCost().ApproachingDataLimit;

    //User is over limit do not send data
    var isOverDataLimit = internetConn.GetConnectionCost().OverDataLimit;
    IsWifiConnected = true;
  }
  else //Connection is a Wi-Fi connection. Data restrictions are not necessary. 
  {
    IsWifiConnected = true;

  }
}