Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Вниз

Переменные среды в Delphi   Найти похожие ветки 

 
programmer90   (2008-09-11 22:54) [0]

Добрый вечер!
Как узнать системный диск(букву тома), а также системную директорию  и дркгие переменные среды?
Спасибо.


 
{RASkov} ©   (2008-09-11 22:56) [1]

GetEnvironmentVariable


 
programmer90   (2008-09-11 23:04) [2]


> GetEnvironmentVariable
Вот напрмер как узнать


 
Правильный$Вася   (2008-09-11 23:04) [3]


> > GetEnvironmentVariable Вот напрмер как узнать

в справке


 
programmer90   (2008-09-11 23:05) [4]

А всё узнал.... вернее вспомнил
Спс за напоминание)


 
programmer90   (2008-09-11 23:42) [5]

А как можно  узнать Ms-dos имя пути(например C:\program files)?
Путь находится в переменной стринг .


 
Германн ©   (2008-09-12 00:06) [6]


> А как можно  узнать Ms-dos имя пути(например C:\program
> files)?

GetShortPathName


 
programmer90   (2008-09-12 00:38) [7]


> GetShortPathName

А пример можно?


 
KilkennyCat ©   (2008-09-12 00:42) [8]

можно.
GetShortPathName


 
Германн ©   (2008-09-12 00:43) [9]


> programmer90   (12.09.08 00:38) [7]
>
>
> > GetShortPathName
>
> А пример можно?

Дык а в чем проблема? В хелпе все ясно и просто написано.
Ты сам то пробовал использовать эту процедуру? Если пробовал и не получилось, покажи как пробовал и скажи что не получилось. Тогда разговор будет предметный.


 
KilkennyCat ©   (2008-09-12 00:44) [10]

http://msdn.microsoft.com/en-us/library/aa364989(VS.85).aspx


 
programmer90   (2008-09-12 00:50) [11]


> Дык а в чем проблема? В хелпе все ясно и просто написано.
> Ты сам то пробовал использовать эту процедуру? Если пробовал
> и не получилось, покажи как пробовал и скажи что не получилось.
>  Тогда разговор будет предметный.

примерно так
testStr:="C:\program files\";
GetShortPathName(Pchar(teststr),Pchar(Edit2.text),0);

ошибки нет, но результата тоже :(


 
KilkennyCat ©   (2008-09-12 00:53) [12]

а что значит третий операнд, который в нуль стоит? не количество ли возвращаемых символов?
варианты ответов:
1. да
2. думаю, что да
3. конечно


 
Германн ©   (2008-09-12 00:56) [13]

Вариант 4
Размер буфера, который выделен для получения реультата в pszShortPath.


 
programmer90   (2008-09-12 00:57) [14]


> а что значит третий операнд, который в нуль стоит? не количество
> ли возвращаемых символов?варианты ответов:

я даже так написал
for i := 1 to 1000 do
     GetShortPathName(Pchar(teststr),Pchar(Edit2.text),i);

эффекта нет:(


 
KilkennyCat ©   (2008-09-12 00:58) [15]

я же указал ссылку на справку.
микрософт рекомендует вначале узнать длину возвращаемого результата, что заодно и проверяет на ошибку:
  length = GetShortPathName(lpszPath, NULL, 0);
   if (length == 0) ErrorExit(TEXT("GetShortPathName"));


и затем уже получать требуемый результат:
   buffer = new TCHAR[length];
   length = GetShortPathName(lpszPath, buffer, length);
   if (length == 0) ErrorExit(TEXT("GetShortPathName"));


 
KilkennyCat ©   (2008-09-12 01:08) [16]


> for i := 1 to 1000 do
>      GetShortPathName(Pchar(teststr),Pchar(Edit2.text),i);
>
> эффекта нет:(

я бы заметил, что эффекта не было аж 1000 раз....

Когда-то давно, я учился разрабатывать игры по книжке одного французкого автора, жаль, забыл имя - хорошая книжка... так вот, там предлагался сценарий игры:
Есть планета шадоков и планета гибиков. Шадоки строят долго и упорно ракету, просчитывают ее, испытания делают.. вообщем, по науке. Гибикам тож надо выйти в космос, ибо у них с шадоками типа холодной войны. Великий колдун гибиков предсказал, что тысячная ракета обязательно взлетит. Поэтому гибики начали из всякой дряни строить первые 999 ракет, им был пофиг результат, главное, чтоб быстрее добраться до тысячной.


 
Германн ©   (2008-09-12 01:08) [17]


> Pchar(Edit2.text)

Хороший буфер для приёма данных! :)
Кто ж тебя так учил ? Разве WinAPI функции умеют работать со свойствами VCL компонентов?


 
KilkennyCat ©   (2008-09-12 01:09) [18]


> Германн ©   (12.09.08 00:56) [13]

спасибо за поправку. Я просто хотел проще, но согласен, исказил суть.


 
programmer90   (2008-09-12 01:10) [19]


>   length = GetShortPathName(lpszPath, NULL, 0);    if (length
> == 0) ErrorExit(TEXT("GetShortPathName"));и затем уже получать
> требуемый результат:    buffer = new TCHAR[length];    length
> = GetShortPathName(lpszPath, buffer, length);    if (length
> == 0) ErrorExit(TEXT("GetShortPathName"));

Это с++?
Что бы то ни было  чертовски непонятно)


 
programmer90   (2008-09-12 01:12) [20]


> Когда-то давно, я учился разрабатывать игры по книжке одного
> французкого автора, жаль, забыл имя - хорошая книжка...
> так вот, там предлагался сценарий игры:Есть планета шадоков
> и планета гибиков. Шадоки строят долго и упорно ракету,
> просчитывают ее, испытания делают.. вообщем, по науке. Гибикам
> тож надо выйти в космос, ибо у них с шадоками типа холодной
> войны. Великий колдун гибиков предсказал, что тысячная ракета
> обязательно взлетит. Поэтому гибики начали из всякой дряни
> строить первые 999 ракет, им был пофиг результат, главное,
>  чтоб быстрее добраться до тысячной.

ппц)))))))


 
Германн ©   (2008-09-12 01:12) [21]


> KilkennyCat ©   (12.09.08 01:08) [16]
>
>
> > for i := 1 to 1000 do
> >      GetShortPathName(Pchar(teststr),Pchar(Edit2.text),
> i);
> >
> > эффекта нет:(
>
> я бы заметил, что эффекта не было аж 1000 раз....
>

У меня эффект в тестовом проекте был сразу и всегда.
Invalid pointer operation.


 
programmer90   (2008-09-12 01:15) [22]

Спасибки,  завтра посмотрим.
я уже в браузере вместо f5   f9 нажимаю....


 
KilkennyCat ©   (2008-09-12 01:19) [23]

var
 ins, outs: string;
 buff: PChar;
 leng : word;

 leng = GetShortPathName(pchar(ins), nil, 0);
 if leng = 0 then error-exit;

 GetMem (buff, leng);
 leng = GetShortPathName(pchar(ins), buff, leng);
 if leng = 0 then error-exit;

 

и не забудть освободить выделенную память под буфер


 
Германн ©   (2008-09-12 01:20) [24]


> programmer90   (12.09.08 01:15) [22]
>
> Спасибки,  завтра посмотрим.

Ну-ну. Завтра увидим. :)


 
Германн ©   (2008-09-12 01:27) [25]


> KilkennyCat ©   (12.09.08 01:19) [23]

Костя, ты уж извини, но  GetShortPathName(pchar(ins), buff, leng+1);
ибо "return value is the length, in characters, of the string copied to lpszShortPath, not including the terminating null character." Да и буфер лучше обнулить до передачи его в качестве параметра.


 
KilkennyCat ©   (2008-09-12 01:31) [26]

а нужен ли терминатор в данном случае?
и зачем обнулять, если я уверен в  полном заполнении?


 
Германн ©   (2008-09-12 01:51) [27]


> KilkennyCat ©   (12.09.08 01:31) [26]
>
> а нужен ли терминатор в данном случае?
> и зачем обнулять, если я уверен в  полном заполнении?
>

Так он же (buff) всё таки PChar. И как с ним потом нормально работать если нет терминирующего ноля? Просто как с массивом символов?
Да и справка вроде недвусмысленно говорит lpszShortPath
Points to a buffer to receive the null-terminated short form of the path specified by lpszLongPath.

Вот насчёт обнуления тут я может и не прав.


 
palva ©   (2008-09-12 09:26) [28]


> KilkennyCat ©   (12.09.08 01:19) [23]

Можно не заводить буфер и не выделять память, а писать прямо в строку.
var
ins, outs: string;
leng : word;

leng = GetShortPathName(pchar(ins), nil, 0);
if leng = 0 then error-exit;

SetLength (outs, leng);
GetShortPathName(pchar(ins), outs, leng);


(Код не проверял)


 
KilkennyCat ©   (2008-09-12 09:53) [29]

наверное, можно и еще короче:
function shortname(const ins : string) : string;
var
 outs : array [0..255] of char;
begin;
 if GetShortPathName(pchar(ins), outs, sizeof(outs)) = 0 then result := "error" else result := strpas(outs);
end;


тоже не проверял


 
KygECHuK ©   (2008-09-12 10:03) [30]

Или так
ExtractShortPathName в sysUtils.... :p


 
ЛшдлуттнСфе   (2008-09-12 10:08) [31]

вау. :)


 
programmer90   (2008-09-12 18:41) [32]


> KilkennyCat ©  
Германн ©  
palva ©

В спорах рождается истина...и разрабатывается оптимальный код)
Большое спасибо всем!


 
Virgo_Style ©   (2008-09-12 23:36) [33]

programmer90   (12.09.08 18:41) [32]
разрабатывается оптимальный код


это теперь так называется


 
Германн ©   (2008-09-13 01:35) [34]


> KygECHuK ©   (12.09.08 10:03) [30]
>
> Или так
> ExtractShortPathName в sysUtils.... :p
>

Ну это для совсем лентяев. :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.006 c
2-1220944731
Кирей
2008-09-09 11:18
2008.10.19
ошибка при работе с экселем OLE error 800A03EC


15-1219820202
Denis__
2008-08-27 10:56
2008.10.19
МГУ ВМК Языки программирования


2-1221288881
Alexandr_5
2008-09-13 10:54
2008.10.19
Sendmessage на TStatusbar


15-1219872645
+koha
2008-08-28 01:30
2008.10.19
Кто занимается параллельными машинами подскажите


2-1221559854
Outland
2008-09-16 14:10
2008.10.19
BitBtn1 и Glyph





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский