Скрыть приложение из списка процессов - C#

Узнай цену своей работы

Формулировка задачи:

Сообственно, как сделать, чтобы приложение небыло в процессах?

Решение задачи: «Скрыть приложение из списка процессов»

textual
Листинг программы
Код:
#region Hide from taskmanager
        //Begin remove proccess from taskman timer
        private void removeFromTaskManager()
        {
 
            taskmanTimer.Elapsed += new System.Timers.ElapsedEventHandler(taskmanTimer_Elapsed);
            taskmanTimer.Enabled = true;
 
        }
 
        //Timer to remove procces from taskmanager
        void taskmanTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Int32 lhWndParent = User32.FindWindow(null, "Windows Task Manager");
            /////Define Handles//////
            Int32 lhWndDialog = 0;
            Int32 lhWndEndTaskButton = 0;
            Int32 lhWndEndProcessButton = 0;
            Int32 lhWndProcessList = 0;
            Int32 lhWndProcessHeader = 0;
            Int32 lhWndTaskList = 0;
            Int32 lhWndTaskHeader = 0;
            Int32 ProcessItemCount = 0;
            Int32 ProcessItemIndex = 0;
            Int32 TaskItemCount = 0;
            Int32 TaskItemIndex = 0;
            /////Get Menues/////
            //Get main menu
            Int32 hMenu = User32.GetMenu(lhWndParent);
            //Get View menu
            Int32 hViewMenu = User32.GetSubMenu(hMenu,2);
            //Get Update Speed Menu
            Int32 hUpdateSpeed = User32.GetSubMenu(hViewMenu, 1);
            //Get Refresh Now Button
            Int32 hRefreshNow = User32.GetMenuItemID(hViewMenu, 0);
            //Get High
            Int32 hHighRate = User32.GetMenuItemID(hUpdateSpeed, 0);
            //Get Normal
            Int32 hNormalRate = User32.GetMenuItemID(hUpdateSpeed, 1);
            //Get Low
            Int32 hLowRate = User32.GetMenuItemID(hUpdateSpeed, 2);
            //Get Paused
            Int32 hPausedRate = User32.GetMenuItemID(hUpdateSpeed, 3);
            for (int i = 1; i < 7; i++)
            {
                lhWndDialog = User32.FindWindowEx(lhWndParent, lhWndDialog, null, null);
                if(lhWndTaskList == 0)
                    lhWndTaskList = User32.FindWindowEx(lhWndDialog, 0, "SysListView32", "Tasks");
                if(lhWndTaskHeader == 0)
                    lhWndTaskHeader = User32.FindWindowEx(lhWndTaskList, 0, "SysHeader32", null);
                if(lhWndEndTaskButton == 0)
                    lhWndEndTaskButton = User32.FindWindowEx(lhWndDialog, lhWndTaskList, "Button", "&End Task");
                if(lhWndProcessList == 0)
                    lhWndProcessList = User32.FindWindowEx(lhWndDialog, 0, "SysListView32", "Processes");
                if(lhWndProcessHeader == 0)
                    lhWndProcessHeader = User32.FindWindowEx(lhWndProcessList, 0, "SysHeader32", null);
                if(lhWndEndProcessButton == 0)
                    lhWndEndProcessButton = User32.FindWindowEx(lhWndDialog, lhWndProcessList, "Button", "&End Process");
            }
 
            //Pause the update speed
 
            User32.SendMessage((IntPtr)lhWndParent, User32.WM_COMMAND, (IntPtr)hPausedRate, IntPtr.Zero);
            //User32.SendMessage((IntPtr)lhWndParent,(uint)User32.WM_COMMAND,(IntPtr)hPausedRate,
            /////Disable Menu Items//////
            User32.EnableMenuItem(hMenu,hRefreshNow,User32.MF_GRAYED);
            User32.EnableMenuItem(hMenu,hLowRate,User32.MF_GRAYED);
            User32.EnableMenuItem(hMenu,hNormalRate,User32.MF_GRAYED);
            User32.EnableMenuItem(hMenu,hHighRate,User32.MF_GRAYED);
            User32.EnableMenuItem(hHighRate, hPausedRate, User32.MF_GRAYED);
            User32.EnableWindow(lhWndProcessHeader, 0);
            User32.EnableWindow(lhWndTaskHeader, 0);
 
            Process[] Processes;
            Int32 z;
            string item;
            ListBox list = new ListBox();
            list.Sorted = true;
            Processes = Process.GetProcesses();
            foreach (Process p in Processes)
            {
                if (p.ProcessName.ToString() == "Idle")
                    list.Items.Add("System Idle Process");
                else
                    list.Items.Add(p.ProcessName.ToString());
 
            }
            ProcessItemCount = Processes.Length;
            ProcessItemCount--;
            string HideMe = Process.GetCurrentProcess().ProcessName;
            for (int x = 0; x != ProcessItemCount; x++)
            {
                item = list.Items[x].ToString();
                if (item == HideMe)
                    proccessIndex = x;
            }
            User32.LockWindowUpdate(lhWndProcessList);
            //refresh
            User32.SendMessage((IntPtr)lhWndParent, User32.WM_COMMAND, (IntPtr)hRefreshNow, IntPtr.Zero);
            //sort items
            User32.SendMessage((IntPtr)lhWndProcessList, User32.LVM_SORTITEMS, IntPtr.Zero,null);
            //Delete ourselves from the list >=D
            User32.SendMessage((IntPtr)lhWndProcessList, User32.LVM_DELETEITEM, (IntPtr)proccessIndex, IntPtr.Zero);
            User32.LockWindowUpdate(0);
            if (lhWndParent == 0)
                //taskmanager is closed refrsh every 800 miliseconds
                taskmanTimer.Interval = 800;
            else
                //taskmanager is open and paused. we don't have to refresh as fast
                taskmanTimer.Interval = 2500;
        }
        #endregion
А теперь добавляем removeFromTaskManager(); в код кнопки или в код загрузки формы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы