На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> кодировка VFAT
    Подскажите пожалуйста как программно поменять длиные имена пути по алгоритму кодировки МАФЕ
    Например требется перевести туда и обратно
    Мои документы <-> МОИДОК~1
    Письмо клиента на претензию.doc <-> ПИСЬМО~2.DOC
    Выручайте горю
      ExpandedWrap disabled
        function ExpandPath(const Path: string): string;
        var
        Dir, Drive, Name: string;
        i, Count: Integer;
        Dirs: array [0..127] of string;
        Buffer: array [0..MAX_PATH - 1] of Char;
        FName: PChar;
        FD: WIN32_FIND_DATA;
        HDir: THandle;
        NxtFile: Boolean;
        begin
        Result := '';
        SetString(Dir, Buffer, GetFullPathName(PChar(Path), SizeOf(Buffer), Buffer, FName));
        Drive := ExtractFileDrive(Dir);
        Count := 0;
        for i := Low(Dirs) to High(Dirs) do begin
        if (Length(Dir) = 3) or (Length(Dir) = Length(Drive)) then Break;
        Name := ExtractFileName(Dir);
        Dir := ExtractFileDir(Dir);
        if Name <> '' then begin
        Dirs[Count] := Name;
        Inc(Count);
        end;
        end;
        if Count > 0 then
        Dir := Drive;
        Name := UpperCase(Dir);
        for i := Count - 1 downto 0 do begin
        Dir := Concat(Dir, '\', Dirs[i]);
        HDir := FindFirstFile(PChar(Dir), FD);
        if HDir = INVALID_HANDLE_VALUE then Exit;
        try
        NxtFile := FindNextFile(HDir, FD);
        finally
        Windows.FindClose(HDir);
        end;
        if NxtFile then Exit;
        if FD.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then Exit;
        Name := Concat(Name, '\', FD.cFileName);
        end;
        Result := Name;
        end;
        //from http://www.sources.ru/delphi/delphi_tfilefinder.shtml
        P.O.D, круто :)
        Но вот так, думаю, будет попроще:

        ExpandedWrap disabled
          unit Unit1;
           
          interface
           
          uses
            Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
            Dialogs, StdCtrls;
           
          type
            TForm1 = class(TForm)
              Button1: TButton;
              procedure Button1Click(Sender: TObject);
            end;
           
            function GetLongPathNameA(lpszShortPath, lpszLongPath: PChar;
              cchBuffer: DWORD): DWORD; stdcall; external kernel32;
           
          var
            Form1: TForm1;
           
          implementation
           
          {$R *.dfm}
           
          function ExpandFileName(Path: String): String;
          begin
            SetLength(Result, MAX_PATH);
            if GetLongPathNameA(PChar(Path), @Result[1], MAX_PATH) = 0 then
              RaiseLastOSError;
            Result := Trim(Result);
          end;
           
          procedure TForm1.Button1Click(Sender: TObject);
          var
            S: String;
          begin
            // Получаем полное имя
            S := ExpandFileName('C:\DOCUME~1\');
            ShowMessage(S);
            // Получаем урезанное имя
            GetShortPathName(PChar(S), PChar(S), MAX_PATH);
            ShowMessage(S);
          end;
           
          end.
          Rouse_ Блин, а я помню, было что-то стандартное, только не мог вспомнить название :)
            Цитата P.O.D @
            а я помню, было что-то стандартное, только не мог вспомнить название

            Это еще что, я вот до сихпор не могу раздуплить почему GetShortPathName обьявлен в Windows.pas, а GetLongPathName нет :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0261 ]   [ 16 queries used ]   [ Generated: 28.04.24, 07:51 GMT ]