Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [3]  Все   Вниз
  Печать  
Автор Тема: Способы управления чужими программами?  (Прочитано 53620 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #60 : 02-04-2010 18:57 » 

вот я писал недавно программку, которая , вообще-то, должна была обеспечивать прикрытие, быстро вырубая контру (или даже, когда окно свёрнуто) по нажатию кнопки VK_SUBTRACT (серый минус)


Работает, правда жизнь показала, что быстрее всего контра вырубается по настройке в самой игре выхода на горячую клавишу "серый плюс" Отлично

* PRJ_ANTIPALEVO.rar (32.06 Кб - загружено 744 раз.)
« Последнее редактирование: 02-04-2010 19:30 от Алексей1153++ » Записан

Hadron
Участник

ru
Offline Offline

« Ответ #61 : 02-04-2010 19:00 » 

Улыбаюсь большое спасибо
Записан
Hadron
Участник

ru
Offline Offline

« Ответ #62 : 18-04-2010 13:43 » 

Код:
LRESULT CALLBACK SysMsgProc(

    int code, // hook code
    WPARAM wParam, // removal flag
    LPARAM lParam // address of structure with message
   )
{
//Передать сообщение другим ловушкам в системе
CallNextHookEx(SysHook, code, wParam, lParam);

    hwnd = FindWindow("ThunderRT6FormDC","Vzlom");
    hwnd = GetDlgItem(hwnd,0x00000002);
    //SendMessage(hwnd,WM_GETTEXT ,(WPARAM)0,(LPARAM)"uuu");
//int fty =((tagMSG*)lParam)->message;
//fty == "ddfffff";
    SendMessage(hwnd,WM_SETTEXT ,(WPARAM)0,(LPARAM)((tagMSG*)lParam)->message);
//Проверяю сообщение
if (code == HC_ACTION)
{
//Получаю идентификатор окна сгенерировавшего сообщение
Wnd=((tagMSG*)lParam)->hwnd;
       
//Проверяю тип сообщения.
//Если была нажата левая кнопка мыши
//и удержана кнопка Control, то ...
        if (((tagMSG*)lParam)->message == WM_RBUTTONDOWN)
{
            //SendMessage(hwnd,WM_SETTEXT ,(WPARAM)0,(LPARAM)"uuu");
SendMessage(Wnd, EM_SETPASSWORDCHAR, 0, 0);
InvalidateRect(Wnd, 0, true);
}
}

return 0;
}
Всем привет, у меня одна проблемка, не получается узнать какие сообщения поступают от приложений, вверху код вызываемой функции Хука, я нашел с помощью
Код:
hwnd = FindWindow("ThunderRT6FormDC","Vzlom");
    hwnd = GetDlgItem(hwnd,0x00000002);
этих строк нужный мне текст бокс и с помощью SendMessage(hwnd,WM_SETTEXT ,(WPARAM)0,(LPARAM)((tagMSG*)lParam)->message);  пытаюсь узнать какие сообщения получает приложения, но почему-то SendMessage(hwnd,WM_SETTEXT ,(WPARAM)0,(LPARAM)lParam); вот эта строка выводит какието символы, а та что повыше вообще ничего не выводит, хотя
Код:
if (((tagMSG*)lParam)->message == WM_RBUTTONDOWN)
срабатыват и нормально работает.
Вообще данный код призван убирать звездочки из парольного окна.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #63 : 18-04-2010 17:15 » 

Hadron, очень непонятно пишешь, сформулируй предложения нормально ))
Записан

Hadron
Участник

ru
Offline Offline

« Ответ #64 : 18-04-2010 19:56 » 

ОК  Улыбаюсь , Короче у меня не работает SendMessage(hwnd,WM_SETTEXT ,(WPARAM)0,(LPARAM)((tagMSG*)lParam)->message); вот эта беда в чем тут подвох, полный код выше,
SendMessage(hwnd,WM_SETTEXT ,(WPARAM)0,(LPARAM) lParam); вот такое выражение какие то каракули рисует, как расшифровать lParam ?
Мне бы узнать в чем я туплю, и все Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #65 : 19-04-2010 03:02 » 

Код:
lResult = SendMessage(      // returns LRESULT in lResult
     (HWND) hWndControl,      // handle to destination control
     (UINT) WM_SETTEXT,      // message ID
     (WPARAM) wParam,      // = (WPARAM) () wParam;
    (LPARAM) lParam      // = (LPARAM) () lParam;
 ); 
Parameters

wParam - This parameter is not used.
lParam - Pointer to a null-terminated string that is the window text.

поэтому шлёшь текст так
Код:
const char* pTXT=...;
SendMessage(hwnd,WM_SETTEXT ,0,(LPARAM)(pTXT);

осталось в отладчике точно убедиться, что в pTXT правильная строка, оканчивающаяся нулём. Ещё, может, проблемы с юникодом - но тут я уже не смогу подсказать, не сталктвался )
Записан

Hadron
Участник

ru
Offline Offline

« Ответ #66 : 19-04-2010 14:50 » 

насколько я понял в моем случае вместо ... (точек) ставим lparam
const char* pTXT=lParam;
но возникает ошибка
 error C2440: 'initializing' : cannot convert from 'LPARAM' to 'const char *'
Записан
Hadron
Участник

ru
Offline Offline

« Ответ #67 : 19-04-2010 14:56 » 

Вообще я когда писал первые вопросы в этой теме, мне говорили что если не поможет Spy++, то нужно делать хук для пого чтобы внедрить в адресное пространстово, свой код который бы перехватывал команды отсылаемые системой, я понял именно этот способ и есть что описан выше, но подозреваю что я в чем то ошибся, причем кардинально Жаль
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #68 : 20-04-2010 02:47 » 

насколько я понял в моем случае вместо ... (точек) ставим lparam
const char* pTXT=lParam;
вообще-то, вместо трёх точек там - строка, а не lParam Улыбаюсь Попробуй сначала просто константу, например "123строка".

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

Hadron
Участник

ru
Offline Offline

« Ответ #69 : 20-04-2010 17:08 » 

Тогда в каких случаях используются хуки? Имеется ввиду в чем их польза? на счет строки я и так без проблем пересылал текст, код ниже.
Код:
SendMessage(hwnd,WM_GETTEXT ,(WPARAM)0,(LPARAM)"Hello World");
Вся загвоздка в том как с помощью хука можно воздействовать на контролы, на которые стандартными способами нельзя воздействовать.
Цитата
С вытаскиванием информации есть тонкости: если контрол стандартный и совместимый со старыми версиями Windows - то тут всё просто, через границу процесса можно слать любые сообщения. А вот у всяких TreeView так уже не получится, для управления деревом и другими продвинутыми контролами придётся подвешивать хук, чтобы внедряться в адресное пространство нужного процесса, и уже отдавая команды хуку, дёргать необходимые контролы. Про кастомные контролы вообще сложно что-то сказать - если программа, которой нужно управлять, такие имеет, то потребуется знание о том, как они работают и на какие сообщения реагируют.
цитата принадлежит Ваду (Ответ №5)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #70 : 20-04-2010 17:20 » 

Hadron, ну так Вад и расскажет Улыбаюсь

Хук ставится для возможности перехватывать сообщения, идущие к окну (то есть, можно сообщения передать дальше не меняя, а можно и поменять, либо просто логгировать, снифить и так далее).
А отправлять сообщения можно без хука.

Наверное, Вад имеет в виду как раз случай, когда хочется менять поведение того же TreeView "на лету"
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #71 : 21-04-2010 08:33 » 

Наверное, Вад имеет в виду как раз случай, когда хочется менять поведение того же TreeView "на лету"
Я имею в виду, что ты не можешь через границу процесса сказать дереву "развернись" или "вставь узел туда-то". То есть, отправить сообщение можешь, но эффекта никакого не будет.

Поэтому на процесс вешается хук, который может получать сообщения от внешнего процесса (это, вообще говоря, возможно даже с помощью оконных сообщений - например, для WM_USER + X через границу процесса всё прекрасно ходит), и ретранслировать их в нужный элемент нужного окна.

Советую Рихтера почитать - у него эта тема, насколько я помню, хорошо освещалась.
« Последнее редактирование: 21-04-2010 08:35 от Вад » Записан
Hadron
Участник

ru
Offline Offline

« Ответ #72 : 23-04-2010 15:43 » 

Спасибо за пояснения  Здесь была моя ладья... Будем разбираться.
Записан
Страниц: 1 2 [3]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines