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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2009, 13:56   #1
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
Радость Поменять значок у папки , vista

Хотел в Висте программно поменять значки у папок.
Написал простейшую программу по созданию ini-файлов,
поместил их в неопходимые папки, но не тут-то было,
значки не поменялись, как не эксперементировал ни чего не получилось.

Нашел функцию SHGetSetFolderCustomSettings и маленький код:


Код:
uses ComObj;  // Для OleCheck

type
  PSHFOLDERCUSTOMSETTINGS = ^SHFOLDERCUSTOMSETTINGS;
  SHFOLDERCUSTOMSETTINGS = packed record
    dwSize: DWORD;
    dwMask: DWORD;
    pvid: PGUID;
    pszWebViewTemplate: PWideChar;
    cchWebViewTemplate: DWORD;
    pszWebViewTemplateVersion: PWideChar;
    pszInfoTip: PWideChar;
    cchInfoTip: DWORD;
    pclsid: PGUID;
    dwFlags: DWORD;
    pszIconFile: PWideChar;
    cchIconFile: DWORD;
    iIconIndex: Integer;
    pszLogo: PWideChar;
    cchLogo: DWORD;
  end;

const
  FCSM_VIEWID = $01;
  FCSM_WEBVIEWTEMPLATE = $02;
  FCSM_INFOTIP = $04;
  FCSM_CLSID = $08;
  FCSM_ICONFILE  = $10;
  FCSM_LOGO = $20;
  FCSM_FLAGS = $40;

  FCS_READ = $01;
  FCS_FORCEWRITE = $02;
  FCS_WRITE = FCS_READ or FCS_FORCEWRITE;

function SHGetSetFolderCustomSettings(pfcs: PSHFOLDERCUSTOMSETTINGS;
  pszPath: PWideChar; dwReadWrite: DWORD): HRESULT; stdcall; external 'shell32.dll'
  name 'SHGetSetFolderCustomSettingsW';

function SetFolderIcon(Folder, IconFile: WideString; IconIndex: Integer): HRESULT;
var
  fcs: SHFOLDERCUSTOMSETTINGS;
begin
  FillChar(fcs,SizeOf(fcs),0);
  fcs.dwSize:=SizeOf(fcs);
  fcs.dwMask:=FCSM_ICONFILE;
  fcs.pszIconFile:=PWideChar(IconFile);
  fcs.cchIconFile:=0;
  fcs.iIconIndex:=IconIndex;
  Result:=SHGetSetFolderCustomSettings(@fcs,PWideChar(Folder),FCS_FORCEWRITE);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  OleCheck(SetFolderIcon('D:\Rose','D:\asm.ico',0)); { OleCheck не обязательно, для себя использовал. Можно
  просто проверить результат равен S_OK или нет }
end;

Но в Висте код не работает, программа не находит вход в функцию.

На Xp работает нормально.

В чем проблемма не пойму.
Может кто сталкивался, как запустить ее в Висте

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.

Последний раз редактировалось rpy3uH; 03.02.2009 в 18:17.
volod3000 вне форума Ответить с цитированием
Старый 03.02.2009, 15:57   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

В висте она, если верить MSDN, только юникодная, так что может быть (?) название просто SHGetSetFolderCustomSettings, без W

ЗЫ: используй тег [ CODE ] [ /CODE ], Люк!
пыщь

Последний раз редактировалось JTG; 03.02.2009 в 16:00.
JTG вне форума Ответить с цитированием
Старый 03.02.2009, 23:51   #3
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Все оказалось очень просто необходимо из

Код:
SHGetSetFolderCustomSettings(pfcs: PSHFOLDERCUSTOMSETTINGS;
  pszPath: PWideChar; dwReadWrite: DWORD): HRESULT; stdcall; external 'shell32.dll'
  name 'SHGetSetFolderCustomSettingsW';
убрать полностью name 'SHGetSetFolderCustomSettingsW'

И все работает как часы.

Спасибо ! Тема закрыта.

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.

Последний раз редактировалось rpy3uH; 04.02.2009 в 09:26.
volod3000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти значок в трее eks-s Win Api 2 29.10.2008 14:12
значок программы DeDoK Общие вопросы Delphi 2 22.11.2007 22:37
Сменить значок программы BETONOMESHALKA Общие вопросы Delphi 8 14.11.2007 21:22
StringGrid - при пометке строки ставить значок на столбце Mick Standarov Компоненты Delphi 2 03.10.2007 23:26
Значок ехе! KORT Общие вопросы Delphi 3 19.07.2007 13:14