Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2016, 12:18   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Вопрос Получить картинку (аватар) учетной записи

Подскажите как это сделать? Чтобы работало от XP до 10.
Откопал на просторах функцию SHGetUserPicturePath (http://undoc.airesoft.co.uk/shell32....icturePath.php), но как ей пользоваться не понял. Помогите разобраться, пожалуйста.
garuna вне форума Ответить с цитированием
Старый 19.01.2016, 13:14   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

У меня получилось так:
Код:
type
  TSHGetUserPicturePath = function(pwszPicOrUserName: PWideChar; sguppFlags: DWORD;
    pwszPicPath: PWideChar; picPathLen: UINT): HRESULT; stdcall;

function GetUserPicturePath(PicOrUserName: WideString): string;
var
  SHGetUserPicturePath: TSHGetUserPicturePath;
  DllHandle: THandle;
  Buffer: array[0..MAX_PATH - 1] of WideChar;
  P: PWideChar;
begin
  Result := '';
  DllHandle := LoadLibrary('shell32.dll');
  if DllHandle <> 0 then
  begin
    @SHGetUserPicturePath := GetProcAddress(DllHandle, PChar(261)); // WinXP = 233
    if Assigned(SHGetUserPicturePath) then
    begin
      if (PicOrUserName <> '') and (PicOrUserName <> #0) then
        P := PWideChar(PicOrUserName)
      else
        P := nil;
      if Succeeded(SHGetUserPicturePath(P, 0, Buffer, Length(Buffer))) then
        Result := Buffer;
    end;
    FreeLibrary(DllHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //ShowMessage(GetUserPicturePath('User'));
  ShowMessage(GetUserPicturePath(''));
end;

Последний раз редактировалось Filka; 19.01.2016 в 14:49.
Filka вне форума Ответить с цитированием
Старый 19.01.2016, 13:37   #3
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Радость

Цитата:
Сообщение от Filka Посмотреть сообщение
У меня получилось так:
Код:
type
  TSHGetUserPicturePath = function(pwszPicOrUserName: PWideChar; sguppFlags: DWORD;
    pwszPicPath: PWideChar; picPathLen: UINT): HRESULT; stdcall;

function GetUserPicturePath(PicOrUserName: WideString): string;
var
  SHGetUserPicturePath: TSHGetUserPicturePath;
  DllHandle: THandle;
  Buffer: array[0..MAX_PATH - 1] of WideChar;
begin
  Result := '';
  DllHandle := LoadLibrary('shell32.dll');
  if DllHandle <> 0 then
  begin
    @SHGetUserPicturePath := GetProcAddress(DllHandle, PChar(261)); // WinXP = 233
    if Assigned(SHGetUserPicturePath) then
      if Succeeded(SHGetUserPicturePath(PWideChar(PicOrUserName), 0, Buffer,
        Length(Buffer))) then
        Result := Buffer;
    FreeLibrary(DllHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //ShowMessage(GetUserPicturePath('User'));
  ShowMessage(GetUserPicturePath(''));
end;


СПАСИБО! На 7 работает отлично)

Что касается XP - не работает, но это не важно, ведь аватары в XP всегда хранятся тут: C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\<username>.bmp

На 8-ке и 10-ке пока не пробовал, проверю как будет под рукой.
garuna вне форума Ответить с цитированием
Старый 19.01.2016, 13:49   #4
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Пожалуйста.
Цитата:
Что касается XP - не работает
261 заменить на 233 (?)
Filka вне форума Ответить с цитированием
Старый 19.01.2016, 14:00   #5
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Filka Посмотреть сообщение
Пожалуйста.

261 заменить на 233 (?)
Да, заменял. Программа просто закрывается, без каких-либо ошибок и сообщений, как через ExitProcess(0) ))
garuna вне форума Ответить с цитированием
Старый 19.01.2016, 18:43   #6
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

На 8.1 тоже не сработало
garuna вне форума Ответить с цитированием
Старый 19.01.2016, 18:48   #7
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

User Profile Tiles in Windows 7 and Later --> https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
Filka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление 2 учетной записи stenl1 Windows 8 15.04.2015 21:48
Имя учетной записи Sh.I.Va Помощь студентам 2 08.12.2011 23:19
Создание учетной записи Анастас БД в Delphi 0 28.10.2011 15:31
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42