Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

Запись в текстовый файл   Найти похожие ветки 

 
Tanya   (2006-08-01 17:13) [80]

Попробую разобраться с этой функцией, а еще я хотела спросить.. Джо, в твоем примере мы передаем сообщение форме, которая имеет класс "TCharLogReceiver", а если это будет не форма и не программа а сервис? Если сервис будет иметь такое название класса, будут до него доходить сообщения?


 
Tanya   (2006-08-01 20:44) [81]

EnumChildWindows только перечисляет все дочерние окна, а хотелось бы какнибудь узнать именно то в котором происходит ввод символов...


 
Джо ©   (2006-08-01 21:48) [82]

> Если сервис будет иметь такое название класса, будут до
> него доходить сообщения?

Нет, нужно окно.


 
Tanya   (2006-08-01 22:33) [83]

Джо, счто скажете о Tanya   (01.08.06 20:44) [81]?


 
Джо ©   (2006-08-02 02:11) [84]

> [83] Tanya   (01.08.06 22:33)
> Джо, счто скажете о Tanya   (01.08.06 20:44) [81]?

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

var
 ThreadId: THandle;
 GuiThreadInfo: tagGUITHREADINFO;
 Txt: array [0..1024] of Char;
begin
 ThreadId := GetWindowThreadProcessId ( Handle_Окна );
 if ThreadId = 0 then
   RaiseLastOSError;

 GuiThreadInfo.cbSize := SizeOf(tagGUITHREADINFO);
 if not GetGUIThreadInfo  (ThreadId,GuiThreadInfo) then
   RaiseLastOSError;

 // ну, а теперь получим его текст
 GetWindowText(GuiThreadInfo.hwndFocus,Txt,SizeOf(Txt));
end;


 
Джо ©   (2006-08-02 02:23) [85]

> [84] Джо ©   (02.08.06 02:11)
> GetWindowText(GuiThreadInfo.hwndFocus,Txt,SizeOf(Txt));

За сие не пинайте — вынужденный недосып :) Конечно, текст нужно выдирать посылкой сообщения WM_GETTEXT, но для вопроса это неважно.


 
Eraser ©   (2006-08-02 02:58) [86]

> [80] Tanya   (01.08.06 17:13)


> Если сервис будет иметь такое название класса, будут до
> него доходить сообщения?

более того, данный метод коммуникации (используя сообщения) не будет поддерживать Fast User Switching (поэтому парень легко будет прятаться от тебя), поэтому прийдется писать ещё один исполняемый модуль, который будет запускаться для каждой терминальной сессии и взаимоействовать с одной стороны с dll, получая от неё сообщения, а с другой - с сервисом, посредством одного из способов IPC.

:o)


 
Virgo_Style ©   (2006-08-02 07:45) [87]

Правильно ли я понимаю, что тут всем миром пишут keylogger? =)


 
Zeqfreed ©   (2006-08-02 07:56) [88]

> [84] Джо ©   (02.08.06 02:11)

Не знаю что проще, но я использовал нечто такое:

var
wnd : HWND;
toPID, PID : Cardinal;
begin
PID := GetCurrentThreadId();
Wnd := {           }
toPID := GetWindowThreadProcessId(Wnd, nil);
if not AttachThreadInput(toPID, PID, True) then Exit;
Wnd := GetFocus();
//           Wnd
AttachThreadInput(toPID, PID, False);
end;


 
Zeqfreed ©   (2006-08-02 07:58) [89]

Zeqfreed ©   (02.08.06 07:56) [88]

Ой. Опять забыл, что форум съедает пробелы, да ещё и клиент русские комментарии куда-то дел :( Пробую ещё раз.


var
 wnd : HWND;
 toPID, PID : Cardinal;
begin
 PID := GetCurrentThreadId();
 Wnd := Нужное_окно
 toPID := GetWindowThreadProcessId(Wnd, nil);
 if not AttachThreadInput(toPID, PID, True) then Exit;
 Wnd := GetFocus();
 //Работаем с окном
 AttachThreadInput(toPID, PID, False);
end;


 
Tanya   (2006-08-13 00:59) [90]

Подскажите пожалуйста, как всетаки передать сообщение в сервис, это же тоже программа, не имеющая окна...


 
Ketmar ©   (2006-08-13 01:09) [91]

> [87] Virgo_Style ©   (02.08.06 07:45)
да. %-)

> [90] Tanya   (13.08.06 00:59)
поиск делать религия запрещает? ну, сокетами, например. только не надо спрашивать "а как это?"


 
Джо ©   (2006-08-13 03:57) [92]

> [90] Tanya   (13.08.06 00:59)
> Подскажите пожалуйста, как всетаки передать сообщение в
> сервис, это же тоже программа, не имеющая окна...

Ну, в принципе, невидимое окно завести никто не запрещает.



Страницы: 1 2 3 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.066 c
1-1153803713
Zilog_
2006-07-25 09:01
2006.09.03
Как правильно перевести с С на Делфи?


15-1155336576
SerJaNT
2006-08-12 02:49
2006.09.03
АДМИНАМ: надо бороться со спамом


2-1155141635
Johnny_Row
2006-08-09 20:40
2006.09.03
процедура в отдельном потоке выполняется медленнее в 2 раза


15-1155023387
Megabyte
2006-08-08 11:49
2006.09.03
Перевод слова из специализированной статьи


4-1147483445
vidiv
2006-05-13 05:24
2006.09.03
Заблокируется ли поток, если...