Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Узнать главный диск [Delphi] |

28.03.2009, 22:49
|
|
Участник форума
Регистрация: 16.07.2008
Сообщений: 159
Провел на форуме: 1063538
Репутация:
240
|
|
Узнать главный диск [Delphi]
Нужно узнать главный локальный диск на котором лежит винда. Например у меня лежит винда в C:
|
|
|

28.03.2009, 23:38
|
|
Новичок
Регистрация: 23.11.2008
Сообщений: 5
Провел на форуме: 27508
Репутация:
5
|
|
GETSYSTEMDRIVE
посмотри что-то в этом роде
щас на память не скажу точнее
|
|
|

28.03.2009, 23:46
|
|
Познающий
Регистрация: 28.03.2009
Сообщений: 30
Провел на форуме: 453605
Репутация:
1
|
|
Смотри тему "[Delphi]/[Pascal] Задай вопрос, получи ответ", последние 2-3странички. Вопрос уже задавался ..
|
|
|

28.03.2009, 23:47
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
Код:
function GetSysCD: string;
var S: array[0..MAX_PATH] of Char;
begin
GetWindowsDirectory(S,SizeOf(S));
Result:=copy(S,0,1);
end;
|
|
|

01.04.2009, 09:08
|
|
Познающий
Регистрация: 15.02.2009
Сообщений: 54
Провел на форуме: 142825
Репутация:
7
|
|
{var path: array[0..max_path]of char;}
GetWindowsDirectory(path,max_path);
ShowMessage(copy(path,0,2));
По моему самый простой способ.
|
|
|

01.04.2009, 09:16
|
|
Banned
Регистрация: 22.12.2007
Сообщений: 660
Провел на форуме: 3885269
Репутация:
1158
|
|
Можешь сделать еще легче.
Я делфи не знаю, но принцип думаю один и тот же:
GetFileList("%WINDIR%");
Таким образом я получил список каталогов в папке Windows. %WINDIR% в данном случае является переменной среды. т.е. глобальная системная переменная. Таких переменных существует много. Зная их, чаще всего не требуется знать диск с ос.
К примеру так:
ReadFile(@"%WINDIR%\explorer.exe");
|
|
|

01.04.2009, 10:39
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 eLWAux Result:=copy(S,0,1); можно заменить на result:=S[0]; 
|
|
|

01.04.2009, 11:46
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
А вообще самый быстрый способ - это юзая PEB, найти полные пути до имен загруженных библиотек. Первые либы - это ntdll и kernel32, а они всегда находятся в папке с виндой. И вот просто взять первую букву этого пути, вот и получится буква системного диска. Пример:
Код:
function SysDisk:char;assembler;
asm
mov eax,FS:[30h] // PEB
mov eax,[eax+12] // PPEB_LDR_DATA
mov eax,[eax+28] // LIST_ENTRY
mov eax,[eax] // LDR_DATA_TABLE_ENTRY
mov eax,[eax+24] // FULL_NAME
mov al,[eax]
end;
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|