PDA

View Full Version : How to install the directory automatically points to the Max Drive?


52098994
04-10-2016, 09:21
How to install the directory automatically points to the Max Drive?

I write this error

http://hoop8.com/1610A/iymywcOA.png

http://hoop8.com/1610A/BF0b4Knm.png

Razor12911
04-10-2016, 13:13
These go here
http://fileforums.com/showthread.php?t=98274

lolaya
05-10-2016, 06:23
how to copy folder to Documents auto*?

konami etc. save game ...

JRD!
05-10-2016, 09:47
how to copy folder to Documents auto*?

konami etc. save game ...

Please make your request in the appropriate section.

lolaya
06-10-2016, 07:33
O.o

Razor12911
07-10-2016, 02:27
Not a thank you in 48 h, if it do not agree, it must be said, if it is just the size and not free space, I don't know, but I know not against, it's that this is the last time that I help...

Haha, same thing I'm dealing with, you sometimes wonder if the thanks button is hidden from other users, at least to show appreciation.
I was approached by this guys who asked this question because he failed to solve a simple code, the code was pretty simple so after telling him what to do, he sent an attachment and asked for help with the code, I ignored it, he then sent PM, on the case, same day, I then had to leave my assignment and help him, helped him, he then asks another question, no thanks received in the process.

http://fileforums.com/showthread.php?t=98306
http://fileforums.com/showthread.php?t=98345 , this question is ignored on purpose.

Just do this, they ignore thanks button, ignore question.

52098994
09-10-2016, 10:50
Not a thank you in 48 h, if it do not agree, it must be said, if it is just the size and not free space, I don't know, but I know not against, it's that this is the last time that I help...

be a long time See your reply,I am very sorry:)
my English is poor.

Automatic installation path to the Maximum free space drive
Check all Maximum free space drive (except Flash-USB, CD Drive,USB disk....only checks for hard disk)
IF
C free space:50G
D free space:100G
E free space:200G
F free space:180G
Default installation path to E drive(Maximum free space drive)

think you:)

52098994
09-10-2016, 11:07
These go here
http://fileforums.com/showthread.php?t=98274

be a long time See your reply,I am very sorry
my English is poor.

Is to ask questions in this post?

JRD!
09-10-2016, 16:55
Certainly the improved:

#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

type
TDiskInfo = record
DriveRoot: string;
FreeSpace: cardinal;
TotalSpace: cardinal;
end;

TDiskInfos = array of TDiskInfo;

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';
function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: string): DWORD;
external 'GetLogicalDriveStrings{#AW}@kernel32.dll stdcall';

Function GetMaxFreeSpace(Value: String): String;
var
S: String;
I, J: Integer;
DiskInfos: TDiskInfos;
begin
I := 0; J:=0;
if GetLogicalDriveStrings(0, #0) > 0 then
begin
SetLength(S, GetLogicalDriveStrings(0, #0));
if GetLogicalDriveStrings(Length(S), S) > 0 then
begin
S := TrimRight(S) + #0;
while Pos(#0, S) > 0 do
begin
if (GetDriveType(Copy(S, 1, Pos(#0, S) - 1)) = 3) then
begin
Inc(I);
SetLength(DiskInfos, I);
DiskInfos[I-1].DriveRoot:=Copy(S, 1, Pos(#0, S) - 1);
GetSpaceOnDisk(DiskInfos[I-1].DriveRoot, True, DiskInfos[I-1].FreeSpace, DiskInfos[I-1].TotalSpace);
end;
Delete(S, 1, Pos(#0, S));
end;
for I := 0 to Length(DiskInfos) -1 do
begin
if I = 0 then
J := DiskInfos[i].FreeSpace else
begin
if J > DiskInfos[i].FreeSpace then J := J else
begin
J := DiskInfos[i].FreeSpace;
Result:=DiskInfos[i].DriveRoot;
end;
end;
end;
end;
end;
end;

52098994
10-10-2016, 05:53
Certainly the improved:

#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

type
TDiskInfo = record
DriveRoot: string;
FreeSpace: cardinal;
TotalSpace: cardinal;
end;

TDiskInfos = array of TDiskInfo;

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';
function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: string): DWORD;
external 'GetLogicalDriveStrings{#AW}@kernel32.dll stdcall';

Function GetMaxFreeSpace(Value: String): String;
var
S: String;
I, J: Integer;
DiskInfos: TDiskInfos;
begin
I := 0; J:=0;
if GetLogicalDriveStrings(0, #0) > 0 then
begin
SetLength(S, GetLogicalDriveStrings(0, #0));
if GetLogicalDriveStrings(Length(S), S) > 0 then
begin
S := TrimRight(S) + #0;
while Pos(#0, S) > 0 do
begin
if (GetDriveType(Copy(S, 1, Pos(#0, S) - 1)) = 3) then
begin
Inc(I);
SetLength(DiskInfos, I);
DiskInfos[I-1].DriveRoot:=Copy(S, 1, Pos(#0, S) - 1);
GetSpaceOnDisk(DiskInfos[I-1].DriveRoot, True, DiskInfos[I-1].FreeSpace, DiskInfos[I-1].TotalSpace);
end;
Delete(S, 1, Pos(#0, S));
end;
for I := 0 to Length(DiskInfos) -1 do
begin
if I = 0 then
J := DiskInfos[i].FreeSpace else
begin
if J > DiskInfos[i].FreeSpace then J := J else
begin
J := DiskInfos[i].FreeSpace;
Result:=DiskInfos[i].DriveRoot;
end;
end;
end;
end;
end;
end;


Perfect!!! Thank you

52098994
13-10-2016, 12:55
Certainly the improved:

#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

type
TDiskInfo = record
DriveRoot: string;
FreeSpace: cardinal;
TotalSpace: cardinal;
end;

TDiskInfos = array of TDiskInfo;

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';
function GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer: string): DWORD;
external 'GetLogicalDriveStrings{#AW}@kernel32.dll stdcall';

Function GetMaxFreeSpace(Value: String): String;
var
S: String;
I, J: Integer;
DiskInfos: TDiskInfos;
begin
I := 0; J:=0;
if GetLogicalDriveStrings(0, #0) > 0 then
begin
SetLength(S, GetLogicalDriveStrings(0, #0));
if GetLogicalDriveStrings(Length(S), S) > 0 then
begin
S := TrimRight(S) + #0;
while Pos(#0, S) > 0 do
begin
if (GetDriveType(Copy(S, 1, Pos(#0, S) - 1)) = 3) then
begin
Inc(I);
SetLength(DiskInfos, I);
DiskInfos[I-1].DriveRoot:=Copy(S, 1, Pos(#0, S) - 1);
GetSpaceOnDisk(DiskInfos[I-1].DriveRoot, True, DiskInfos[I-1].FreeSpace, DiskInfos[I-1].TotalSpace);
end;
Delete(S, 1, Pos(#0, S));
end;
for I := 0 to Length(DiskInfos) -1 do
begin
if I = 0 then
J := DiskInfos[i].FreeSpace else
begin
if J > DiskInfos[i].FreeSpace then J := J else
begin
J := DiskInfos[i].FreeSpace;
Result:=DiskInfos[i].DriveRoot;
end;
end;
end;
end;
end;
end;





http://hoop8.com/1610B/FZg54zNP.jpg

What is this error?
why?

JRD!
29-06-2017, 12:44
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';

function GetMaxFreeSpaceDrive: String;
var
i: Integer;
sDriveRoot: string;
iLastMax, iNewMax, iTotal: Cardinal;
begin
iLastMax:=0;
for i := 1 to 26 do
begin
sDriveRoot := Chr(i+64)+':';
if GetDriveType(sDriveRoot) = 3 then
begin
GetSpaceOnDisk(sDriveRoot, True, iNewMax, iTotal);
if iLastMax < iNewMax then
begin
iLastMax := iNewMax;
Result:=sDriveRoot;
end;
end;
end;
end;

Chayan Manna
03-07-2017, 19:56
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';

function GetMaxFreeSpaceDrive: String;
var
i: Integer;
sDriveRoot: string;
iLastMax, iNewMax, iTotal: Cardinal;
begin
iLastMax:=0;
for i := 1 to 26 do
begin
sDriveRoot := Chr(i+64)+':';
if GetDriveType(sDriveRoot) = 3 then
begin
GetSpaceOnDisk(sDriveRoot, True, iNewMax, iTotal);
if iLastMax < iNewMax then
begin
iLastMax := iNewMax;
Result:=sDriveRoot;
end;
end;
end;
end;


Perfect code !!!!!
Thanks !!!!!
Please can you add a function
That's here:
If the max drive is c then the path will be C:/Programfiles/{#Appname}
Otherwise it will be something else like E:/{#Appname}
Thanks :)

JRD!
04-07-2017, 10:59
Simply call the function with your constant at the end:

GetMaxFreeSpaceDrive + '\' + ExpandConstant('{#Appname}');

Chayan Manna
04-07-2017, 12:07
Simply call the function with your constant at the end:

GetMaxFreeSpaceDrive + '\' + ExpandConstant('{#Appname}');

Please give an Example. :)

JRD!
04-07-2017, 15:52
#define MyAppName "MyApp"
#define MyAppVersion "1.0"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={code:GetMaxFreeSpace}\{#MyAppName}

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[ Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';

function GetMaxFreeSpace(S: String): String;
var
i: Integer;
sDriveRoot: string;
iLastMax, iNewMax, iTotal: Cardinal;
begin
iLastMax:=0;
for i := 1 to 26 do
begin
sDriveRoot := Chr(i+64)+':';
if GetDriveType(sDriveRoot) = 3 then
begin
GetSpaceOnDisk(sDriveRoot, True, iNewMax, iTotal);
if iLastMax < iNewMax then
begin
iLastMax := iNewMax;
Result:=sDriveRoot;
end;
end;
end;
end;

Chayan Manna
04-07-2017, 20:08
#define MyAppName "MyApp"
#define MyAppVersion "1.0"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={code:GetMaxFreeSpace}\{#MyAppName}

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[ Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif

function GetDriveType(lpRootPathName: string): UINT;
external 'GetDriveType{#AW}@kernel32.dll stdcall';

function GetMaxFreeSpace(S: String): String;
var
i: Integer;
sDriveRoot: string;
iLastMax, iNewMax, iTotal: Cardinal;
begin
iLastMax:=0;
for i := 1 to 26 do
begin
sDriveRoot := Chr(i+64)+':';
if GetDriveType(sDriveRoot) = 3 then
begin
GetSpaceOnDisk(sDriveRoot, True, iNewMax, iTotal);
if iLastMax < iNewMax then
begin
iLastMax := iNewMax;
Result:=sDriveRoot;
end;
end;
end;
end;


Thanks.
Will try it. :)