| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Определение Service Pack Windows |
| Автор: PRF 19.3.2008, 22:07 |
| Здравствуйте!! У меня такой вопрос : "Как можно определить Service pack в windows??", для определения самой windows есть структура TOsVersionInfo, в справке нашел что существует идентичная структура + несколько полей структуры для определения Service Pack, структура имеет схожее имя TOsVersionInfoEX, но при объявлении переменной типа этой структуры(TOsVersionInfoEX) делфи пишет, что не существует такой, хотя в справке она есть и метод GetVersionEX. В делфи есть только TOsVersionInfo, TOsVersionInfoA, TOsVersionInfoW. Подскажите какую структуру использовать, а точнее почему в справке есть, а на деле нет, мне не нужен сам код, просто не могу объявить переменную!!! Заранее спасибо!! Делфи 2007!! |
| Автор: Alix 19.3.2008, 22:36 | ||
Не знаю как в 2007, а в 7 дельфе я не нашел описания расширенной структуры. Однако, никто не мешает написать ее самому, вот так она описана в MSDN:
|
| Автор: PRF 19.3.2008, 22:46 |
| расширенную структуру я имел ввиду эту - а работать поля этой структуры будут соответствующим образом, как написано в MSDN?? |
| Автор: Alix 19.3.2008, 22:57 |
| Когда ты передаешь эту структуру GetVersionEx, то она смотрит на значение ее поля dwOSVersionInfoSize и в зависимости от значения понимает, что перед ней - OSVERSIONINFOEX или просто OSVERSIONINFO. Поэтому перед вызовом нужно будет присвоить этому полю значение sizeof(TOSVersionInfoEx). |
| Автор: PRF 19.3.2008, 22:59 |
| Спасибо, попробую!! |
| Автор: PRF 20.3.2008, 00:21 | ||
Ребята чего то не получается, я написал эту структуру, вот код
что я не так делаю??? |
| Автор: dumb 20.3.2008, 08:07 | ||
|
| Автор: PRF 20.3.2008, 12:08 |
| А что вы скажете на изменение исходного подключаемого модуля WIndows.pas в котором находиться функция OsVErsionInfo, я просто к этой функции добавил недостающие поля(последнии поля для опредления сервис пака), и потом объявил переменную OsVersionInfo, все заработало!! можно так сделать?? |
| Автор: Alix 20.3.2008, 12:09 |
это не верно, должно быть [0..127] или [1..128] ну и плюс то, что dumb написал. Добавлено через 1 минуту и 33 секунды сделать так можно, но не стоит менять исходники стандартных модулей, потому что тогда нет гарантий, что твоя программа хотя бы скомпилируется на другом компьютере, так что описывай структуру сам в своей программе. Добавлено через 5 минут и 41 секунду и еще лучше использовать тогда AnsiChar, если описывается OSVERSIONINFOA и WideChar, если OSVERSIONINFOW. По-умолчанию TOSVersionInfo = TOSVersionInfoA |
| Автор: PRF 20.3.2008, 13:36 |
| если писать как dumb то выводит такую ошибку: types of actual and formal var parameters much be identical |
| Автор: Alix 20.3.2008, 13:46 | ||
ясно... в общем вот рабочий кусок кода:
|
| Автор: Poseidon 20.3.2008, 14:07 |
| Хм. А что у нас тут: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion ? |
| Автор: PRF 20.3.2008, 14:49 |
| Poseidon спасибо, всем спасибо!! Кстати никто не может дать ссылку на подробную информацию о реестре, что где храниться, только чтобы подробно было!! |