ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

PostMessage - C#
  #1  
Старый 22.08.2009, 15:12
QJHoly
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме:
115313

Репутация: 1
По умолчанию PostMessage - C#

Мне нужно в окне напечатать определенный текст те мне нужен метод в который посылаешь строчку и она печатается. В моем методе реализованная работа с буфером обмена, но мне нужно чтоб именно кнопка за кнопкой нажималась. Помогите написать метод в котором не используется буфер обмена. Нужно с помощь функции PostMessage так как она работает даже без фокуса на окне что и нужно. Вот кстати метод который работает через буфер обмена.
Код:
public static void SendTextToNotepad(string text)
       {
           try
           {
               string data = Conversions.ToString(Clipboard.GetData(DataFormats.Text));
               Clipboard.SetDataObject(text, true);
               if (Operators.ConditionalCompareObjectEqual(Clipboard.GetData(DataFormats.Text), text, false))
               {
                   PostMessage(mem.WindowHandle, 0x100, 13, (int)IntPtr.Zero);
                   PostMessage(mem.WindowHandle, 0x101, 13, (int)IntPtr.Zero);
                   Thread.Sleep(50);
                   PostMessage(mem.WindowHandle, 0x100, 0xa2, (int)IntPtr.Zero);
                   PostMessage(mem.WindowHandle, 0x100, 0x56, (int)IntPtr.Zero);
                   Thread.Sleep(200);
                   PostMessage(mem.WindowHandle, 0x101, 0xa2, (int)IntPtr.Zero);
                   Thread.Sleep(50);
                   PostMessage(mem.WindowHandle, 0x100, 8, (int)IntPtr.Zero);
                   Thread.Sleep(50);
                   PostMessage(mem.WindowHandle, 0x100, 13, (int)IntPtr.Zero);
                   PostMessage(mem.WindowHandle, 0x101, 13, (int)IntPtr.Zero);
                   PostMessage(mem.WindowHandle, 0x101, 0x56, (int)IntPtr.Zero);
                   PostMessage(mem.WindowHandle, 0x101, 8, (int)IntPtr.Zero);
                   Clipboard.SetDataObject(data, true);
               }
           }
           catch (Exception exception1)
           {
               ProjectData.SetProjectError(exception1);
               Exception exception = exception1;
               ProjectData.ClearProjectError();
           }
         // return 0;
       }
 
Ответить с цитированием

  #2  
Старый 22.08.2009, 16:28
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

ну это ты загнул =\

это без нажатия:
все что тебе нужно это:
1. FindWindow
2. FindWindowEx
3. SetWindowText

это WinAPI функции.
Описание в msdn, а описание импорта на http://pinvoke.net

с нажатием:
Если код твой:
System.Windows.Forms.SendKeys
Если не твой:
keybd_event
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 22.08.2009 в 16:32..
 
Ответить с цитированием

  #3  
Старый 22.08.2009, 16:45
QJHoly
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме:
115313

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

Цитата:
Сообщение от W!z@rD  
ну это ты загнул =\

это без нажатия:
все что тебе нужно это:
1. FindWindow
2. FindWindowEx
3. SetWindowText

это WinAPI функции.
Описание в msdn, а описание импорта на http://pinvoke.net

с нажатием:
Если код твой:
System.Windows.Forms.SendKeys
Если не твой:
keybd_event
Нужно именно PostMessage так окно одной игры + там есть система защиты и нужно эмулировать нажатие клавишь. Только как сделать чтобы он строчку текста печатал по одному символу можно конечно прописать каждую кнопку но это будет громоздко так как нужно на нескольких языках.

Последний раз редактировалось QJHoly; 22.08.2009 в 16:53..
 
Ответить с цитированием

  #4  
Старый 22.08.2009, 16:55
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

нда...
на почитай:
http://msdn.microsoft.com/ru-ru/library/ms646304(en-us,VS.85).aspx

Функция keybd_event

(событие_клавиатуры)

Функция keybd_event синтезирует нажатие клавиши. Система может использовать такое синтезируемое нажатие клавиши, чтобы создать сообщение WM_KEYUP или WM_KEYDOWN. Вызывает функцию keybd_event программа обработки прерываний драйвера клавиатуры.
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #5  
Старый 22.08.2009, 17:08
QJHoly
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме:
115313

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

А через PostMessage вообще не как ?
Код:
PostMessage(mem.WindowHandle, 0x100, 0x46, (int)IntPtr.Zero);
PostMessage(mem.WindowHandle, 0x100, 0x46, (int)IntPtr.Zero);
Просто тут Я эмулирую нажатие клавиши F (0x46) и хотелось бы понять как сделать чтобы через цикл подставлялись клавиши которые нужно нажимать. Только я не понимаю как сделать чтобы из string типа каждый символ определялся.
 
Ответить с цитированием

  #6  
Старый 22.08.2009, 17:57
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

Console.WriteLine(Keys.Z);
Console.WriteLine((int) char.Parse("z"));

оно?!
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 22.08.2009 в 18:00..
 
Ответить с цитированием

  #7  
Старый 22.08.2009, 18:07
QJHoly
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме:
115313

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

Вот так печатается символ z на русском раскладе я.
Код:
PostMessage(mem.WindowHandle, 0x100, (int)Keys.Z, 0x101);
Но как тогда определить какой русский символ какой английский потому что строчка может содержать как русские символы так и английские + знаки типа ; / * ()
Если пробовать
Код:
PostMessage(mem.WindowHandle, 0x100,(int)char.Parse("z") 0x101);
не чего ни печатается.

Последний раз редактировалось QJHoly; 22.08.2009 в 18:38..
 
Ответить с цитированием

  #8  
Старый 22.08.2009, 20:09
_==wolf==_
Участник форума
Регистрация: 29.05.2008
Сообщений: 181
Провел на форуме:
979048

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

SendKeys.Send("ololo{ENTER}");
SendKeys.SendWait("ololo{ENTER}");
второе ждет пока процесс обработает нажатия, первое нет. соотв. первое быстрее. но оно печатает не по хендлу а в том поле куда установлен курсор. тоесть делаем задержку на 3 секунды перед печатью чтобы успеть поставить курсор куда надо.
 
Ответить с цитированием

  #9  
Старый 22.08.2009, 20:18
QJHoly
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме:
115313

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

Цитата:
Сообщение от _==wolf==_  
SendKeys.Send("ololo{ENTER}");
SendKeys.SendWait("ololo{ENTER}");
второе ждет пока процесс обработает нажатия, первое нет. соотв. первое быстрее. но оно печатает не по хендлу а в том поле куда установлен курсор. тоесть делаем задержку на 3 секунды перед печатью чтобы успеть поставить курсор куда надо.
Читай внимательно топик перед тем как написать. Мне нужно печатать без фокуса на окне.
 
Ответить с цитированием

  #10  
Старый 23.08.2009, 21:25
QJHoly
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме:
115313

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

Код:
[DllImport("user32.dll")]
       static extern short VkKeyScan(char ch);

       public static void Edit()
       {
           PostMessage(mem.WindowHandle, 0x100, VkKeyScan('F'), 0x101);

       }
Вот так можно определять символ только вот еще одна проблема как определить с большой буквы печатать или с маленькой + как определить русский к примеру алфавит так как если расклад клавиатуры ру а печатаешь англ символ он печатает ру символ который находится на той же клавише что и англ.
 
Ответить с цитированием
Ответ





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


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




ANTICHAT.XYZ