В общем, не догоняю, как объявить API-функцию. Из гугла/яндекса толкового почти ничего не выжал. только примерно вот это (и то не работает) Code: function GetWindowDC(Wnd: HWnd): hDC; stdcall; extenal 'user32.dll' name 'GetWindowDC'; Всяко экспериментировал, но нирвзу не заработало. Честно говоря, я ваще толком не знаю, куда это писать... Объясните дураку... И ещё пытался с реестром бодаться (Там функции в 'Windows' объявлены). Тоже не вышло ничего, хотя в ВБ те же функции спокойно юзаю...
Млин, вся опа в том, что вопрос простейший, а ответа нет. Просто дельфин не родной для мну язык, вот и парюсь
Вроде в первом посту функция выглядит правильно. Может только в одну строку ее записать. А что конкретно не работает?
DiffiT Code: unit ....; uses windows; ....... function GetWindowDC(Wnd: HWnd): hDC; stdcall; extenal 'user32.dll' name 'GetWindowDC'; function GetModuleFileNameEx(hProcess: THandle; hModule: HINST; lpFilename: PChar; nSize: DWORD): DWORD; stdcall; external 'psapi.dll' name 'GetModuleFileNameExA'; function EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD; Var lpcbNeeded: DWORD): BOOL Stdcall; external 'psapi.dll' name 'EnumProcessModules'; implementation .... end. в модуле должно выглядеть примерно так если ты объявляешь функцию так же как она в библиотеке названа то имя Code: name 'GetModuleFileNameExA'; можно не писать..
спасибо, заработало)))) не туда писал, как оказалось)))) Пробовал писать в type, как функцию формы, пробовал в public и в private щас вкурил, зачем там end был))))
а по поводу реестра, у кого-нить есть рабочий исходник? А то я офигеваю с типов PAnsiChar и Cardinal Всё никак с параметрами угадать не могу))))
DiffiT что именно хочешь с реестром делать. пример чтения и поиска есть... записать написать не сложно
Code: Procedure ScanRegistry(RootKey:HKEY;SubKey:String); var hSubKey:HKEY; NumKey,NumValue:DWORD; NameKey:Pointer; NameValue:Pointer; BufSize:DWORD; KeyError,ValueError:integer; begin NumKey:=0; NumValue:=0; BufSize:=2048; if ThreadExit then exit; GetMem(NameValue,BufSize); GetMem(NameKey,BufSize); try if RegOpenKeyEx(RootKey, PChar(SubKey),0,KEY_ALL_ACCESS,hSubKey)=ERROR_SUCCESS then begin ValueError:=RegEnumValue(hSubKey,NumValue,NameValue,BufSize, nil, nil, nil, nil); if PChar(NameValue)<>'' then begin ResultAnalize(RootKey,PChar(SubKey),NameValue); end; inc(NumValue); while ValueError=ERROR_SUCCESS do begin BufSize:=2048; try ValueError:=RegEnumValue(hSubKey,NumValue,NameValue,BufSize, nil, nil, nil, nil); if ValueError=ERROR_SUCCESS then if PChar(NameValue)<>'' then begin ResultAnalize(RootKey,PChar(SubKey),NameValue); inc(TotalValue); end; finally inc(NumValue); end; end; Sleep(2); KeyError:=ERROR_SUCCESS; while KeyError=ERROR_SUCCESS do begin BufSize:=2024; KeyError:=RegEnumKeyEx(hSubKey,NumKey,NameKey,BufSize,nil,nil,nil,nil); inc(TotalKeys); if KeyError=ERROR_SUCCESS then if SubKey='' then ScanRegistry(RootKey,PChar(Concat(SubKey,PChar(NameKey)))) else ScanRegistry(RootKey,PChar(Concat(SubKey,'\',PChar(NameKey)))); inc(NumKey); end; end; finally FreeMem(NameKey); FreeMem(NameValue); RegCloseKey(hSubKey); end; end; процедура обхода дерева реестра первый параметр подраздел один из Code: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DATA HKEY_CURRENT_CONFIG HKEY_DYN_DATA второй параметр это ключ с которого начнется перебор если пустой то будет перебирать с корня под раздела Code: ResultAnalize(RootKey,PChar(SubKey),NameValue); процедура анализа в которой ты собственно и удовлетворяют ли считанные данные условию поиска
вот часть кода на чтение значения Code: var hSubKey : HKEY; MyValType : DWORD; BufSize : DWORD; Buf: Pointer; ..... if RegOpenKey(RootKey, SubKey,hSubKey) = ERROR_SUCCESS then try if RegQueryValueEx(hSubKey, ValueName, nil, @MyValType, nil, @BufSize) =ERROR_SUCCESS then begin GetMem(Buf, BufSize); try if RegQueryValueEx(hSubKey, ValueName, nil, @MyValType, Buf, @BufSize) =ERROR_SUCCESS then begin end; ...... SubKey "путь" до ключа в реестре ValueName имя параметра Buf указатель на значение параметра
RegQueryValueEx(hSubKey, ValueName, nil, @MyValType, nil, @BufSize) вот в этих сцабаках наверное и есть проблема