Ярлыки, файловые ассоциации, расширения
Этот код вернет программы, связанные с каждым расширением.
Очевидно, вы можете изменить его для поиска конкретного расширения.
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Не хуже M$ получается! У них свои типы файлов, и у нас будут свои! Всё, что для этого нужно - точно выполнять последовательность действий и научиться копировать в буфер, чтобы не писать все те коды, что будут тут изложены :))
Сначала, естественно, объявляем в uses модуль Registry.
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Этот код вернет программы, связанные с каждым расширением.
Очевидно, вы можете изменить его для поиска конкретного расширения.
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Code: |
Uses Registry; {©Drkb v.3 ®Vit (Vitaly Nevzorov) - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.}
procedure RegisterFileType(FileType,FileTypeName, Description,ExecCommand:string); begin if (FileType='') or (FileTypeName='') or (ExecCommand='') then exit; if FileType[1]<>'.' then FileType:='.'+FileType; if Description='' then Description:=FileTypeName; with Treginifile.create do try rootkey := hkey_classes_root; writestring(FileType,'',FileTypeName); writestring(FileTypeName,'',Description); writestring(FileTypeName+'\shell\open\command','',ExecCommand+' "%1"'); finally free; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin RegisterFileType('txt','TxtFile', 'Plain text','notepad.exe'); end; |
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Code: |
uses ShlObj, ComObj, ActiveX;
procedure CreateLink(const PathObj, PathLink, Desc, Param: string); var IObject: IUnknown; SLink: IShellLink; PFile: IPersistFile; begin IObject := CreateComObject(CLSID_ShellLink); SLink := IObject as IShellLink; PFile := IObject as IPersistFile; with SLink do begin SetArguments(PChar(Param)); SetDescription(PChar(Desc)); SetPath(PChar(PathObj)); end; PFile.Save(PWChar(WideString(PathLink)), FALSE); end; |
Автор: Gavrilo
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Code: |
uses Registry;
procedure AddFileMenue(FilePrefix, Menue, Command: string); var reg: TRegistry; typ: string; begin reg := TRegistry.Create; with reg do begin RootKey := HKEY_CLASSES_ROOT; OpenKey('.' + FilePrefix, True); typ := ReadString(''); if typ = '' then begin typ := Fileprefix + 'file'; WriteString('', typ); end; CloseKey; OpenKey(typ + '\shell\' + Menue + '\command', True); WriteString('', command + ' "%1"'); CloseKey; Free; end; end;
procedure DeleteFileMenue(Fileprefix, Menue: string); var reg: TRegistry; typ: string; begin reg := TRegistry.Create; with reg do begin RootKey := HKEY_CLASSES_ROOT; OpenKey('.' + Fileprefix, True); typ := ReadString(''); CloseKey; OpenKey(typ + '\shell', True); DeleteKey(Menue); CloseKey; Free; end; end;
{ Example}
procedure TForm1.Button1Click(Sender: TObject); begin AddFileMenue('rtf', 'Edit with Notepad', 'C:\Windows\system\notepad.exe'); { Если нажать правой кнопкой мыши на *.ртф-файл потом Вы можете увидеть всплывающее меню: "Редактировать с помощью Блокнота". При нажатии на эту точку Блокнот открывает файл. } end;
procedure TForm1.Button2Click(Sender: TObject); begin { Undo your changes in the Registry: } DeleteFileMenue('rtf', 'Edit with Notepad'); end; |
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Code: |
uses ShlObj, ComObj, ActiveX, CommCtrl;
type PShellLinkInfoStruct = ^TShellLinkInfoStruct; TShellLinkInfoStruct = record FullPathAndNameOfLinkFile: array[0..MAX_PATH] of Char; FullPathAndNameOfFileToExecute: array[0..MAX_PATH] of Char; ParamStringsOfFileToExecute: array[0..MAX_PATH] of Char; FullPathAndNameOfWorkingDirectroy: array[0..MAX_PATH] of Char; Description: array[0..MAX_PATH] of Char; FullPathAndNameOfFileContiningIcon: array[0..MAX_PATH] of Char; IconIndex: Integer; HotKey: Word; ShowCommand: Integer; FindData: TWIN32FINDDATA; end;
procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct); var ShellLink: IShellLink; PersistFile: IPersistFile; AnObj: IUnknown; begin // access to the two interfaces of the object AnObj := CreateComObject(CLSID_ShellLink); ShellLink := AnObj as IShellLink; PersistFile := AnObj as IPersistFile;
// Opens the specified file and initializes an object from the file contents. PersistFile.Load(PWChar(WideString(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile)), 0); with ShellLink do begin // Retrieves the path and file name of a Shell link object. GetPath(lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute, SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile), lpShellLinkInfoStruct^.FindData, SLGP_UNCPRIORITY);
// Retrieves the description string for a Shell link object. GetDescription(lpShellLinkInfoStruct^.Description, SizeOf(lpShellLinkInfoStruct^.Description));
// Retrieves the command-line arguments associated with a Shell link object. GetArguments(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute, SizeOf(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));
// Retrieves the name of the working directory for a Shell link object. GetWorkingDirectory(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy, SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));
// Retrieves the location (path and index) of the icon for a Shell link object. GetIconLocation(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon, SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon), lpShellLinkInfoStruct^.IconIndex);
// Retrieves the hot key for a Shell link object. GetHotKey(lpShellLinkInfoStruct^.HotKey);
// Retrieves the show (SW_) command for a Shell link object. GetShowCmd(lpShellLinkInfoStruct^.ShowCommand); end; end;
procedure TForm1.Button1Click(Sender: TObject); const br = #13#10; var LinkInfo: TShellLinkInfoStruct; s: string; begin FillChar(LinkInfo, SizeOf(LinkInfo), #0); LinkInfo.FullPathAndNameOfLinkFile := 'C:\WINNT\Profiles\user\Desktop\FileName.lnk'; GetLinkInfo(@LinkInfo); with LinkInfo do s := FullPathAndNameOfLinkFile + br + FullPathAndNameOfFileToExecute + br + ParamStringsOfFileToExecute + br + FullPathAndNameOfWorkingDirectroy + br + Description + br + FullPathAndNameOfFileContiningIcon + br + IntToStr(IconIndex) + br + IntToStr(LoByte(HotKey)) + br + IntToStr(HiByte(HotKey)) + br + IntToStr(ShowCommand) + br + FindData.cFileName + br + FindData.cAlternateFileName; Memo1.Lines.Add(s); end;
|
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
ShellApi функция ExtractAssociatedIcon()
Code: |
uses ShellApi;
procedure TForm1.Button1Click(Sender: TObject); var Icon: hIcon; IconIndex: word;
begin IconIndex := 1; Icon := ExtractAssociatedIcon(HInstance, Application.ExeName, IconIndex); DrawIcon(Canvas.Handle, 10, 10, Icon); end; |
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
В Win32 необходимо создать новую запись в реестре в корневом ключе HKEY_CLASSES_ROOT, которая будет указывать на расширение файла, командную строку и иконку, которая будет отображаться для этого расширения. В Win16, просто включить расширение файла и командную строку в секцию [Extensions] в Win.ini.
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Code: |
uses {$IFDEF WIN32} Registry; {We will get it from the registry} {$ELSE} IniFiles; {We will get it from the win.ini file} {$ENDIF}
{$IFNDEF WIN32} const MAX_PATH = 144; {$ENDIF}
function GetProgramAssociation(Ext: string): string; var {$IFDEF WIN32} reg: TRegistry; s: string; {$ELSE} WinIni: TIniFile; WinIniFileName: array[0..MAX_PATH] of char; s: string; {$ENDIF} begin {$IFDEF WIN32} s := ''; reg := TRegistry.Create; reg.RootKey := HKEY_CLASSES_ROOT; if reg.OpenKey('.' + ext + '\shell\open\command', false) <> false then begin {The open command has been found} s := reg.ReadString(''); reg.CloseKey; end else begin {perhaps thier is a system file pointer} if reg.OpenKey('.' + ext, false) <> false then begin s := reg.ReadString(''); reg.CloseKey; if s <> '' then begin {A system file pointer was found} if reg.OpenKey(s + '\shell\open\command', false) <> false then {The open command has been found} s := reg.ReadString(''); reg.CloseKey; end; end; end; {Delete any command line, quotes and spaces} if Pos('%', s) > 0 then Delete(s, Pos('%', s), length(s)); if ((length(s) > 0) and (s[1] = '"')) then Delete(s, 1, 1); if ((length(s) > 0) and (s[length(s)] = '"')) then Delete(s, Length(s), 1); while ((length(s) > 0) and ((s[length(s)] = #32) or (s[length(s)] = '"'))) do Delete(s, Length(s), 1); {$ELSE} GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName)); StrCat(WinIniFileName, '\win.ini'); WinIni := TIniFile.Create(WinIniFileName); s := WinIni.ReadString('Extensions', ext, ''); WinIni.Free; {Delete any command line} if Pos(' ^', s) > 0 then Delete(s, Pos(' ^', s), length(s)); {$ENDIF} result := s; end;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetProgramAssociation('gif')); end;
|
Автор: Олег Кулабухов
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Code: |
uses ShlObj, ActiveX, ComObj; ... {©Drkb v.3®Vit (Vitaly Nevzorov) - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.}
procedure CreateShortCut(ShortCutName, Parameters, FileName: string); var ShellObject: IUnknown; ShellLink: IShellLink; PersistFile: IPersistFile; FName: WideString; begin ShellObject := CreateComObject(CLSID_ShellLink); ShellLink := ShellObject as IShellLink; PersistFile := ShellObject as IPersistFile; with ShellLink do begin SetArguments(PChar(Parameters)); SetPath(PChar(FileName)); SetWorkingDirectory(PChar(extractfilepath(FileName))); FName := ShortCutName; PersistFile.Save(PWChar(FName), False); end; end; |
- Подробности
- Родительская категория: Windows
- Категория: Ярлыки, файловые ассоциации, расширения
Страница 1 из 2