.NET Simulate Ctrl + Alt + Del Sendkeys
11753 просмотра
6 ответа
все сказано в названии, как я могу имитировать комбинацию Ctrl+ Alt+ DEL?
Я попробовал это:
SendKeys.Send("^(%({DEL}))")
SendKeys.Send("^(%{DEL})")
SendKeys.Send("^%{DEL}")
Но никто не работал. Я работаю на VB.NET и Windows XP SP3
Автор: GianT971 Источник Размещён: 12.11.2019 09:17Ответы (6)
5 плюса
Ты не можешь Это делается на уровне драйвера устройства, вы не можете подделать ввод для драйвера клавиатуры. Также причина, по которой вы не можете отключить его. Разрешить его подделку, конечно, было бы очень серьезным недостатком безопасности.
Автор: Hans Passant Размещён: 18.02.2011 10:525 плюса
Начиная с Windows Vista, вы можете использовать эту SendSAS
функцию.
Оригинальный ответ, теперь заменен вышеуказанным
Нужная функция называется SimulateSAS
. Вам необходимо отправить электронное письмо по адресу saslib@microsoft.com и попросить об этом. Microsoft, похоже, не документирует это, а просто проводит веб-поиск, SimulateSAS
и вы поймете, что я имею в виду.
Другие объяснили , почему на самом деле это не проблема безопасности , чтобы приложения для запуска CTRL+ ALT+ DEL, но вы , конечно , не можете сделать это с SendKeys
.
4 плюса
Лучше всего было бы скачать исходный код TightVNC и посмотреть, как они это делают.
Автор: Robert Harvey Размещён: 18.02.2011 11:073 плюса
Посмотрите эту ветку для некоторой информации, которая кажется полезной:
В основном:
- Ваша программа должна быть подписана
- Ваша программа должна иметь манифест с указанием необходимых привилегий
- Ваша программа должна находиться в защищенной папке (той, для которой требуется запись UAC, например, в папке Program Files)
Ваша программа может затем использовать следующий недокументированный API для его вызова:
DWORD dwRet = lpfnWmsgSendMessage(dwSessionId,0x208, 0, (LPARAM)&lParam); //Undocument API.
Обратите внимание, я только искал веб-страницу, на которую я ссылаюсь, я понятия не имею, работает ли она, или есть еще ошибки.
Автор: angry person Размещён: 18.02.2011 11:001 плюс
Наконец-то я нашел этот код C ++ в CodeProject, который хорошо работает при запуске как системный пользователь . Поэтому я преобразовал код в dll и вызвал функцию из моего кода.
Вот код c ++ (вы можете использовать пример функции ErrorExit, которая используется GetLastError
из MSDN в случае возникновения проблемы):
#include "windows.h"
#include <strsafe.h>
__declspec(dllexport) BOOL SimulateAltControlDel()
{
HDESK hdeskCurrent;
HDESK hdesk;
HWINSTA hwinstaCurrent;
HWINSTA hwinsta;
//
// Save the current Window station
//
hwinstaCurrent = GetProcessWindowStation();
if (hwinstaCurrent == NULL)
return FALSE;
//
// Save the current desktop
//
hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
if (hdeskCurrent == NULL)
return FALSE;
//
// Obtain a handle to WinSta0 - service must be running
// in the LocalSystem account
//
hwinsta = OpenWindowStation("winsta0", FALSE,
WINSTA_ACCESSCLIPBOARD |
WINSTA_ACCESSGLOBALATOMS |
WINSTA_CREATEDESKTOP |
WINSTA_ENUMDESKTOPS |
WINSTA_ENUMERATE |
WINSTA_EXITWINDOWS |
WINSTA_READATTRIBUTES |
WINSTA_READSCREEN |
WINSTA_WRITEATTRIBUTES);
if (hwinsta == NULL)
return FALSE;
//
// Set the windowstation to be winsta0
//
if (!SetProcessWindowStation(hwinsta))
return FALSE;
//
// Get the default desktop on winsta0
//
hdesk = OpenDesktop("Winlogon", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
if (hdesk == NULL)
return FALSE;
//
// Set the desktop to be "default"
//
if (!SetThreadDesktop(hdesk))
return FALSE;
PostMessage(HWND_BROADCAST,WM_HOTKEY,0,MAKELPARAM(MOD_ALT|MOD_CONTROL,VK_DELETE));
//
// Reset the Window station and desktop
//
if (!SetProcessWindowStation(hwinstaCurrent))
return FALSE;
if (!SetThreadDesktop(hdeskCurrent))
return FALSE;
//
// Close the windowstation and desktop handles
//
if (!CloseWindowStation(hwinsta))
return FALSE;
if (!CloseDesktop(hdesk))
return FALSE;
return TRUE;
}
Вам также необходимо добавить файл .def в проект, чтобы правильно экспортировать функцию (проект называется AltCtrlDelCpp) и сообщить компоновщику, что файл определения модуля - это этот файл.
;altctrldel.def
LIBRARY AltCtrlDelCpp
;CODE PRELOAD MOVEABLE DISCARDABLE
;DATA PRELOAD MOVEABLE
EXPORTS
SimulateAltControlDel
Затем в решении .NET вы добавляете dll в проект, настраиваете его так, чтобы он всегда копировался в выходной каталог, и вы просто используете DllImport для импорта функции:
Код C #
[DllImport(@"AltCtrlDelCpp.dll")]
static extern bool SimulateAltControlDel();
Код VB.NET
<DllImport("AltCtrlDelCpp.dll")> _
Private Function SimulateAltControlDel() As Boolean
В VB.NET вам также необходимо добавить атрибут в Sub Main:
<MTAThread()> _
Sub Main()
Тогда вам просто нужно вызвать SimulateAltControlDel
функцию и все. Обратите внимание, что у меня была эта работа только для консольных приложений , она не работала в приложениях winform.
1 плюс
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- .net Как создать новый экземпляр объекта из Типа
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- windows Эквивалент Windows «хороший»
- windows Реестр или INI-файл для хранения пользовательских настроек приложения
- windows Как я могу разработать для iPhone, используя машину для разработки Windows?
- windows Как настроить OpenFileDialog для выбора папок?
- vb.net Setting Objects to Null/Nothing after use in .NET
- vb.net Случайное целое число в VB.NET
- vb.net Лучший способ в asp.net заставить https для всего сайта?
- vb.net Кто-нибудь знает библиотеку для работы с парами количество / единица измерения?
- keyboard Лучшая клавиатура для пользовательского макета программирования на основе Дворака
- keyboard Какая * лучшая * беспроводная клавиатура / мышь для программистов?
- keyboard Обнаружение и действие на клавишах направления клавиатуры в Java
- keyboard Как убрать клавиатуру для UITextView с ключом возврата?