Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Комментарий к файлу   Найти похожие ветки 

 
Ego   (2004-11-25 19:29) [0]

У меня такой вопрос: как программно прочитать комментарии к файлу( те, которые появляются, когда на файле задерживаешь курсор мыши )?


 
Poirot ©   (2004-11-25 20:25) [1]

Это расгирениее оболочки. Т.ен. это оболочка генерирует сама. на основе выбранного файла. СМ IQueryInfo для больше понятности:)


 
TankMan ©   (2004-11-25 22:57) [2]

Вот взял с delphi world... Автор: Brian Pedersen
Сам мучался - искал :)
Возьми кусок какой нужен...
Вообще GetFileVersion мне хватило :)

unit FileInfo;

interface

uses
 forms, shellapi, windows, sysutils;

type
 EFileInfo = exception;
 TLangInfoBuffer = array [1..4] of SmallInt;
 TFileInfo = class
 private
   f : TSearchRec;
   fVerBlk : TVSFixedFileInfo;
   fFileName : string;
   function GetFileVersion( AFileName : string ) : boolean;
 public
   constructor Create( AFileName : string ); // Создаём объект
   destructor Destroy; override;
   function Execute : integer; // Открывает файл в программе, связанной с ним
   function VersionString : string; // Версия файла. Строка пустая, если строка не найдена
   function OS : string; // Операционная система
   function Path : string; // Путь файла
   function FileName : string; // Имя файла
   function name : string; // Имя файла без расширения
   function DosFileName : string; // Имя файла в DOS
   function FileExt : string; // Расширение файла
   function FileType : string; // Тип файла
   function FileSize : longint; // Размер файла
   function isDebugBuild : boolean; // True если флаг отладки (debug build) установлен
   function isPreRelease : boolean; // True если флаг prerelease установлен
   function isPrivateBuild : boolean; // True если флаг private установлен
   function isSpecialBuild : boolean; // True если флаг special build установлен
   function isDirectory : boolean; // True если файл является директорией
   function isHidden : boolean; // True если файл является скрытым (hidden)
   function isSystemFile : boolean; // True если файл является системным
   function isVolumeId : boolean; // True если файл является меткой тома
   function isArchive : boolean; // True если файл является архивом
   function CreationTime : TDateTime; // Время создания файла
   function LastAccessed : TDateTime; // Время последнего доступа к файлу
   function LastWritten : TDateTime; // Время последней записи в файл
end;

implementation

constructor TFileInfo.Create(AFileName: string);
var
 ret: integer;
begin
 inherited Create;
 fFileName := AFileName;
 ret := FindFirst( AFileName, faReadOnly + faHidden+ faSysFile +
   faVolumeID + faDirectory + faArchive + faAnyFile, f );
 if ret <> 0 then
   SysUtils.RaiseLastWin32Error;
end;

destructor TFileInfo.Destroy;
begin
 FindClose( f );
end;

function TFileInfo.GetFileVersion(AFileName: string): boolean;
var
 InfoSize, puLen: DWord;
 Pt, InfoPtr: Pointer;
begin
 InfoSize := GetFileVersionInfoSize( PChar(AFileName), puLen );
 fillchar( fVerBlk, sizeof(TVSFixedFileInfo), 0);
 if InfoSize > 0 then
 begin
   GetMem(Pt,InfoSize);
   GetFileVersionInfo( PChar(AFileName), 0, InfoSize, Pt);
   VerQueryValue(Pt,"\",InfoPtr,puLen);
   move(InfoPtr^, fVerBlk, sizeof(TVSFixedFileInfo) );
   FreeMem(Pt);
   result := true;
 end
 else
   result := false;
end;

function TFileInfo.VersionString: string;
begin
 if GetFileVersion( fFileName ) then
   result := Format("%u.%u.%u.%u",
   [HiWord(fVerBlk.dwProductVersionMS),
   LoWord(fVerBlk.dwProductVersionMS),
   HiWord(fVerBlk.dwProductVersionLS),
   LoWord(fVerBlk.dwProductVersionLS)])
 else
   result := "";
end;

function TFileInfo.isDebugBuild : boolean;
begin
 result := FALSE;
 if GetFileVersion( fFileName ) then
   result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
   VS_FF_DEBUG) <> 0
end;

function TFIleInfo.isPreRelease : boolean;
begin
 result := FALSE;
 if GetFileVersion( fFileName ) then
   result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
   VS_FF_PRERELEASE) <> 0
end;

function TFIleInfo.isPrivateBuild : boolean;
begin
 result := FALSE;
 if GetFileVersion( fFileName ) then
   result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
   VS_FF_PRIVATEBUILD) <> 0
end;
....


 
TankMan ©   (2004-11-25 22:58) [3]

//.....

function TFIleInfo.isSpecialBuild : boolean;
begin
 result := FALSE;
 if GetFileVersion( fFileName ) then
   result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
   VS_FF_SPECIALBUILD) <> 0
end;

function TFileInfo.OS : string;
begin
 if GetFileVersion( fFileName ) then
   case fVerBlk.dwFileOS of
     VOS_DOS_WINDOWS16 : result := "MS-DOS or 16 bit Windows";
     VOS_DOS_WINDOWS32 : result := "32 bit Windows";
     VOS_OS216_PM16 : result := "16 bit OS/2";
     VOS_OS232_PM32 : result := "32 bit OS/2";
     VOS_NT_WINDOWS32 : result := "Win32 or Windows NT";
     else
       result := "Unknown OS";
   end
 else
   result := "";
end;

function TFileInfo.FileType : string;
var
 S: string;
begin
 S := "";
 if GetFileVersion( fFileName ) then
 begin
   case fVerBlk.dwFileType of
     VFT_APP : S := "Application";
     VFT_DLL : S := "Dynamic Link Library (DLL)";
     VFT_DRV :
     begin
       S := "Device Driver - ";
       case fVerBlk.dwFileSubtype of
         VFT2_DRV_PRINTER : S := S + "Printer";
         VFT2_DRV_KEYBOARD : S := S + "Keyboard";
         VFT2_DRV_LANGUAGE : S := S + "Language";
         VFT2_DRV_DISPLAY : S := S + "Display";
         VFT2_DRV_MOUSE : S := S + "Mouse";
         VFT2_DRV_NETWORK : S := S + "Network";
         VFT2_DRV_SYSTEM : S := S + "System";
         VFT2_DRV_INSTALLABLE : S := S + "Installable";
         VFT2_DRV_SOUND : S := S + "Sound";
         else
           S := S + "Unknown";
       end;
     end;
     VFT_FONT :
     begin
       S := "Font File - ";
       case fVerBlk.dwFileSubType of
         VFT2_FONT_RASTER : S := S + "Raster";
         VFT2_FONT_VECTOR : S := S + "Vector";
         VFT2_FONT_TRUETYPE : S := S + "TrueType";
         else
           S := S + "Unknown";
       end;
     end;
     VFT_VXD : S := "Virtual Device";
     VFT_STATIC_LIB : S := "Static Link Library";
     else
       S := "Unknown File Type";
   end;
 end;
 Result := S;
end;

function TFileInfo.Path : string;
begin
 result := ExtractFilePath( fFileName );
end;

function TFileInfo.FileName : string;
begin
 result := ExtractFileName( fFileName );
end;

function TFileInfo.name : string;
begin
 if Pos( FileExt, FileName ) > 0 then
   result := Copy( FileName, 0, pos( FileExt, FileName )-1 )
 else
   result := FileName;
end;

function TFileInfo.DosFileName : string;
begin
 result := StrPas( f.FindData.cAlternateFileName )
end;

function TFileInfo.FileExt : string;
begin
 result := ExtractFileExt( fFileName );
end;

function TFileInfo.isDirectory : boolean;
begin
 result := f.Attr and faDirectory = faDirectory;
end;

function TFileInfo.isHidden : boolean;
begin
 result := f.Attr and faHidden = faHidden;
end;

function TFileInfo.isSystemFile : boolean;
begin
 result := f.Attr and faSysFile = faSysFile;
end;

function TFileInfo.isVolumeId : boolean;
begin
 result := f.Attr and faVolumeId = faVolumeId;
end;

function TFileInfo.isArchive : boolean;
begin
 result := f.Attr and faArchive = faArchive;
end;

function TFileInfo.FileSize : longint;
begin
 result := f.Size;
end;

function TFileInfo.CreationTime : TDateTime;
var
 LTime: TFileTime;
 Systemtime: TSystemtime;
begin
 FileTimeToLocalFileTime( f.FindData.ftCreationTime, LTime);
 FileTimeToSystemTime( LTime, SystemTime );
 result := SystemTimeToDateTime( SystemTime);
end;

function TFileInfo.LastAccessed : TDateTime;
var
 LTime : TFileTime;
 Systemtime : TSystemtime;
begin
 FileTimeToLocalFileTime( f.FindData.ftLastAccessTime, LTime);
 FileTimeToSystemTime( LTime, SystemTime );
 result := SystemTimeToDateTime( SystemTime);
end;

function TFileInfo.LastWritten : TDateTime;
var
 LTime : TFileTime;
 Systemtime : TSystemtime;
begin
 FileTimeToLocalFileTime( f.FindData.ftLastWriteTime, LTime);
 FileTimeToSystemTime( LTime, SystemTime );
 result := SystemTimeToDateTime( SystemTime);
end;

function TFileInfo.Execute : integer;
begin
 result := shellapi.ShellExecute( Application.Handle, "open",
   pChar( fFileName ), "", pChar(Path), SW_SHOWDEFAULT );
 case result of
   0 :
     raise Exception.Create( "Недостаточно памяти или ресурсов." );
   ERROR_FILE_NOT_FOUND :
     raise Exception.Create( "Указанный файл не найден." );
   ERROR_PATH_NOT_FOUND :
     raise Exception.Create( "Указанный путь не найден." );
   ERROR_BAD_FORMAT :
     raise Exception.Create( "Ошибка файла .EXE (не -Win32 .EXE или ошибка " + "в .EXE)." );
   SE_ERR_ACCESSDENIED :
     raise Exception.Create( "Доступ к файлу запрещён." );
   SE_ERR_ASSOCINCOMPLETE :
     raise Exception.Create( "The filename association is incomplete or invalid." );
   SE_ERR_DDEBUSY :
     raise Exception.Create( "Транзакция DDE не может быть завершена, потому что " +
     "другая транзакция DDE находится в процессе выполнения." );
   SE_ERR_DDEFAIL :
     raise Exception.Create( "Ошибка транзакции DDE." );
   SE_ERR_DDETIMEOUT :
     raise Exception.Create( "DDE транзакция не может быть завершина из-за тайм-аута." );
   SE_ERR_DLLNOTFOUND :
     raise Exception.Create( "Указанная dynamic-link library не найдена." );
   SE_ERR_NOASSOC :
     raise Exception.Create( "Не найдено приложение связанной с данным расширением файла." );
   SE_ERR_OOM :
     raise Exception.Create( "Недостаточно памяти для завершения операции." );
   SE_ERR_SHARE :
     raise Exception.Create( "Файл используется другим приложением." );
   else
 end;
end;

end.



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

Форум: "WinAPI";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.039 c
14-1103838942
AlterEgo of WondeRu
2004-12-24 00:55
2005.01.16
"Правильные" вопросы в форум ;-)


14-1104061294
syte_ser78
2004-12-26 14:41
2005.01.16
Похмелье


3-1102885906
m-a-x
2004-12-13 00:11
2005.01.16
связь многие-ко-многим


1-1103873682
Dima
2004-12-24 10:34
2005.01.16
Проблема со вставкой в AutoCad


3-1102357690
able
2004-12-06 21:28
2005.01.16
Ещё раз две таблицы связанные





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский