Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.12;
Скачать: CL | DM;

Вниз

Переименовать Пуск Программы <Группа> <ярлык>   Найти похожие ветки 

 
France   (2002-09-02 12:43) [0]

Как переименовать группу или ярлык в группе программ в ПУСК\Программы? Группа, имя ярлыка, естественно, известны. Вариант, как "Rename(C:\Windows\...)" меня не устраивает. Я спросил тут недалеко, мне предложили CSIDL_COMMON_PROGRAMS и SHGetSpecialFolderPath. Но как ими пользоваться, не знаю. Подскажите, пожалуйста, на примере, как это сделать, скажем, на стандартном "Калькуляторе". Или где помощь почитать. Спасибо.


 
Poirot ©   (2002-09-02 13:18) [1]

SHGetSpecialFolderPath+F1
Ломает что-ли!!!

var PStr:array[0..127]of Char;
Folder:String;
begin
SHGetSpecialFolderPathForm1.Handle,PStr,CSIDL_COMMON_PROGRAMS,False);
Folde:=StrPas(PStr);
end;

что-то в этом роде!!!!
А можно глупый вопрос - ВЫ ЛАМЕР, или просто нечего делать???


 
Ученик ©   (2002-09-02 13:18) [2]

uses
ActiveX, ShellApi, ShlObj;

type
TFolderType = (ftDesktop, ftRecycleBin, ftControlPanel, ftDesktopDir,
ftDrives, ftFavoriteURLs, ftFonts, ftNetwork, ftNetHoodDir,
ftDocumentDir, ftPrinters, ftPrograms, ftRecentDir, ftSendTo,
ftStartMenu, ftStartup, ftTemplates, ftFileSystem, ftCommonPrograms,
ftCustom);

function GetFolderID(FolderType : TFolderType) : Integer;
const
CSIDL_CUSTOM = $EAFE;
FOLDERID : array[TFolderType] of integer = (
CSIDL_DESKTOP, CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKTOPDIRECTORY,
CSIDL_DRIVES, CSIDL_FAVORITES, CSIDL_FONTS, CSIDL_NETWORK, CSIDL_NETHOOD,
CSIDL_PERSONAL, CSIDL_PRINTERS, CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO,
CSIDL_STARTMENU, CSIDL_STARTUP, CSIDL_TEMPLATES, CSIDL_DRIVES,
CSIDL_COMMON_PROGRAMS, CSIDL_CUSTOM
);
begin
Result := FOLDERID[FolderType]
end;

function ShellFolderName(FolderType : TFolderType) : string;
var
IShellMalloc : IMalloc;
IDesktopFolder : IShellFolder;
ItemIDList: PItemIDList;
StrRet: TStrRet;
begin
Result := "";
if (ShGetMalloc(IShellMalloc) = S_OK) and (IShellMalloc <> nil) then begin
if SHGetDesktopFolder(IDesktopFolder) = NOERROR then begin
if SHGetSpecialFolderLocation(0, GetFolderID(FolderType), ItemIDList) = NOERROR then try
if IDesktopFolder.GetDisplayNameOf(ItemIDList, SHGDN_FORPARSING, StrRet) = NOERROR then begin
case StrRet.uType of
STRRET_WSTR: Result := WideCharToString(StrRet.pOleStr);
STRRET_OFFSET: Result := PChar(UINT(ItemIDList) + StrRet.uOffset);
STRRET_CSTR: Result := StrRet.cStr;
end
end
finally
IShellMalloc.Free(ItemIDList);
end
end
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
sPath : string;
SHFileOpStruct : TSHFileOpStruct;
begin
sPath := ShellFolderName(ftCommonPrograms) + "\Accessories\";
FillChar(SHFileOpStruct, SizeOf(SHFileOpStruct), 0);
SHFileOpStruct.wFunc := FO_RENAME;
SHFileOpStruct.pFrom := PChar(sPath + "Calculator.lnk"#0);
SHFileOpStruct.pTo := PChar(sPath + "Калькулятор.lnk"#0);
SHFileOperation(SHFileOpStruct)
end;


 
France   (2002-09-02 13:28) [3]

> Poirot © (02.09.02 13:18)
F1 пробовал, не показывает того, чего хотелось-бы. Вот так.
А насчет ламера, ну пусть я буду ламером, так и быть. Я не обидчивый. И зачем так горячиться? А вообще, мне больше нечего делать, как в сетке глупые вопросы разным умникам задавать. :-(((

> Ученик © (02.09.02 13:18)
Спасибо. Буду изучать. :-)


 
Poirot ©   (2002-09-02 16:09) [4]


> F1 пробовал, не показывает того, чего хотелось-бы. Вот так.

Вам бы на русском, да ещё и с примером... да? Причём по вашей задаче!



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

Текущий архив: 2002.09.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
14-35857
VEG
2002-08-10 23:18
2002.09.12
---|Ветка была без названия|---


1-35732
Dimushkin
2002-08-30 12:52
2002.09.12
Clipboard...


4-35958
Igor_Z
2002-07-22 14:19
2002.09.12
Отключение запуска всех приложений при клике по иконкам файлов


1-35687
neg2001
2002-09-02 13:10
2002.09.12
Как использовать DCU не имея PAS файла


14-35913
Ыукпун
2002-08-20 13:44
2002.09.12
Програмная реализация процесса стыковки, help!!!