C# C# sistem uygulamalarını listelemeyi engelleme

İlgili kod :
Listenin en altında NVIDIA Helper da var. Güzelce listeledi ancak eksikler var ve bunlardan bazıları sistem uygulamaları.
NOT :
Try Catch bloğuna alınma sebebi : System.ComponentModel.Win32Exception: '32-bit bir işlem 64-bit bir işlemin modüllerine erişemez.' hatası almak (Özel olarak catch ayarlamak istemedim göstermek amaçlı yaptım)
64 Bit olarak derlesen sorun düzelir. Benim attığım snapshot aslında tam olarak bu işi yapıyor, yine de kodunu düzenlememi istersen atabilirsin.
 
64 Bit olarak derlesen sorun düzelir. Benim attığım snapshot aslında tam olarak bu işi yapıyor, yine de kodunu düzenlememi istersen atabilirsin.
32 Bit olmalı sonuçta bilgisayarın sağlığını kontrol edecek bir uygulama olucak özellikle 64 bitliler için olursa ayrımcılık olmaz mı? ya da Win10 ve 11 işletim sistemleri 32 bit olmuyorsa direkt 64 yapabilirim. Yanlış hatırlıyor olabilirim.
 
32 Bit olmalı sonuçta bilgisayarın sağlığını kontrol edecek bir uygulama olucak özellikle 64 bitliler için olursa ayrımcılık olmaz mı? ya da Win10 ve 11 işletim sistemleri 32 bit olmuyorsa direkt 64 yapabilirim. Yanlış hatırlıyor olabilirim.
Any Cpu da derlersen iki türlü de destekler. Ya da 32 ve 64 bit olarak ayrı ayrı derleyip exe dosyalarını yayınlarsın, tercih senin.
 
Any Cpu da derlersen iki türlü de destekler. Ya da 32 ve 64 bit olarak ayrı ayrı derleyip exe dosyalarını yayınlarsın, tercih senin.
Hocam zaten Any CPU da.
 
Neden sistem uygulamalarini kafana gore kapatma pesindesin?
Bilindik bir blacklist yap, %100 emin oldugun process'leri kapat, geri kalanina karisma.
Genel olarak kendi user-space'in disindaki uygulamalara mudahale etmen cok sagliksiz bir sey.
Ayrica kim senin uygulamani neden tum processleri kapatacak yetkide calistirsin ki, C# ile yazdigin kodu MITM ile birisi modifiye edip kullaniciya zarar verecek sekilde modifiye de edebilir.
 
Neden sistem uygulamalarini kafana gore kapatma pesindesin?
Bilindik bir blacklist yap, %100 emin oldugun process'leri kapat, geri kalanina karisma.
Genel olarak kendi user-space'in disindaki uygulamalara mudahale etmen cok sagliksiz bir sey.
Ayrica kim senin uygulamani neden tum processleri kapatacak yetkide calistirsin ki, C# ile yazdigin kodu MITM ile birisi modifiye edip kullaniciya zarar verecek sekilde modifiye de edebilir.
Öncelikle, uygulamaya yönetici izni vermezse açılmıyor zaten. Diğer dediğine gelirsek Bilgisayarın sağlını ve performansını kontrol eden bir uygulama olduğu için. Örnek verelim:
Yaşı 30u hatta onuda geçtim 40ın üstünde olan veya bilgisayardan pek anlamayan birileri bilgisayarı kullanırken arkada açık olan uygulamaları kapatır mı? hatta arttırıyorum; bırakın arkadakileri görev çubuğundakileri kapatmayanlar bile çok. Aramızda Speak, Teams, OneDrive'ı bilgisayarı aldığından beri kullanmamış/silmemiş/kapatmamış binlerce insan var :D
 
Öncelikle, uygulamaya yönetici izni vermezse açılmıyor zaten. Diğer dediğine gelirsek Bilgisayarın sağlını ve performansını kontrol eden bir uygulama olduğu için. Örnek verelim:
Yaşı 30u hatta onuda geçtim 40ın üstünde olan veya bilgisayardan pek anlamayan birileri bilgisayarı kullanırken arkada açık olan uygulamaları kapatır mı? hatta arttırıyorum; bırakın arkadakileri görev çubuğundakileri kapatmayanlar bile çok. Aramızda Speak, Teams, OneDrive'ı bilgisayarı aldığından beri kullanmamış/silmemiş/kapatmamış binlerce insan var :D
Yaşı 40'ın üstünde bir insanın arka plan uygulamalarını çok umursayacağını sanmıyorum. Yada oradan gelecek performansı. Oyunlar haricinde çok bir farkı yok çünkü.
 
Yaşı 40'ın üstünde bir insanın arka plan uygulamalarını çok umursayacağını sanmıyorum. Yada oradan gelecek performansı. Oyunlar haricinde çok bir farkı yok çünkü.
Uygulamamın sadece %60ının bittiğini söyleyebilirim ve kendi bilgisayarım için %100 performans artışı yaşadım. Örnek oyun istiyorsan GTA 5 Online Yüksek grafiklerde 60-70 arası fps, Çimlerin yoğun olduğu bölgelerde 40a hatta 30a düştüğü oluyordu ancak Şuan en yoğun çim bulunan yerde üstüne arabayla kaza yapayım 80 fps altına düşmüyor 100 120 fps arası oynatıyor grafikler aynı. Yazın yayınlardada göstereceğim inanmıyorsan bekleyebilirsin :) Bu yaz biterse ücretsiz Microsoft store'da yayınlayacağım.
 
Kod:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

class Program
{
    private const int TH32CS_SNAPPROCESS = 0x00000002;
    private const uint WM_CLOSE = 0x0010;

    [DllImport("kernel32.dll")]
    private static extern IntPtr CreateToolhelp32Snapshot(int dwFlags, uint th32ProcessID);

    [DllImport("kernel32.dll")]
    private static extern bool Process32First(IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32.dll")]
    private static extern bool Process32Next(IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    public struct PROCESSENTRY32
    {
        public uint dwSize;
        public uint cntUsage;
        public uint th32ProcessID;
        public IntPtr th32DefaultHeapID;
        public uint th32ModuleID;
        public uint cntThreads;
        public uint th32ParentProcessID;
        public int pcPriClassBase;
        public uint dwFlags;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szExeFile;
    }

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    static void ListRunningApplications(ListBox listBox)
    {
        Process currentProcess = Process.GetCurrentProcess();
        PROCESSENTRY32 processEntry = new PROCESSENTRY32();
        processEntry.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
        IntPtr snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        Process32First(snapshot, ref processEntry);
        do
        {
            Process process = Process.GetProcessById((int)processEntry.th32ProcessID);
            if (process.Id != currentProcess.Id && !IsSystemProcess(process))
            {
                listBox.Items.Add(process.ProcessName);
            }
        }
        while (Process32Next(snapshot, ref processEntry));

        CloseHandle(snapshot);
    }

    static bool IsSystemProcess(Process process)
    {
        return process.ProcessName == "System" || process.ProcessName == "Idle" || process.ProcessName.StartsWith("smss");
    }

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool CloseHandle(IntPtr hObject);

    public class Form1 : Form
    {
        private ListBox listBox;
        private Button closeButton;

        public Form1()
        {
            listBox = new ListBox();
            listBox.Dock = DockStyle.Fill;

            closeButton = new Button();
            closeButton.Text = "Seçili Uygulamaları Kapat";
            closeButton.Dock = DockStyle.Bottom;
            closeButton.Click += CloseButton_Click;

            Controls.Add(listBox);
            Controls.Add(closeButton);

            ListRunningApplications(listBox);
        }

        private void CloseButton_Click(object sender, EventArgs e)
        {
            foreach (var selectedItem in listBox.SelectedItems)
            {
                foreach (var process in Process.GetProcessesByName(selectedItem.ToString()))
                {
                    process.Kill();
                }
            }
        }
    }
}

Yazılım konusunda yeterli olduğunu söylemişsin o yüzden tek tek açıklamayacağım ve forms arayüzüne göre kendin gerekli yerleri değiştirirsin. Ama mantığını özet geçecek olursam, bütün açık uygulamaları tespit eder, sistem uygulaması olmayanları ayıklar ve listbox içinde listeler. Sadece listbox içerisinde listenen uygulamalar kapatılabilir. Böylelikle sistem uygulamalarının kapatma ihtimali olmaz.
 
Kod:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

class Program
{
    private const int TH32CS_SNAPPROCESS = 0x00000002;
    private const uint WM_CLOSE = 0x0010;

    [DllImport("kernel32.dll")]
    private static extern IntPtr CreateToolhelp32Snapshot(int dwFlags, uint th32ProcessID);

    [DllImport("kernel32.dll")]
    private static extern bool Process32First(IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32.dll")]
    private static extern bool Process32Next(IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    public struct PROCESSENTRY32
    {
        public uint dwSize;
        public uint cntUsage;
        public uint th32ProcessID;
        public IntPtr th32DefaultHeapID;
        public uint th32ModuleID;
        public uint cntThreads;
        public uint th32ParentProcessID;
        public int pcPriClassBase;
        public uint dwFlags;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szExeFile;
    }

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    static void ListRunningApplications(ListBox listBox)
    {
        Process currentProcess = Process.GetCurrentProcess();
        PROCESSENTRY32 processEntry = new PROCESSENTRY32();
        processEntry.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
        IntPtr snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        Process32First(snapshot, ref processEntry);
        do
        {
            Process process = Process.GetProcessById((int)processEntry.th32ProcessID);
            if (process.Id != currentProcess.Id && !IsSystemProcess(process))
            {
                listBox.Items.Add(process.ProcessName);
            }
        }
        while (Process32Next(snapshot, ref processEntry));

        CloseHandle(snapshot);
    }

    static bool IsSystemProcess(Process process)
    {
        return process.ProcessName == "System" || process.ProcessName == "Idle" || process.ProcessName.StartsWith("smss");
    }

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool CloseHandle(IntPtr hObject);

    public class Form1 : Form
    {
        private ListBox listBox;
        private Button closeButton;

        public Form1()
        {
            listBox = new ListBox();
            listBox.Dock = DockStyle.Fill;

            closeButton = new Button();
            closeButton.Text = "Seçili Uygulamaları Kapat";
            closeButton.Dock = DockStyle.Bottom;
            closeButton.Click += CloseButton_Click;

            Controls.Add(listBox);
            Controls.Add(closeButton);

            ListRunningApplications(listBox);
        }

        private void CloseButton_Click(object sender, EventArgs e)
        {
            foreach (var selectedItem in listBox.SelectedItems)
            {
                foreach (var process in Process.GetProcessesByName(selectedItem.ToString()))
                {
                    process.Kill();
                }
            }
        }
    }
}

Yazılım konusunda yeterli olduğunu söylemişsin o yüzden tek tek açıklamayacağım ve forms arayüzüne göre kendin gerekli yerleri değiştirirsin. Ama mantığını özet geçecek olursam, bütün açık uygulamaları tespit eder, sistem uygulaması olmayanları ayıklar ve listbox içinde listeler. Sadece listbox içerisinde listenen uygulamalar kapatılabilir. Böylelikle sistem uygulamalarının kapatma ihtimali olmaz.
Sence sadece System, Idle ve smss mi sistem uygulaması? Kodları paylaşmadan önce kendiniz Yönetici izni olan bir formu veya en azından bir bat veya cmd dosyasını çalıştırıp deneyin kodları.
 

Yeni konular

Geri
Yukarı