Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
если хочется подключиться 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.
Но если, например, у потока этого приложения есть очередь сообщений (а это, как мне показалось, действительно так), то можно поставить хук и послать ему сообщение. В обработчике хука создать поток после чего удалить хук.
Тока это действительно лишнее. А может и нет.
|
|
|