Класс TWindowplacement может хранить информацию о размере, расположении, состоянии окна и последнем разрешении экрана как в реестре так и в ini-файле. Для получения и изменения размера окна используется WinApi функции GetWindowPlacement и SetWindowPlacement Borland C++ Builder 6
Некоторые до сих пор пользуются оператором writeln для ведения логов. Но мало кто знает, что этот оператор позволяет выводить данные не только в консоль и файл, но и в любое место. Модуль MemoFile позволяет подключить TMemo вместо файла. Согласитесь, что запись Writeln('Пользователь нажал в точку x=',x,' y=',y); лучше чем Memo1.Lines.Add(Format('Пользователь нажал в точку x=%d y=%d',[x,y])); Пример прилагается.
Модуль, существенно облегчающий работу с реестром. Понимает относительные пути к реестру. Пример. Вы можете использовать стандартный модуль Registry, и тогда код добавления ключа в реестр будет следующим.
procedure TForm1.Button1Click(Sender:TObject); var reg: TRegistry.Create; begin reg := TRegistry.Create; reg.RootKey := hkey_local_machine; reg.OpenKey('Software\MyCompany\MyApplication',True); reg.WriteString('TestKey','TestValue'); reg.CloseKey; reg.Free; end;
Тоже самое можно сделать, используя SquallRegistry так:
procedure TForm1.Button1Click(Sender:TObject); begin RegWriteString('HKLM\Software\MyCompany\MyApplication\TestKey',TestValue); end;
Любая операция с реестром выполняется одним методом. В модуле следующие методы: function RegGetRoot(regpath: string): hkey; function RegValueName(regpath: string):string; function RegValueExists(regpath: String):Boolean; function RegDeleteValue(regpath: string): Boolean; function RegWriteString(regpath: String; value: String):Boolean; function RegWriteInt(regpath: String; value: Longint):Boolean; function RegWriteBool(regpath: String; value: boolean):Boolean; function RegReadInt(regpath: String; def:Int64):Int64; function RegReadBool(regpath: String; def:Boolean):Boolean; function RegReadString(regpath: String; def: String):String; function RegGetValueNames(regpath: string; strings: TStrings):Boolean; function RegGetKeyNames(regpath: string; strings: TStrings):Boolean; function RegGetDataType(regpath: string): TRegDataType;
Путь реестра - это путь к ключу или параметру в реестре. Задается он следующим образом: [rootkey]/[mainkey]/[valuename] В качестве rootkey используется не полное название, а сокращение. Вот сокращения всех корневых ключей: HKLM = HKEY_LOCAL_MACHINE HKCU = HKEY_CURRENT_USER HKCR = HKEY_CLASSES_ROOT HKU = HKEY_USERS HKPD = HKEY_PERFORMANCE_DATA HKCC = HKEY_CURRENT_CONFIG HKDD = HKEY_DYN_DATA
Мой компонент написанный из-за того, что мне ненравилось, когда при глобальном хуке надо писать DLL. Для XP можно не писаль DLL для НИЗКОУРОВНЕВОГО глобального хука, но все эти варианты были слишком нудными. С самого начала моей перехватческой деятельности я поставил цели:
1. Код как можно короче, понятнее и проще. 2. Только один исполняемый файл программы, без всяких DLL. 3. Возможность перехвата в windows: 98, 2000, XP, VISTA
Узнал про процедуру GetKeyState (кстати, она основа моего компонента) и решил организовать цикл с ней. Компонент осуществляет перехват клавиш с 1 по 255, то есть практически все (scan-коды) клавиши. Там же в юните сделал список констант всех клавиш (по рисункам кнопок на своей клавиатуре).
События: OnKeyDown, OnKeyPress, OnKeyUp.
Недоработки: при событии OnKeyPress: например в блокноте: нажата,задержка,нажата,нажата,нажата.... а при этом событии в компоненте: нажата,нажата,нажата... То есть нету задержки, буду работать над этим. Лучше сделать интервал сканирования маленьким а то будут <пробелы> нажатий если Юзверь будет быстро тыкать. Ну в общем побольше отзывов, комментов, поправок и предложений по поводу компонента пишите здесь или мне на мыло StrToInt@mail.ru
ps Для работы ниже, чем XP, лучше переделать под виндовый таймер.
Конвертер экрана вывода консольных программ в формат HTML с сохранением цветов символов и их фона для получения сверхкомпактных масштабируемых скриншотов.