|
Вопрос # 5 504/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Не могли бы Вы мне помоч. Мне очень необходима функция, которая способна считывать любое текстовое, числовое значение из Edit'a, например даже эту строку "слово123" и отправлять его в адрес какого либо процесса. То есть по принципу программы CheatEgine или ArtMoney. Есть чатная строка, которая отображает любой текст. Я хочу чтобы при нажатии на Button, происходила точная копия символов из Edit'a в адрес процесса, в чатную строку. Имя процесса и адрес строки известен.
Если Вы мне поможите я буду Вам очень благодарен! Заранее, спасибо. Евгений.
 |
Вопрос задал: RamzeS (статус: Посетитель)
Вопрос отправлен: 15 июля 2011, 07:02
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Короче, вот тебе простейший пример для Блокнота. Только для него!
Изучай, задавай вопросы, если чо. И помни, это только пример.
function TMainForm.FindNotepadEdit: HWND;
var
hNotepad: HWND;
begin
// поиск хэндла окна ввода Блокнота
Result:= 0;
hNotepad:= FindWindow('Notepad', nil);
if hNotepad <> 0
then Result:= FindWindowEx(hNotepad, 0, 'Edit', nil);
end;
procedure TMainForm.AppEventsIdle(Sender: TObject; var Done: Boolean);
begin
PostButton.Enabled:= Memo.Text <> '';
end;
procedure TMainForm.PostButtonClick(Sender: TObject);
var
hEdit: HWND;
LineIndex, SymbolIndex: Integer;
begin
// Постим мессадж
hEdit:= FindNotepadEdit();
if hEdit = 0
then begin
Application.MessageBox(PChar('Блокнот не запущен.'#13#10'Запусти его.'),
PChar('Ошибка'),
MB_OK + MB_ICONERROR);
Exit;
end;
if MsgRadioGroup.ItemIndex = 0
// постим с помощью WM_CHAR
then for LineIndex:= 0 to Memo.Lines.Count - 1 do
begin
for SymbolIndex:= 1 to Length(Memo.Lines[LineIndex]) do // построчно
SendMessage(hEdit, WM_CHAR, Integer(Memo.Lines[LineIndex][SymbolIndex]), 0); // посимвольно
SendMessage(hEdit, WM_CHAR, 13, 0); // добавляем символ переноса после каждой строки
end
// постим с помощью WM_SETTEXT
else SendMessage(hEdit, WM_SETTEXT, 0, Integer(PChar(Memo.Text)));
end;
Готовый ехе-шник прицепляю к ответу. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 15 июля 2011, 13:14
|
Мини-форум вопроса
Всего сообщений: 48; последнее сообщение — 16 июля 2011, 21:20; участников в обсуждении: 4.
Страницы: [1] [2] [3] [Следующая »]
|
min@y™ (статус: Доктор наук), 15 июля 2011, 08:15 [#1]:
Короче, включу телепатор.
Ты хочешь написать программу-флудер, которая будет отправлять в чат текст? Так что ли? Текст из твоей проги должен перебрасываться в окно отправки сообщений чужой чат-программы и отправляться в сеть?
Я такое когда-то в детстве делал. Даже исходники сохранились.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 09:10 [#2]:
Да именно "перебрасывать" текст. Это не для флуда.
Если у Вас остались исходные коды, не могли бы Вы ими поделиться?
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 09:31 [#3]:
Цитата (RamzeS):
Это не для флуда.
А для чего?
Цитата (RamzeS):
не могли бы Вы ими поделиться?
Вот передача строки посимвольно (имитация набора текста пользователем):
// s - передаваемая строка
// h - хэндл окна ввода текста
for i := 1 to Length(s) do
SendMessage(h, WM_CHAR, Integer(s[i]), 0);
Естественно, есть способ лучше, но, может быть, тебе и этого хватит?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 09:43 [#4]:
Можно поподробнее. Как это связать с адресом и процессом? Куда необходимо направлять текст.
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 09:49 [#5]:
Цитата (RamzeS):
Как это связать с адресом и процессом? Куда необходимо направлять текст.
Это не надо связывать с адресным пространством чужого процесса. Нужно просто найти хэндл окна ввода чужой программы и посылать ему сообщения.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 10:14 [#6]:
У меня есть вот такие функции:.
Что необходимо прописать в коде кнопки, чтобы получить ожидаемый результат?
|
|
Gooddy (статус: 3-ий класс), 15 июля 2011, 10:26 [#7]:
Цитата:
Мне очень необходима функция, которая способна считывать любое текстовое, числовое значение из Edit'a, например даже эту строку "слово123" и отправлять его в адрес какого либо процесса.
1. Edit свой?
2. слово123 -> 123?
3. Отправлять в адрес процесса значит эмулировать клавиатуру?
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 10:33 [#8]:
Цитата (Gooddy):
Что необходимо прописать в коде кнопки, чтобы получить ожидаемый результат?
Для начала выкинь этот код, он не имеет отношения к твоей задаче.
На OnClick твоей кнопки надо повесить примерно это:
// h - хэндл окна ввода текста
for i := 1 to Length(Edit.Text) do
SendMessage(h, WM_CHAR, Integer(Edit.Text[i]), 0);
Перед первым нажатием на кнопку нужно найти хэндл окна ввода чужой программы, в которую надо отправлять текст. Это делается с помощью функций FindWindow(), FindWindowEx(), EnumWindows(), EnumChildWindows().
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 10:35 [#9]:
Gooddy, Вы пользовались ArtMoney? Ищеш в процесе например текстовое значение "Пример", и потом меняешь его на "Помощь" В процессе происходит смена слова "Пример" на слово "Помощь". Именно это мне нужно делать только по нажатию кнопки. То есть как в ArtMoney, только не нужно искать адреса, и отсеивать, а просто вводишь, и заменяешь строку.
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 10:41 [#10]:
Цитата (RamzeS):
а просто вводишь, и заменяешь строку.
А причём здесь программа-чат?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 15 июля 2011, 10:45 [#11]:
Цитата:
Ищеш в процесе например текстовое значение "Пример", и потом меняешь его на "Помощь" В процессе происходит смена слова "Пример" на слово "Помощь". Именно это мне нужно делать только по нажатию кнопки. То есть как в ArtMoney, только не нужно искать адреса, и отсеивать, а просто вводишь, и заменяешь строку.
Чисти код! Чисти код! Чисти код!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 10:45 [#12]:
Принцип тот.
|
|
Gooddy (статус: 3-ий класс), 15 июля 2011, 10:47 [#13]:
Цитата:
То есть как в ArtMoney, только не нужно искать адреса, и отсеивать, а просто вводишь, и заменяешь строку.
Т.е. нужно найти строку в процессе и заменить её?
Чисти код! Чисти код! Чисти код!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 10:51 [#14]:
Да, по нажатию на кнопку. Только её не нужно искать, адрес строки мне известен.
|
|
Gooddy (статус: 3-ий класс), 15 июля 2011, 10:52 [#15]:
А если строка длиннее, чем та, что нужно заменить?
Чисти код! Чисти код! Чисти код!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 10:54 [#16]:
Объём строки не важен.
|
|
Gooddy (статус: 3-ий класс), 15 июля 2011, 10:58 [#17]:
Важен. Была строка на 3 символа, записал 100 символов -> треш, угар и содомия баги, вылеты и бсод.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 10:58 [#18]:
Цитата (RamzeS):
Объём строки не важен.
Ты чо, прикалываешься?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 11:00 [#19]:
Кстати, строка "привет" может быть какой-нить ассемблерной командой, её частью или частью нескольких команд. Что тогда?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
RamzeS (статус: Посетитель), 15 июля 2011, 11:00 [#20]:
Если это чатная строка, какая разница какой там объём? 100 символов там можно уместить. (макс)
|
Страницы: [1] [2] [3] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|