Ctrl shift delete не працює. Відключення ctrl-alt-delete, alt-tab, Пуск та інших поєднань

Це вільний переклад статті з сайту tamas.io про програмне відключення та включення гарячих клавіш Windows засобами C#. Нещодавно мені самому знадобилися подібні функції в моїй програмі і я з подивом виявив, що в рунеті нічого про це немає, та й взагалі в мережі про це сказано зовсім небагато. Так що, якщо цікаво або також потрібно, як мені було - ласкаво просимо!

Я написав цю статтю в 2007 році і вона досі ходить по мережі і згадується в різних обговореннях, включаючи StackOverflow та DotNetSpider , тому я вирішив знову опублікувати її. Це було актуально вже тоді і не було перевірено на Windows 7, тому що її на той момент просто не існувало фізично.
Перед тим, як продовжити читання, прошу, зверніть увагу на те, що ця стаття не закликає вас створювати шкідливі програми. Ви можете використовувати наведений код для навчання або для розваги.

Після невеликого дослідження щодо відключення клавіш та їх поєднань я дізнався, що є кілька способів зміни поведінки раніше згаданих ключових комбо.

Не хвилюйтеся, ми не розглядатимемо їх тут, але я покажу, як з ними працювати.

Використовуємо можливості редагування реєстру C#, щоб встановити/змінити групову політику для послідовності клавіш CTRL-ALT-DEL. Давайте подивимося, що можна зробити не написавши жодного рядка коду. Відкрийте "Пуск -> Виконати" та наберіть gpedit.msc. Перейдіть до: Конфігурація користувача > Адміністративні шаблони > Система > Варіанти дій після натискання CTRL-ALT-DEL (User Configuration > Administrative Templates > System > CTRL+ALT+DELETE Options). Це місце, де стандартним способом можна встановити дію, яка буде викликана натисканням цього комбо. Двічі клацніть на «Видалити диспетчер завдань» (Remove Task Manager). Зміна цього параметра змінює значення Software\Microsoft\Windows\CurrentVersion\Policies\System і значення DisableTaskMgr отримає значення 1.

Тепер завдання стало ясніше.

Важливо, не пропустіть цей рядок:

Using Microsoft.Win32;

Метод, який я написав, виглядає так:

Public void KillCtrlAltDelete() ( RegistryKey regkey; string keyValueInt = "1"; string subKey = @"Software\Microsoft\Windows\CurrentVersion\Policies\System"; try ( regkey = Registry.CurrentUser.CreateSubKey(subKey); regkey.SubKey); ("DisableTaskMgr", keyValueInt); regkey.Close(); ) catch (Exception ex) ( MessageBox.Show(ex.ToString()); ) )

Таким чином, ми подбали про зміну значення комбінації CTRL-ALT-DEL. Розглянемо інші поєднання. Можливо, вам могло здатися складним, але це простіше простого. Як вимкнути ALT + F4? Усього 5 рядків коду:

Private void Form1_FormClosing(object sender, FormClosingEventArgs e) ( e.Cancel = true; base.OnClosing(e); )

Добре. Про решту довелося багато читати і зараз важко назвати точно ті статті, які мені допомогли розібратися, але з усіх було штук 15, які містили хоч якусь корисну інформацію. Я дам вам метод, який називається хук. Фрагмент коду використовує LowLevelKeyboardProc, який:

Процедура LowLevelKeyboardProc - це програмно визначена або бібліотечно визначена процедура виклику функції, яка використовується разом із функцією SetWindowsHookEx. Система викликає цю функцію щоразу, коли подія введення з клавіатури ось-ось буде розміщено у черзі потоку введення. Введення з клавіатури може пройти через драйвер або через функцію keybdevent. Якщо виклик стався через виклик keybdevent, він був «введений» (injected). Тим не менш, хук WHKEYBOARDLL не впроваджується в інший процес. Натомість контекст перемикається на інший процес, на який встановлений хук і викликається в початковому вигляді. Потім контекст перемикається назад на додаток, який викликав цю подію.

І знову, не забудьте:

За допомогою System.Runtime.InteropServices; використовуючи System.Security.Principal; використовуючи System.Diagnostics;

Тут все інше, що може ще вам знадобитися:

Public static extern int SetWindowsHookEx(int ​​idHook, LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId); public static extern int UnhookWindowsHookEx(int ​​hHook); public delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam); public static extern int CallNextHookEx(int ​​hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam); public const int WH_KEYBOARD_LL = 13; /*code необхідна для запуску start menu*/ private static extern int FindWindow(string className, string windowText); private static extern int ShowWindow(int hwnd, int command); private const int SW_HIDE = 0; private const int SW_SHOW = 1; public struct KBDLLHOOKSTRUCT ( public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; ) public static int intLLKey; public int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam) ( bool blnEat = false; switch (wParam) ( case 256: case 257: case 260: case 261: //Alt+Tab, Alt+ , Windows Key, blnEat = ((lParam.vkCode == 9) && (lParam.flags == 32)) |((lParam.vkCode == 27) && (lParam.flags == 32)) | vkCode == 27) && (lParam.flags == 0)) |((lParam.vkCode == 91) && (lParam.flags == 1)) | == 1)) |((lParam.vkCode == 73) && (lParam.flags == 0)); wParam, ref lParam); ) ) public void KillStartMenu() ( int hwnd = FindWindow("Shell_TrayWnd", ""); WH_KEYBOARD_LL, LowLevelKeyboardProc, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()).ToInt32(), 0);
Очевидно, що ви можете програмно повернути всі значення, знову включивши всі поєднання:
public static void ShowStartMenu() ( int hwnd = FindWindow("Shell_TrayWnd", ""); ShowWindow(hwnd, SW_SHOW); ) public static void EnableCTRLALTDEL() Policies\System"; RegistryKey rk = Registry.CurrentUser; RegistryKey sk1 = rk.OpenSubKey(subKey); if (sk1 != null) rk.DeleteSubKeyTree(subKey); ) catch (Exception ex) ( MessageBox.Show( ()); ) ) private void Form1_FormClosing(object sender, FormClosingEventArgs e) ( UnhookWindowsHookEx(intLLKey); )

Від себе доповню, що в.NET4 код виду:

IntLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()).ToInt32(), 0

Не працює. Потрібно писати щось на кшталт:

Var inst = LoadLibrary("user32.dll").ToInt32(); intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, inst, 0);

Ну і на початок коду структури AddHooks, серед іншого імпорту зробити:

LoadLibrary: public static extern IntPtr LoadLibrary(string lpFileName);

Сподіваюся, переклад вийшов не зовсім поганий і виявиться комусь корисним.

Незважаючи на те, що багато хто вже перейшов на windows 10, я досі залишаюся на 7. І, днями сам зіткнувся з проблемою запуску свого комп'ютера, коли мені здалося сповіщення з горезвісною комбінацією клавіш Ctrl + Alt + Delete. При натисканні яких все повторювалося знову і знову.

Після виправлення вирішив написати статтю/інструкцію, як позбутися цієї помилки, чому не включається комп'ютер, пише Ctrl+Alt+Del.

Причини виникнення цієї помилки BOOTMGR

Якщо вникнути в суть повідомлення, можна з'ясувати, що помилка виходить через стиснення файлу BOOTMGR.
З цієї причини Windows не має можливості виконати завантаження, про що і говорять повідомлення, що з'являються.

Після натискання клавіш відбувається перезавантаження комп'ютера, але часто-густо знову при включенні комп'ютера пише Ctrl+Alt+Del.

Вся основа цієї помилки полягає в тому, що на жорсткому диску підключено опцію стиснення інформації, яка допомагає заощаджувати місце на носії.

Щоб ніколи не зустрітися з такою проблемою, варто подивитися, чи відмічено параметр "стиснути диск для економії місця".

Якщо варто, значить, її потрібно прибрати, інакше ви на практиці дізнаєтесь, що це за проблема.
На превеликий жаль, це недоробка фахівців Microsoft, система запуску не здатна обійти стиснення системного диска.

Ще однією причиною виникнення цієї проблеми може бути те, що системний диск "глючить" через помилки роботи контролера або на ньому є пошкодження. У такій ситуації заміна диска буде найвірнішим рішенням.

Як можна прибрати ctrl+alt+del під час завантаження Windows

Тепер спробуємо розібратися, що робити, якщо при запуску комп'ютера просить натиснути Ctrl+Alt+Del?

Функцію розтискання файлу за вказівками системи розробники не передбачили.
Через це можливість відновити файл з'являється, тільки якщо користувач має інсталяційний диск, що містить вихідну версію.

Для початку потрібно вставити диск у привід та спробувати перезавантажити систему.

Якщо спроби не мали успіху, слід зайти в БІОС і задати CD програвач як завантажувальний пристрій.

Через кілька хвилин, з'явиться вікно, де буде запропоновано вибрати мову.
Вибираємо російську мову та натискаємо «далі», після появи «відновлення системи» потрібно натиснути «продовжити».

Після цього має розпочатися пошук ОС, встановлених на комп'ютері. Вам потрібно буде вибрати систему.
Натискаємо Windows 7, потім «далі», слідом з'явитися вікно з різними методами відновлення, вибираємо «командний рядок».

Після появи чорного вікна, пишемо в ньому за вказаним порядком:
C: → тиснемо Enter

bootrec /fixmbr → тиснемо Enter

Якщо потрібно підтвердження, то ще раз тиснемо кнопку Enter.

Тепер залишилося дістати інсталяційний диск та перезавантажити систему.

Якщо все буде зроблено за інструкцією, помилка зникне.

Але, може вийде так, а точніше не вийде, то, тільки . Якщо були дані на комп'ютері і їх треба зберегти, вихід один, ставити систему без форматування диска поверх старої. Після такої установки, спочатку забрати потрібні дані і потім зробити повторну установку, але вже розумно і з форматуванням диска.

carnage33 25-10-2010 09:59

Вітаю шановне співтовариство!
Власне, сабж – переставив учора знайомому свині. Однією зі скарг знайомого було те, що "якось не так настроєна клава", зокрема CTRL+ALT+DEL. Буцімто якийсь його приятель змінив йому раніше цю комбінацію на іншу, яку мій товариш благополучно забув.
Однак і після переустановки системи CTRL+ALT+DEL благополучно не спрацьовує. Підкажіть, знаючі люди, де тут одвірок?
P.S. Перевстановлення робив, звичайно, не через ці кнопки. Мене здивувало, що трабл із включенням диспетчера залишився й у новій системі.

Леонід Ілліч 25-10-2010 10:10

залежить від налаштувань входу в систему: якщо пароль вимкнено, вікно з кнопками "заблокувати" і т.п. з'являтися нічого очікувати.

carnage33 25-10-2010 10:28

Пароль вимкнено. І що в цьому вікні налаштовують комбінації кнопок?

Леонід Ілліч 25-10-2010 10:59

ніде комбінації не налаштовуються. якщо пароль увімкнути тоді і буде те, що ви хочете.

badydoc 25-10-2010 11:58

1. а якщо на малюнку БІОС натискати CTRL+ALT+DEL, комп'ютер перезавантажується?
1а - якщо ні, значить справа у клавіатурі
1б - якщо так, то справа у вінді.

flipper-s 25-10-2010 15:38

Якщо Ви не можете увійти до диспетчера? то мабуть зі старої системи залишився вірус. Що його блокує.
У мене він вирубується після збою вінди або після глибокої антивірусної перевірки.

Куш-тенгрі 25-10-2010 17:09

Встановлювали "з нуля"? З переформатування системного розділу? Чи "тупо поверх" попередньої?

Frank59 25-10-2010 19:03

=
CTRL+SHIFT+ESC
Пробуйте!

carnage33 25-10-2010 21:20

quote: Originally by flipper-s:

Якщо Ви не можете увійти до диспетчера? то мабуть зі старої системи залишився вірус.


quote: Originally posted by Куш-тенгрі:

Встановлювали "з нуля"? З переформатування системного розділу?


Так, саме так. Втім диск D не форматував.

flipper-s 25-10-2010 22:40

quote: диск D не форматовано.

А чи там є системні папки? System Volume Information – ось така наприклад?
Найголовніший вірусозбірник, та джерело помилок.
Якщо залишилася - спробуйте її затерти або перейменувати (з Лайф-CD). І по новій перевстановити.

Добридень. Нарешті я сів писати першу статтю цього року. Якось зовсім розслабився за такі довгі новорічні свята, вже навіть минув один робочий тиждень, і ми його успішно пережили. А ще я тепер записаний на турнірі BFCL Cup#7 і хоча навряд чи ми вийдемо хоча б у чверть фіналу (не так моя команда задроти), але тренування йдуть і часу на сайт залишається мало. Але вистачить виправдовувати, зараз я пишу і це добре.

Отже, суть проблеми проста: якимось чином на ваш комп'ютер потрапив вірус, ви його вже видалили за допомогою Dr.Web CureIT або Kasperskiy LiveCD, але в систему вже були внесені деякі неприємні зміни, наприклад, або навіть немає можливості відкрити диспетчер завдань. І якщо про перший випадок я вже писав, то про другий розповім зараз. Взагалі, після позбавлення вірусу я завжди раджу зробити. І вам я теж рекомендую це зробити, перш ніж починати діяти за інструкцією.

Відновлення через редактор групових політик

Не підходить для базових версій Win8 та Win 7.

Цей спосіб не є універсальним, оскільки Microsoft затиснули установку редактора групових політик у базові та найпростіші домашні версії своїх операційних систем. Але якщо у вас випуск Win8 pro, Win7 Home Premium або вище, тоді вам він підходить. Все-таки він зручніший спосіб.


Відновлення через редактор реєстру

Цей метод є універсальним.

На цьому все. Сподіваюся, ця стаття виявилася вам корисною, натисніть одну з кнопок нижче, щоб розповісти про неї друзям. Також підпишіться на оновлення сайту, ввівши свій e-mail у поле праворуч або підписавшись на групу у Вконтакті.

Запитання: Win10 не працює поєднання клавіші alt+tab


Добридень.

Суть:
1. Встановив оновлення на гру (офіційна клієнтська).
2.перевантажив систему.
3.гра у вікні.
4. не працює поєднання alt + tab (перемикання між вікнами, не тільки в грі, але і всій системі)
5. також виявив, що не працює поєднання клавіш alt+shift
6. alt + tab - з'явилася у поєднання нова функція (перехід по рядках або шапках в активному вікні (вікна так само не перемикає))

Як намагався лікувати:
1. змінив поєднання клавіш для перемикання мови (ctrl + shift - працює)
2. повернув поєднання клавіш для перекладу мови. (alt+shift – не працює)
3. win+space - працює
4. скачав останні оновлення для win10 – не допомогло
5. відкотив систему на пару днів - відкат не пройшов через якусь там помилку

Запитання:
підкажіть, як мені зробити щоб поєднання клавіш alt+shift and alt+tab - працювали по старому?

Відповідь:мені моторошно не спритно) але виявилося у мене сама нубська проблема) дійсно клавіша АЛт зламалася) вперше таке бачу)

Додано через 20 секунд
всім дякую хто приділив ламеру час)

Питання: Перестали працювати поєднання клавіш


проблема наступного другого дня не працюють поєднання клавіш ctrl+c, ctrl+v і т.д. так само не працюють усі верхні цифри 1234567890 у поєднанні з shift мову не можу поміняти лівим alt+shift доводиться міняти правим.
підключав до комп'ютера іншу клавішу проблема залишилася.
як все повернути7
7- у разі знак питання

Відповідь:Всім велике спасибі, причина була у прозі ProgDVB!

Питання: Перестало працювати клавіші Win + E


Здрастуйте, відучора перестало працювати поєднання Win + E може хто знає в чому проблема? Зазделегідь дякую.

Відповідь:Вирішення деяких типових проблем клавіатури:
Клавіатура взагалі не працює.
**Windows не розпізнає клавіатуру або деякі клавіші.
Деякі кнопки залипають.
Символи на клавіатурі не відповідають символам, які відображаються на моніторі.
Клавіші SHIFT, CTRL, ALT чи Windows не працюють, як очікується.

Додано через 31 хвилину
І ще; ви намагалися іншу клаву підключити? Якщо ні спробуйте (працюватиме чи ні).

Питання: поєднання клавіш для всіх у домені


Народ добрий день.
Таке завдання задали, потрібно щоб у всіх користувачів, на всіх ПК що знаходяться в домені за заданим поєднанням клавіш запускалося RDP підключення, тобто користувач прийшов, пк включив, дані ввів, на свій робочий стіл зайшов, а потім натиснув наприклад ctrl+alt +q і вуаля запустилося RDP підключення до сервера, ніби він на його ярличок на робочому столі тицьнув, але при цьому ярликів бути не повинно. Підозрюю що це через групову політику треба зробити, проте там нічого не знайшов про поєднання клавіш, допоможіть люди добрі) Контролер домену природно

Відповідь:або просто брати софт для створення гарячих клавіш і розгортати його скрізь.
як альтернативний варіант - простенький демон на якомусь автоіті (або логон-скрипт з нескінченним циклом, або відповідна служба), яка буде при певних натисканнях запускати РДП-шку

Питання: Після аматорського "фіксу" перестали працювати поєднання клавіш


Всім привіт.
Почалося все з того, що у мене вилізла якась хрень нібито "Ваша копія Windows не є справжньою".
Знайшов якийсь рандом гайд як це фіксувати, там треба було качати якийсь завантажувач w7lx (начебто не вірус хз). Коротше юзнув цей завантажувач, після чого комп ребутнувся і вивалилося меню з вибором чого завантажувати: стандартну вінду або стандартну вінду w7lx. Коли тиснув клавіші комп'ютер використовується, абсолютно будь-яку клавішу. Ну в результаті я просто зачекав 30 секунд і воно завантажило винду з позначкою w7lx.
Все начебто пофіксувалося, але тепер у мене не працює аль+таб, некоректно працює контрол, іноді підвисає та не вивалюється контекстне меню, і я не можу змінювати розмір колонок у якихось таблицях і взагалі не пересуваються ні файли, ні значки. Тобто я тисну на ярлик на робочому столі, він вирізняється, намагаюся перетягнути і він навіть з місця не рухається. Перевірив нодом на віруси, чи не знайшло.
Пробував відновити систему – не допомогло
Завантажувався у безпечному режимі – проблема залишилася.
Я б зніс вінду але нема з чого зараз її встановити, тому треба вирішувати проблему без цього
Що це може бути? В інеті я так і не зміг набридити адекватних відповідей.

Відповідь:АВЗ також нічого не знайшов. Шкідливих прогармм - 0

Додано через 12 хвилин
Все пофіксувалося простим чищенням клавіатури. Я не думав що я на стільки рак

Питання: Windows: призначити вставку символу на клавіші.


Власне питання: чи можна якимось способом призначити вставку символу на поєднання клавіш, так щоб працювало в будь-якій програмі, подібно до того, як працює Alt+цифровий код?
Тому що є символи, які мені часто потрібні, а через Alt вводити їх довго і складно.

Відповідь: ╝╝+

Питання: Як перевести клавіші ctrl+v на, наприклад ctrl+z?


Власне проблема полягає ось у чому: у мене на ноутбуці відмовили клавіші (пробіл, я, м, і, е, del, стрілка вниз, 6 на правій стороні) у зв'язку з цим виникли великі труднощі. Поки що, зараз загналася думкою у тому як перекласти поєднання клавіш ctrl+v на, наприклад ctrl+z, т.к. вставка та копіювання тексту мені ой як потрібно .... І ще, якщо хтось знає чому це все трапилося, напишіть будь ласка (знаю, це вже інша тема).