информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаПортрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
если хочется подключиться 13.08.01 04:13  Число просмотров: 759
Автор: Бяша <Biasha> Статус: Member
<"чистая" ссылка>
> Подключаться к программе вроде можно в NT (запускать свой
> поток в адресном пространстве чужой программы), а в W98
Только начиная с 2000.

Но если, например, у потока этого приложения есть очередь сообщений (а это, как мне показалось, действительно так), то можно поставить хук и послать ему сообщение. В обработчике хука создать поток после чего удалить хук.

Тока это действительно лишнее. А может и нет.
<programming>
[C++] как связаться с другой прогой.. 07.08.01 20:32  
Автор: zelych Статус: Member
<"чистая" ссылка>
есть две проги (соответственно первая и вторая).
первая только в бинарнике, вторую я сам написал..

проблема: надо первой проге в editBox записать некоторое значение, которое берётся из первой, а потом вывод первой послать во вторую..

если кто чего понял, ответьте пожалуиста..
Можно через окна. 08.08.01 12:13  
Автор: Glory <Mr. Glory> Статус: Elderman
<"чистая" ссылка>
Тактика такая: ищешь HWND главного окна первой проги. Далее ищешь HWND edit'a (FindWindowEx). получив HWND посылаешь ему собщение WM_GETTEXT, соответсвенно получаешь текст из edit'a. Чтобы изменить этот текст посылаешь edit'у WM_SETTEXT.
Пример:
// имя класса окна TDemoWnd
int main(int argc, char* argv[])
{
if ( (HWND hWnd = FindWindow("TDemoWnd", NULL)))
if ((hWnd = FindWindowEx(hWnd, NULL, "Edit", NULL)))
{
LPSTR text = new char[5];
SendMessage(hWnd, WM_GETTEXT, 5, (LPARAM) text); // получение текста
strcpy(text, "fuck");
// установка текста
SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)text);
delete[] text;
}
return 0;
}

PS:
1. Длина строки в 5 символов была взята произвольно, если текст может быть длинный - выделяй больше памяти.
2. Для выяснения именн классов окон можно использовать CopyX
3. Данная программа будет корректно работать только если у главного окна первой программы 1 дочерний edit.
а можно как-то к процессу подключиться?? 09.08.01 19:08  
Автор: zelych Статус: Member
<"чистая" ссылка>
фишка в том, что в текст в edit надо сначала вставить, потом нажать кнопочку, и из другого edit`а прочитать..
может, первую прогу маленько подправить как-то можно чтобы в обход edit`ов и кнопки обращаться к данным..
можно и без подключений 10.08.01 11:22  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> фишка в том, что в текст в edit надо сначала вставить,
> потом нажать кнопочку, и из другого edit`а прочитать..
> может, первую прогу маленько подправить как-то можно чтобы
> в обход edit`ов и кнопки обращаться к данным..

Подключаться к программе вроде можно в NT (запускать свой поток в адресном пространстве чужой программы), а в W98 можно вовсю использовать ReadProcessMemory/WriteProcessMemory, но зачем так сложно?

Насколько я понимаю, программа заранее известна. HWND на главное окно программы лучше получать через FindWindow, а на нужные button/editbox лучше, по-моему, попробовать WindowFromPoint/ChildWindowFromPoint, предварительно сделав главному окну ShowWindow с параметром SW_MAXIMIZE (после раскрытия на максимум главного окна все дочерние встанут по фиксированным координатам на экране, и по координатам их искать легче, чем по именам).

Теперь посылка сообщений. Посылать сообщения нужно с гарантией, что они будут полностью отработаны. Посылка кликов в чужую программу через SendMessage иногда может привести к зависанию (если в ходе обработки сообщения делаются перерисовки или должны открываться какие-нибудь диалоги). Относительно безопасный способ посылки кликов - PostMessage с последующим WaitForInputIdle, например кусок из одной моей программы:
l = y;
l <<= 16;
l |= x;
PostMessage(hWnd,WM_RBUTTONDOWN,0,l);
DWORD pid;
GetWindowThreadProcessId(hWnd,&pid);
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
WaitForInputIdle(h,INFINITE);
....
PostMessage(hMine,WM_RBUTTONUP,0,l);
WaitForInputIdle(h,INFINITE);
CloseHandle(h);

Теперь осталось немного - послать в editbox WM_SETTEXT, в button - WM_LBUTTONDOWN, потом WM_LBUTTONUP, и в другой edit - WM_GETTEXT.
если хочется подключиться 13.08.01 04:13  
Автор: Бяша <Biasha> Статус: Member
<"чистая" ссылка>
> Подключаться к программе вроде можно в NT (запускать свой
> поток в адресном пространстве чужой программы), а в W98
Только начиная с 2000.

Но если, например, у потока этого приложения есть очередь сообщений (а это, как мне показалось, действительно так), то можно поставить хук и послать ему сообщение. В обработчике хука создать поток после чего удалить хук.

Тока это действительно лишнее. А может и нет.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach