Go Back   FileForums > Game Backup > PC Games > PC Games - CD/DVD Conversions > Conversion Tutorials

Reply
 
Thread Tools Display Modes
  #1486  
Old 12-08-2021, 09:01
DiCaPrIo DiCaPrIo is offline
Registered User
 
Join Date: Apr 2017
Location: Don't Know
Posts: 50
Thanks: 90
Thanked 49 Times in 30 Posts
DiCaPrIo is on a distinguished road
Quote:
Originally Posted by Carldric Clement View Post
I didn't expect it before. the newest version of Inno Setup 6 was no longer code of Application.ProcessMessanges; Is there any similar this code?
function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external '[email protected] stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL; external '[email protected] stdcall';
function DispatchMessage(const lpMsg: TMsg): Longint; external '[email protected] stdcall';

procedure AppProcessMessages;
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, 1) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
Reply With Quote
The Following User Says Thank You to DiCaPrIo For This Useful Post:
Carldric Clement (12-08-2021)
Sponsored Links
  #1487  
Old 12-08-2021, 09:12
Carldric Clement's Avatar
Carldric Clement Carldric Clement is offline
Registered User
 
Join Date: Aug 2014
Location: Toboh, Sabah, Malaysia
Posts: 547
Thanks: 560
Thanked 559 Times in 206 Posts
Carldric Clement is on a distinguished road
Quote:
Originally Posted by DiCaPrIo View Post
function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external '[email protected] stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL; external '[email protected] stdcall';
function DispatchMessage(const lpMsg: TMsg): Longint; external '[email protected] stdcall';

procedure AppProcessMessages;
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, 1) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
almost but there is one thing was unknown type: TMsg;
__________________
EDM Producer.
Reply With Quote
  #1488  
Old 12-08-2021, 09:34
Cesar82's Avatar
Cesar82 Cesar82 is offline
Registered User
 
Join Date: May 2011
Location: Brazil
Posts: 799
Thanks: 1,309
Thanked 1,702 Times in 580 Posts
Cesar82 is on a distinguished road
Quote:
Originally Posted by Carldric Clement View Post
almost but there is one thing was unknown type: TMsg;
Code:
type
  TMsg = record hWnd: HWND; message: LongWord; wParam: Longint; lParam: Longint; Time: LongWord; pt: TPoint; end;
Reply With Quote
The Following 2 Users Say Thank You to Cesar82 For This Useful Post:
Carldric Clement (12-08-2021), DiCaPrIo (12-08-2021)
  #1489  
Old 17-08-2021, 01:54
1234567890123 1234567890123 is offline
Registered User
 
Join Date: Aug 2014
Location: ankara
Posts: 92
Thanks: 124
Thanked 36 Times in 19 Posts
1234567890123 is on a distinguished road
Is there a way to make a listener (code, etc) that listens to get file size in an inno setup? My goal is to show progress in nanozip. It will listen to the nanozip output file with a time interval and get to the rate of total file size to the current size.
Reply With Quote
  #1490  
Old 18-08-2021, 10:11
Masquerade's Avatar
Masquerade Masquerade is offline
Registered User
 
Join Date: Jan 2020
Location: Monte d'Or
Posts: 741
Thanks: 166
Thanked 785 Times in 391 Posts
Masquerade is on a distinguished road
Is there a way to detect the amount of CPU threads / cores there are and do something accordingly?

Eg.

if CPU_THREADS = 6 then
begin
do_stuff
end else begin
do_other_stuff
end;

Asking because some multithreading tools crash when dealing with 6 or 12 threads.
Reply With Quote
  #1491  
Old 18-08-2021, 11:02
DiCaPrIo DiCaPrIo is offline
Registered User
 
Join Date: Apr 2017
Location: Don't Know
Posts: 50
Thanks: 90
Thanked 49 Times in 30 Posts
DiCaPrIo is on a distinguished road
Quote:
Originally Posted by Masquerade View Post
Is there a way to detect the amount of CPU threads / cores there are and do something accordingly?

Eg.

if CPU_THREADS = 6 then
begin
do_stuff
end else begin
do_other_stuff
end;

Asking because some multithreading tools crash when dealing with 6 or 12 threads.
Code:
function GetSysCores(): Integer;
var
  WbemLocator, WbemServices, WbemObjectSet, WbemObject: Variant;
begin;
  WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WbemServices := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
  WbemObjectSet := WbemServices.ExecQuery('Select NumberOfCores from Win32_Processor');
  WbemObject := WbemObjectSet.ItemIndex(0);
  Result := WbemObject.Properties_.Item('NumberOfCores').Value;
  WbemLocator:=Unassigned;
  WbemServices:=Unassigned;
  WbemObjectSet:=Unassigned;
  WbemObject:=Unassigned;
end;

function GetSysThreads(): Integer;
var
  WbemLocator, WbemServices, WbemObjectSet, WbemObject: Variant;
begin;
  WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WbemServices := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
  WbemObjectSet := WbemServices.ExecQuery('Select NumberOfLogicalProcessors from Win32_Processor');
  WbemObject := WbemObjectSet.ItemIndex(0);
  Result := WbemObject.Properties_.Item('NumberOfLogicalProcessors').Value;
  WbemLocator:=Unassigned;
  WbemServices:=Unassigned;
  WbemObjectSet:=Unassigned;
  WbemObject:=Unassigned;
end;
Reply With Quote
The Following User Says Thank You to DiCaPrIo For This Useful Post:
Masquerade (18-08-2021)
  #1492  
Old 18-08-2021, 11:37
Masquerade's Avatar
Masquerade Masquerade is offline
Registered User
 
Join Date: Jan 2020
Location: Monte d'Or
Posts: 741
Thanks: 166
Thanked 785 Times in 391 Posts
Masquerade is on a distinguished road
DiCaPrIo
So I would put if GetSysCores = 6 in the if loop after calling the function?
Reply With Quote
  #1493  
Old 18-08-2021, 11:56
DiCaPrIo DiCaPrIo is offline
Registered User
 
Join Date: Apr 2017
Location: Don't Know
Posts: 50
Thanks: 90
Thanked 49 Times in 30 Posts
DiCaPrIo is on a distinguished road
Quote:
Originally Posted by Masquerade View Post
DiCaPrIo
So I would put if GetSysCores = 6 in the if loop after calling the function?
Code:
procedure InitializeWizard();
var Cores,Threads:Integer;
begin
  Cores:=GetSysCores;
  Threads:=GetSysThreads;
  if Cores = 6 then begin
  //yourcode
  end;
  if Threads = 6 then begin
  //yourcode
  end;
end;
Reply With Quote
The Following User Says Thank You to DiCaPrIo For This Useful Post:
Masquerade (18-08-2021)
  #1494  
Old 18-08-2021, 13:09
Cesar82's Avatar
Cesar82 Cesar82 is offline
Registered User
 
Join Date: May 2011
Location: Brazil
Posts: 799
Thanks: 1,309
Thanked 1,702 Times in 580 Posts
Cesar82 is on a distinguished road
Quote:
Originally Posted by Masquerade View Post
DiCaPrIo
So I would put if GetSysCores = 6 in the if loop after calling the function?
As the function returns an integer value I think I can use it directly without declaring variables.
if GetSysCores = 6 then
begin

end;

The function can also be simplified using variables of type variant so you can get any supported value just by changing the string you want to search for.
Code:
function GetSysInfo(const WMIClass, WMIProperty: String): Variant;
var
  WbemLocator, WbemServices, WbemObjectSet, WbemObject: Variant;
begin;
  WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WbemServices := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
  WbemObjectSet := WbemServices.ExecQuery('Select ' + WMIProperty + ' from ' + WMIClass);
  if (not VarIsNull(WbemObjectSet)) and (WbemObjectSet.Count > 0) then begin
    WbemObject := WbemObjectSet.ItemIndex(0);
    if not VarIsNull(WbemObject) then
      Result := WbemObject.Properties_.Item(WMIProperty).Value;
  end;
end;

procedure GetFreeMemory(var Free, Total: Extended);
begin
  Total := GetSysInfo('Win32_OperatingSystem', 'TotalVisibleMemorySize');
  Free := GetSysInfo('Win32_OperatingSystem ', 'FreePhysicalMemory');
end;

function CPUCores: Integer;
begin
  Result := GetSysInfo('Win32_Processor', 'NumberOfCores');
end;

function CPUThreads: Integer;
begin
  Result := GetSysInfo('Win32_Processor', 'NumberOfLogicalProcessors');
end;

You can also use the API if you prefer to get Threads.
Code:
type
  TSystemInfo = record
    wProcessorArchitecture: Word;
    wReserved: Word;
    dwPageSize: DWORD;
    lpMinimumApplicationAddress: Integer;
    lpMaximumApplicationAddress: Integer;
    dwActiveProcessorMask: DWORD;
    dwNumberOfProcessors: DWORD;
    dwProcessorType: DWORD;
    dwAllocationGranularity: DWORD;
    wProcessorLevel: Integer;
    wProcessorRevision: Word;
  end;

procedure GetSystemInfo(var lpSystemInfo: TSystemInfo);
  external '[email protected] stdcall delayload';

function GetCPUThreads: Integer;
var
  SysInfo: TSystemInfo;
begin
  GetSystemInfo(SysInfo);
  Result := SysInfo.dwNumberOfProcessors;
end;
Reply With Quote
The Following 3 Users Say Thank You to Cesar82 For This Useful Post:
DiCaPrIo (18-08-2021), ffmla (01-10-2021), Masquerade (18-08-2021)
  #1495  
Old 19-08-2021, 00:49
L33THAK0R's Avatar
L33THAK0R L33THAK0R is offline
Registered User
 
Join Date: Feb 2021
Location: Saudi Arabia
Posts: 230
Thanks: 80
Thanked 21 Times in 17 Posts
L33THAK0R is on a distinguished road
Has anyone had an installer made using inno setup just soft-lock consistently? Trying to unpack an archive but it consistently gets stuck on this one file, refusing to progress any further, the funny thing is though, no error codes are displayed, the applications "elapsed time" function continues to run, with CPU & Disk utilisation dropping to 0%, I'm honestly stumped on this one.
Reply With Quote
  #1496  
Old 19-08-2021, 01:53
Masquerade's Avatar
Masquerade Masquerade is offline
Registered User
 
Join Date: Jan 2020
Location: Monte d'Or
Posts: 741
Thanks: 166
Thanked 785 Times in 391 Posts
Masquerade is on a distinguished road
L33THAK0R
This appears an issue with the decompressor you are using and not inno setup itself.
Reply With Quote
  #1497  
Old 19-08-2021, 04:36
L33THAK0R's Avatar
L33THAK0R L33THAK0R is offline
Registered User
 
Join Date: Feb 2021
Location: Saudi Arabia
Posts: 230
Thanks: 80
Thanked 21 Times in 17 Posts
L33THAK0R is on a distinguished road
Quote:
Originally Posted by Masquerade View Post
L33THAK0R
This appears an issue with the decompressor you are using and not inno setup itself.
Ah grim, well that narrows it down to 2 issues then. Fingers crossed I can get it working! I have a feeling it might be due to the assets I ripped, was a bit messy with ripping shit.
Reply With Quote
  #1498  
Old 29-09-2021, 21:15
L33THAK0R's Avatar
L33THAK0R L33THAK0R is offline
Registered User
 
Join Date: Feb 2021
Location: Saudi Arabia
Posts: 230
Thanks: 80
Thanked 21 Times in 17 Posts
L33THAK0R is on a distinguished road
Just as a preface, I originally posted this in the "ASIS" thread, but I reckon it might be more applicable here.

So I have a handful of repacks which have selective installs for a collection of titles, with each having its own shortcut to be placed on the users Desktop, should they select this as an option. Currently however, regardless of the end-users selection a shortcut for each entry made for the application is placed on the desktop, even if the target file is not present. It's not a critical issue but it is a slight annoyance.

My proposed solution, as detailed below, was to use a function named "RemoveShortcut", which is used for the uninstaller generated for a given install, as can be seen here:

Code:
[UninstallDelete]
Type: filesandordirs; Name: {app}
#sub RemoveShortcut
  #emit "Type: Files; Name: ""{userdesktop}\" + Trim(ReadIni(SourcePath + "\Settings.ini", "Executable" + Str(i), "ShortcutName", "")) + ".lnk"";"
  #emit "Type: Files; Name: ""{userprograms}\" + Trim(ReadIni(SourcePath + "\Settings.ini", "Settings", "ShortcutName", "")) + "\" + Trim(ReadIni(SourcePath + "\Settings.ini", "Executable" + Str(i), "ShortcutName", "")) + ".lnk"";"
#endsub
#for {i = 1; Trim(ReadIni(SourcePath + "\Settings.ini", "Executable" + Str(i), "ShortcutName", "")) != ""; i++} RemoveShortcut
However this doesn't seem to work, with testing of 2 dummy data files (each housing its own target application, as well as a blank file to be used as a indicator that the selected component was present), demonstrating both shortcuts were removed even when installing only one of the selected components. If anyone has any thoughts on this I'd love to hear them. I initially thought I might be able to use a series of batch scripts instead, with one script for the removal of each component to be run post-install present in a "main" data file, with a given components archive having an identical, but blank script to overwrite the valid script, however I found I wasn't able to consistently CD to the userdesktop, since I didn't initially take into account a user having a desktop location at a location outside of their C: drive.

__________________________________________________ __________

ORIGINAL QUESTION:


Hi all,

Got a small question regarding whether my proposed solution could work at all (I'm terribly new to pascal/delphi). I've got a fair few packs that feature selective, multiple-title offerings to the end-user, each with their own, separate executable to launch from (since some are emulated and require a small script to launch the ROM), as well as their own entry under the shortcut section of the "Settings.ini" file used in ASIS (baked into a executable thats just a batch script wrapped in an exe). My issue is that regardless of the component selection, upon extraction of all selected archives, all desktop shortcuts defined within the "settings.ini" are generated (should the option be selected).

My current thought process is using the "RemoveShortcut" function, in the Post-install section of the script to delete the shortcut, if a given .txt file is missing (which would be packed with a given selective offering), like so:

Code:
    
#if ("{app}\_CommonRedist\APPS\APP_1.txt" == "0") && ("{userdesktop}\APP_1.lnk" == "1")
 #for {i = 1; Trim(ReadIni(SourcePath + "\Settings.ini", "Executable" + Str(i), "ShortcutName", "")) != ""} RemoveShortcut
#endif
#if ("{app}\_CommonRedist\APPS\APP_2.txt" == "0") && ("{userdesktop}\APP_2.lnk" == "1")
 #for {i = 2; Trim(ReadIni(SourcePath + "\Settings.ini", "Executable" + Str(i), "ShortcutName", "")) != ""} RemoveShortcut
#endif
However upon testing this both shortcuts were removed even when installing only one of the selected components. Does anyone have any idea why this might be?
Reply With Quote
  #1499  
Old 20-10-2021, 15:57
Cesar82's Avatar
Cesar82 Cesar82 is offline
Registered User
 
Join Date: May 2011
Location: Brazil
Posts: 799
Thanks: 1,309
Thanked 1,702 Times in 580 Posts
Cesar82 is on a distinguished road
I would like to know if anyone has a solution to my problem. I would like to display the thumbnail in the taskbar and at the same time include a checkbox to keep the installer window on top (over other windows) if the checkbox is checked. If I use the code from the page below to display the installer thumbnail on the taskbar the property "WizardForm.FormStyle" doesn't work.
Part of the code was obtained from: inno-setup-window-preview-in-taskbar

If anyone can help me, I appreciate it.
Below is a code to better understand my question.
Code:
[Setup]
AppName=My App
AppVersion=1.0
DefaultDirName={{#VER > 0x06000000 ? "common" : ""}pf}\My App
DisableWelcomePage=no
OutputBaseFilename=My_App
OutputDir=.

[ code]
const
  GW_OWNER = 4;
  GWL_HWNDPARENT = (-8);

function GetWindowLong(Wnd: HWND; nIndex: Integer): Longint; external '[email protected] stdcall delayload';
function SetWindowLong(Wnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external '[email protected] stdcall delayload';
function GetWindow(hWnd: HWND; uCmd: UINT): HWND; external '[email protected] stdcall delayload';

var
  OnTopCheckBox: TNewCheckBox;
  ////OldParent: Longint;

procedure OnTopCheckBox_OnClick(Sender: TObject);
begin
  if OnTopCheckBox.Checked then
  begin
    ////SetWindowLong(WizardForm.Handle, GWL_HWNDPARENT, OldParent);
    WizardForm.FormStyle := fsStayOnTop;
  end else
  begin
    WizardForm.FormStyle := fsNormal;
    ////SetWindowLong(WizardForm.Handle, GWL_HWNDPARENT, GetWindowLong(GetWindow(WizardForm.Handle, GW_OWNER), GWL_HWNDPARENT));
  end;
end;

procedure InitializeWizard();
begin
  ////OldParent := GetWindowLong(WizardForm.Handle, GWL_HWNDPARENT);

  OnTopCheckBox := TNewCheckBox.Create(WizardForm);
  with OnTopCheckBox do begin
    Parent := WizardForm;
    Caption := 'Keep On Top';
    SetBounds(ScaleX(10), WizardForm.NextButton.Top + ScaleY(2), ScaleX(100), ScaleX(15));
    OnClick := @OnTopCheckBox_OnClick;
  end;

  { work if disable this line }
  SetWindowLong(WizardForm.Handle, GWL_HWNDPARENT, GetWindowLong(GetWindow(WizardForm.Handle, GW_OWNER), GWL_HWNDPARENT));
end;
Reply With Quote
  #1500  
Old 15-11-2021, 03:10
BYRedex BYRedex is offline
Registered User
 
Join Date: Jun 2013
Location: Koenigsberg
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
BYRedex is on a distinguished road
Hi all.
Could you please help me with the following:
I have an installer for a mod, but if a person uninstalls a mod, the whole game is uninstalled as well.
How can I make it so that only the mod files are deleted?

I was thinking of keeping an install log and taking files from it to delete, but damn, that doesn't work right.
(It doesn't delete files from the list and it doesn't log small files)
I'll attach a sample code)

Thank you in advance.

Code:
Function InitializeUninstall(): Boolean;
begin
  ULog := FileExists(ExpandConstant('{app}\INSTALL.LOG')); // you need to get the log now, it might not exist later
  if ULog then // if there is a log file, create a sheet where we load the list of files
  begin
    unins_list := TStringList.Create;
    unins_list.LoadFromFile(ExpandConstant('{app}\INSTALL.LOG'));
  end;
  Result := True;
end;

Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  var
    i : Integer;
begin
  If CurUninstallStep = usPostUninstall then
    if ULog then
    begin
      for i := 0 to unins_list.Count-1 do DeleteFile(unins_list:[i]); // delete files from the list - It doesn't work
      unins_list.Free;
    end;
end;
Example here
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
INNO TROUBLESHOOT - Tutorials and Answers about INNO Setup REV0 Conversion Tutorials 129 21-05-2021 05:51
INNO TUTORIAL - Using Unicode and ANSI Versions of INNO Setup REV0 Conversion Tutorials 51 26-03-2015 06:57
Frequently Asked Questions Joe Forster/STA PC Games - Frequently Asked Questions 0 29-11-2005 09:48



All times are GMT -7. The time now is 16:03.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2022, vBulletin Solutions Inc.
Copyright 2000-2020, FileForums @ https://fileforums.com