Текущий архив: 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.032 c