![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление программы в реестр [D7, WinXP]
Antonmm © (2004-07-30 21:44:00)Как добавить свою программу в реестр?
GuAV (2004-07-31 20:50:00) [1]>ЮрийК © (31.07.04 20:45) [11]
Имхо, Вас тоже касается вопрос
Anatoly Podgoretsky © (31.07.04 12:07) [7]
ЮрийК (2004-07-31 20:45:00) [2]"А кому это нужно? В смысле, зачем запускать её? Добавили - и ладно."
А если это использовать как-то в целях защиты основной программы, которая на диске? Например.
Можно основной программой прочесть и запустить. Как только запустить? Нужны детали.
GuAV (2004-07-31 20:33:00) [3]
> Далее, как запускать такую программу - из реестра?
А кому это нужно? В смысле, зачем запускать её? Добавили - и ладно.
ЮрийК (2004-07-31 20:21:00) [4]"Если бы меня не ломало, то и я проявил бы интеллект и написал, как все же засунуть программу в реестр, в бинарный параметр, целиком."
Далее, как запускать такую программу - из реестра?
GuAV (2004-07-31 19:30:00) [5]
> Полностью согласен с Antonmm
С чем же именно?
> Что тебе известно про извращения?
procedure TMyFileTime.GetSetTime(SetTime: Boolean);
const
TimeProc: array[Boolean] of
function(hFile: THandle; lpCreationTime, lpLastAccessTime,
lpLastWriteTime: PFileTime): BOOL; stdcall
= (GetFileTime, SetFileTime);
var h: THandle;
begin
h:=CreateFile(PChar(Name), GENERIC_READ or $100,
FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if h=INVALID_HANDLE_VALUE then RaiseLastOSError;
try
if not TimeProc[SetTime]
(h, @FTime[1], @FTime[2], @FTime[3]) then
RaiseLastOSError;
finally
CloseHandle(h);
end;
end;
=====================================
function GetLibString(const Lib: PChar;
ID: LongWord; Size: Integer): string;
var hDll: THandle;
begin
hDll := LoadLibrary(Lib);
if hDll=0 then RaiseLastOSError;
try
SetLength(Result, Size);
SetLength(Result, LoadString(hDll, ID, @Result[1], Size));
finally
FreeLibrary(hDll);
end;
end;
procedure CheckFileName(const S: string);
const D='\/:*?"<>|';
var I: Integer;
begin
for I:=1 to Length(D) do
if StrScan(PChar(S), D[I])<>nil then
raise Exception.Create(GetLibString(shell32, 4109, 128));
end;
===================================
procedure Couple(C: array of TComponent);
var I: Integer;
begin
Assert(Odd(High(C)));
for I:=0 to High(C) do
C[I].Tag:=Longint(C[I xor 1]);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var I: Integer;
begin
...
Couple([btnAddFile, FilenameEdit, btnAddFolder, DirectoryEdit]);
...
end;
procedure TfrmMain.btnAddFileFolderClick(Sender: TObject);
begin
AddSome(TFilenameEdit(TComponent(Sender).Tag).FileName);
end;
procedure TfrmMain.FilenameEditChange(Sender: TObject);
begin
with TEdit(Sender) do TButton(Tag).Enabled:=Text<>'';
end;
Хватит ? :)
Anatoly Podgoretsky (2004-07-31 12:07:00) [6]GuAV © (30.07.04 23:55) [5]
Что тебе известно про извращения?
Кириешки (2004-07-31 09:54:00) [7]>GuAV © (30.07.04 23:55) [5]
> Это добавит не программу, а путь к исполнимому файлу к программе.
Кириешки © (30.07.04 22:11) [2]
Полностью согласен с Antonmm
А чтоба добавить ключи и параметры нада сделать типа так
GuAV (2004-07-30 23:55:00) [8]Кириешки © (30.07.04 22:11) [2]
Это добавит не программу, а путь к исполнимому файлу к программе.
olookin © (30.07.04 22:28) [3]
Гениально. А я не понял вопрос :) Всё же имхо выражатся надо было бы яснее.
Dok_3D © (30.07.04 23:17) [4]
А это делается. Но лишено всякого смысла.
Dok_3D (2004-07-30 23:17:00) [9]Если бы меня не ломало, то и я проявил бы интеллект и написал, как все же засунуть программу в реестр, в бинарный параметр, целиком. И ответил бы на вопрос автора.
Но увы :)
olookin (2004-07-30 22:28:00) [10]Вот как добавить расширения и Открыть с помощью
procedure PutDataToRegistry(FileList,AllFileList: array of Ansistring;
IconIndex: array of integer);
var Reg: TRegistry;
i,j: integer;
s: string;
begin
Wait.Operation(0,Length(AllFileList),
'Registry updating. Please, wait...',''); Reg:=TRegistry.Create;
with Reg do begin RootKey:=HKEY_LOCAL_MACHINE; LazyWrite:=False;
for i:=0 to Length(AllFileList)-1 do begin
Wait.GaugeStatus; s:='\Software\Classes\';
if KeyExists(s+'.'+AllFileList[i]) then
DeleteKey(s+'.'+AllFileList[i]); s:=s+'your prog '+AllFileList[i]+'file';
if KeyExists(s) then begin DeleteKey(s+'\DefaultIcon');
DeleteKey(s+'\Shell'); DeleteKey(s+'\Shell\open');
DeleteKey(s+'\Shell\open\command');
DeleteKey(s+'\Shell\Run with your prog\');
DeleteKey(s+'\Shell\Run with your prog\command'); DeleteKey(s); end;
for j:=0 to Length(FileList)-1 do
if FileList[j]=AllFileList[i] then begin
s:='\Software\Classes\'; OpenKey(s+'.'+FileList[j],true);
WriteString('','your prog '+FileList[j]+'file'); CloseKey;
s:=s+'your prog '+FileList[j]+'file'; OpenKey(s+'\DefaultIcon',true);
WriteString('',Application.ExeName+','+IntToStr(IconIndex[j])); CloseKey;
OpenKey(s+'\Shell\open\command',true);
WriteString('',Application.ExeName+' %1'); CloseKey;
OpenKey(s+'\Shell\Run with your prog\command',true);
WriteString('','"'+Application.ExeName+'" "%1"'); CloseKey;
break; end; end; Free; end; Wait.Operation(1,0,'','');
end;
Кириешки (2004-07-30 22:11:00) [11]Полностью согласен с Antonmm
А чтоба добавить ключи и параметры нада сделать типа так
Uses Registry
procedure TForm1.Dobavlenie_V_Reestr;
var
reg : tregistry;
begin
REG := TRegistry.Create;
REG.RootKey := //Раздел реестра например HKEY_LOCAL_MACHINE;
REG.OpenKey('Тута нада написать адрес куда дабавляется праграмма',true);
REG.WriteString('Название праграммы', Application.exename);
REG.CloseKey;
REG.Destroy;
end;
Прастите за бизграматность.
GuAV (2004-07-30 21:46:00) [12]В реестр добавляют не программы, а ключи и параметры. Используй TRegistry.