Vì InnoSetup
không hỗ trợ con trỏ, bạn sẽ phải tạo thư viện bên ngoài để gọi hàm GetVolumeInformation
. Các mẫu mã sau đây sẽ làm việc cho tất cả các kết hợp của Delphi và InnoSetup (từ điểm hỗ trợ Unicode).
Dưới đây là mã thư viện Delphi:
library VolumeInformation;
uses
Types, Classes, SysUtils, Windows;
var
SerialNumber: AnsiString;
function GetVolumeSerial(Drive: PAnsiChar): PAnsiChar; stdcall;
var
FileSystemFlags: DWORD;
VolumeSerialNumber: DWORD;
MaximumComponentLength: DWORD;
begin
SerialNumber := '';
GetVolumeInformationA(Drive, nil, 0, @VolumeSerialNumber,
MaximumComponentLength, FileSystemFlags, nil, 0);
SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + ' - ' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Result := PAnsiChar(SerialNumber);
end;
exports
GetVolumeSerial;
end.
Và đây là mã InnoSetup: Mã
[Files]
Source: "VolumeInformation.dll"; Flags: dontcopy
[Code]
function GetVolumeSerial(Drive: PAnsiChar): PAnsiChar;
external '[email protected]:VolumeInformation.dll stdcall setuponly';
procedure ButtonOnClick(Sender: TObject);
var
S: string;
begin
S := GetVolumeSerial('c:\');
MsgBox(S, mbInformation, mb_Ok);
end;
Cảm ơn bạn nhiều lần. Tha thứ cho tôi vì là một thằng ngốc, nhưng làm thế nào để tôi giải thích điều đó? Ví dụ, ổ đĩa C của tôi được gắn nhãn là 449D-0C30 tại dấu nhắc lệnh, nhưng khi tôi chạy mã Inno của bạn, hộp thư hiển thị 17565-3120. Tôi biết tôi đang đi đúng hướng, nhưng tôi mới nhập chức năng vào Inno! Cảm ơn rất nhiều vì sự giúp đỡ của bạn! – user1208402
17565-3120 trong thập phân thập phân là 449D-0C30. xem chỉnh sửa của tôi. – kobik
Tôi đã có nhiều người cho vay lời khuyên chắc chắn. Tôi mới là ngăn xếp, vậy làm thế nào tôi có thể cho họ tín dụng cho những đóng góp của họ? – user1208402