ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

01.05.2009, 12:33
|
|
Познающий
Регистрация: 20.12.2008
Сообщений: 46
Провел на форуме: 123070
Репутация:
9
|
|
Сообщение от diznt
PHP код:
procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;
begin
reg:=TRegistry.create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run\', true);
if reg.KeyExists('my_key_name') then
begin
exit;
end
else
begin
reg.WriteString('my_key_name','"c:\1.exe"');
end;
end;
а вообще в гугле введи, "Работа с реестром delphi"
там будет этого добра навалом и быстро освоишься с реестром так как с ним легко работать в делфи
//пробелы убрать в коде
Да всё я искал там нифига нет того что я ищу,
Код HTML:
if reg.KeyExists('my_key_name')
мне нужно что то другое что проверяет есть ли ключ если он есть то делает определёные дейтвия если нет то делает другие действия...
Последний раз редактировалось Stil Free; 01.05.2009 в 12:35..
Причина: 1
|
|
|

01.05.2009, 13:15
|
|
Постоянный
Регистрация: 31.01.2008
Сообщений: 643
Провел на форуме: 6128108
Репутация:
445
|
|
Stil Free что значит нужно что-то другое нужно?
ты имеешь другая функция проверки? или что?
Если другая функция проверки то токо на WinApi это можно сделать то есть пишешь свою функцию
|
|
|

01.05.2009, 16:30
|
|
Постоянный
Регистрация: 31.01.2008
Сообщений: 643
Провел на форуме: 6128108
Репутация:
445
|
|
Как вывести все доступные жесткие диски?
|
|
|

01.05.2009, 16:49
|
|
Познающий
Регистрация: 20.12.2008
Сообщений: 46
Провел на форуме: 123070
Репутация:
9
|
|
Тот метод который ты дал не определяет ничего.... сам незнаю почему вроде как если ключ существует то определяет труе ,вот код.
PHP код:
function KeyExists(const Key: String): Boolean; begin
KeyExists('HKEY_LOCAL_MACHINE\SOFTWARE\11111\');
result:=open;
end;
procedure TfrmMain.FormCreate(Sender: TObject); begin
UINNickList := TList.Create;
if open=true then
begin
button1.Enabled:=true;
CheckBox1.Enabled:=True;
end
else
Button3.Visible:=true;
end;
Последний раз редактировалось Stil Free; 01.05.2009 в 17:13..
|
|
|

01.05.2009, 17:13
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Как вывести все доступные жесткие диски?
если только для списка жестких дисков то вот код.
PHP код:
procedure TForm1.Button1Click(Sender: TObject);
const
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;
var
r: LongWord;
Drives: array[0..128] of char;
pDrive: PChar;
begin
r := GetLogicalDriveStrings(SizeOf(Drives), Drives);
if r = 0 then Exit;
if r > SizeOf(Drives) then
raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
pDrive := Drives;
while pDrive^ <> #0 do
begin
if GetDriveType(pDrive) = DRIVE_FIXED then
Form1.ComboBox1.Items.Add(pDrive);
Inc(pDrive, 4);
end;
end;
а если всех носителей то вот:
PHP код:
procedure TForm1.Button1Click(Sender: TObject);
var
ld: DWORD;
i: integer;
begin
ld := GetLogicalDrives;
for i := 0 to 25 do
begin
if (ld and (1 shl i)) <> 0 then
Memo1.Lines.Add(Char(Ord('A') + i) + ':\');
end;
end;
|
|
|

01.05.2009, 17:38
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Сообщение от Stil Free
Парни нужно добавить ключ в реестр , а потом при запуске программы проверять его как это сделать?
Создать подраздел в реестре:
RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint;
_____ Key - указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, а в Delphi3 - все.
_____ SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается.
_____ В любом случае при успешном вызове Result содержит Handle на раздел.
_____ Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.
================================================== ==
Открыть подраздел:
RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey): Longint;
_____ Раздел Key
_____ Подраздел SubKey
_____ Возвращает Handle на подраздел в переменной Result. Если раздела с таким именем нет, то он не создается.
_____ Возврат - код ошибки или ERROR_SUCCESS, если успешно.
================================================== ==
Закрывает раздел:
RegCloseKey(Key: HKey): Longint;
_____ Закрывает раздел, на который ссылается Key.
_____ Возврат - код ошибки или ERROR_SUCCESS, если успешно.
================================================== ==
Удалить подраздел:
RegDeleteKey(Key: HKey; SubKey: PChar): Longint;
_____ Удалить подраздел Key\SubKey.
_____ Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.
================================================== ==
Получить имена всех подразделов раздела Key:
RegEnumKey(Key:HKey; index: Longint; Buffer: PChar; cb: Longint): Longint;
_____ Key - Handle на открытый или созданный раздел
_____ Buffer - указатель на буфер
_____ cb - размер буфера
_____ index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой
================================================== ==
Возвращает текстовую строку, связанную с ключом Key\SubKey:
RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;
_____ Ключ\подключ Key\SubKey.
_____ Value - буфер для строки
_____ cb - размер, на входе - размер буфера, на выходе - длина возвращаемой строки.
_____ Возврат - код ошибки.
================================================== ==
Задать новое значение ключу Key\SubKey:
RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;
_____ Ключ\подключ Key\SubKey.
_____ ValType - тип задаваемой переменной,
_____ Value - буфер для переменной
_____ cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ.
_____ Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.
================================================== ==
Удаляет значение lpValueName находящееся в ключе hKey:
RegDeleteValue(HKEY hKey, LPCTSTR lpValueName);
_____ hKey - ключ. hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.
_____ lpValueName - значение, находящееся в ключе hKey.
_____ Возвращает ERROR_SUCCESS если успешно.
================================================== ==
Выдает список значений у ключа hKey:
LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
_____ hKey - ключ.
_____ dwIndex - этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey (т.е. можно использовать в цикле),
_____ lpValueName - буфер для названия значения
_____ lpcbValueName - размер lpValueName
_____ lpReserved должно быть всегда 0
_____ lpType - буфер для названия типа (int)
_____ lpData - буфер для данных
_____ lpcbData-размер для lpData
================================================== ==
Примечание:
При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName.
lpcbValueName = sizeof(lpValueName)
|
|
|

02.05.2009, 05:05
|
|
Познающий
Регистрация: 20.12.2008
Сообщений: 46
Провел на форуме: 123070
Репутация:
9
|
|
Сообщение от Flame of Soul
Создать подраздел в реестре:
RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint;
_____ Key - указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, а в Delphi3 - все.
_____ SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается.
_____ В любом случае при успешном вызове Result содержит Handle на раздел.
_____ Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.
================================================== ==
Открыть подраздел:
RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey): Longint;
_____ Раздел Key
_____ Подраздел SubKey
_____ Возвращает Handle на подраздел в переменной Result. Если раздела с таким именем нет, то он не создается.
_____ Возврат - код ошибки или ERROR_SUCCESS, если успешно.
================================================== ==
Закрывает раздел:
RegCloseKey(Key: HKey): Longint;
_____ Закрывает раздел, на который ссылается Key.
_____ Возврат - код ошибки или ERROR_SUCCESS, если успешно.
================================================== ==
Удалить подраздел:
RegDeleteKey(Key: HKey; SubKey: PChar): Longint;
_____ Удалить подраздел Key\SubKey.
_____ Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.
================================================== ==
Получить имена всех подразделов раздела Key:
RegEnumKey(Key:HKey; index: Longint; Buffer: PChar; cb: Longint): Longint;
_____ Key - Handle на открытый или созданный раздел
_____ Buffer - указатель на буфер
_____ cb - размер буфера
_____ index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой
================================================== ==
Возвращает текстовую строку, связанную с ключом Key\SubKey:
RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;
_____ Ключ\подключ Key\SubKey.
_____ Value - буфер для строки
_____ cb - размер, на входе - размер буфера, на выходе - длина возвращаемой строки.
_____ Возврат - код ошибки.
================================================== ==
Задать новое значение ключу Key\SubKey:
RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;
_____ Ключ\подключ Key\SubKey.
_____ ValType - тип задаваемой переменной,
_____ Value - буфер для переменной
_____ cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ.
_____ Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.
================================================== ==
Удаляет значение lpValueName находящееся в ключе hKey:
RegDeleteValue(HKEY hKey, LPCTSTR lpValueName);
_____ hKey - ключ. hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.
_____ lpValueName - значение, находящееся в ключе hKey.
_____ Возвращает ERROR_SUCCESS если успешно.
================================================== ==
Выдает список значений у ключа hKey:
LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
_____ hKey - ключ.
_____ dwIndex - этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey (т.е. можно использовать в цикле),
_____ lpValueName - буфер для названия значения
_____ lpcbValueName - размер lpValueName
_____ lpReserved должно быть всегда 0
_____ lpType - буфер для названия типа (int)
_____ lpData - буфер для данных
_____ lpcbData-размер для lpData
================================================== ==
Примечание:
При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName.
lpcbValueName = sizeof(lpValueName)
Мне этого хлама в нете хватает, мне нужен пример проверки я выше оставил ео подправить...
|
|
|

02.05.2009, 06:11
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Мне этого хлама в нете хватает, мне нужен пример проверки я выше оставил ео подправить...
видимо потому что для Вас это хлам, Вы позволяете себе такое множество ошибок:
HKEY_LOCAL_MACHINESOFTWARE11111 - не является типом HKEY и не может быть использовано.
UINNickList := TList.Create; - неописанная переменная UINNickList
if open=true then ... - каком основании Вы сравниваете возвращаемое значение функции??? а не саму функцию с указанными параметрами?
result:=open; - на каком основании Вы возвращаете какое-то ореn, когда у Вас в функции указан Boolean для возвращаемого значения?
PS: не относитесь к хорошей информации как к хламу, я искринне желаю Вам успехов в дальнейшей работе с реестром.
Рабочий код:
PHP код:
function LastPos(Needle: Char; Haystack: string): integer;
begin
for Result := Length(Haystack) downto 1 do
if Haystack[Result] = Needle then
Break;
end;
function RegKeyExists(RK: HKEY; Name: string): boolean;
var
SK: string;
n: integer;
hTemp: HKEY;
begin
Result := False;
n := LastPos('\', Name); //'
if n > 0 then
begin
SK := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RK, PChar(SK), 0, KEY_READ, hTemp) = ERROR_SUCCESS
then
begin
Result := True;
RegCloseKey(hTemp);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 'SOFTWARE\Alawar\6462\' - обратите внимание на символ \
// его нет в начале но он обязателен на конце
if RegKeyExists(HKEY_LOCAL_MACHINE,'SOFTWARE\Alawar\6462\')=true //'
then
begin
//...если существует
ShowMessage('true'); //'
end
else
begin
//...если не существует
ShowMessage('false'); //'
end;
end;
|
|
|

02.05.2009, 09:27
|
|
Познающий
Регистрация: 20.12.2008
Сообщений: 46
Провел на форуме: 123070
Репутация:
9
|
|
Сообщение от Flame of Soul
[B]видимо потому что для Вас это хлам, Вы позволяете себе такое множество ошибок:
[SIZE=1]HKEY_LOCAL_MACHINESOFTWARE11111 - не является типом HKEY и не может быть использовано.
это я когда код добавлял потёр случайно..
Сообщение от Flame of Soul
UINNickList := TList.Create; - неописанная переменная UINNickList
Это левое используется в самой проге и описано в корне....
Сообщение от Flame of Soul
if open=true then ...[COLOR=YellowGreen] - каком основании Вы сравниваете возвращаемое значение функции??? а не саму функцию с указанными параметрами?
open описана как boolean, после завершения операции если ключ существует то присваивается true ,а результат операции я присваиваю к open .... Ну помоему здесь весь косяк....
Спасибо я разобрался)
Последний раз редактировалось Stil Free; 02.05.2009 в 09:48..
|
|
|

03.05.2009, 11:54
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
Как можно при открытии Form2 забрать значение из Form1
Чтобы: Form2.Label2.Caption = Form1.Edit1.Text
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|