Здравствуйте! Вот код на фасме: Код (Text): hKey dd ? KeyPath db 'SOFTWARE\XiSoft\AIM2SaveEditor',0 KeyName db 'aimpath',0 aimpath rb 260 pathbuf rb 260 aimpathlen dd ? typeval dd ? .... invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,KeyPath,NULL,KEY_QUERY_VALUE,hKey .if eax=0 invoke RegQueryValueEx,[hKey],KeyName,NULL,typeval,aimpath,aimpathlen invoke RegCloseKey,[hKey] invoke SetDlgItemText,[hWin],IDC_PATH,aimpath .endif После выполнения я данных не получаю, а возвращаемое значение - 000000EAh - ERROR_MORE_DATA ключ реестра: Код (Text): aimpath REG_SZ E:\Games\Механоиды II Что я делаю не так?
Последний параметр - [in, out], т.е. перед вызовом должен содержать размер буфера, а там сейчас наверняка ноль.
вызывай RegQueryValueEx два раза подряд. Первый вызов заполнит aimpathlen, второй вызов вернет данные
Да-да... Вот пример (выдрал из Л/Р): Код (Text): .if eax == BN_CLICKED invoke lstrcpy, offset szResult, offset szFormatBIOS invoke lstrlen, offset szResult mov edi, eax invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, offset szBiosDate, 0, KEY_READ, offset hKey .if eax == ERROR_SUCCESS invoke RegQueryValueEx, hKey, offset szSystemBiosDate, NULL, offset dwType, NULL, offset dwResult invoke RegQueryValueEx, hKey, offset szSystemBiosDate, NULL, offset dwType, addr szResult[edi], offset dwResult invoke RegCloseKey, hKey invoke SendMessage, hStaticHandle, WM_SETTEXT, 0, offset szResult .endif mov szResult, 0 .endif Этому коду больше года
Оффсетами надо пользоваться: invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,KeyPath,NULL,KEY_QUERY_VALUE,hKey замени на invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,offset KeyPath,NULL,KEY_QUERY_VALUE,offset hKey
Кстати, в приведенном примере как-раз используются оффсеты invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, offset szBiosDate, 0, KEY_READ, offset hKey