Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Shkutu,
Цитата Shkutu:
а какой-то конкретный »
просто сохраняй имя инстансы в директории установки в текстовом файле, и когда надо считывай из него текст. В качестве защиты от дурака скрой его
вот накатал функции сохранения текста в файле и чтения оттуда. Они на чистом WinApi
читать дальше »
Код: Выделить весь код
#define A = (Defined UNICODE) ? "W" : "A"

const
    OPEN_ALWAYS = 4;
    GENERIC_READ = $80000000;
    GENERIC_WRITE = $40000000;
    FILE_SHARE_READ = $00000001;
    FILE_SHARE_WRITE = $00000002;
    OPEN_EXISTING = 3;
    TRUNCATE_EXISTING = 5;
    
    INVALID_HANDLE_VALUE = -1;
    
    OFS_MAXPATHNAME = 128;

type
    Pointer = Longint;
    POverlapped = Pointer;
    PSecurityAttributes = Pointer;


function CreateFile(lpFileName: String; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition,
  dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; external 'CreateFile{#A}@Kernel32.dll stdcall';
  
function WriteFile(hFile: THandle; const Buffer: Pointer; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD;
  lpOverlapped: POverlapped): BOOL; external 'WriteFile@Kernel32.dll stdcall';
  
function ReadFile(hFile: THandle; Buffer: Pointer; nNumberOfBytesToRead: DWORD;
  var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; external 'ReadFile@Kernel32.dll stdcall';
  
function GetFileSize(hFile: THandle; lpFileSizeHigh: Pointer): DWORD; external 'GetFileSize@Kernel32.dll stdcall';
  
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';




function GetTextFromFile(const FileName: String; out Text: String): Boolean;
var
    dwBytesRead: DWORD;
    FileSize: DWORD;
    hFile: THandle;
begin
    hFile := CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    Result := hFile <> INVALID_HANDLE_VALUE;
    if Result then
    try
        FileSize := GetFileSize(hFile, 0);
        SetLength(Text, FileSize);
        Result := ReadFile(hFile, CastStringToInteger(Text), FileSize, dwBytesRead, 0);
    finally
        CloseHandle(hFile);
    end;
end;


function SaveTextToFile(const FileName, Text: String): Boolean;
var
    dwByteWritten: DWORD;
    hFile: THandle;
begin
    hFile := CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_ALWAYS or TRUNCATE_EXISTING, 0, 0);
    Result := hFile <> INVALID_HANDLE_VALUE;
    if Result then
    try
        Result := WriteFile(hFile, CastStringToInteger(Text), Length(Text), dwByteWritten, 0);
    finally
        CloseHandle(hFile);
    end;
end;



procedure InitializeWizard();
var
    S: String;
begin
    if SaveTextToFile('C:\file.txt', 'Shkutu') then
    if GetTextFromFile('C:\file.txt', S) then
      MsgBox(S, mbInformation, MB_OK);
end;

у меня нет доверия к встроенным
SaveString(s)ToFile
LoadString(s)FromFile
но если хочешь воспользуйся ими

или пиши своё собственное значение в реестр с именем инстансы только для самой себя, и читай её в деинсталяторе

Цитата Shkutu:
как можно добавить форму к деинсталлятору »
объясни лучше на словах как оно должно выглядеть. Может не форму а страницу типа той которую ты создаёшь у себя в коде?
А то я честно говоря не знаю что мне писать

El Sanchez, раз уж ты здесь можешь пожалуйста проверить правильность моих функций SaveTextToFile и GetTextFromFile. Как бы я с флагами не напутал, хотя всё работает, но фиг знает

Последний раз редактировалось Johny777, 03-09-2013 в 23:00. Причина: Улучшил. Теперь при записи текста длиной короче, что есть в файле нет куска пред. текста на конце нового (TRUNCATE_EXISTING)

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:22, 03-09-2013 | #1088