Eternal Eternity ― Gelişmiş Windows Kontrolü

Eratronos

Ar-Ge Ekibi Asistanı
8 Kas 2021
169
11
93
(LPSTR)"dxeiz.exe";
Ba-l-ks-z-2.png



Ba-l-ks-z-1.png
Programın ismi: DxeiZ - Eternal Eternity
Programın sürümü: 1.1
Kullanılan programlama dili: C#
Programın ve kaynak kodunun adresi: Bana Ait.
Sistem Gereksinimleri: Microsoft .Net Framework 4.8.1



Eternal Eternity ― Gelişmiş Windows Kontrolü

En son açmış olduğum "C#'da WinAPI'nin Kullanımı" isimli konuda belirtmiş olduğum konuyu sizinle paylaşıyorum. Bu proje de bilgisayarınız özelliklerinizi göre bilir ve bilgisayarınızı kontrol edebilirsiniz. Bu proje tamamen WinAPI kullanarak yazılmıştır, tek bir üçüncü parti var oda tasarım için FontAwsome'dur.
İlk olarak proje 2(iki) kısma ayrılıyor. Bunlardan birincisi sisteminiz hakkında bilgi almanızı sağlar, ikinci kısımda ise bilgisayarınızı yönete bileceğiniz bazı özellikler barındırıyor. O zaman yazılım kısmının anlatımına geçelim.



8d54745e-d50a-4d39-ae67-ebee1dd7f4ad.jpg

Sistem Bilgileri - Birinci Kısım:
Burada çok fazla kod barınmamaktır, ancak konuya talep ve istek gelirse projeyi geliştirmeyi düşünüyorum. İlk olarak gerekli grup öğeleri ve label'ları ekliyoruz.
  • İşletim Sistemi,
  • CPU Bilgileri,
  • RAM Bilgileri,
  • Ana kart Bilgileri,
  • Grafik kartı Bilgileri,
  • Hafıza Hakkında Bilgi,
  • Ses Sürücüleri Hakkında Bilgi,
  • BIOS Hakkında Bilgi.
Ardından kodlama kısmına geçiyoruz:
C#:
using EternalEternity;
using EternalEternity.Addons;
using System;
using System.Windows.Forms;
C#:
public Main()
{
    InitializeComponent();

    CPUInfo cpuInfo = new CPUInfo();
    RAMInfo ramInfo = new RAMInfo();
    MotherboardInfo motherboardInfo = new MotherboardInfo();
    GPUInfo gpuInfo = new GPUInfo();
    StorageInfo storageInfo = new StorageInfo();
    AudioInfo audioInfo = new AudioInfo();
    BIOSInfo biosInfo = new BIOSInfo();

    #region İşletim sistemi bilgisi
        string sysType = Environment.Is64BitOperatingSystem ? "64-bit" : "32-bit";
    getOS.Text = $"{OS.GetOS()} {sysType}";
    #endregion
        #region CPU bilgisi
        CPU cpu = cpuInfo.CPUs.FirstOrDefault();
    if (cpu != null)
    {
        getCPU.Text = $"{cpu.Name} (Çekirdekler: {cpu.Cores}, Mantıksal İşlemciler: {cpu.LogicalCpus})";
    }
    #endregion
        #region RAM bilgisi
        StringBuilder ramText = new StringBuilder();
    foreach (RAM ram in ramInfo.RAMs)
    {
        ramText.AppendLine($"{ram.Manufacturer} {ram.Capacity}@{ram.Speed}MHz");
    }
    getRAM.Text = ramText.ToString();
    #endregion
        #region Anakart bilgisi
        Motherboard motherboard = motherboardInfo.Boards.FirstOrDefault();
    if (motherboard != null)
    {
        getMotherboard.Text = motherboard.Manufacturer;
    }
    #endregion
        #region GPU bilgisi
        StringBuilder gpuText = new StringBuilder();
    foreach (GPU gpu in gpuInfo.GPUs)
    {
        gpuText.AppendLine($"{gpu.Name} ({gpu.Memory})");
    }
    getGPU.Text = gpuText.ToString();
    #endregion
        #region Depolama bilgisi
        StringBuilder storageText = new StringBuilder();
    foreach (Disk disk in storageInfo.Disks)
    {
        if (disk.Capacity.Bytes != 0)
        {
            storageText.AppendLine($"{disk.Model} ({disk.Capacity})");
        }
    }
    getStorage.Text = storageText.ToString();
    #endregion
        #region BIOS bilgisi
        getBIOS.Text = biosInfo != null ? $"{biosInfo.Manufacturer} {biosInfo.Name}" : "BIOS tespit edilemedi";
    #endregion
        #region Ses cihazı bilgisi
        StringBuilder audioText = new StringBuilder();
    foreach (AudioDevice device in audioInfo.AudioDevices)
    {
        audioText.AppendLine(device.ProductName);
    }
    getAudio.Text = audioText.ToString();
    #endregion
    }

private void systemControlBtn_Click(object sender, EventArgs e) { Hide(); new System_Management().Show(); }


45590b52-833d-4761-bfeb-7d53d56c1256.jpg


Bilgisayarı Yönet - İkinci Kısım:
Evet kodumuzun esas kısmıdır çünkü burada, WinAPI en çok kullanıldığı kısımdır. Özellikleri:
  • Ses Kontrol Paneli:
  1. Ses aç: Eğer bilgisayarınız sessiz mod da ise sesli moda geçer.
  2. Ses kapat: Bilgisayarınızı sessiz moda geçirir.
  3. Ses artır: Bilgisayarın sesini +2 şekline artırır.
  4. Ses azalt: Bilgisayarın sesini -2 şeklinde azaltır.
  • DVD Sürücü Paneli:
  1. DVD aç: Bilgisayarınızın DVD kapısını açar.
  2. DVD kapat: Bilgisayarınızın DVD kapısını kapatır.
  • Mesaj Görüntüleme Paneli:
  1. Mesaj kutusuna yazdığınız metini size görüntüler.
  • Çöp Kutusu Paneli:
  1. Çöp kutusunda eğer öğeleriniz var ise bunları temizler.
  • HDD Durum Paneli:
  1. Üst kısımda gördüğünüz ilerleme kutusu, sizin belleğiniz kullanılma yüzdesini gösterir.
  • Şarj Durum Paneli:
  1. Üst kısımda gördüğünüz ilerleme kutusu, sizin bilgisayarınızın şarj yüzdesini gösterir.
C#:
using System.Runtime.InteropServices;
using System;
using System.Windows.Forms;
using System.Text;
using DxSystemControl;
C#:
#region Main
public System_Management() => InitializeComponent();
private void System_Management_FormClosed(object sender, FormClosedEventArgs e) => Application.Exit();
private void System_Management_Load(object sender, EventArgs e) => timer1.Start();
private void timer1_Tick(object sender, EventArgs e)
{
    UpdateMemoryInfo();
    UpdatePowerInfo();
}
private string GetFormattedSize(ulong size) => $"{size / 1024.0 / 1024.0 / 1024.0:F2} GB";
private void systemInfoBtn_Click(object sender, EventArgs e) { Hide(); new Main().Show(); }
#endregion
C#:
#region Audio Control
[DllImport("user32")]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private const int WM_APPCOMMAND = 0x319;
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;


private void VolumeMuteOn()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
    SendAppCommand(APPCOMMAND_VOLUME_MUTE);
}

private void VolumeMuteOff()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
}

private void VolumeUp()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
}

private void VolumeDown()
{
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
}

private void SendAppCommand(int nCommand)
{
    IntPtr hWnd = this.Handle;
    SendMessage(hWnd, WM_APPCOMMAND, hWnd, (IntPtr)nCommand);
}

private void volumeOn_Click(object sender, EventArgs e)
{
    VolumeMuteOff();
}

private void volumeOff_Click(object sender, EventArgs e)
{
    VolumeMuteOn();
}

private void volumeAdd_Click(object sender, EventArgs e)
{
    VolumeUp();
}

private void volumeDell_Click(object sender, EventArgs e)
{
    VolumeDown();
}
#endregion
C#:
#region DVD Control
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
public static extern int dvdDoorOpen(string icerik, StringBuilder durum, int deger, IntPtr neKadar);

[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
public static extern int dvdDoorClose(string icerik, StringBuilder durum, int deger, IntPtr neKadar);

private void dvdOpen_Click(object sender, EventArgs e)
{
    dvdDoorOpen("Set cdaudio door open wait ", null, 0, IntPtr.Zero);
}

private void dvdClose_Click(object sender, EventArgs e)
{
    dvdDoorOpen("Set cdaudio door Closed wait ", null, 0, IntPtr.Zero);
}
#endregion
C#:
#region MessageBox Control
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);


private void msgBox_Click(object sender, EventArgs e)
{
    MessageBox((IntPtr)0, siticoneTextBox1.Text, "Eternal Eternity | Message Box", 0);
}
#endregion
C#:
#region Empty Recycle Control
[DllImport("Shell32.dll")]
static extern int SHEmptyRecycleBin(IntPtr hWnd, string pszRootPath, uint dwFlags);

private void ıconButton2_Click(object sender, EventArgs e)
{
    const uint SHERB_NOCONFIRMATION = 0x00000000;
    SHEmptyRecycleBin(IntPtr.Zero, null, SHERB_NOCONFIRMATION);
}
#endregion
C#:
#region HDD Status
        [StructLayout(LayoutKind.Sequential)]
        public struct MEMORYSTATUSEX
        {
            public uint dwLength;
            public uint dwMemoryLoad;
            public ulong ullTotalPhys;
            public ulong ullAvailPhys;
            public ulong ullTotalPageFile;
            public ulong ullAvailPageFile;
            public ulong ullTotalVirtual;
            public ulong ullAvailVirtual;
            public ulong ullAvailExtendedVirtual;

            public MEMORYSTATUSEX(uint dummy)
            {
                dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
                dwMemoryLoad = 0;
                ullTotalPhys = 0;
                ullAvailPhys = 0;
                ullTotalPageFile = 0;
                ullAvailPageFile = 0;
                ullTotalVirtual = 0;
                ullAvailVirtual = 0;
                ullAvailExtendedVirtual = 0;
            }
        }

[DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);

private void UpdateMemoryInfo()
{
    MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX(0);
    if (GlobalMemoryStatusEx(ref memStatus))
    {
        siticoneProgressBar1.Value = (int)memStatus.dwMemoryLoad;
        siticoneLabel1.Text = $"{memStatus.dwMemoryLoad}%";

        siticoneTextBox2.Text = $"Toplam bellek miktarı: {GetFormattedSize(memStatus.ullTotalPhys)}";
        siticoneTextBox3.Text = $"Boş bellek miktarı: {GetFormattedSize(memStatus.ullAvailPhys)}";
        siticoneTextBox4.Text = $"Toplam page file miktarı: {GetFormattedSize(memStatus.ullTotalPageFile)}";
        siticoneTextBox5.Text = $"Boş page file miktarı: {GetFormattedSize(memStatus.ullAvailPageFile)}";
        siticoneTextBox6.Text = $"Toplam sanal bellek miktarı: {GetFormattedSize(memStatus.ullTotalVirtual)}";
        siticoneTextBox7.Text = $"Boş sanal bellek miktarı: {GetFormattedSize(memStatus.ullAvailVirtual)}";
    }
}
#endregion
C#:
#region Batery Status
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_POWER_STATUS
{
    public byte ACLineStatus;
    public byte BatteryFlag;
    public byte BatteryLifePercent;
    public byte Reserved1;
    public uint BatteryLifeTime;
    public uint BatteryFullLifeTime;
}

[DllImport("kernel32.dll")]
public static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS status);

static string GetBatteryStatus(byte batteryFlag)
{
    switch (batteryFlag)
    {
        case 1:
            return "Şarj Ediliyor";
        case 2:
            return "Deşarj Ediliyor";
        case 4:
            return "Şarj Edilmiyor";
        case 8:
            return "Yüksek Gerilim";
        case 128:
            return "Şarj Ediliyor";
        default:
            return "Bilinmeyen Durum";
    }
}

private string secToDate(int seconds)
{
    TimeSpan timeSpan = TimeSpan.FromSeconds(seconds);

    string output = "";
    if (timeSpan.TotalSeconds < 0 && timeSpan.Days == 0 && timeSpan.Hours == 0 && timeSpan.Minutes == 0)
    {
        output = "1000 yıldan fazla";
    }
    else
    {
        if (timeSpan.Days >= 365)
        {
            int years = timeSpan.Days / 365;
            output += years + " yıl, ";
        }

        if (timeSpan.Days % 365 >= 30)
        {
            int months = (timeSpan.Days % 365) / 30;
            output += months + " ay, ";
        }

        if (timeSpan.Days % 30 > 0)
        {
            int days = timeSpan.Days % 30;
            output += days + " gün, ";
        }


        output += timeSpan.Hours + " saat, ";
        output += timeSpan.Minutes + " dakika, ";
        output += timeSpan.Seconds + " saniye";

        output = output.Trim().TrimEnd(',');
    }

    return output;
}
private void UpdatePowerInfo()
{
    SYSTEM_POWER_STATUS status;
    if (GetSystemPowerStatus(out status))
    {
        siticoneProgressBar2.Value = status.BatteryLifePercent;
        siticoneLabel2.Text = $"{status.BatteryLifePercent}%";

        siticoneTextBox13.Text = $"AC Bağlantısı Durumu: {(status.ACLineStatus == 1 ? "Bağlı" : "Bağlı Değil")}";
        siticoneTextBox11.Text = $"Batarya Durumu: {GetBatteryStatus(status.BatteryFlag)}";
        siticoneTextBox9.Text = $"Kalan Pil Ömrü: {secToDate((int)status.BatteryLifeTime)}";
        siticoneTextBox8.Text = $"Tam Pil Ömrü: {secToDate((int)status.BatteryFullLifeTime)}";
    }
}
#endregion


png-divider-lines-transparent-divider-lines-images-868468.png


Eklentiler - Ek Kısım

  • Audio
C#:
public class AudioDevice
{
    public string ProductName { get; set; }
}

public class AudioInfo
{
    public AudioInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice");
            foreach (ManagementObject mo in searcher.Get())
            {
                AudioDevice device = new AudioDevice();
                device.ProductName = Convert.ToString(mo.Properties["ProductName"].Value);

                AudioDevices.Add(device);
            }
        }
        catch { }
    }

    public List<AudioDevice> AudioDevices = new List<AudioDevice>();
}
  • BIOS
C#:
public BIOSInfo()
{
    try
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
        foreach (ManagementObject mo in searcher.Get())
        {
            Name = Convert.ToString(mo.Properties["Name"].Value);
            Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value);
            Version = Convert.ToString(mo.Properties["Version"].Value);
            BuildNumber = Convert.ToString(mo.Properties["BuildNumber"].Value);
            //ReleaseDate = DateTime.Parse(mo.Properties["ReleaseDate"].Value.ToString());
        }
    }
    catch { }
}

public string Name { get; set; }
public string Manufacturer { get; set; }
public string Version { get; set; }
public string BuildNumber { get; set; }
//public DateTime ReleaseDate { get; set; }
  • ByteSize
https://raw.githubusercontent.com/DxeiZ/EternalEternity/main/Addons/ByteSize.cs
  • CPU
C#:
public class CPU
{
    public string Name { get; set; }
    public UInt32 Cores { get; set; }
    public UInt32 LogicalCpus { get; set; }
}

public class CPUInfo
{
    public CPUInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
            foreach (ManagementObject mo in searcher.Get())
            {
                CPU cpu = new CPU();

                cpu.Name = Convert.ToString(mo.Properties["Name"].Value);
                cpu.Cores = Convert.ToUInt32(mo.Properties["NumberOfCores"].Value);
                cpu.LogicalCpus = Convert.ToUInt32(mo.Properties["NumberOfLogicalProcessors"].Value);

                if (string.IsNullOrEmpty(cpu.Name)) cpu.Name = GetCPUNameAlternative();

                CPUs.Add(cpu);
            }
        }
        catch { }
    }

    public List<CPU> CPUs = new List<CPU>();

    private string GetCPUNameAlternative()
    {
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0", false))
        {
            return key.GetValue("ProcessorNameString").ToString();
        }
    }
}
  • GPU
C#:
public class GPU
{
    public string Name { get; set; }
    public ByteSize Memory { get; set; }
}

public class GPUInfo
{
    public GPUInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
            foreach (ManagementObject mo in searcher.Get())
            {
                GPU gpu = new GPU();
                gpu.Name = Convert.ToString(mo.Properties["Name"].Value);
                gpu.Memory = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["AdapterRAM"].Value));

                GPUs.Add(gpu);
            }
        }
        catch { }
    }

    public List<GPU> GPUs = new List<GPU>();
}
  • Motherboard
C#:
public class Motherboard { public string Manufacturer { get; set; } }
public class MotherboardInfo
{
    public MotherboardInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
            foreach (ManagementObject managementObject in searcher.Get())
            {
                Motherboard motherboard = new Motherboard();
                motherboard.Manufacturer = Convert.ToString(managementObject.Properties["Manufacturer"].Value);

                Boards.Add(motherboard);
            }
        }
        catch { }
    }

    public List<Motherboard> Boards = new List<Motherboard>();
}
  • OS
C#:
public static class OS
{
    public static void CopyToClipboard(string text)
    {
        try
        {
            Clipboard.SetText(text);
        }
        catch { }
    }

    public static void GoogleSearch(string term)
    {
        try
        {
            Process.Start("https://google.com/#q=" + term);
        }
        catch { }
    }

    public static string GetOS()
    {
        return (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", "");
    }

    public static string GetBitness()
    {
        string bitness = "";

        if (Environment.Is64BitOperatingSystem)
        {
            bitness = "You are working with 64-bit architecture";
        }
        else
        {
            bitness = "You are working with 32-bit architecture";
        }

        return bitness;
    }
}
  • RAM
C#:
public class RAM
{
    public uint Speed { get; set; }
    public ByteSize Capacity { get; set; }
    public string Manufacturer { get; set; }
}

public class RAMInfo
{
    public RAMInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
            foreach (ManagementObject mo in searcher.Get())
            {
                RAM ram = new RAM();

                ram.Speed = Convert.ToUInt32(mo.Properties["Speed"].Value);
                ram.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["Capacity"].Value));
                ram.Manufacturer = mo.Properties["Manufacturer"].Value?.ToString();

                RAMs.Add(ram);
            }
        }
        catch { }
    }

    public List<RAM> RAMs { get; set; } = new List<RAM>();
}
  • Storage
C#:
public class Disk
{
    public UInt32 BytesPerSector { get; set; }
    public string FirmwareRevision { get; set; }
    public string MediaType { get; set; }
    public string Model { get; set; }
    public ByteSize Capacity { get; set; }
}

public class Volume
{
    public UInt64 BlockSize { get; set; }
    public ByteSize Capacity { get; set; }
    public string Compressed { get; set; }
    public string DriveLetter { get; set; }
    public string DriveType { get; set; }
    public string FileSystem { get; set; }
    public ByteSize FreeSpace { get; set; }
    public ByteSize UsedSpace { get; set; }
    public string Indexing { get; set; }
    public string Label { get; set; }
}

public class StorageInfo
{
    public StorageInfo()
    {
        try
        {
            ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
            foreach (ManagementObject mo2 in searcher2.Get())
            {
                Disk disk = new Disk();

                disk.Model = Convert.ToString(mo2.Properties["Model"].Value);
                disk.BytesPerSector = Convert.ToUInt32(mo2.Properties["BytesPerSector"].Value);
                disk.FirmwareRevision = Convert.ToString(mo2.Properties["FirmwareRevision"].Value);
                disk.MediaType = Convert.ToString(mo2.Properties["MediaType"].Value);
                disk.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo2.Properties["Size"].Value));

                Disks.Add(disk);
            }
        }
        catch { }

        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Volume");
            foreach (ManagementObject mo in searcher.Get())
            {
                Volume volume = new Volume();

                volume.BlockSize = Convert.ToUInt64(mo.Properties["BlockSize"].Value);
                volume.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["Capacity"].Value));
                bool temp = Convert.ToBoolean(mo.Properties["Compressed"].Value);
                volume.Compressed = (temp) ? "Yes" : "No";
                volume.DriveLetter = Convert.ToString(mo.Properties["DriveLetter"].Value);
                UInt32 i = Convert.ToUInt32(mo.Properties["DriveType"].Value);
                volume.DriveType = SanitizeDriveType(i);
                volume.FileSystem = Convert.ToString(mo.Properties["FileSystem"].Value);
                volume.FreeSpace = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["FreeSpace"].Value));
                volume.UsedSpace = volume.Capacity.Subtract(volume.FreeSpace);
                bool temp2 = Convert.ToBoolean(mo.Properties["IndexingEnabled"].Value);
                volume.Indexing = (temp2) ? "Yes" : "No";
                volume.Label = Convert.ToString(mo.Properties["Label"].Value);

                if (i == 2)
                {
                    Removables.Add(volume);
                }
                else if (i == 5)
                {
                    Opticals.Add(volume);
                }
                else
                {
                    Volumes.Add(volume);
                }

            }
        }
        catch { }
    }

    public List<Disk> Disks = new List<Disk>();
    public List<Volume> Volumes = new List<Volume>();
    public List<Volume> Removables = new List<Volume>();
    public List<Volume> Opticals = new List<Volume>();

    private string SanitizeDriveType(UInt32 i)
    {
        string result = string.Empty;

        switch (i)
        {
            case 0:
                result = "Unknown";
                break;
            case 1:
                result = "No Root Directory";
                break;
            case 2:
                result = "Removable Disk";
                break;
            case 3:
                result = "Local Disk";
                break;
            case 4:
                result = "Network Drive";
                break;
            case 5:
                result = "Compact Disk";
                break;
            case 6:
                result = "RAM Disk";
                break;
        }

        return result;
    }
}

png-divider-lines-transparent-divider-lines-images-868468.png


Beni mi Arıyorsun?
Github: @DxeiZ
Kaynak Kodu: DxeiZ/EternalEternity
 
Son düzenleme:

GHOSTJEONSA

Yeni üye
5 May 2020
43
21
Ba-l-ks-z-2.png



Ba-l-ks-z-1.png
Programın ismi: DxeiZ - Eternal Eternity
Programın sürümü: 1.0
Kullanılan programlama dili: C#
Programın ve kaynak kodunun adresi: Bana Ait.
Sistem Gereksinimleri: Microsoft .Net Framework 4.8.1



Eternal Eternity ― Gelişmiş Windows Kontrolü

En son açmış olduğum "C#'da WinAPI'nin Kullanımı" isimli konuda belirtmiş olduğum konuyu sizinle paylaşıyorum. Bu proje de bilgisayarınız özelliklerinizi göre bilir ve bilgisayarınızı kontrol edebilirsiniz. Bu proje tamamen WinAPI kullanarak yazılmıştır, tek bir üçüncü parti var oda tasarım için FontAwsome'dur.
İlk olarak proje 2(iki) kısma ayrılıyor. Bunlardan birincisi sisteminiz hakkında bilgi almanızı sağlar, ikinci kısımda ise bilgisayarınızı yönete bileceğiniz bazı özellikler barındırıyor. O zaman yazılım kısmının anlatımına geçelim.



f721a19a-38ae-4736-a4cf-1b0524c100b0.png

Sistem Bilgileri - Birinci Kısım:
Burada çok fazla kod barınmamaktır, ancak konuya talep ve istek gelirse projeyi geliştirmeyi düşünüyorum. İlk olarak gerekli grup öğeleri ve label'ları ekliyoruz.
  • İşletim Sistemi,
  • CPU Bilgileri,
  • RAM Bilgileri,
  • Ana kart Bilgileri,
  • Grafik kartı Bilgileri,
  • Hafıza Hakkında Bilgi,
  • Ses Sürücüleri Hakkında Bilgi,
  • BIOS Hakkında Bilgi.
Ardından kodlama kısmına geçiyoruz:
C#:
using EternalEternity;
using EternalEternity.Addons;
using System;
using System.Windows.Forms;
C#:
string sysType;
ByteSize temp = new ByteSize();
uint memorySpeed;

public Main()
{
    InitializeComponent();

    if (Environment.Is64BitOperatingSystem) sysType = "64-bit";
    else sysType = "32-bit";
    label1.Text = $"{OS.GetOS()} {sysType}";

    CPUInfo cpuInfo = new CPUInfo();
    RAMInfo ramInfo = new RAMInfo();
    MotherboardInfo motherboardInfo = new MotherboardInfo();
    GPUInfo gpuInfo = new GPUInfo();
    StorageInfo storageInfo = new StorageInfo();
    AudioInfo audioInfo = new AudioInfo();
    BIOSInfo biosInfo = new BIOSInfo();

    foreach (CPU cpu in cpuInfo.CPUs)
    {
        label2.Text = $"{cpu.Name} (Çekirdekler: {cpu.Cores}, Mantıksal İşlemciler: {cpu.LogicalCpus})";
    }

    foreach (RAM ram in ramInfo.Modules)
    {
        temp += ram.Capacity;
        memorySpeed += ram.Speed;
    }
    label3.Text = $"{temp} @ {memorySpeed}Hmz";

    foreach (Motherboard mobo in motherboardInfo.Boards)
    {
        label4.Text = mobo.Manufacturer;
    }

    label5.Text = "";
    foreach (GPU gpu in gpuInfo.GPUs)
    {
        label5.Text += $"{gpu.Name} ({gpu.Memory}){Environment.NewLine}";
    }

    foreach (Disk disk in storageInfo.Disks)
    {
        if (disk.Capacity.ToString() != "b")
        {
            label6.Text = $"{disk.Model} ({disk.Capacity})";
        }
        else
        {
            label6.Text = disk.Model;
        }
    }

    if (biosInfo != null)
    {
        label7.Text = $"{biosInfo.Manufacturer} {biosInfo.Name}";
    }
    else
    {
        label7.Text = $"BIOS tespit edilemedi";
    }

    foreach (AudioDevice device in audioInfo.AudioDevices)
    {
        label8.Text = device.ProductName;
    }
}


7d74cbbf-018e-465f-bb5a-ca4cda0e66ab.jpg


Bilgisayarı Yönet - İkinci Kısım:
Evet kodumuzun esas kısmıdır çünkü burada, WinAPI en çok kullanıldığı kısımdır. Özellikleri:
  • Ses Kontrol Paneli:
  1. Ses aç: Eğer bilgisayarınız sessiz mod da ise sesli moda geçer.
  2. Ses kapat: Bilgisayarınızı sessiz moda geçirir.
  3. Ses artır: Bilgisayarın sesini +2 şekline artırır.
  4. Ses azalt: Bilgisayarın sesini -2 şeklinde azaltır.
  • DVD Sürücü Paneli:
  1. DVD aç: Bilgisayarınızın DVD kapısını açar.
  2. DVD kapat: Bilgisayarınızın DVD kapısını kapatır.
  • Mesaj Görüntüleme Paneli:
  1. Mesaj kutusuna yazdığınız metini size görüntüler.
  • Çöp Kutusu Paneli:
  1. Çöp kutusunda eğer öğeleriniz var ise bunları temizler.
  • HDD Durum Paneli:
  1. Üst kısımda gördüğünüz ilerleme kutusu, sizin belleğiniz kullanılma yüzdesini gösterir.
  • Şarj Durum Paneli:
  1. Üst kısımda gördüğünüz ilerleme kutusu, sizin bilgisayarınızın şarj yüzdesini gösterir.
C#:
using System.Runtime.InteropServices;
using System;
using System.Windows.Forms;
using System.Text;
using DxSystemControl;
C#:
#region Main
public System_Management() => InitializeComponent();
private void System_Management_FormClosed(object sender, FormClosedEventArgs e) => Application.Exit();
private void System_Management_Load(object sender, EventArgs e) => timer1.Start();
private void timer1_Tick(object sender, EventArgs e)
{
    MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX(0);
    if (GlobalMemoryStatusEx(ref memStatus))
    {
        siticoneProgressBar1.Value = (int)memStatus.dwMemoryLoad;
        siticoneLabel1.Text = memStatus.dwMemoryLoad.ToString() + "%";
        siticoneTextBox2.Text = $"Toplam bellek miktarı: {memStatus.ullTotalPhys / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox3.Text = $"Boş bellek miktarı: {memStatus.ullAvailPhys / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox4.Text = $"Toplam page file miktarı: {memStatus.ullTotalPageFile / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox5.Text = $"Boş page file miktarı: {memStatus.ullAvailPageFile / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox6.Text = $"Toplam sanal bellek miktarı: {memStatus.ullTotalVirtual / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox7.Text = $"Boş sanal bellek miktarı: {memStatus.ullAvailVirtual / 1024.0 / 1024.0 / 1024.0:F2} GB";
    }

    SYSTEM_POWER_STATUS status;
    if (GetSystemPowerStatus(out status))
    {
        siticoneProgressBar2.Value = status.BatteryLifePercent;
        siticoneLabel2.Text = status.BatteryLifePercent.ToString() + "%";
        siticoneTextBox13.Text = $"AC Bağlantısı Durumu: " + (status.ACLineStatus == 1 ? "Bağlı" : "Bağlı Değil");
        siticoneTextBox11.Text = $"Batarya Durumu: " + GetBatteryStatus(status.BatteryFlag);
        siticoneTextBox9.Text = $"Kalan Pil Ömrü: " + secToDate((int)status.BatteryLifeTime);
        siticoneTextBox8.Text = $"Tam Pil Ömrü: " + secToDate((int)status.BatteryFullLifeTime);
    }
}
private void ıconButton3_Click(object sender, EventArgs e) { Hide(); new Main().Show(); }
#endregion
C#:
#region Audio Control
[DllImport("user32")][/FONT][/FONT]
 [FONT=tahoma][FONT=tahoma]private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private const int WM_APPCOMMAND = 0x319;
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;


private void VolumeMuteOn()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
    SendAppCommand(APPCOMMAND_VOLUME_MUTE);
}

private void VolumeMuteOff()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
}

private void VolumeUp()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
}

private void VolumeDown()
{
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
}

private void SendAppCommand(int nCommand)
{
    IntPtr hWnd = this.Handle;
    SendMessage(hWnd, WM_APPCOMMAND, hWnd, (IntPtr)nCommand);
}

private void volumeOn_Click(object sender, EventArgs e)
{
    VolumeMuteOff();
}

private void volumeOff_Click(object sender, EventArgs e)
{
    VolumeMuteOn();
}

private void volumeAdd_Click(object sender, EventArgs e)
{
    VolumeUp();
}

private void volumeDell_Click(object sender, EventArgs e)
{
    VolumeDown();
}
#endregion
C#:
#region DVD Control
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
public static extern int dvdDoorOpen(string icerik, StringBuilder durum, int deger, IntPtr neKadar);

[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
public static extern int dvdDoorClose(string icerik, StringBuilder durum, int deger, IntPtr neKadar);


private void dvdOpen_Click(object sender, EventArgs e)
{
    dvdDoorOpen("Set cdaudio door open wait ", null, 0, IntPtr.Zero);
}

private void dvdClose_Click(object sender, EventArgs e)
{
    dvdDoorOpen("Set cdaudio door Closed wait ", null, 0, IntPtr.Zero);
}
#endregion
C#:
#region MessageBox Control
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);


private void msgBox_Click(object sender, EventArgs e)
{
    MessageBox((IntPtr)0, siticoneTextBox1.Text, "Eternal Eternity | Message Box", 0);
}
#endregion
C#:
#region Empty Recycle Control
[DllImport("Shell32.dll")]
static extern int SHEmptyRecycleBin(IntPtr hWnd, string pszRootPath, uint dwFlags);

private void ıconButton2_Click(object sender, EventArgs e)
{
    const uint SHERB_NOCONFIRMATION = 0x00000000;
    SHEmptyRecycleBin(IntPtr.Zero, null, SHERB_NOCONFIRMATION);
}
#endregion
C#:
#region HDD Status
[StructLayout(LayoutKind.Sequential)]
public struct MEMORYSTATUSEX
{
    public uint dwLength;
    public uint dwMemoryLoad;
    public ulong ullTotalPhys;
    public ulong ullAvailPhys;
    public ulong ullTotalPageFile;
    public ulong ullAvailPageFile;
    public ulong ullTotalVirtual;
    public ulong ullAvailVirtual;
    public ulong ullAvailExtendedVirtual;

    public MEMORYSTATUSEX(uint dummy)
    {
        dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
        dwMemoryLoad = 0;
        ullTotalPhys = 0;
        ullAvailPhys = 0;
        ullTotalPageFile = 0;
        ullAvailPageFile = 0;
        ullTotalVirtual = 0;
        ullAvailVirtual = 0;
        ullAvailExtendedVirtual = 0;
    }
}

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
#endregion
C#:
#region Batery Status
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_POWER_STATUS
{
    public byte ACLineStatus;
    public byte BatteryFlag;
    public byte BatteryLifePercent;
    public byte Reserved1;
    public uint BatteryLifeTime;
    public uint BatteryFullLifeTime;
}

[DllImport("kernel32.dll")]
public static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS status);

static string GetBatteryStatus(byte batteryFlag)
{
    switch (batteryFlag)
    {
        case 1:
            return "Şarj Ediliyor";
        case 2:
            return "Deşarj Ediliyor";
        case 4:
            return "Şarj Edilmiyor";
        case 8:
            return "Yüksek Gerilim";
        case 128:
            return "Şarj Ediliyor";
        default:
            return "Bilinmeyen Durum";
    }
}

private string secToDate(int seconds)
{
    TimeSpan timeSpan = TimeSpan.FromSeconds(seconds);

    string output = "";
    if (timeSpan.TotalSeconds < 0 && timeSpan.Days == 0 && timeSpan.Hours == 0 && timeSpan.Minutes == 0)
    {
        output = "1000 yıldan fazla";
    }
    else
    {
        if (timeSpan.Days >= 365)
        {
            int years = timeSpan.Days / 365;
            output += years + " yıl, ";
        }

        if (timeSpan.Days % 365 >= 30)
        {
            int months = (timeSpan.Days % 365) / 30;
            output += months + " ay, ";
        }

        if (timeSpan.Days % 30 > 0)
        {
            int days = timeSpan.Days % 30;
            output += days + " gün, ";
        }


        output += timeSpan.Hours + " saat, ";
        output += timeSpan.Minutes + " dakika, ";
        output += timeSpan.Seconds + " saniye";

        output = output.Trim().TrimEnd(',');
    }

    return output;
}
#endregion


png-divider-lines-transparent-divider-lines-images-868468.png


Eklentiler - Ek Kısım

  • Audio
C#:
public class AudioDevice
{
    public string ProductName { get; set; }
}

public class AudioInfo
{
    public AudioInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice");
            foreach (ManagementObject mo in searcher.Get())
            {
                AudioDevice device = new AudioDevice();
                device.ProductName = Convert.ToString(mo.Properties["ProductName"].Value);

                AudioDevices.Add(device);
            }
        }
        catch { }
    }

    public List<AudioDevice> AudioDevices = new List<AudioDevice>();
}
  • BIOS
C#:
public BIOSInfo()
{
    try
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
        foreach (ManagementObject mo in searcher.Get())
        {
            Name = Convert.ToString(mo.Properties["Name"].Value);
            Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value);
            Version = Convert.ToString(mo.Properties["Version"].Value);
            BuildNumber = Convert.ToString(mo.Properties["BuildNumber"].Value);
            //ReleaseDate = DateTime.Parse(mo.Properties["ReleaseDate"].Value.ToString());
        }
    }
    catch { }
}

public string Name { get; set; }
public string Manufacturer { get; set; }
public string Version { get; set; }
public string BuildNumber { get; set; }
//public DateTime ReleaseDate { get; set; }
  • ByteSize
https://raw.githubusercontent.com/DxeiZ/EternalEternity/main/Addons/ByteSize.cs
  • CPU
C#:
public class CPU
{
    public string Name { get; set; }
    public UInt32 Cores { get; set; }
    public UInt32 LogicalCpus { get; set; }
}

public class CPUInfo
{
    public CPUInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
            foreach (ManagementObject mo in searcher.Get())
            {
                CPU cpu = new CPU();

                cpu.Name = Convert.ToString(mo.Properties["Name"].Value);
                cpu.Cores = Convert.ToUInt32(mo.Properties["NumberOfCores"].Value);
                cpu.LogicalCpus = Convert.ToUInt32(mo.Properties["NumberOfLogicalProcessors"].Value);

                if (string.IsNullOrEmpty(cpu.Name)) cpu.Name = GetCPUNameAlternative();

                CPUs.Add(cpu);
            }
        }
        catch { }
    }

    public List<CPU> CPUs = new List<CPU>();

    private string GetCPUNameAlternative()
    {
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0", false))
        {
            return key.GetValue("ProcessorNameString").ToString();
        }
    }
}
  • GPU
C#:
public class GPU
{
    public string Name { get; set; }
    public ByteSize Memory { get; set; }
}

public class GPUInfo
{
    public GPUInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
            foreach (ManagementObject mo in searcher.Get())
            {
                GPU gpu = new GPU();
                gpu.Name = Convert.ToString(mo.Properties["Name"].Value);
                gpu.Memory = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["AdapterRAM"].Value));

                GPUs.Add(gpu);
            }
        }
        catch { }
    }

    public List<GPU> GPUs = new List<GPU>();
}
  • Motherboard
C#:
public class Motherboard { public string Manufacturer { get; set; } }
public class MotherboardInfo
{
    public MotherboardInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
            foreach (ManagementObject managementObject in searcher.Get())
            {
                Motherboard motherboard = new Motherboard();
                motherboard.Manufacturer = Convert.ToString(managementObject.Properties["Manufacturer"].Value);

                Boards.Add(motherboard);
            }
        }
        catch { }
    }

    public List<Motherboard> Boards = new List<Motherboard>();
}
  • OS
C#:
public static class OS
{
    public static void CopyToClipboard(string text)
    {
        try
        {
            Clipboard.SetText(text);
        }
        catch { }
    }

    public static void GoogleSearch(string term)
    {
        try
        {
            Process.Start("https://google.com/#q=" + term);
        }
        catch { }
    }

    public static string GetOS()
    {
        return (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", "");
    }

    public static string GetBitness()
    {
        string bitness = "";

        if (Environment.Is64BitOperatingSystem)
        {
            bitness = "You are working with 64-bit architecture";
        }
        else
        {
            bitness = "You are working with 32-bit architecture";
        }

        return bitness;
    }
}
  • RAM
C#:
public class RAM
{
    public ByteSize Capacity { get; set; }
    public UInt32 Speed { get; set; }
}

public class RAMInfo
{
    public RAMInfo()
    {      
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
            foreach (ManagementObject mo in searcher.Get())
            {
                RAM module = new RAM();

                module.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["Capacity"].Value));
                module.Speed = Convert.ToUInt32(mo.Properties["Speed"].Value);

                Modules.Add(module);
            }
        }
        catch { }
    }
    public List<RAM> Modules = new List<RAM>();
}
  • Storage
C#:
public class Disk
{
    public UInt32 BytesPerSector { get; set; }
    public string FirmwareRevision { get; set; }
    public string MediaType { get; set; }
    public string Model { get; set; }
    public ByteSize Capacity { get; set; }
}

public class Volume
{
    public UInt64 BlockSize { get; set; }
    public ByteSize Capacity { get; set; }
    public string Compressed { get; set; }
    public string DriveLetter { get; set; }
    public string DriveType { get; set; }
    public string FileSystem { get; set; }
    public ByteSize FreeSpace { get; set; }
    public ByteSize UsedSpace { get; set; }
    public string Indexing { get; set; }
    public string Label { get; set; }
}

public class StorageInfo
{
    public StorageInfo()
    {
        try
        {
            ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
            foreach (ManagementObject mo2 in searcher2.Get())
            {
                Disk disk = new Disk();

                disk.Model = Convert.ToString(mo2.Properties["Model"].Value);
                disk.BytesPerSector = Convert.ToUInt32(mo2.Properties["BytesPerSector"].Value);
                disk.FirmwareRevision = Convert.ToString(mo2.Properties["FirmwareRevision"].Value);
                disk.MediaType = Convert.ToString(mo2.Properties["MediaType"].Value);
                disk.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo2.Properties["Size"].Value));

                Disks.Add(disk);
            }
        }
        catch { }

        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Volume");
            foreach (ManagementObject mo in searcher.Get())
            {
                Volume volume = new Volume();

                volume.BlockSize = Convert.ToUInt64(mo.Properties["BlockSize"].Value);
                volume.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["Capacity"].Value));
                bool temp = Convert.ToBoolean(mo.Properties["Compressed"].Value);
                volume.Compressed = (temp) ? "Yes" : "No";
                volume.DriveLetter = Convert.ToString(mo.Properties["DriveLetter"].Value);
                UInt32 i = Convert.ToUInt32(mo.Properties["DriveType"].Value);
                volume.DriveType = SanitizeDriveType(i);
                volume.FileSystem = Convert.ToString(mo.Properties["FileSystem"].Value);
                volume.FreeSpace = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["FreeSpace"].Value));
                volume.UsedSpace = volume.Capacity.Subtract(volume.FreeSpace);
                bool temp2 = Convert.ToBoolean(mo.Properties["IndexingEnabled"].Value);
                volume.Indexing = (temp2) ? "Yes" : "No";
                volume.Label = Convert.ToString(mo.Properties["Label"].Value);

                if (i == 2)
                {
                    Removables.Add(volume);
                }
                else if (i == 5)
                {
                    Opticals.Add(volume);
                }
                else
                {
                    Volumes.Add(volume);
                }

            }
        }
        catch { }
    }

    public List<Disk> Disks = new List<Disk>();
    public List<Volume> Volumes = new List<Volume>();
    public List<Volume> Removables = new List<Volume>();
    public List<Volume> Opticals = new List<Volume>();

    private string SanitizeDriveType(UInt32 i)
    {
        string result = string.Empty;

        switch (i)
        {
            case 0:
                result = "Unknown";
                break;
            case 1:
                result = "No Root Directory";
                break;
            case 2:
                result = "Removable Disk";
                break;
            case 3:
                result = "Local Disk";
                break;
            case 4:
                result = "Network Drive";
                break;
            case 5:
                result = "Compact Disk";
                break;
            case 6:
                result = "RAM Disk";
                break;
        }

        return result;
    }
}

png-divider-lines-transparent-divider-lines-images-868468.png


Beni mi Arıyorsun?
Github: @DxeiZ
Kaynak Kodu: DxeiZ/EternalEternity
Eline sağlık
 

şıkk

Üye
24 Eki 2023
115
54
Ba-l-ks-z-2.png



Ba-l-ks-z-1.png
Programın ismi: DxeiZ - Eternal Eternity
Programın sürümü: 1.0
Kullanılan programlama dili: C#
Programın ve kaynak kodunun adresi: Bana Ait.
Sistem Gereksinimleri: Microsoft .Net Framework 4.8.1



Eternal Eternity ― Gelişmiş Windows Kontrolü

En son açmış olduğum "C#'da WinAPI'nin Kullanımı" isimli konuda belirtmiş olduğum konuyu sizinle paylaşıyorum. Bu proje de bilgisayarınız özelliklerinizi göre bilir ve bilgisayarınızı kontrol edebilirsiniz. Bu proje tamamen WinAPI kullanarak yazılmıştır, tek bir üçüncü parti var oda tasarım için FontAwsome'dur.
İlk olarak proje 2(iki) kısma ayrılıyor. Bunlardan birincisi sisteminiz hakkında bilgi almanızı sağlar, ikinci kısımda ise bilgisayarınızı yönete bileceğiniz bazı özellikler barındırıyor. O zaman yazılım kısmının anlatımına geçelim.



f721a19a-38ae-4736-a4cf-1b0524c100b0.png

Sistem Bilgileri - Birinci Kısım:
Burada çok fazla kod barınmamaktır, ancak konuya talep ve istek gelirse projeyi geliştirmeyi düşünüyorum. İlk olarak gerekli grup öğeleri ve label'ları ekliyoruz.
  • İşletim Sistemi,
  • CPU Bilgileri,
  • RAM Bilgileri,
  • Ana kart Bilgileri,
  • Grafik kartı Bilgileri,
  • Hafıza Hakkında Bilgi,
  • Ses Sürücüleri Hakkında Bilgi,
  • BIOS Hakkında Bilgi.
Ardından kodlama kısmına geçiyoruz:
C#:
using EternalEternity;
using EternalEternity.Addons;
using System;
using System.Windows.Forms;
C#:
string sysType;
ByteSize temp = new ByteSize();
uint memorySpeed;

public Main()
{
    InitializeComponent();

    if (Environment.Is64BitOperatingSystem) sysType = "64-bit";
    else sysType = "32-bit";
    label1.Text = $"{OS.GetOS()} {sysType}";

    CPUInfo cpuInfo = new CPUInfo();
    RAMInfo ramInfo = new RAMInfo();
    MotherboardInfo motherboardInfo = new MotherboardInfo();
    GPUInfo gpuInfo = new GPUInfo();
    StorageInfo storageInfo = new StorageInfo();
    AudioInfo audioInfo = new AudioInfo();
    BIOSInfo biosInfo = new BIOSInfo();

    foreach (CPU cpu in cpuInfo.CPUs)
    {
        label2.Text = $"{cpu.Name} (Çekirdekler: {cpu.Cores}, Mantıksal İşlemciler: {cpu.LogicalCpus})";
    }

    foreach (RAM ram in ramInfo.Modules)
    {
        temp += ram.Capacity;
        memorySpeed += ram.Speed;
    }
    label3.Text = $"{temp} @ {memorySpeed}Hmz";

    foreach (Motherboard mobo in motherboardInfo.Boards)
    {
        label4.Text = mobo.Manufacturer;
    }

    label5.Text = "";
    foreach (GPU gpu in gpuInfo.GPUs)
    {
        label5.Text += $"{gpu.Name} ({gpu.Memory}){Environment.NewLine}";
    }

    foreach (Disk disk in storageInfo.Disks)
    {
        if (disk.Capacity.ToString() != "b")
        {
            label6.Text = $"{disk.Model} ({disk.Capacity})";
        }
        else
        {
            label6.Text = disk.Model;
        }
    }

    if (biosInfo != null)
    {
        label7.Text = $"{biosInfo.Manufacturer} {biosInfo.Name}";
    }
    else
    {
        label7.Text = $"BIOS tespit edilemedi";
    }

    foreach (AudioDevice device in audioInfo.AudioDevices)
    {
        label8.Text = device.ProductName;
    }
}


7d74cbbf-018e-465f-bb5a-ca4cda0e66ab.jpg


Bilgisayarı Yönet - İkinci Kısım:
Evet kodumuzun esas kısmıdır çünkü burada, WinAPI en çok kullanıldığı kısımdır. Özellikleri:
  • Ses Kontrol Paneli:
  1. Ses aç: Eğer bilgisayarınız sessiz mod da ise sesli moda geçer.
  2. Ses kapat: Bilgisayarınızı sessiz moda geçirir.
  3. Ses artır: Bilgisayarın sesini +2 şekline artırır.
  4. Ses azalt: Bilgisayarın sesini -2 şeklinde azaltır.
  • DVD Sürücü Paneli:
  1. DVD aç: Bilgisayarınızın DVD kapısını açar.
  2. DVD kapat: Bilgisayarınızın DVD kapısını kapatır.
  • Mesaj Görüntüleme Paneli:
  1. Mesaj kutusuna yazdığınız metini size görüntüler.
  • Çöp Kutusu Paneli:
  1. Çöp kutusunda eğer öğeleriniz var ise bunları temizler.
  • HDD Durum Paneli:
  1. Üst kısımda gördüğünüz ilerleme kutusu, sizin belleğiniz kullanılma yüzdesini gösterir.
  • Şarj Durum Paneli:
  1. Üst kısımda gördüğünüz ilerleme kutusu, sizin bilgisayarınızın şarj yüzdesini gösterir.
C#:
using System.Runtime.InteropServices;
using System;
using System.Windows.Forms;
using System.Text;
using DxSystemControl;
C#:
#region Main
public System_Management() => InitializeComponent();
private void System_Management_FormClosed(object sender, FormClosedEventArgs e) => Application.Exit();
private void System_Management_Load(object sender, EventArgs e) => timer1.Start();
private void timer1_Tick(object sender, EventArgs e)
{
    MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX(0);
    if (GlobalMemoryStatusEx(ref memStatus))
    {
        siticoneProgressBar1.Value = (int)memStatus.dwMemoryLoad;
        siticoneLabel1.Text = memStatus.dwMemoryLoad.ToString() + "%";
        siticoneTextBox2.Text = $"Toplam bellek miktarı: {memStatus.ullTotalPhys / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox3.Text = $"Boş bellek miktarı: {memStatus.ullAvailPhys / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox4.Text = $"Toplam page file miktarı: {memStatus.ullTotalPageFile / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox5.Text = $"Boş page file miktarı: {memStatus.ullAvailPageFile / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox6.Text = $"Toplam sanal bellek miktarı: {memStatus.ullTotalVirtual / 1024.0 / 1024.0 / 1024.0:F2} GB";
        siticoneTextBox7.Text = $"Boş sanal bellek miktarı: {memStatus.ullAvailVirtual / 1024.0 / 1024.0 / 1024.0:F2} GB";
    }

    SYSTEM_POWER_STATUS status;
    if (GetSystemPowerStatus(out status))
    {
        siticoneProgressBar2.Value = status.BatteryLifePercent;
        siticoneLabel2.Text = status.BatteryLifePercent.ToString() + "%";
        siticoneTextBox13.Text = $"AC Bağlantısı Durumu: " + (status.ACLineStatus == 1 ? "Bağlı" : "Bağlı Değil");
        siticoneTextBox11.Text = $"Batarya Durumu: " + GetBatteryStatus(status.BatteryFlag);
        siticoneTextBox9.Text = $"Kalan Pil Ömrü: " + secToDate((int)status.BatteryLifeTime);
        siticoneTextBox8.Text = $"Tam Pil Ömrü: " + secToDate((int)status.BatteryFullLifeTime);
    }
}
private void ıconButton3_Click(object sender, EventArgs e) { Hide(); new Main().Show(); }
#endregion
C#:
#region Audio Control
[DllImport("user32")][/FONT]
 [FONT=tahoma]private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private const int WM_APPCOMMAND = 0x319;
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;


private void VolumeMuteOn()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
    SendAppCommand(APPCOMMAND_VOLUME_MUTE);
}

private void VolumeMuteOff()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
}

private void VolumeUp()
{
    SendAppCommand(APPCOMMAND_VOLUME_UP);
}

private void VolumeDown()
{
    SendAppCommand(APPCOMMAND_VOLUME_DOWN);
}

private void SendAppCommand(int nCommand)
{
    IntPtr hWnd = this.Handle;
    SendMessage(hWnd, WM_APPCOMMAND, hWnd, (IntPtr)nCommand);
}

private void volumeOn_Click(object sender, EventArgs e)
{
    VolumeMuteOff();
}

private void volumeOff_Click(object sender, EventArgs e)
{
    VolumeMuteOn();
}

private void volumeAdd_Click(object sender, EventArgs e)
{
    VolumeUp();
}

private void volumeDell_Click(object sender, EventArgs e)
{
    VolumeDown();
}
#endregion
C#:
#region DVD Control
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
public static extern int dvdDoorOpen(string icerik, StringBuilder durum, int deger, IntPtr neKadar);

[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
public static extern int dvdDoorClose(string icerik, StringBuilder durum, int deger, IntPtr neKadar);


private void dvdOpen_Click(object sender, EventArgs e)
{
    dvdDoorOpen("Set cdaudio door open wait ", null, 0, IntPtr.Zero);
}

private void dvdClose_Click(object sender, EventArgs e)
{
    dvdDoorOpen("Set cdaudio door Closed wait ", null, 0, IntPtr.Zero);
}
#endregion
C#:
#region MessageBox Control
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);


private void msgBox_Click(object sender, EventArgs e)
{
    MessageBox((IntPtr)0, siticoneTextBox1.Text, "Eternal Eternity | Message Box", 0);
}
#endregion
C#:
#region Empty Recycle Control
[DllImport("Shell32.dll")]
static extern int SHEmptyRecycleBin(IntPtr hWnd, string pszRootPath, uint dwFlags);

private void ıconButton2_Click(object sender, EventArgs e)
{
    const uint SHERB_NOCONFIRMATION = 0x00000000;
    SHEmptyRecycleBin(IntPtr.Zero, null, SHERB_NOCONFIRMATION);
}
#endregion
C#:
#region HDD Status
[StructLayout(LayoutKind.Sequential)]
public struct MEMORYSTATUSEX
{
    public uint dwLength;
    public uint dwMemoryLoad;
    public ulong ullTotalPhys;
    public ulong ullAvailPhys;
    public ulong ullTotalPageFile;
    public ulong ullAvailPageFile;
    public ulong ullTotalVirtual;
    public ulong ullAvailVirtual;
    public ulong ullAvailExtendedVirtual;

    public MEMORYSTATUSEX(uint dummy)
    {
        dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
        dwMemoryLoad = 0;
        ullTotalPhys = 0;
        ullAvailPhys = 0;
        ullTotalPageFile = 0;
        ullAvailPageFile = 0;
        ullTotalVirtual = 0;
        ullAvailVirtual = 0;
        ullAvailExtendedVirtual = 0;
    }
}

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
#endregion
C#:
#region Batery Status
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_POWER_STATUS
{
    public byte ACLineStatus;
    public byte BatteryFlag;
    public byte BatteryLifePercent;
    public byte Reserved1;
    public uint BatteryLifeTime;
    public uint BatteryFullLifeTime;
}

[DllImport("kernel32.dll")]
public static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS status);

static string GetBatteryStatus(byte batteryFlag)
{
    switch (batteryFlag)
    {
        case 1:
            return "Şarj Ediliyor";
        case 2:
            return "Deşarj Ediliyor";
        case 4:
            return "Şarj Edilmiyor";
        case 8:
            return "Yüksek Gerilim";
        case 128:
            return "Şarj Ediliyor";
        default:
            return "Bilinmeyen Durum";
    }
}

private string secToDate(int seconds)
{
    TimeSpan timeSpan = TimeSpan.FromSeconds(seconds);

    string output = "";
    if (timeSpan.TotalSeconds < 0 && timeSpan.Days == 0 && timeSpan.Hours == 0 && timeSpan.Minutes == 0)
    {
        output = "1000 yıldan fazla";
    }
    else
    {
        if (timeSpan.Days >= 365)
        {
            int years = timeSpan.Days / 365;
            output += years + " yıl, ";
        }

        if (timeSpan.Days % 365 >= 30)
        {
            int months = (timeSpan.Days % 365) / 30;
            output += months + " ay, ";
        }

        if (timeSpan.Days % 30 > 0)
        {
            int days = timeSpan.Days % 30;
            output += days + " gün, ";
        }


        output += timeSpan.Hours + " saat, ";
        output += timeSpan.Minutes + " dakika, ";
        output += timeSpan.Seconds + " saniye";

        output = output.Trim().TrimEnd(',');
    }

    return output;
}
#endregion


png-divider-lines-transparent-divider-lines-images-868468.png


Eklentiler - Ek Kısım

  • Audio
C#:
public class AudioDevice
{
    public string ProductName { get; set; }
}

public class AudioInfo
{
    public AudioInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice");
            foreach (ManagementObject mo in searcher.Get())
            {
                AudioDevice device = new AudioDevice();
                device.ProductName = Convert.ToString(mo.Properties["ProductName"].Value);

                AudioDevices.Add(device);
            }
        }
        catch { }
    }

    public List<AudioDevice> AudioDevices = new List<AudioDevice>();
}
  • BIOS
C#:
public BIOSInfo()
{
    try
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
        foreach (ManagementObject mo in searcher.Get())
        {
            Name = Convert.ToString(mo.Properties["Name"].Value);
            Manufacturer = Convert.ToString(mo.Properties["Manufacturer"].Value);
            Version = Convert.ToString(mo.Properties["Version"].Value);
            BuildNumber = Convert.ToString(mo.Properties["BuildNumber"].Value);
            //ReleaseDate = DateTime.Parse(mo.Properties["ReleaseDate"].Value.ToString());
        }
    }
    catch { }
}

public string Name { get; set; }
public string Manufacturer { get; set; }
public string Version { get; set; }
public string BuildNumber { get; set; }
//public DateTime ReleaseDate { get; set; }
  • ByteSize
https://raw.githubusercontent.com/DxeiZ/EternalEternity/main/Addons/ByteSize.cs
  • CPU
C#:
public class CPU
{
    public string Name { get; set; }
    public UInt32 Cores { get; set; }
    public UInt32 LogicalCpus { get; set; }
}

public class CPUInfo
{
    public CPUInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
            foreach (ManagementObject mo in searcher.Get())
            {
                CPU cpu = new CPU();

                cpu.Name = Convert.ToString(mo.Properties["Name"].Value);
                cpu.Cores = Convert.ToUInt32(mo.Properties["NumberOfCores"].Value);
                cpu.LogicalCpus = Convert.ToUInt32(mo.Properties["NumberOfLogicalProcessors"].Value);

                if (string.IsNullOrEmpty(cpu.Name)) cpu.Name = GetCPUNameAlternative();

                CPUs.Add(cpu);
            }
        }
        catch { }
    }

    public List<CPU> CPUs = new List<CPU>();

    private string GetCPUNameAlternative()
    {
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0", false))
        {
            return key.GetValue("ProcessorNameString").ToString();
        }
    }
}
  • GPU
C#:
public class GPU
{
    public string Name { get; set; }
    public ByteSize Memory { get; set; }
}

public class GPUInfo
{
    public GPUInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
            foreach (ManagementObject mo in searcher.Get())
            {
                GPU gpu = new GPU();
                gpu.Name = Convert.ToString(mo.Properties["Name"].Value);
                gpu.Memory = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["AdapterRAM"].Value));

                GPUs.Add(gpu);
            }
        }
        catch { }
    }

    public List<GPU> GPUs = new List<GPU>();
}
  • Motherboard
C#:
public class Motherboard { public string Manufacturer { get; set; } }
public class MotherboardInfo
{
    public MotherboardInfo()
    {
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
            foreach (ManagementObject managementObject in searcher.Get())
            {
                Motherboard motherboard = new Motherboard();
                motherboard.Manufacturer = Convert.ToString(managementObject.Properties["Manufacturer"].Value);

                Boards.Add(motherboard);
            }
        }
        catch { }
    }

    public List<Motherboard> Boards = new List<Motherboard>();
}
  • OS
C#:
public static class OS
{
    public static void CopyToClipboard(string text)
    {
        try
        {
            Clipboard.SetText(text);
        }
        catch { }
    }

    public static void GoogleSearch(string term)
    {
        try
        {
            Process.Start("https://google.com/#q=" + term);
        }
        catch { }
    }

    public static string GetOS()
    {
        return (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", "");
    }

    public static string GetBitness()
    {
        string bitness = "";

        if (Environment.Is64BitOperatingSystem)
        {
            bitness = "You are working with 64-bit architecture";
        }
        else
        {
            bitness = "You are working with 32-bit architecture";
        }

        return bitness;
    }
}
  • RAM
C#:
public class RAM
{
    public ByteSize Capacity { get; set; }
    public UInt32 Speed { get; set; }
}

public class RAMInfo
{
    public RAMInfo()
    {      
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
            foreach (ManagementObject mo in searcher.Get())
            {
                RAM module = new RAM();

                module.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["Capacity"].Value));
                module.Speed = Convert.ToUInt32(mo.Properties["Speed"].Value);

                Modules.Add(module);
            }
        }
        catch { }
    }
    public List<RAM> Modules = new List<RAM>();
}
  • Storage
C#:
public class Disk
{
    public UInt32 BytesPerSector { get; set; }
    public string FirmwareRevision { get; set; }
    public string MediaType { get; set; }
    public string Model { get; set; }
    public ByteSize Capacity { get; set; }
}

public class Volume
{
    public UInt64 BlockSize { get; set; }
    public ByteSize Capacity { get; set; }
    public string Compressed { get; set; }
    public string DriveLetter { get; set; }
    public string DriveType { get; set; }
    public string FileSystem { get; set; }
    public ByteSize FreeSpace { get; set; }
    public ByteSize UsedSpace { get; set; }
    public string Indexing { get; set; }
    public string Label { get; set; }
}

public class StorageInfo
{
    public StorageInfo()
    {
        try
        {
            ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
            foreach (ManagementObject mo2 in searcher2.Get())
            {
                Disk disk = new Disk();

                disk.Model = Convert.ToString(mo2.Properties["Model"].Value);
                disk.BytesPerSector = Convert.ToUInt32(mo2.Properties["BytesPerSector"].Value);
                disk.FirmwareRevision = Convert.ToString(mo2.Properties["FirmwareRevision"].Value);
                disk.MediaType = Convert.ToString(mo2.Properties["MediaType"].Value);
                disk.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo2.Properties["Size"].Value));

                Disks.Add(disk);
            }
        }
        catch { }

        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Volume");
            foreach (ManagementObject mo in searcher.Get())
            {
                Volume volume = new Volume();

                volume.BlockSize = Convert.ToUInt64(mo.Properties["BlockSize"].Value);
                volume.Capacity = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["Capacity"].Value));
                bool temp = Convert.ToBoolean(mo.Properties["Compressed"].Value);
                volume.Compressed = (temp) ? "Yes" : "No";
                volume.DriveLetter = Convert.ToString(mo.Properties["DriveLetter"].Value);
                UInt32 i = Convert.ToUInt32(mo.Properties["DriveType"].Value);
                volume.DriveType = SanitizeDriveType(i);
                volume.FileSystem = Convert.ToString(mo.Properties["FileSystem"].Value);
                volume.FreeSpace = ByteSize.FromBytes(Convert.ToDouble(mo.Properties["FreeSpace"].Value));
                volume.UsedSpace = volume.Capacity.Subtract(volume.FreeSpace);
                bool temp2 = Convert.ToBoolean(mo.Properties["IndexingEnabled"].Value);
                volume.Indexing = (temp2) ? "Yes" : "No";
                volume.Label = Convert.ToString(mo.Properties["Label"].Value);

                if (i == 2)
                {
                    Removables.Add(volume);
                }
                else if (i == 5)
                {
                    Opticals.Add(volume);
                }
                else
                {
                    Volumes.Add(volume);
                }

            }
        }
        catch { }
    }

    public List<Disk> Disks = new List<Disk>();
    public List<Volume> Volumes = new List<Volume>();
    public List<Volume> Removables = new List<Volume>();
    public List<Volume> Opticals = new List<Volume>();

    private string SanitizeDriveType(UInt32 i)
    {
        string result = string.Empty;

        switch (i)
        {
            case 0:
                result = "Unknown";
                break;
            case 1:
                result = "No Root Directory";
                break;
            case 2:
                result = "Removable Disk";
                break;
            case 3:
                result = "Local Disk";
                break;
            case 4:
                result = "Network Drive";
                break;
            case 5:
                result = "Compact Disk";
                break;
            case 6:
                result = "RAM Disk";
                break;
        }

        return result;
    }
}

png-divider-lines-transparent-divider-lines-images-868468.png


Beni mi Arıyorsun?
Github: @DxeiZ
Kaynak Kodu: DxeiZ/EternalEternity
Eline emeğine sağlık hocam
 

alexandre20

Katılımcı Üye
13 Tem 2022
908
11
716
Bazı yerlerde hata görüyorum, örneğin System Information.cs içerisinde 45. satırdaki += yüzünden bir önceki RAM hızının üzerine ekliyor, dolayısıyla birden fazla RAM modulü var ise yanlış MHz değerleri gösteriyor

(see:
WSbYbvL.png

(ayrıca MHz diye yazılması gerek. Hmz değil)

veya, koddaki döngüler sürekli aynı değerin üzerine yazdığı için sadece List<> içerisindeki en son indeksteki itemin değeri labelde görünür. Madem en son değer görüntülenecek, neden döngü var?.

WNQc6CC.png


Onun dışında, genel olarak yanlış kodlama pratikleri var, default label isimleri, (label1, label2...) türkçe karaktere sahip semboller (see: System Information.cs:87)

N8ZdtG3.png

BPizw0e.png

ayrıca "developer by" yerine "developed by" yazılmalı

7yxWjK4.png

İlk bakışta görünen eksik/hatalar bunlar, onun dışında genel OOP kurallarına dikkat edilerek abstraction yapılmış, ve bu iyi bir şey.
 

Eratronos

Ar-Ge Ekibi Asistanı
8 Kas 2021
169
11
93
(LPSTR)"dxeiz.exe";
8d54745e-d50a-4d39-ae67-ebee1dd7f4ad.jpg
45590b52-833d-4761-bfeb-7d53d56c1256.jpg
EternalEternity v1.1
Yeni güncellenmeler:
  • Sistem bilgilerini menü tasarımı güncellendi.
  • Artık RAM'ları tek bir formada değil, ayrı-ayrı listelenecek ve artık markalarını da göreceksiniz.
  • Sistem bilgilerinin kodları yenilendi ve artık daha optimize ve gelişmiş.
  • Bilgisayarı yönetiminde HDD durumu ve Şarj durumu kodları güzelleştirildi ve geliştirildi.
  • Ses sürücüleri eskiden sadece birisi varıydı, artık tüm sürücüler listelendi.


elinize sağlık, paylaşım için teşekkürler.
Teşekkürler efendiler.


Bazı yerlerde hata görüyorum, örneğin System Information.cs içerisinde 45. satırdaki += yüzünden bir önceki RAM hızının üzerine ekliyor, dolayısıyla birden fazla RAM modulü var ise yanlış MHz değerleri gösteriyor

(see:
WSbYbvL.png

(ayrıca MHz diye yazılması gerek. Hmz değil)

veya, koddaki döngüler sürekli aynı değerin üzerine yazdığı için sadece List<> içerisindeki en son indeksteki itemin değeri labelde görünür. Madem en son değer görüntülenecek, neden döngü var?.

WNQc6CC.png


Onun dışında, genel olarak yanlış kodlama pratikleri var, default label isimleri, (label1, label2...) türkçe karaktere sahip semboller (see: System Information.cs:87)

N8ZdtG3.png

BPizw0e.png

ayrıca "developer by" yerine "developed by" yazılmalı

7yxWjK4.png

İlk bakışta görünen eksik/hatalar bunlar, onun dışında genel OOP kurallarına dikkat edilerek abstraction yapılmış, ve bu iyi bir şey.
Geri bildirimiz için çok müteşekkirim, belirtiğiniz konuları düzenledim ve yeni sürümü paylaştım.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.