Форум: "Начинающим";
Текущий архив: 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.52 MB
Время: 0.009 c