Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

22.08.2009, 15:12
|
|
Новичок
Регистрация: 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;
}
|
|
|

22.08.2009, 16:28
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
ну это ты загнул =\
это без нажатия:
все что тебе нужно это:
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..
|
|
|

22.08.2009, 16:45
|
|
Новичок
Регистрация: 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..
|
|
|

22.08.2009, 16:55
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
нда...
на почитай:
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...
|
|
|

22.08.2009, 17:08
|
|
Новичок
Регистрация: 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 типа каждый символ определялся.
|
|
|

22.08.2009, 17:57
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
Console.WriteLine(Keys.Z);
Console.WriteLine((int) char.Parse("z"));
оно?!
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
Последний раз редактировалось W!z@rD; 22.08.2009 в 18:00..
|
|
|

22.08.2009, 18:07
|
|
Новичок
Регистрация: 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..
|
|
|

22.08.2009, 20:09
|
|
Участник форума
Регистрация: 29.05.2008
Сообщений: 181
Провел на форуме: 979048
Репутация:
101
|
|
SendKeys.Send("ololo{ENTER}");
SendKeys.SendWait("ololo{ENTER}");
второе ждет пока процесс обработает нажатия, первое нет. соотв. первое быстрее. но оно печатает не по хендлу а в том поле куда установлен курсор. тоесть делаем задержку на 3 секунды перед печатью чтобы успеть поставить курсор куда надо.
|
|
|

22.08.2009, 20:18
|
|
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме: 115313
Репутация:
1
|
|
Сообщение от _==wolf==_
SendKeys.Send("ololo{ENTER}");
SendKeys.SendWait("ololo{ENTER}");
второе ждет пока процесс обработает нажатия, первое нет. соотв. первое быстрее. но оно печатает не по хендлу а в том поле куда установлен курсор. тоесть делаем задержку на 3 секунды перед печатью чтобы успеть поставить курсор куда надо.
Читай внимательно топик перед тем как написать. Мне нужно печатать без фокуса на окне.
|
|
|

23.08.2009, 21:25
|
|
Новичок
Регистрация: 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)
|
|
|
|