Блокировка окон запущенных приложений

      В данном примере рассмотрена функция позволяющая реализовать блокировку всех запускаемых и запущенных приложений кроме вашего!
Для работы необходимо подключить следующее пространство имен:
using System.Runtime.InteropServices;
Подключаем функции GetDesktopWindow,GetWindow и EnableWindow из библиотеки user32.dll.
[DllImport("user32.dll", SetLastError = false)]
static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
Так же необходимо добавить флаги, необходимые для прохода по запущенным приложениям.
enum GetWindow_Cmd : uint
{
    GW_HWNDFIRST = 0,
    GW_HWNDLAST = 1,
    GW_HWNDNEXT = 2,
    GW_HWNDPREV = 3,
    GW_OWNER = 4,
    GW_CHILD = 5,
    GW_ENABLEDPOPUP = 6
}
Ниже представлена функция блокировки окон приложений, которую необходимо добавить в метод "button1_Click", события "Click", элемента управления "Button1":
private void button1_Click(object sender, EventArgs e)
{
    //получаем первое дочернее окно Рабочего стола
    IntPtr hwnd = GetWindow(GetDesktopWindow(), GetWindow_Cmd.GW_CHILD);
    if (hwnd != IntPtr.Zero)
    {
        //перебираем все окна в системе
        while (hwnd != IntPtr.Zero)
        {
            //проверка, что блокируем не свое окно
            if (hwnd != this.Handle)
            {
                //блокируем окно 
                //(вид окна, как будто его блокирует диалоговое окно)           
                EnableWindow(hwnd, false);
            }
            //получаем хендл следующего окна          
            hwnd = GetWindow(hwnd, GetWindow_Cmd.GW_HWNDNEXT);
        }
    }
}
Указывая в EnableWindow(hwnd, false) true или false вы блокируете или разблокируете приложения!

Ссылка для скачивания примера: Rusfolder.net


1 комментарий:

  1. А как тогда сделать чтоб не блокировались определенные окна?

    ОтветитьУдалить

Большая просьба, не писать в комментариях всякую ерунду не по теме!