Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите получить путь к системной папке, SHGetFolderPath 
V
    Опции темы
Zlo
  Дата 8.12.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: 1
Всего: 1



Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

const
 CSIDL_PERSONAL = 5;
 SHGFP_TYPE_CURRENT = 0;

function SHGetFolderPath(wnd: HWND; csIdl: LongInt; dwFlags: DWORD; hToken: THandle; szPath: PChar):HRESULT;stdcall;
                        external 'shell32.dll' name 'SHGetFolderPathA';

var buf: array[0..MAX_PATH-1] of char;

begin

  SHGetFolderPath(0, CSIDL_PERSONAL, 0, SHGFP_TYPE_CURRENT, @buf);
  WriteLn('My Documents path: ', StrPas(@buf));

end.

Дельфя ругается на:
Код

StrPas(@buf)

А если поставить:
Код

Pchar(@buf)

то компилится, но выводит иероглифы :(
Как быть? Тут главное чтоб без использования доп библиотек вроде ShlObj

Может у кого есть готовый примерчик? уж очень не хочется тащиться в реестр за инфой...
PM MAIL   Вверх
THandle
Дата 8.12.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Цитата(Zlo @  8.12.2009,  21:46 Найти цитируемый пост)
то компилится, но выводит иероглифы :(


Это из за WriteLn smile Он не выводит русские символы просто так. smile

Используй вместо WriteLn процедуру типа:
Код


procedure Console_WriteLine(const AStr: WideString);
begin
  WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), PWideChar(AStr),
    Length(AStr), PDWORD(nil)^, nil);
end;


Да и вообще код на юникод переделай.
PM   Вверх
Демо
Дата 8.12.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Либо так:
Код

var
  s: AnsiString;

begin
  SetLength(s,MAX_PATH);
  SHGetFolderPath(0, CSIDL_PERSONAL, 0, SHGFP_TYPE_CURRENT, @s[1]);
  s := PAnsiChar(s);
  WriteLn('My Documents path: ', WideString(s));
  Readln;




--------------------
    
PM MAIL ICQ Skype   Вверх
Zlo
Дата 8.12.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.9.2004

Репутация: 1
Всего: 1



Спасибо ребята! А то я замучился.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.