Получаване на името на файла в секцията с код като вход, докато изпълнявате настройката?

const
    GetFileExInfoStandard = $0;

type 
    FILETIME = record 
      LowDateTime:  DWORD; 
      HighDateTime: DWORD; 
    end; 

    WIN32_FILE_ATTRIBUTE_DATA = record 
      FileAttributes: DWORD; 
      CreationTime:   FILETIME; 
      LastAccessTime: FILETIME; 
      LastWriteTime:  FILETIME; 
      FileSizeHigh:   DWORD; 
      FileSizeLow:    DWORD; 
    end; 

    SYSTEMTIME = record 
      Year:         WORD; 
      Month:        WORD; 
      DayOfWeek:    WORD; 
      Day:          WORD; 
      Hour:         WORD; 
      Minute:       WORD; 
      Second:       WORD; 
      Milliseconds: WORD; 
    end; 

function GetFileAttributesEx (
    FileName:            string;  
    InfoLevelId:         DWORD; 
    var FileInformation: WIN32_FILE_ATTRIBUTE_DATA
    ): Boolean; 
external '[email protected] stdcall'; 

function FileTimeToSystemTime(
    FileTime:        FILETIME; 
    var SystemTime:  SYSTEMTIME
    ): Boolean; 
external '[email protected] stdcall'; 

procedure InitializeWizard();
    var 
      FileInformation: WIN32_FILE_ATTRIBUTE_DATA; 
      SystemInfo: SYSTEMTIME;     
begin
    GetFileAttributesEx('C:\Users\Gangadhar\Desktop\white_plain.gif', GetFileExInfoStandard , FileInformation); 

    FileTimeToSystemTime(FileInformation.LastWriteTime, SystemInfo); 

    MsgBox(format('%2.2d-%2.2d-%4.4d', [SystemInfo.Day, SystemInfo.Month, SystemInfo.Year]), mbInformation, MB_OK);
end;

Използвам настройката на Inno, за да създавам персонализирани инсталатори, имам нужда от това, за да добавя нещо към моя инсталатор. Чрез този код мога да намеря последната модифицирана дата на файла, но искам да дам името на файла като вход, докато изпълнявам настройката. виж тук

GetFileAttributesEx('C:\Users\Gangadhar\Desktop\white_plain.gif', GetFileExInfoStandard, FileInformation);

в тази функция ми беше предадено име на файл като параметър. Искам да избера това име на файл, докато изпълнявам настройката, като съветника за избор на целева папка и след това да предам това избрано име на файл като параметър към горната функция.

всяка помощ ще бъде оценена. Благодаря предварително


person Gangadhar    schedule 14.06.2013    source източник
comment
Какво имате предвид с изберете това име на файл, докато изпълнявате настройката? Искате да кажете, че искате да отворите диалоговия прозорец на файла и да позволите на потребителя да избере файла и да прехвърли избраното име на файл на функцията? И кога искате да направите това?   -  person TLama    schedule 14.06.2013
comment
@TLama точно след wpwelcome wizard   -  person Gangadhar    schedule 14.06.2013


Отговори (2)


Търсите функцията GetOpenFileName, която показва диалогов прозорец, който позволява на потребителя да избере съществуващ файл. Следният скрипт показва как да се покаже този диалогов прозорец, когато потребителят напусне началната страница. Ако потребителят отмени избора на файл, той ще остане на началната страница:

[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
var
  FileName: String;
begin
  // allow users to go through the wizard by default
  Result := True;
  // if the user is going to leave the welcome page, then... 
  if CurPageID = wpWelcome then
  begin
    // set the initial file name
    FileName := '';
    // open the file dialog; if the user cancels it, they will stay at
    // the welcome page (I don't know if it's your intention though)
    Result := GetOpenFileName('Select the file to check', FileName, '',
      'GIF Files (*.gif)|*.gif|All Files|*.*', '');
    // if the user selected a file, then do whatever you want with it
    if Result then
    begin
      // you got the file name in FileName variable
    end;
  end;  
end;
person TLama    schedule 14.06.2013
comment
Съжалявам, не разбирам изискването ви. Вие казахте в предишния си коментар, че искате да покажете диалоговия прозорец за отваряне на файл след началната страница. Това прави този скрипт. Коментарите в скрипта казват доста ясно къде трябва да поставите останалата част от кода си, така че не знам какво имате предвид с тази комбинация. - person TLama; 14.06.2013
comment
В този инсталатор след страницата за добре дошли, ако избера който и да е файл и щракна върху следващия, той трябва да покаже датата на последна промяна на избрания файл в полето за съобщения. Прегледах компонентите във вашия скрипт, първоначално не направих някои промени, след като направих тези промени, сега това работи за мен. Благодаря ти много - person Gangadhar; 14.06.2013

Цялостен скрипт, може да ви е полезен

#define MyAppName "showing the last modified date of selected file or directory"
#define MyAppVersion "1.5"
#define MyAppPublisher "My company"
#define MyAppURL "http://www.example.com/"
;#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{CD4CCA6A-5495-4132-98EE-44BC071E850B}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
CreateAppDir=no
DisableDirPage=yes
DisableProgramGroupPage=yes
OutputDir=C:\Users\Gangadhar\Desktop\showing last modified date
OutputBaseFilename=last modified date of any file
Compression=lzma
SolidCompression=yes
DisableFinishedPage=yes

[Messages]
buttoninstall=&Close Application
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"


[Code]
const
    GetFileExInfoStandard = $0;


type 
    FILETIME = record 
      LowDateTime:  DWORD; 
      HighDateTime: DWORD; 
    end; 

    WIN32_FILE_ATTRIBUTE_DATA = record 
      FileAttributes: DWORD; 
      CreationTime:   FILETIME; 
      LastAccessTime: FILETIME; 
      LastWriteTime:  FILETIME; 
      FileSizeHigh:   DWORD; 
      FileSizeLow:    DWORD; 
    end; 

    SYSTEMTIME = record 
      Year:         WORD; 
      Month:        WORD; 
      DayOfWeek:    WORD; 
      Day:          WORD; 
      Hour:         WORD; 
      Minute:       WORD; 
      Second:       WORD; 
      Milliseconds: WORD; 
    end; 

 var
     FileInformation: WIN32_FILE_ATTRIBUTE_DATA;
       FileName: String;
       SystemInfo: SYSTEMTIME; 



function GetFileAttributesEx (
    FileName:            string;  
    InfoLevelId:         DWORD; 
    var FileInformation: WIN32_FILE_ATTRIBUTE_DATA
    ): Boolean; 
external '[email protected] stdcall';



function FileTimeToSystemTime(
    FileTime:        FILETIME; 
    var SystemTime:  SYSTEMTIME
    ): Boolean; 
external '[email protected] stdcall'; 



function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  S: String;
  Months,days:tarrayofstring;
  i:integer;
begin
i:=0;
Months:=['January','February','March','April','May','June','July','August','September','October','November','December'];
Days:=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
S:='';       //Modified: 22 ?June ?2013, ??04:14:00 PM   ?24 ?June ?2013, ??02:38:18 PM
S:=S+Newline;
S:=S+'Selected Filename :'+Newline+Filename+Newline+Newline;
S:=S+'Last modified date of Selected file is:  ' ;
for i:=0 to 6 do 
begin
if SystemInfo.DayOfWeek=i then
S:=S+Days[i]+', ';
end;

S:=S+inttostr(SystemInfo.Day)+'-';
//January February March April May June July August September October November December 
for i:=0 to 11 do 
begin
if SystemInfo.Month=i+1 then
S:=S+Months[i];
end;

S:=S+'-'+inttostr(SystemInfo.Year);
Result:=S;
end;




 function NextButtonClick(CurPageID: Integer): Boolean;
begin
  // allow users to go through the wizard by default
  Result := True;
  // if the user is going to leave the welcome page, then... 
  if CurPageID = wpWelcome then
  begin
    // set the initial file name
    FileName := '';
    // open the file dialog; if the user cancels it, they will stay at
    // the welcome page (I don't know if it's your intention though)
    Result := GetOpenFileName('Select the file to check', FileName, '',
      'ALL Files (*.*)|*.*|All Files|*.*', '');
    // if the user selected a file, then do whatever you want with it
    if Result then
    begin
    GetFileAttributesEx(format('%s', [FileName]), GetFileExInfoStandard , FileInformation);
    FileTimeToSystemTime(FileInformation.LastWriteTime, SystemInfo); 

   // MsgBox(format('LAST MODIFIED DATE OF SELECTED FILE IS : %2.d-%2.2d-%4.4d', [SystemInfo.Day, SystemInfo.Month, SystemInfo.Year]), mbInformation, MB_OK);
      // you got the file name in FileName variable
    end;
  end;  
end;
person Gangadhar    schedule 06.07.2013