ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

C#+WinAPI отправка сообщений в окно
  #1  
Старый 15.04.2010, 10:33
FlyBird
Познающий
Регистрация: 14.10.2007
Сообщений: 47
Провел на форуме:
91186

Репутация: 18
По умолчанию C#+WinAPI отправка сообщений в окно

У меня возникла проблема.
Не получается отправить в окно сообщение о нажатой кнопке F1
Капаюсь уже в таблицах ассема, в лекциях с инста, но разве в них что-то найдешь после 2-х лет перекладывания с места на место.
/
Код:
//**********WinAPI функции*********

        [DllImport("user32.dll", EntryPoint = "FindWindow")] 
        private static extern IntPtr FindWindow(string _ClassName, string _WindowName); 
 
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")] 
        private static extern IntPtr FindWindowEx(IntPtr hwndPrnt, IntPtr hwndChildAfter, string _ClassName, string _WindowName); 

        [DllImport("user32.dll", CharSet = CharSet.Auto)] 
        public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int DestroyWindow(IntPtr hWnd);

//*********/WinAPI функции*********



**********WinAPI константы*********
        const int BM_SETSTATE = 243; 
        const int WM_LBUTTONDOWN = 513; 
        const int WM_LBUTTONUP = 514; 
        const int WM_KEYDOWN = 256; 
        const int WM_CHAR = 258; 
        const int WM_KEYUP = 257; 
        const int WM_SETFOCUS = 7; 
        const int WM_SYSCOMMAND = 274; 
        const int SC_MINIMIZE = 32;
        const int WM_CLOSE = 0x0010;
//*********/WinAPI константы*********

...
...
...
private void SentMes_Click(object sender, EventArgs e)
{

            IntPtr hWnd = FindWindow(null, comboBox1.SelectedItem.ToString()); 
            IntPtr t1;
            if (hWnd == IntPtr.Zero) 
            { 
                MessageBox(new IntPtr(0), "Not found main", "Error", 0);
                return; 
            }
            

            retValue = SendMessage(hWnd, WM_SETFOCUS, nul, nul);
            retValue = SendMessage(hWnd, WM_KEYDOWN, t1, nul);
            retValue = SendMessage(hWnd, WM_KEYUP, t1, nul);
}
Где-то тут зарылся косяк.
В тестируется все в блокноте. Сообщения о нажатых символах идут. Но если отправить код 112, то напишется буква. Помню, что у системных клавишь 2 кода, но вот хоть убейте, не могу вспомнить второй и как его отправить.

Может кто чем поможет?
 
Ответить с цитированием

  #2  
Старый 15.04.2010, 22:34
Feonor
Участник форума
Регистрация: 23.07.2008
Сообщений: 202
Провел на форуме:
3075657

Репутация: 122
Отправить сообщение для Feonor с помощью ICQ
По умолчанию

какая буква пишется?)
 
Ответить с цитированием

  #3  
Старый 15.04.2010, 23:57
flacs
Познающий
Регистрация: 28.01.2009
Сообщений: 90
Провел на форуме:
432613

Репутация: 80
По умолчанию

На Delphi
Цитата:
procedure SendShift(H: HWnd; Down: Boolean);
var vKey, ScanCode, wParam: Word;
lParam: longint;
begin
vKey:= $10;
ScanCode:= MapVirtualKey(vKey, 0);
wParam:= vKey or ScanCode shl 8;
lParam:= longint(ScanCode) shl 16 or 1;
if not(Down) then lParam:= lParam or $C0000000;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
end;

procedure SendCtrl(H: HWnd; Down: Boolean);
var vKey, ScanCode, wParam: Word;
lParam: longint;
begin
vKey:= $11;
ScanCode:= MapVirtualKey(vKey, 0);
wParam:= vKey or ScanCode shl 8;
lParam:= longint(ScanCode) shl 16 or 1;
if not(Down) then lParam:= lParam or $C0000000;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
end;


procedure SendKey(H: Hwnd; Key: char);
var vKey, ScanCode, wParam: Word;
lParam, ConvKey: longint;
Shift, Ctrl: boolean;
begin
ConvKey:= OemKeyScan(ord(Key));
Shift:= (ConvKey and $00020000) <> 0;
Ctrl:= (ConvKey and $00040000) <> 0;
ScanCode:= ConvKey and $000000FF or $FF00;
vKey:= ord(Key);
wParam:= vKey;
lParam:= longint(ScanCode) shl 16 or 1;
if Shift then SendShift(H, true);
if Ctrl then SendCtrl(H, true);
SendMessage(H, WM_KEYDOWN, vKey, lParam);
SendMessage(H, WM_CHAR, vKey, lParam);
lParam:= lParam or $C0000000;
sleep(50);
SendMessage(H, WM_KEYUP, vKey, lParam);
if Shift then SendShift(H, false);
if Ctrl then SendCtrl(H, false);
end;
SendKey(FindWindow(),'F');
 
Ответить с цитированием

  #4  
Старый 16.04.2010, 00:19
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

Key.F1 слать пробовал?
 
Ответить с цитированием

  #5  
Старый 16.04.2010, 10:01
FlyBird
Познающий
Регистрация: 14.10.2007
Сообщений: 47
Провел на форуме:
91186

Репутация: 18
По умолчанию

Мне же не только F1 отправить нужно. Но и F2, F3, F4 и т.д.
Вообще системные клавиши.
 
Ответить с цитированием

  #6  
Старый 16.04.2010, 10:29
flacs
Познающий
Регистрация: 28.01.2009
Сообщений: 90
Провел на форуме:
432613

Репутация: 80
По умолчанию

коды виртуальных клавиш
F1 - F12 (112 - 123), соотвественно

Пример отправки F1

Цитата:
SendKey(FindWindow(),chr(112));
 
Ответить с цитированием

  #7  
Старый 16.04.2010, 14:17
FlyBird
Познающий
Регистрация: 14.10.2007
Сообщений: 47
Провел на форуме:
91186

Репутация: 18
По умолчанию

Цитата:
Сообщение от flacs  
коды виртуальных клавиш
F1 - F12 (112 - 123), соотвественно

Пример отправки F1

Вероятно вы просто не заметили. Одно из этих числ было указано в первом топике (112). Если послать сообщение с кодом 112 то окно поймет, что вы ему шлете код символа, который похож на "р", а не как не F1.
Попробуйте в блокном отправить код 116 (вроде как F5 должно быть). Если в блокноте появится дата и время, то это действительно F5. Но скорее всего будет символ.

У системных клавишь 2 кода. Один совпадает с символом, другой говорит ОС, что была нажата системная клавишь.
 
Ответить с цитированием

  #8  
Старый 16.04.2010, 14:51
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Вообщем проблема может быть еще в том что ты не в то окно шлеш. Попробуй дочернии поперебирать.
 
Ответить с цитированием

  #9  
Старый 16.04.2010, 15:07
FlyBird
Познающий
Регистрация: 14.10.2007
Сообщений: 47
Провел на форуме:
91186

Репутация: 18
По умолчанию

Окно то. Сообщение о закрытии окна получает то окно, которое я хочу закрыть.
Что качается блокнота. Если я хочу написать символ, то он его пишет. Коды верно воспринимает, а вот системные кнопки нет
 
Ответить с цитированием

  #10  
Старый 16.04.2010, 15:55
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

http://www.edgeofnowhere.cc/viewtopic.php?t=396398
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
my.mail.ru отправка сообщений. GreenBear Социальные сети 0 10.03.2010 21:15
Отправка Bluetooth сообщений Fristail Сотовый фрикинг 5 31.10.2009 12:52
Окно с кнопкой на Api je0n Авторские статьи 1 09.11.2006 02:03



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ