|
Вопрос # 3 311/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Я пытаюсь написать программу для мониторинга активированных окон в Windows, но почему то программа обнаружывает только окна приложений находящихся в папке с программой.Помогите разобраться почему и как это исправить.
Вот код программы и dll.
Заранее спасибо
Приложение: Переключить в обычный режим-
- unit Unit1;
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- Timer1: TTimer;
- procedure FormCreate(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action:
- TCloseAction);
- var
- Form1: TForm1;
- procedure SetHook(Hook : Boolean) stdcall;
- external 'SysHook.dll' index 1;
-
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- SetHook(true);
- end;
-
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- SetHook(false);
- end;
-
- end.
-
-
- library SysHook;
- uses
- Windows,
- Messages,
- SysUtils,Dialogs,
-
- var
- SysHook1:HHook=0;
- Wnd : Hwnd = 0;
-
- function SysMsgProc (code : integer; wParam : word;
- lParam : longint) : longint; export; stdcall;
- var {f:TStringList;} f:TextFile;
- Str:String;
- windtext, windir: array [0..255] of char;
-
- begin
- Result:=CallNextHookEx(SysHook1,Code,wParam,LParam);
- if code=HCBT_ACTIVATE then
- begin
- Wnd := wParam;
- GetWindowText(Wnd,windtext,255);
- Str:=Windtext;
- AssignFile(f,'1234.txt');
- if not FileExists('1234.txt') then
- begin
- Rewrite(f);
- CloseFile(f);
- end;
- Append(f);
- Writeln(f,Str);
- Flush(f);
- CloseFile(f) ;
- end;
- end;
-
- function SetHook (Hook:Boolean):Boolean; export;stdcall;
-
- begin
- if Hook then
- begin
- SysHook1:=SetWindowsHookEX((WH_CBT),
- @SysMsgProc,Hinstance,0);
-
- end
- else
- begin
- UnhookWindowsHookEX (SysHook1);
- SysHook1:=0;
- end;
-
- end;
-
- {$R *.res}
- exports SetHook index 1;
-
- begin
- end.
 |
Вопрос задал: Кириченко Сергей (статус: 1-ый класс)
Вопрос отправлен: 21 октября 2009, 19:11
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Amidamaru
Здравствуйте, Кириченко!
В самом коде ошибок вроде нету. Но я думаю Вам стоит более явно указывать имя файла. Кстати советую поискать 1234.txt по всему компьютеру. Думаю Вы найдете не один такой файл.
Используйте например 'c:\1234.txt' или в dll создайте строковую переменную для папки для сохранения, и устанавливайте её значение в SetHook в dll.
 |
Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 21 октября 2009, 19:33
Оценка за ответ: 5
Комментарий к оценке: Спасибо помогло.Действительно нашелся не один файл с именем 1234.txt.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 22 октября 2009, 03:06; участников в обсуждении: 2.
|
Паровоз (статус: 10-ый класс), 21 октября 2009, 20:17 [#1]:
To Кириченко:
А Вы пробовали шевелить окна не из Вашей папки?
|
|
Кириченко Сергей (статус: 1-ый класс), 22 октября 2009, 03:06 [#2]:
Да пробовал.
Спасибо.Все работает правильно, просто из за не явного указания пути к файлу отчета. Отчет создавался в каталоге активированного приложения.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|