Tomson
Участник
Offline
|
|
« : 04-04-2008 14:17 » |
|
Всем привет! Подскажите, как можно получив информацию о окнах и событиях в них изменять её так, что-бы на результат реальной работы системы это не повлияло? Т.е. к примеру прибавлять каждому значению события произвольное число, но в работе использовать только истинное значение.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 04-04-2008 14:25 » |
|
Tomson, а какая именно информация в окнах интерисует тебя ?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #2 : 04-04-2008 14:35 » |
|
прибавлять каждому значению события произвольное число, но в работе использовать только истинное значение. "Переведи" (с)
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Tomson
Участник
Offline
|
|
« Ответ #3 : 04-04-2008 15:12 » |
|
Tomson, а какая именно информация в окнах интерисует тебя ? GetSelection и GetText прибавлять каждому значению события произвольное число, но в работе использовать только истинное значение. Ну это что-то вроде:"нельзя найти то чего нет", но оно есть и работает. Вопрос в том в какой только форме оно есть "Переведи" (с)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 04-04-2008 15:19 » |
|
Tomson, для GetWindowText() посылай окошку сообщение WM_GETTEXT
для достать выделение - зависит от контрола, я думаю, надо соответственно искать в МСДН например EDIT - EM_GETSEL
lResult = SendMessage( // returns LRESULT in lResult (HWND) hWndControl, // handle to destination control (UINT) EM_GETSEL, // message ID (WPARAM) wParam, // = (WPARAM) (LPDWORD) wParam; (LPARAM) lParam // = (LPARAM) (LPDWORD) lParam; ); Parameters
wParam Pointer to a buffer that receives the starting position of the selection. This parameter can be NULL. lParam Pointer to a buffer that receives the position of the first nonselected character after the end of the selection. This parameter can be NULL.
|
|
« Последнее редактирование: 05-04-2008 07:31 от Алексей1153++ »
|
Записан
|
|
|
|
Tomson
Участник
Offline
|
|
« Ответ #5 : 05-04-2008 06:06 » |
|
в общем вот пока что вышло, только вот не понятно, как сделать из этого процесс, ну что-бы постоянно висел typedef HWND (WINAPI *PROCGETSHELLWND)(void); PROCGETSHELLWND GetShellWind;
void main(void) { HMODULE hUser32 = GetModuleHandle("user32"); if (!hUser32) return;
GetShellWind = (PROCGETSHELLWND)GetProcAddress(hUser32,"GetShellWin"); if (!GetShellWindow) return;
HWND hWnd = GetShellWindow(); char s[280]; GetWindowText(hWnd,s,sizeof(s)); printf("HWND: %lX\tCaption: %s",hWnd,s); }
если просто выполнить, то правильно определяет активное окошко... C:\>getshell HWND: 10072 Caption: Program Manager
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #6 : 05-04-2008 06:47 » |
|
Tomson, а какую именно задачу ты собираешься решить своим постоянно мониторящим процессом - фиксировать в журнал, какие окна у пользователя активны? Тогда, может, достаточно функции GetForegroundWindow, вызываемой, скажем, по таймеру в цикле? (MSDN: http://msdn2.microsoft.com/en-us/library/ms633505(vs.85).aspx)
|
|
« Последнее редактирование: 05-04-2008 06:49 от Вад »
|
Записан
|
|
|
|
Tomson
Участник
Offline
|
|
« Ответ #7 : 05-04-2008 07:59 » |
|
Несовсем, нужно обмануть такой шпион, поэтому я писал про "набирать, но не вводить". Т.е. после каждого реального символа добавлять произвольные символы так, что-бы на реальный ввод они не повлияли.
|
|
« Последнее редактирование: 05-04-2008 08:14 от Tomson »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #8 : 05-04-2008 08:04 » |
|
А почему не надо вводить? В принципе, если ты поменяшь заголовок окну, ничего фатального не произойдёт с приложением, это же просто изменение заголовка существующего окна Можно, например, заменить в заголовке одинаковые по написанию буквы русского и английского алфавита друг на друга
|
|
|
Записан
|
|
|
|
Tomson
Участник
Offline
|
|
« Ответ #9 : 05-04-2008 08:14 » |
|
>Можно, например, заменить в заголовке одинаковые по написанию буквы русского и английского алфавита друг на друга Ну и что ? Информативность от этого не изменится. Хм, да, с заголовками можно пожалуй и так поступить, вот только потом можно будет самому запутаться. Или можно сделать подобно WM_GETTEXT ?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #10 : 05-04-2008 08:53 » |
|
Tomson, смотря, как твой шпион работает: если сверяет с чем-то и регистрирует совпадения/несовпадения, то - одно. Если пишет в журнал всё, то другое дело. Я так понимаю, тебе надо, чтобы нежелательные заголовки выглядели как-то не так, содержали другой текст?
|
|
|
Записан
|
|
|
|
Tomson
Участник
Offline
|
|
« Ответ #11 : 05-04-2008 12:18 » |
|
да, ну в прочем не только заголовки.
|
|
|
Записан
|
|
|
|
Tomson
Участник
Offline
|
|
« Ответ #12 : 06-04-2008 10:53 » |
|
А перехватывает ли ЖдетТекст то что содержится в перловой программе в STDIN или набирают в командлайне в Term::ReadKey?
|
|
|
Записан
|
|
|
|
|