информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Все любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
если хочется подключиться 13.08.01 04:13  Число просмотров: 697
Автор: Бяша <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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach