|
|
The following expandable and collapsible sub-sections constitute the entire
Delphi 5, ShlWAPIFunctionInfo project.
| Project File List |
|
File Type: |
File Name: |
Delphi 5 Project Configuration File (.cfg): |
ShlWAPIFunctionInfo.cfg |
Delphi 5 Options File (.dof): |
ShlWAPIFunctionInfo.dof |
Delphi 5 Project File (.dpr): |
ShlWAPIFunctionInfo.dpr |
Delphi 5 Unit (.pas): |
ShlWAPIFunctionInfoMain01.pas |
Delphi 5 Form (.dfm): |
ShlWAPIFunctionInfoMain01.dfm |
Delphi 5 Unit (.pas): |
ShlWAPIFunctionInfoAbout.pas |
Delphi 5 Form (.dfm): |
ShlWAPIFunctionInfoAbout.dfm |
Application Manifest File (.xml): |
ShlWAPIFunctionInfo.xml |
Resource Script File (.rc): |
ShlWAPIFunctionInfo.rc |
|
|
Download file
|
|
| Project Configuration File |
|
-$A+
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J+
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"c:\program files (x86)\borland\delphi5\Projects\Bpl"
-LN"c:\program files (x86)\borland\delphi5\Projects\Bpl"
|
|
Download file
|
|
| Delphi Options File |
|
[Compiler]
A=1
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=1
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=Vcl50;Vclx50;VclSmp50;Qrpt50;Vcldb50;Vclbde50;ibevnt50;vcldbx50;TeeUI50;TeeDB50;Tee50;TeeQR50;VCLIB50;vclie50;Inetdb50;Inet50;NMFast50;dclocx50;dclaxserver50
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
[Language]
ActiveLang=
ProjectLang=$00000407
RootDir=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1031
CodePage=1252
[Version Info Keys]
CompanyName=Stoelzel Software Technologie (SST)
FileDescription=ShlWAPI.dll Function Information Application.
FileVersion=1.0.0.0
InternalName=ShlWAPIFunctionInfo.exe
LegalCopyright=Stoelzel Software Technologie (SST) 2017
LegalTrademarks=
OriginalFilename=ShlWAPIFunctionInfo.exe
ProductName=SST ShlWAPIFunctionInfo
ProductVersion=1.0.0.0
Comments=Open source application
|
|
Download file
|
|
| Project Source Code |
|
program ShlWAPIFunctionInfo;
uses
Forms,
ShlWAPIFunctionInfoMain01 in 'Pas\ShlWAPIFunctionInfoMain01.pas' {Form1},
ShlWAPIFunctionInfoAbout in 'Pas\ShlWAPIFunctionInfoAbout.pas' {AboutBox};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TAboutBox, AboutBox);
Application.Run;
end.
|
|
Download file
|
|
| Application Main Window Unit |
|
{*****************************************************************************}
{ UNIT ShlWAPIFunctionInfoMain01.pas }
{ Copyright © Stoelzel Software Technologie 2014 }
{ }
{ Author: Dominic Stoelzel }
{ Version : 1.13 }
{ Created : December 06, 2014 }
{ Last modified : October 12, 2017, 07:40 (ds) }
{ }
{ Description of contents : Declares and implements the main window class }
{ and utility functions of the SST application that compiles information }
{ on the functions exported by name by the Windows shell, dynamic link }
{ library (dll) ShlWAPI.dll. }
{ }
{ Note : . }
{ }
{*****************************************************************************}
unit ShlWAPIFunctionInfoMain01;
interface
USES Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, StdCtrls, ExtCtrls;
CONST C_SHLWAPIDLLNAME = 'ShlWAPI.dll';
CONST C_ONLINEHELPURL = 'http://stoelzelsoftwaretech.com/en/products/applications/shlwapifunctioninfo/support/UserGuide.htm';
//CONST C_ONLINEHELPURL = 'http://127.0.0.1/YourPathTo/YourLocal/ShlWAPIFunctionInfo/Help.htm';
TYPE TSSTWinResLanguageId = RECORD
wLanguageId : WORD;
wIbmCodePage : WORD;
END;
TYPE PSSTWinResLanguageId = ^TSSTWinResLanguageId;
TYPE TSSTCharSetType = (csTypeNone, csTypeANSI, csTypeWCHAR);
TYPE TSSTBasicTextSearchOptions = RECORD
WholeWordsOnly : BOOLEAN;
MatchCase : BOOLEAN;
SearchDirIsDown : BOOLEAN;
END;
TYPE TSSTDllVerInfo = CLASS(TObject)
PRIVATE
PROTECTED
fdllfilename : STRING;
fversioninfosize : INTEGER;
fresourceinfobuffer : POINTER;
flasterror : INTEGER;
PROCEDURE SetLastErrorCode(adeferrorcode : INTEGER); VIRTUAL;
//Property Functions
FUNCTION RetResourceVersionInfoSize() : INTEGER; VIRTUAL;
FUNCTION RetResourceVersionInfoBuf() : POINTER; VIRTUAL;
FUNCTION RetResourceVersionInfo() : POINTER; VIRTUAL;
FUNCTION RetResourceFixedFileInfo() : TVSFixedFileInfo; VIRTUAL;
FUNCTION RetResourceSignature() : DWORD;
FUNCTION RetResourceStrucVersion() : DWORD;
FUNCTION RetResourceFileVersionMS() : DWORD;
FUNCTION RetResourceFileVersionLS() : DWORD;
FUNCTION RetResourceProductVersionMS() : DWORD;
FUNCTION RetResourceProductVersionLS() : DWORD;
FUNCTION RetResourceFileFlagsMask() : DWORD;
FUNCTION RetResourceFileFlags() : DWORD;
FUNCTION RetResourceFileOS() : DWORD;
FUNCTION RetResourceFileType() : DWORD;
FUNCTION RetResourceFileSubtype() : DWORD;
FUNCTION RetResourceFileDateMS() : DWORD;
FUNCTION RetResourceFileDateLS() : DWORD;
FUNCTION RetResourceLanguageId() : TSSTWinResLanguageId;
FUNCTION RetResourceLanguageIdAsStr() : STRING;
FUNCTION RetResourceComments() : STRING;
FUNCTION RetResourceCompanyName() : STRING;
FUNCTION RetResourceFileDescription() : STRING;
FUNCTION RetResourceFileVersion() : STRING;
FUNCTION RetResourceInternalName() : STRING;
FUNCTION RetResourceLegalCopyright() : STRING;
FUNCTION RetResourceLegalTrademarks() : STRING;
FUNCTION RetResourceOriginalFilename() : STRING;
FUNCTION RetResourceProductName() : STRING;
FUNCTION RetResourceProductVersion() : STRING;
FUNCTION RetResourcePrivateBuild() : STRING; VIRTUAL;
FUNCTION RetResourceSpecialBuild() : STRING; VIRTUAL;
//Helper Functions
FUNCTION WinApiVerQueryValueStr(asubblock : STRING) : STRING;
FUNCTION WinApiGetResourceLanguageId(aresverinfop : POINTER) : TSSTWinResLanguageId; VIRTUAL;
FUNCTION WinResLanguageIdAsString(awinreslangidrec : TSSTWinResLanguageId) : STRING;
PROPERTY ResourceVersionInfoSize : INTEGER READ RetResourceVersionInfoSize;
PROPERTY ResourceVersionInfoBuf : POINTER READ RetResourceVersionInfoBuf;
PROPERTY ResourceVersionInfo : POINTER READ RetResourceVersionInfo;
PROPERTY ResourceFixedFileInfo : TVSFixedFileInfo READ RetResourceFixedFileInfo;
PUBLIC
CONSTRUCTOR Create(adllfilename : STRING); OVERLOAD; VIRTUAL;
DESTRUCTOR Destroy; OVERRIDE;
//Public for debugging and demo purposes only !!!
//PROPERTY ResourceFixedFileInfo : TVSFixedFileInfo READ RetResourceFixedFileInfo;
//The following two properties only return the first (= primary) language
//identifiers (i.e. If the resource contains version information in more than
//one language, only the language id of the version info of the first(= primary)
//language is returned !!!)
PROPERTY ResourceLanguageId : TSSTWinResLanguageId READ RetResourceLanguageId;
PROPERTY ResourceLanguageIdAsStr : STRING READ RetResourceLanguageIdAsStr;
PROPERTY ResourceComments : STRING READ RetResourceComments;
PROPERTY ResourceCompanyName : STRING READ RetResourceCompanyName;
PROPERTY ResourceFileDescription : STRING READ RetResourceFileDescription;
PROPERTY ResourceFileVersion : STRING READ RetResourceFileVersion;
PROPERTY ResourceInternalName : STRING READ RetResourceInternalName;
PROPERTY ResourceLegalCopyright : STRING READ RetResourceLegalCopyright;
PROPERTY ResourceLegalTrademarks : STRING READ RetResourceLegalTrademarks;
PROPERTY ResourceOriginalFilename : STRING READ RetResourceOriginalFilename;
PROPERTY ResourceProductName : STRING READ RetResourceProductName;
PROPERTY ResourceProductVersion : STRING READ RetResourceProductVersion;
PROPERTY ResourcePrivateBuild : STRING READ RetResourcePrivateBuild;
PROPERTY ResourceSpecialBuild : STRING READ RetResourceSpecialBuild;
PROPERTY DllFileName : STRING READ fdllfilename;
PROPERTY LastError : INTEGER READ flasterror;
PUBLISHED
END;
//TSSTAdvancedComboBox is run-time (only) extension class
//that mitigates some, but not all, of the shortcomings of
//the Borland ComboBox class (TComboBox).
TYPE TSSTAdvancedComboBox = CLASS(TComboBox)
PRIVATE
PROTECTED
FUNCTION RetCanUndo() : BOOLEAN;
PUBLIC
PROCEDURE ClearUndo();
PROCEDURE CutEditText();
PROCEDURE CopyEditText();
PROCEDURE PasteEditText();
PROCEDURE ClearEditText();
PROCEDURE RemoveSelection();
PROCEDURE Undo();
FUNCTION AddDistinct(CONST astr : STRING) : INTEGER;
PROPERTY CanUndo : BOOLEAN READ RetCanUndo;
PROPERTY EditHandle;
PUBLISHED
END;
//Run-time extension class
TYPE TSSTAdvancedMemo = CLASS(TMemo)
PRIVATE
PROTECTED
PUBLIC
FUNCTION FindText(atexttofind : STRING; srchoptions : TSSTBasicTextSearchOptions; VAR aposfoundat : INTEGER) : INTEGER;
FUNCTION TextIndex(alinenum : INTEGER) : INTEGER;
PUBLISHED
END;
//Run-time extension class
TYPE TSSTAdvancedListView = CLASS(TListView)
PRIVATE
PROTECTED
FUNCTION RetEditHandle() : HWND;
FUNCTION RetEditCanUndo() : BOOLEAN;
FUNCTION RetNumChecked() : INTEGER;
PROPERTY EditHandle : HWND READ RetEditHandle;
PUBLIC
PROCEDURE SelectAll();
PROCEDURE DeSelectAll();
PROCEDURE CheckSelected();
PROCEDURE UnCheckSelected();
PROCEDURE ClearEditSel();
PROCEDURE EditSelectAll();
PROCEDURE CutEditText();
PROCEDURE CopyEditText();
PROCEDURE CopyCaptionsText();
PROCEDURE PasteEditText();
PROCEDURE ClearEditText();
PROCEDURE EditClearUndo();
PROCEDURE EditUndo();
FUNCTION FindText(atexttofind : STRING; srchoptions : TSSTBasicTextSearchOptions; VAR aposfoundat : INTEGER) : INTEGER;
FUNCTION GetNextNewFunctionName(ainitialindx : INTEGER; VAR anewfunctionnum : INTEGER;
VAR anewname : STRING; acharsettype : TSSTCharSetType) : INTEGER;
PROPERTY EditCanUndo : BOOLEAN READ RetEditCanUndo;
PROPERTY NumChecked : INTEGER READ RetNumChecked;
PUBLISHED
END;
TYPE TForm1 = CLASS(TForm)
MainMenu1: TMainMenu;
MainMenuFile: TMenuItem;
MMFileOpen: TMenuItem;
MMFileSep1: TMenuItem;
MMFileRunCheck: TMenuItem;
MMFileSep2: TMenuItem;
MMFileSaveAs: TMenuItem;
MMFileSep3: TMenuItem;
MMFileExit: TMenuItem;
MainMenuEdit: TMenuItem;
MMeditUndo: TMenuItem;
MMEditSep1: TMenuItem;
MMEditCut: TMenuItem;
MMEditCopy: TMenuItem;
MMEditPaste: TMenuItem;
MMEditDelete: TMenuItem;
MMEditSep2: TMenuItem;
MMEditSelAll: TMenuItem;
MMEditClearSel: TMenuItem;
MMEditCheckSel: TMenuItem;
MMeditUnCheckSel: TMenuItem;
MMEditSep3: TMenuItem;
MMEditAddAnsiFunction: TMenuItem;
MMEditAddWCHARFunctionName: TMenuItem;
MMEditAddBothBunctkionNames: TMenuItem;
MMEditRenameFunction: TMenuItem;
MMEditSep4: TMenuItem;
MMEditFind: TMenuItem;
MMEditFindNext: TMenuItem;
MainMenuView: TMenuItem;
MainMenuOptions: TMenuItem;
MainMenuHelp: TMenuItem;
MMHelpHelp: TMenuItem;
MMHelpSeparator1: TMenuItem;
MMHelpAbout: TMenuItem;
Panel1: TPanel;
StaticText1: TStaticText;
SelFileComboBox1: TComboBox;
BrowseButton1: TButton;
Panel2: TPanel;
ListView1: TListView;
RunCheckButton1: TButton;
Splitter1: TSplitter;
Panel3: TPanel;
Memo1: TMemo;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
FindDialog1: TFindDialog;
private
{ Private declarations }
PROTECTED
fnumprotectednames : INTEGER;
fnumselprotectednames : INTEGER;
fdllhandle : THandle;
FUNCTION GetDllHandle(adllpathandname : STRING; VAR adllhandle : HMODULE) : INTEGER;
FUNCTION GetDefaultShlWAPIDll(VAR apathandnamep : PChar) : INTEGER; //VIRTUAL;
FUNCTION IsProtectedFunctionName(alistviewitem : TListItem) : BOOLEAN; //VIRTUAL;
FUNCTION SetListViewItemsDefState(VAR anumtotallvitems : INTEGER) : INTEGER; //VIRTUAL;
FUNCTION LogDllVersionInfo(adllname : STRING; adllverinfoinst : TSSTDllVerInfo;
adllhandle : HMODULE; astrlist : TStrings) : INTEGER; //VIRTUAL;
FUNCTION LogDllGetVersionInfo(adllhandle : HMODULE; astrlist : TStrings) : INTEGER; //VIRTUAL;
FUNCTION GetHighStrLen(aprevmaxlen : INTEGER; astr : STRING) : INTEGER;
FUNCTION GetMaxFunctionNameLen(aitemslist : TListItems) : INTEGER; //VIRTUAL;
FUNCTION WriteListHeader(amaxnamelen : INTEGER) : INTEGER; //VIRTUAL;
FUNCTION LogNameCheckResult(afunctionname : STRING; supported : BOOLEAN; amaxnamelen : INTEGER) : INTEGER; //VIRTUAL;
FUNCTION CompareToExportedDllNames(adllhandle : HMODULE; aitemslist : TListItems) : INTEGER; //VIRTUAL;
FUNCTION SaveResultsAsCSV(adllhandle : HMODULE; aitemslist : TListItems; acsvfilename : STRING) : INTEGER; //VIRTUAL;
FUNCTION GetModuleFileNameFromHandle(adllhandle : HMODULE; VAR amodulenamep : PChar) : INTEGER;
FUNCTION GetDefResultFileName(adllhandle : HMODULE; VAR adefaultfilename : STRING) : INTEGER; //VIRTUAL;
PROPERTY DllHandle : THandle READ fdllhandle WRITE fdllhandle;
public
{ Public declarations }
PUBLISHED
PROCEDURE OnShow(Sender : TObject);
PROCEDURE OnDestroy(Sender : TObject);
PROCEDURE OnControlSetFocus(Sender : TObject);
PROCEDURE OnListView1SelItem(Sender: TObject; Item: TListItem; Selected: Boolean);
PROCEDURE OnListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
PROCEDURE OnListView1Changing(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
PROCEDURE OnListView1Editing(Sender: TObject; Item: TListItem; var AllowEdit: Boolean);
PROCEDURE OnListView1Edited(Sender: TObject; Item: TListItem; var S: string);
PROCEDURE OnFileComboBoxChange(Sender : TObject);
PROCEDURE OnFileComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
//PROCEDURE OnFileComboBoxMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
PROCEDURE OnResultsMemoChange(Sender : TObject);
PROCEDURE OnResultsMemoKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
PROCEDURE OnResultsMemoMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
PROCEDURE SelectDll(Sender : TObject);
PROCEDURE RunFunctionNamesTest(Sender : TObject);
PROCEDURE SaveResultsFileAs(Sender : TObject);
PROCEDURE Undo(Sender : TObject);
PROCEDURE CutText(Sender : TObject);
PROCEDURE CopyText(Sender : TObject);
PROCEDURE PasteText(Sender : TObject);
PROCEDURE DeleteText(Sender : TObject);
PROCEDURE DeleteFunctionNames(Sender : TObject);
PROCEDURE SelectAll(Sender : TObject);
PROCEDURE ClearSelection(Sender : TObject);
PROCEDURE CheckSelListViewItems(Sender : TObject);
PROCEDURE UnCheckSelListViewItems(Sender : TObject);
PROCEDURE AddANSIFunctionName(Sender : TObject);
PROCEDURE AddWCHARFunctionName(Sender : TObject);
PROCEDURE AddANSIAndWCHARFunctionNames(Sender : TObject);
PROCEDURE RenameFunctionName(Sender : TObject);
PROCEDURE FindText(Sender : TObject);
PROCEDURE OnFindDialogFind(Sender : TObject);
PROCEDURE OpenOnlineHelp(Sender: TObject);
PROCEDURE ShowAboutDialog(Sender: TObject);
PROCEDURE ExitApplication(Sender: TObject);
END;
VAR Form1: TForm1;
implementation
USES Commctrl, Clipbrd, ShellAPI, ShlWAPIFunctionInfoAbout;
{$R *.DFM}
//Manifest resources have to be compiled using a
//command line resource compiler PRIOR to linking (under Delphi 5),
//(e.g. the Borland, Delphi 5 resource compiler Brc32.exe)
//as specifying the resource script directly can
//result in the error message "Invalid 16 bit resources".
{$RESOURCE ..\Res\ShlWAPIFunctionInfo.res}
//We don't use the (SST) ShlWAPI.pas unit because we don't
//want to automatically map/link ShlWAPI.dll into
//the application's address space when it is loaded,
//so we have to declare some types here.
TYPE _DllVersionInfo = RECORD
cbSize : DWORD;
dwMajorVersion : DWORD; // Major version
dwMinorVersion : DWORD; // Minor version
dwBuildNumber : DWORD; // Build number
dwPlatformID : DWORD; // DLLVER_PLATFORM_*
END;
TYPE DllVersionInfo = _DLLVERSIONINFO;
TYPE TDllVersionInfo = DllVersionInfo;
TYPE PDllVersionInfo = ^DllVersionInfo;
TYPE _DLLVERSIONINFO2 = RECORD
info1 : DllVersionInfo;
dwFlags : DWORD;
ullVersion : INT64;
END;
TYPE DLLVERSIONINFO2 = _DLLVERSIONINFO2;
TYPE TDllVersionInfo2 = DLLVERSIONINFO2;
TYPE PDllVersionInfo2 = ^TDllVersionInfo2;
TYPE TDllGetVersionProc = FUNCTION(dllversioninfop : PDllVersionInfo) : HRESULT; STDCALL;
FUNCTION IsValidHandle(ahandle : THandle) : BOOLEAN;
VAR retval : BOOLEAN;
BEGIN
retval := FALSE;
IF ((ahandle <> INVALID_HANDLE_VALUE) AND (ahandle <> 0)) THEN
retval := TRUE;
IsValidHandle := retval;
END;
//****** CLASS TSSTDllVerInfo *************************************************
//*****************************************************************************
CONSTRUCTOR TSSTDllVerInfo.Create(adllfilename : STRING);
BEGIN
INHERITED Create();
fversioninfosize := 0;
fresourceinfobuffer := NIL;
flasterror := 0;
fdllfilename := adllfilename;
END;
DESTRUCTOR TSSTDllVerInfo.Destroy();
BEGIN
IF (fresourceinfobuffer <> NIL) THEN
FreeMem(fresourceinfobuffer);
INHERITED Destroy;
END;
PROCEDURE TSSTDllVerInfo.SetLastErrorCode(adeferrorcode : INTEGER);
BEGIN
flasterror := INTEGER(GetLastError());
IF flasterror = NO_ERROR THEN
flasterror := adeferrorcode;
END;
FUNCTION TSSTDllVerInfo.RetResourceVersionInfoSize() : INTEGER;
VAR dllhandle : DWORD;
BEGIN
dllhandle := 0;
fversioninfosize := 0;
IF FileExists(DllFileName) THEN
BEGIN
DWORD(fversioninfosize) := GetFileVersionInfoSize(PChar(DllFileName), dllhandle);
IF fversioninfosize <= 0 THEN
SetLastErrorCode(-1);
END
ELSE
SetLastErrorCode(ERROR_FILE_NOT_FOUND);
RetResourceVersionInfoSize := fversioninfosize;
END;
FUNCTION TSSTDllVerInfo.RetResourceVersionInfoBuf() : POINTER;
VAR resinfosize : INTEGER;
BEGIN
resinfosize := 0;
IF (fresourceinfobuffer = NIL) THEN
BEGIN
resinfosize := ResourceVersionInfoSize;
IF (resinfosize > 0) THEN
TRY
GetMem(fresourceinfobuffer, resinfosize);
EXCEPT
SetLastErrorCode(ERROR_OUTOFMEMORY);
END;
END;
RetResourceVersionInfoBuf := fresourceinfobuffer;
END;
FUNCTION TSSTDllVerInfo.RetResourceVersionInfo() : POINTER;
VAR retpointer : POINTER;
VAR resinfosize : INTEGER;
VAR dllhandle : DWORD;
VAR apiretval : BOOL;
BEGIN
retpointer := NIL;
resinfosize := 0;
dllhandle := 0;
apiretval := FALSE;
resinfosize := ResourceVersionInfoSize;
IF (resinfosize > 0) THEN
BEGIN
retpointer := ResourceVersionInfoBuf;
IF (retpointer <> NIL) THEN
apiretval := GetFileVersionInfo(PChar(DllFileName), dllhandle, resinfosize, retpointer);
IF apiretval = FALSE THEN
BEGIN
retpointer := NIL;
SetLastErrorCode(-1);
END;
END;
RetResourceVersionInfo := retpointer;
END;
FUNCTION TSSTDllVerInfo.RetResourceFixedFileInfo() : TVSFixedFileInfo;
VAR retrec : TVSFixedFileInfo;
VAR resinfo : POINTER;
VAR recsize : UINT;
VAR retrecp : POINTER;
VAR apiretval : BOOL;
BEGIN
FillChar(retrec, SizeOf(retrec), #0);
resinfo := NIL;
recsize := 0;
retrecp := NIL;
apiretval := FALSE;
resinfo := ResourceVersionInfo;
IF resinfo <> NIL THEN
BEGIN
//recsize := SizeOf(retrec);
//retrecp := @retrec;
apiretval := VerQueryValue(resinfo, PChar('\\'), retrecp, recsize);
IF apiretval = TRUE THEN
BEGIN
IF ((retrecp <> NIL) AND (recsize > 0)) THEN
retrec := TVSFixedFileInfo(retrecp^)
ELSE
apiretval := FALSE;
END;
IF apiretval = FALSE THEN
SetLastErrorCode(-1);
END;
RetResourceFixedFileInfo := retrec;
END;
FUNCTION TSSTDllVerInfo.RetResourceSignature() : DWORD;
BEGIN
RetResourceSignature := ResourceFixedFileInfo.dwSignature;
END;
FUNCTION TSSTDllVerInfo.RetResourceStrucVersion() : DWORD;
BEGIN
RetResourceStrucVersion := ResourceFixedFileInfo.dwStrucVersion;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileVersionMS() : DWORD;
BEGIN
RetResourceFileVersionMS := ResourceFixedFileInfo.dwFileVersionMS;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileVersionLS() : DWORD;
BEGIN
RetResourceFileVersionLS := ResourceFixedFileInfo.dwFileVersionLS;
END;
FUNCTION TSSTDllVerInfo.RetResourceProductVersionMS() : DWORD;
BEGIN
RetResourceProductVersionMS := ResourceFixedFileInfo.dwProductVersionMS;
END;
FUNCTION TSSTDllVerInfo.RetResourceProductVersionLS() : DWORD;
BEGIN
RetResourceProductVersionLS := ResourceFixedFileInfo.dwProductVersionLS;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileFlagsMask() : DWORD;
BEGIN
RetResourceFileFlagsMask := ResourceFixedFileInfo.dwFileFlagsMask;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileFlags() : DWORD;
BEGIN
RetResourceFileFlags := ResourceFixedFileInfo.dwFileFlags;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileOS() : DWORD;
BEGIN
RetResourceFileOS := ResourceFixedFileInfo.dwFileOS;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileType() : DWORD;
BEGIN
RetResourceFileType := ResourceFixedFileInfo.dwFileType;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileSubtype() : DWORD;
BEGIN
RetResourceFileSubtype := ResourceFixedFileInfo.dwFileSubtype;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileDateMS() : DWORD;
BEGIN
RetResourceFileDateMS := ResourceFixedFileInfo.dwFileDateMS;
END;
FUNCTION TSSTDllVerInfo.RetResourceFileDateLS() : DWORD;
BEGIN
RetResourceFileDateLS := ResourceFixedFileInfo.dwFileDateLS;
END;
FUNCTION TSSTDllVerInfo.RetResourceLanguageId() : TSSTWinResLanguageId;
BEGIN
RetResourceLanguageId := WinApiGetResourceLanguageId(ResourceVersionInfo);
END;
FUNCTION TSSTDllVerInfo.RetResourceLanguageIdAsStr() : STRING;
BEGIN
RetResourceLanguageIdAsStr := WinResLanguageIdAsString(ResourceLanguageId);
END;
FUNCTION TSSTDllVerInfo.RetResourceComments() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\Comments';
RetResourceComments := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceCompanyName() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\CompanyName';
RetResourceCompanyName := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceFileDescription() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\FileDescription';
RetResourceFileDescription := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceFileVersion() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\FileVersion';
RetResourceFileVersion := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceInternalName() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\InternalName';
RetResourceInternalName := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceLegalCopyright() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\LegalCopyright';
RetResourceLegalCopyright := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceLegalTrademarks() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\LegalTrademarks';
RetResourceLegalTrademarks := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceOriginalFilename() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\OriginalFilename';
RetResourceOriginalFilename := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceProductName() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\ProductName';
RetResourceProductName := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourceProductVersion() : STRING;
VAR subblockstr : STRING;
BEGIN
subblockstr := '';
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\ProductVersion';
RetResourceProductVersion := WinApiVerQueryValueStr(subblockstr);
END;
FUNCTION TSSTDllVerInfo.RetResourcePrivateBuild() : STRING;
VAR retstring : STRING;
VAR subblockstr : STRING;
BEGIN
retstring := '';
subblockstr := '';
IF (ResourceFixedFileInfo.dwFileFlags AND VS_FF_PRIVATEBUILD) <> 0 THEN
BEGIN
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\PrivateBuild';
retstring := WinApiVerQueryValueStr(subblockstr);
END;
RetResourcePrivateBuild := retstring;
END;
FUNCTION TSSTDllVerInfo.RetResourceSpecialBuild() : STRING;
VAR retstring : STRING;
VAR subblockstr : STRING;
BEGIN
retstring := '';
subblockstr := '';
IF (ResourceFixedFileInfo.dwFileFlags AND VS_FF_SPECIALBUILD) <> 0 THEN
BEGIN
subblockstr := '\StringFileInfo\' + ResourceLanguageIdAsStr + '\SpecialBuild';
retstring := WinApiVerQueryValueStr(subblockstr);
END;
RetResourceSpecialBuild := retstring;
END;
FUNCTION TSSTDllVerInfo.WinApiVerQueryValueStr(asubblock : STRING) : STRING;
VAR retstring : STRING;
VAR resinfo : POINTER;
VAR retstrp : POINTER;
VAR verinfosize : CARDINAL;
VAR apiretval : BOOL;
BEGIN
retstring := '';
retstrp := NIL;
resinfo := NIL;
verinfosize := 0;
apiretval := FALSE;
resinfo := ResourceVersionInfo;
IF (resinfo <> NIL) THEN
BEGIN
apiretval := VerQueryValue(resinfo, PChar(asubblock), retstrp, verinfosize);
IF apiretval THEN
BEGIN
IF ((retstrp <> NIL) AND (verinfosize > 0)) THEN
retstring := PChar(retstrp)
ELSE
apiretval := FALSE;
END;
IF apiretval = FALSE THEN
SetLastErrorCode(-1);
END;
WinApiVerQueryValueStr := retstring;
END;
FUNCTION TSSTDllVerInfo.WinApiGetResourceLanguageId(aresverinfop : POINTER) : TSSTWinResLanguageId;
VAR retrec : TSSTWinResLanguageId;
VAR subblock : STRING;
VAR retrecp : POINTER;
VAR verinfosize : CARDINAL;
VAR apiretval : BOOL;
BEGIN
FillChar(retrec, SizeOf(retrec), #0);
subblock := '';
retrecp := NIL;
verinfosize := 0;
apiretval := FALSE;
IF aresverinfop <> NIL THEN
BEGIN
subblock := '\VarFileInfo\Translation';
apiretval := VerQueryValue(aresverinfop, PChar(subblock), retrecp, verinfosize);
IF apiretval = TRUE THEN
BEGIN
IF ((retrecp <> NIL) OR (verinfosize > 0)) THEN
retrec := PSSTWinResLanguageId(retrecp)^
ELSE
apiretval := FALSE;
END;
IF apiretval = FALSE THEN
SetLastErrorCode(-1);
END;
WinApiGetResourceLanguageId := retrec;
END;
FUNCTION TSSTDllVerInfo.WinResLanguageIdAsString(awinreslangidrec : TSSTWinResLanguageId) : STRING;
VAR retstring : STRING;
BEGIN
retstring := '';
retstring := Format('%.4x%.4x', [awinreslangidrec.wLanguageId, awinreslangidrec.wIbmCodePage]);
WinResLanguageIdAsString := retstring;
END;
//****** CLASS TSSTAdvancedComboBox *******************************************
//*****************************************************************************
PROCEDURE TSSTAdvancedComboBox.ClearUndo();
BEGIN
SendMessage(EditHandle, EM_EMPTYUNDOBUFFER, 0, 0);
END;
PROCEDURE TSSTAdvancedComboBox.CutEditText();
BEGIN
SendMessage(EditHandle, WM_CUT, 0, 0);
END;
PROCEDURE TSSTAdvancedComboBox.CopyEditText();
BEGIN
SendMessage(EditHandle, WM_COPY, 0, 0);
END;
PROCEDURE TSSTAdvancedComboBox.PasteEditText();
BEGIN
SendMessage(EditHandle, WM_PASTE, 0, 0);
END;
PROCEDURE TSSTAdvancedComboBox.ClearEditText();
BEGIN
SendMessage(Handle, WM_CLEAR, 0, 0);
END;
PROCEDURE TSSTAdvancedComboBox.RemoveSelection();
BEGIN
SendMessage(Handle, CB_SETEDITSEL, 0, -1);
END;
PROCEDURE TSSTAdvancedComboBox.Undo();
BEGIN
SendMessage(EditHandle, EM_UNDO, 0, 0);
END;
FUNCTION TSSTAdvancedComboBox.AddDistinct(CONST astr : STRING) : INTEGER;
VAR retval : INTEGER;
BEGIN
retval := 0;
retval := Items.IndexOf(astr);
IF retval = -1 THEN
retval := Items.Add(astr);
AddDistinct := retval;
END;
FUNCTION TSSTAdvancedComboBox.RetCanUndo() : BOOLEAN;
VAR retval : BOOLEAN;
BEGIN
retval := FALSE;
retval := BOOLEAN(SendMessage(EditHandle, EM_CANUNDO, 0, 0));
RetCanUndo := retval;
END;
//****** CLASS TSSTAdvancedMemo ***********************************************
//*****************************************************************************
FUNCTION TSSTAdvancedMemo.FindText(atexttofind : STRING; srchoptions : TSSTBasicTextSearchOptions;
VAR aposfoundat : INTEGER) : INTEGER;
//Returns the line number in the return value and the position within the line
//in the parameter "aposfoundat".
//Undeniably, simpler (and more elegant) methods can be implemented to search for text in a
//multi-line edit control. Furthermore, it also returns only the
//first (left to right reading order) or last (?) occurrence (right to left reading order)
//in a line.
//However, this functionality suffices for the output generated by the application
//and it has the advantage that it can be (comparatively) easily modified to support
//additional search options (e.g. "wrap search"/"from cursor", "whole words only", etc.).
VAR retval : INTEGER;
VAR numlines : INTEGER;
VAR srchstartpos : TPoint;
VAR lcsearchtxt : STRING;
VAR lowercaseline : STRING;
VAR i : INTEGER;
BEGIN
retval := 0;
numlines := 0;
srchstartpos.x := 0;
srchstartpos.y := 0;
lcsearchtxt := '';
lowercaseline := '';
i := 0;
aposfoundat := 0;
IF atexttofind <> '' THEN
BEGIN
numlines := Lines.Count;
srchstartpos := CaretPos;
retval := - 1;
IF srchoptions.MatchCase = FALSE THEN
lcsearchtxt := LowerCase(atexttofind);
IF srchoptions.SearchDirIsDown THEN
BEGIN
IF srchstartpos.y < numlines THEN
BEGIN
FOR i := srchstartpos.y + 1 TO numlines - 1 DO
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lowercaseline := LowerCase(Lines[i]);
aposfoundat := AnsiPos(lcsearchtxt, lowercaseline);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Lines[i]);
IF aposfoundat > 0 THEN
BEGIN
aposfoundat := aposfoundat - 1; //0-based index
retval := i;
System.Break;
END;
END;
END; //EOF IF srchstartpos.y < numlines THEN
//ELSE // ???
//If wrap search, continue with search from first to current line
IF (retval = -1) THEN //AND srchstartpos.y > 0
BEGIN
FOR i := 0 TO srchstartpos.y DO
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lowercaseline := LowerCase(Lines[i]);
aposfoundat := AnsiPos(lcsearchtxt, lowercaseline);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Lines[i]);
IF aposfoundat > 0 THEN
BEGIN
aposfoundat := aposfoundat - 1; //0-based index
retval := i;
System.Break;
END;
END;
END;
END
ELSE //Search direction is up
BEGIN
IF srchstartpos.y > 0 THEN
BEGIN
FOR i := srchstartpos.y - 1 DOWNTO 0 DO
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lowercaseline := LowerCase(Lines[i]);
aposfoundat := AnsiPos(lcsearchtxt, lowercaseline);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Lines[i]);
IF aposfoundat > 0 THEN
BEGIN
aposfoundat := aposfoundat - 1; //0-based index
retval := i;
System.Break;
END;
END; //EOF FOR i := srchstartpos.y - 1 DOWNTO 0 DO
END //EOF IF srchstartpos.y > 0 THEN
ELSE // Caret is line 0
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lowercaseline := LowerCase(Lines[0]);
aposfoundat := AnsiPos(lcsearchtxt, lowercaseline);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Lines[0]);
END;
//If wrap search, continue with search from last to current line
IF (retval = -1) THEN //AND srchstartpos.y < numlines
BEGIN
FOR i := numlines DOWNTO srchstartpos.y DO
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lowercaseline := LowerCase(Lines[i]);
aposfoundat := AnsiPos(lcsearchtxt, lowercaseline);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Lines[i]);
IF aposfoundat > 0 THEN
BEGIN
aposfoundat := aposfoundat - 1; //0-based index
retval := i;
System.Break;
END;
END; //EOF FOR i := numlines DOWNTO srchstartpos.y DO
END;
END;
END
ELSE
retval := - 1;
FindText := retval;
END;
FUNCTION TSSTAdvancedMemo.TextIndex(alinenum : INTEGER) : INTEGER;
VAR retval : INTEGER;
BEGIN
retval := 0;
retval := SendMessage(Handle, EM_LINEINDEX, alinenum, 0);
TextIndex := retval;
END;
//****** CLASS TSSTAdvancedListView *******************************************
//*****************************************************************************
PROCEDURE TSSTAdvancedListView.SelectAll();
VAR numitems : INTEGER;
VAR i : INTEGER;
BEGIN
numitems := 0;
i := 0;
numitems := Items.Count;
IF numitems > 0 THEN
BEGIN
IF MultiSelect THEN
BEGIN
FOR i := 0 TO numitems - 1 DO
Items.Item[i].Selected := TRUE;
END
ELSE
Items.Item[0].Selected := TRUE;
END;
END;
PROCEDURE TSSTAdvancedListView.DeSelectAll();
VAR numitems : INTEGER;
VAR i : INTEGER;
BEGIN
numitems := 0;
i := 0;
numitems := Items.Count;
IF numitems > 0 THEN
BEGIN
IF MultiSelect THEN
BEGIN
FOR i := 0 TO numitems - 1 DO
Items.Item[i].Selected := FALSE;
END
ELSE
Items.Item[0].Selected := FALSE;
END;
END;
PROCEDURE TSSTAdvancedListView.CheckSelected();
VAR numitems : INTEGER;
VAR currentitem : TListItem;
VAR i : INTEGER;
BEGIN
numitems := 0;
currentitem := NIL;
i := 0;
numitems := Items.Count;
IF numitems > 0 THEN
BEGIN
FOR i := 0 TO (numitems - 1) DO
BEGIN
currentitem := Items.Item[i];
IF currentitem.Selected THEN
currentitem.Checked := TRUE;
END;
END;
END;
PROCEDURE TSSTAdvancedListView.UnCheckSelected();
VAR numitems : INTEGER;
VAR currentitem : TListItem;
VAR i : INTEGER;
BEGIN
numitems := 0;
currentitem := NIL;
i := 0;
numitems := Items.Count;
IF numitems > 0 THEN
BEGIN
FOR i := 0 TO (numitems - 1) DO
BEGIN
currentitem := Items.Item[i];
IF currentitem.Selected THEN
currentitem.Checked := FALSE;
END;
END;
END;
PROCEDURE TSSTAdvancedListView.ClearEditSel();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, EM_SETSEL, -1, 0);
END;
PROCEDURE TSSTAdvancedListView.EditSelectAll();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, EM_SETSEL, 0, -1);
END;
PROCEDURE TSSTAdvancedListView.CutEditText();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, WM_CUT, 0, 0);
END;
PROCEDURE TSSTAdvancedListView.CopyEditText();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, WM_COPY, 0, 0);
END;
PROCEDURE TSSTAdvancedListView.CopyCaptionsText();
VAR numselitems : INTEGER;
VAR numitems : INTEGER;
VAR currentitem : TListItem;
VAR clipbrdtxt : STRING;
VAR i : INTEGER;
BEGIN
numselitems := 0;
numitems := 0;
currentitem := NIL;
clipbrdtxt := '';
i := 0;
numselitems := SelCount;
IF numselitems > 0 THEN
BEGIN
numitems := Items.Count;
FOR i := 0 TO numitems - 1 DO
BEGIN
currentitem := Items[i];
IF currentitem.Selected THEN
clipbrdtxt := clipbrdtxt + currentitem.Caption + #13 + #10;
END;
END;
IF clipbrdtxt <> '' THEN
Clipboard.SetTextBuf(PChar(clipbrdtxt))
ELSE
Clipboard.Clear();
END;
PROCEDURE TSSTAdvancedListView.PasteEditText();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, WM_PASTE, 0, 0);
END;
PROCEDURE TSSTAdvancedListView.ClearEditText();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, WM_CLEAR, 0, 0);
END;
PROCEDURE TSSTAdvancedListView.EditClearUndo();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, EM_EMPTYUNDOBUFFER, 0, 0);
END;
PROCEDURE TSSTAdvancedListView.EditUndo();
VAR itemedithandle : HWND;
BEGIN
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
SendMessage(itemedithandle, EM_UNDO, 0, 0);
END;
FUNCTION TSSTAdvancedListView.FindText(atexttofind : STRING; srchoptions : TSSTBasicTextSearchOptions;
VAR aposfoundat : INTEGER) : INTEGER;
VAR retval : INTEGER;
VAR numitems : INTEGER;
VAR srchstartitem : TListItem;
VAR startitemindx : INTEGER;
VAR lcsearchtxt : STRING;
VAR lcitemcaption : STRING;
VAR i : INTEGER;
BEGIN
retval := 0;
numitems := 0;
srchstartitem := NIL;
startitemindx := 0;
lcsearchtxt := '';
lcitemcaption := '';
i := 0;
IF atexttofind <> '' THEN
BEGIN
numitems := Items.Count;
IF numitems > 0 THEN
BEGIN
srchstartitem := ItemFocused;
retval := -1;
//IF srchstartitem = NIL THEN
//Get last selected item if searching downward
IF srchstartitem <> NIL THEN
startitemindx := srchstartitem.Index;
IF srchoptions.SearchDirIsDown THEN
BEGIN
IF srchoptions.MatchCase = FALSE THEN
lcsearchtxt := LowerCase(atexttofind);
IF startitemindx < numitems THEN
BEGIN
FOR i := startitemindx + 1 TO numitems - 1 DO
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lcitemcaption := LowerCase(Items.Item[i].Caption);
aposfoundat := AnsiPos(lcsearchtxt, lcitemcaption);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Items.Item[i].Caption);
IF aposfoundat > 0 THEN
BEGIN
aposfoundat := aposfoundat - 1; //0-based index
retval := i;
System.Break;
END;
END;
END
//ELSE // ???
END
ELSE
BEGIN
IF startitemindx > 0 THEN
BEGIN
FOR i := startitemindx - 1 DOWNTO 0 DO
BEGIN
IF srchoptions.MatchCase = FALSE THEN
BEGIN
lcitemcaption := LowerCase(Items.Item[i].Caption);
aposfoundat := AnsiPos(lcsearchtxt, lcitemcaption);
END
ELSE
aposfoundat := AnsiPos(atexttofind, Items.Item[i].Caption);
IF aposfoundat > 0 THEN
BEGIN
aposfoundat := aposfoundat - 1; //0-based index
retval := i;
System.Break;
END;
END;
END
//ELSE // ???
END;
END
ELSE
retval := - 1;
END
ELSE
retval := - 1;
FindText := retval;
END;
FUNCTION TSSTAdvancedListView.GetNextNewFunctionName(ainitialindx : INTEGER; VAR anewfunctionnum : INTEGER;
VAR anewname : STRING; acharsettype : TSSTCharSetType) : INTEGER;
VAR retval : INTEGER;
VAR existingitem : TListItem;
BEGIN
retval := 0; //NO_ERROR
existingitem := NIL;
anewname := '';
IF anewfunctionnum >= 0 THEN
BEGIN
CASE acharsettype OF
csTypeNone : anewname := 'NewFunctionName' + Format('%.2d', [anewfunctionnum]);
csTypeANSI : anewname := 'NewFunctionName' + Format('%.2d%s', [anewfunctionnum, 'A']);
csTypeWCHAR : anewname := 'NewFunctionName' + Format('%.2d%s', [anewfunctionnum, 'W']);
END;
existingitem := FindCaption(ainitialindx, anewname, FALSE, FALSE, TRUE);
WHILE existingitem <> NIL DO
BEGIN
existingitem := NIL;
Inc(anewfunctionnum);
CASE acharsettype OF
csTypeNone : anewname := 'NewFunctionName' + Format('%.2d', [anewfunctionnum]);
csTypeANSI : anewname := 'NewFunctionName' + Format('%.2d%s', [anewfunctionnum, 'A']);
csTypeWCHAR : anewname := 'NewFunctionName' + Format('%.2d%s', [anewfunctionnum, 'W']);
END;
//Exit loop if "anewfunctionnum" exceeds 99
IF anewfunctionnum <= 99 THEN
existingitem := FindCaption(ainitialindx, anewname, FALSE, FALSE, TRUE)
ELSE
BEGIN
existingitem := NIL;
anewname := '';
retval := -1;
END;
END;
END
ELSE
retval := - 1;
GetNextNewFunctionName := retval;
END;
FUNCTION TSSTAdvancedListView.RetEditHandle() : HWND;
VAR rethandle : HWND;
BEGIN
rethandle := 0;
IF IsEditing() THEN
rethandle := ListView_GetEditControl(Handle);
RetEditHandle := rethandle;
END;
FUNCTION TSSTAdvancedListView.RetEditCanUndo() : BOOLEAN;
VAR retval : BOOLEAN;
VAR itemedithandle : HWND;
BEGIN
retval := FALSE;
itemedithandle := 0;
itemedithandle := EditHandle;
IF IsValidHandle(itemedithandle) THEN
retval := BOOLEAN(SendMessage(itemedithandle, EM_CANUNDO, 0, 0));
RetEditCanUndo := retval;
END;
FUNCTION TSSTAdvancedListView.RetNumChecked() : INTEGER;
VAR retval : INTEGER;
VAR numitems : INTEGER;
VAR i : INTEGER;
BEGIN
retval := 0;
numitems := 0;
i := 0;
IF CheckBoxes THEN
BEGIN
numitems := Items.Count;
IF numitems > 0 THEN
BEGIN
FOR i := 0 TO numitems - 1 DO
BEGIN
IF Items.Item[i].Checked THEN
Inc(retval);
END;
END;
END
ELSE
retval := -1;
RetNumChecked := retval;
END;
//****** CLASS TForm1 *********************************************************
//*****************************************************************************
PROCEDURE TForm1.OnShow(Sender : TObject);
VAR dllpathandnamep : PChar;
VAR getinforetval : INTEGER;
VAR numlvitems : INTEGER;
VAR numcheckeditems : INTEGER;
VAR newstatustext : STRING;
BEGIN
dllpathandnamep := NIL;
getinforetval := 0;
numlvitems := 0;
numcheckeditems := 0;
newstatustext := '';
getinforetval := GetDefaultShlWAPIDll(dllpathandnamep);
IF getinforetval = ERROR_SUCCESS THEN
BEGIN
SelFileComboBox1.Items.Insert(0, dllpathandnamep);
StrDispose(dllpathandnamep);
END;
//Retrieve the number of hard-coded
//functions names in "ListView1".
fnumprotectednames := ListView1.Items.Count;
fnumselprotectednames := 0;
numcheckeditems := SetListViewItemsDefState(numlvitems);
newstatustext := IntToStr(numcheckeditems) + ' of ' + IntToStr(numlvitems) + ' function names checked';
StatusBar1.SimpleText := newstatustext;
END;
PROCEDURE TForm1.OnDestroy(Sender : TObject);
BEGIN
IF IsValidHandle(DllHandle) THEN
FreeLibrary(DllHandle);
END;
PROCEDURE TForm1.OnControlSetFocus(Sender : TObject);
BEGIN
MMEditCheckSel.Enabled := FALSE;
MMeditUnCheckSel.Enabled := FALSE;
MMEditAddAnsiFunction.Enabled := FALSE;
MMEditAddWCHARFunctionName.Enabled := FALSE;
MMEditAddBothBunctkionNames.Enabled := FALSE;
MMEditFind.Enabled := FALSE;
MMEditRenameFunction.Enabled := FALSE;
MMEditFindNext.Enabled := FALSE;
IF ActiveControl = SelFileComboBox1 THEN
BEGIN
OnFileComboBoxChange(Sender);
MMEditSelAll.Enabled := FALSE;
MMEditClearSel.Enabled := TRUE;
END
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
MMeditUndo.Enabled := FALSE;
MMEditCut.Enabled := FALSE;
MMEditCopy.Enabled := FALSE;
MMEditPaste.Enabled := FALSE;
MMEditDelete.Enabled := FALSE;
OnListView1Change(Sender, NIL, ctImage);
MMEditAddAnsiFunction.Enabled := TRUE;
MMEditAddWCHARFunctionName.Enabled := TRUE;
MMEditAddBothBunctkionNames.Enabled := TRUE;
END
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
OnResultsMemoChange(Sender);
END;
END;
PROCEDURE TForm1.OnListView1SelItem(Sender: TObject; Item: TListItem; Selected: Boolean);
BEGIN
IF IsProtectedFunctionName(Item) THEN
BEGIN
IF Selected THEN
Inc(fnumselprotectednames)
ELSE
Dec(fnumselprotectednames);
END;
MMEditDelete.Enabled := FALSE;
IF (ListView1.SelCount > 0) AND (fnumselprotectednames = 0) THEN
MMEditDelete.Enabled := TRUE;
MMEditRenameFunction.Enabled := MMEditDelete.Enabled;
END;
PROCEDURE TForm1.OnListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
VAR checkstatechanged : BOOLEAN;
VAR numitems : INTEGER;
VAR numselitems : INTEGER;
VAR newstatustext : STRING;
BEGIN
checkstatechanged := FALSE;
numitems := 0;
numselitems := 0;
newstatustext := '';
IF Change = ctState THEN
BEGIN
IF Item.Checked THEN
BEGIN
//Item's check state has been modified from
//NOT checked to checked
IF (INTEGER(Item.Data) AND $00010000) = 0 THEN
checkstatechanged := TRUE;
END
ELSE
BEGIN
//Item's check state has been modified from
//CHECKED to not checked
IF INTEGER(Item.Data) AND $00010000 <> 0 THEN
checkstatechanged := TRUE;
END;
//If the check state of any ListView1 item has
//changed, the results may be invalid and we have
//to re-run the test, or at least, ask the user.
IF checkstatechanged THEN
ListView1.Tag := INTEGER(FALSE);
END;
IF ListView1.IsEditing() = FALSE THEN
BEGIN
numitems := ListView1.Items.Count;
numselitems := ListView1.SelCount;
IF numselitems < numitems THEN
MMEditSelAll.Enabled := TRUE
ELSE
MMEditSelAll.Enabled := FALSE;
IF numselitems = 0 THEN
MMEditClearSel.Enabled := FALSE
ELSE
MMEditClearSel.Enabled := TRUE;
MMEditCheckSel.Enabled := MMEditClearSel.Enabled;
MMeditUnCheckSel.Enabled := MMEditClearSel.Enabled;
END;
MMEditCopy.Enabled := MMEditClearSel.Enabled;
IF numitems > 0 THEN
MMEditFind.Enabled := TRUE;
IF checkstatechanged THEN
BEGIN
newstatustext := IntToStr(TSSTAdvancedListView(ListView1).NumChecked) + ' of ' + IntToStr(numitems) +
' function names checked';
StatusBar1.SimpleText := newstatustext;
END;
END;
PROCEDURE TForm1.OnListView1Changing(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
BEGIN
IF Change = ctState THEN
BEGIN
//Store the item's current check state in the high word of
//item's "Data" field so we can determine if the check state
//has been modified in procedure "OnListView1Change" (above).
IF Item.Checked THEN
Item.Data := TObject(INTEGER(Item.Data) OR $00010000)
ELSE
Item.Data := TObject(INTEGER(Item.Data) AND NOT $00010000);
END;
AllowChange := TRUE;
END;
PROCEDURE TForm1.OnListView1Editing(Sender: TObject; Item: TListItem; VAR AllowEdit: Boolean);
BEGIN
MMEditCut.Enabled := FALSE;
MMEditCopy.Enabled := FALSE;
MMEditPaste.Enabled := FALSE;
MMEditDelete.Enabled := FALSE;
MMEditCheckSel.Enabled := FALSE;
MMeditUnCheckSel.Enabled := FALSE;
MMEditAddAnsiFunction.Enabled := FALSE;
MMEditAddWCHARFunctionName.Enabled := FALSE;
MMEditAddBothBunctkionNames.Enabled := FALSE;
IF Item <> NIL THEN
BEGIN
MMEditCopy.Enabled := TRUE;
MMeditUndo.Enabled := TSSTAdvancedListView(ListView1).EditCanUndo;
IF NOT IsProtectedFunctionName(Item) THEN
BEGIN
MMEditCut.Enabled := TRUE;
IF Clipboard.HasFormat(CF_TEXT) THEN
MMEditPaste.Enabled := TRUE;
MMEditDelete.Enabled := TRUE;
END;
END
END;
PROCEDURE TForm1.OnListView1Edited(Sender: TObject; Item: TListItem; var S: string);
VAR existingitem : TListItem;
VAR invalidname : BOOLEAN;
BEGIN
existingitem := NIL;
invalidname := FALSE;
MMeditUndo.Enabled := FALSE;
MMEditCut.Enabled := FALSE;
MMEditCopy.Enabled := FALSE;
MMEditPaste.Enabled := FALSE;
MMEditDelete.Enabled := FALSE;
MMEditAddAnsiFunction.Enabled := TRUE;
MMEditAddWCHARFunctionName.Enabled := TRUE;
MMEditAddBothBunctkionNames.Enabled := TRUE;
IF Item <> NIL THEN
BEGIN
//Prevent changes to the hard-coded
//function name items (i.e. the already known,
//ShlWAPI.dll function names stored as part of
//this windows's form (.dfm)).
IF IsProtectedFunctionName(Item) THEN
S := Item.Caption
ELSE
BEGIN
IF S = '' THEN
invalidname := TRUE;
IF NOT invalidname THEN
//Prevent duplicate names
existingitem := ListView1.FindCaption(0, S, FALSE, FALSE, TRUE);
IF existingitem <> NIL THEN
invalidname := TRUE;
IF invalidname THEN
S := Item.Caption;
END;
END;
END;
PROCEDURE TForm1.OnFileComboBoxChange(Sender : TObject);
VAR combobox : TSSTAdvancedComboBox;
BEGIN
combobox := NIL;
combobox := TSSTAdvancedComboBox(SelFileComboBox1);
MMeditUndo.Enabled := combobox.CanUndo;
MMEditCut.Enabled := FALSE;
MMEditCopy.Enabled := FALSE;
IF Clipboard.HasFormat(CF_TEXT) THEN
MMEditPaste.Enabled := TRUE
ELSE
MMEditPaste.Enabled := FALSE;
MMEditDelete.Enabled := FALSE;
MMEditSelAll.Enabled := FALSE;
MMEditClearSel.Enabled := FALSE;
IF combobox.Text <> '' THEN
BEGIN
MMEditCut.Enabled := TRUE;
MMEditCopy.Enabled := TRUE;
MMEditDelete.Enabled := TRUE;
IF combobox.SelText <> '' THEN
MMEditClearSel.Enabled := TRUE;
IF Length(combobox.Text) > Length(combobox.SelText) THEN
MMEditSelAll.Enabled := TRUE;
END;
MMFileRunCheck.Enabled := FileExists(combobox.Text);
RunCheckButton1.Enabled := MMFileRunCheck.Enabled;
//Add the file path and name to the drop-down list if
//it hasn't already been added elsewhere
IF MMFileRunCheck.Enabled = TRUE THEN
BEGIN
IF Sender = SelFileComboBox1 THEN
combobox.AddDistinct(combobox.Text);
END;
END;
PROCEDURE TForm1.OnFileComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
BEGIN
OnFileComboBoxChange(Sender);
END;
PROCEDURE TForm1.OnResultsMemoChange(Sender : TObject);
VAR memotxtlen : INTEGER;
VAR seltxtlen : INTEGER;
BEGIN
memotxtlen := 0;
seltxtlen := 0;
MMeditUndo.Enabled := Memo1.CanUndo;
MMEditCut.Enabled := FALSE;
MMEditCopy.Enabled := FALSE;
IF Clipboard.HasFormat(CF_TEXT) THEN
MMEditPaste.Enabled := TRUE
ELSE
MMEditPaste.Enabled := FALSE;
MMEditDelete.Enabled := FALSE;
MMEditSelAll.Enabled := FALSE;
MMEditClearSel.Enabled := FALSE;
MMEditFind.Enabled := FALSE;
MMEditFindNext.Enabled := FALSE;
memotxtlen := Length(Memo1.Text);
IF memotxtlen > 0 THEN
BEGIN
seltxtlen := Memo1.SelLength;
IF seltxtlen > 0 THEN
BEGIN
MMEditCut.Enabled := TRUE;
MMEditCopy.Enabled := TRUE;
MMEditClearSel.Enabled := TRUE;
END;
MMEditDelete.Enabled := TRUE;
IF seltxtlen < memotxtlen THEN
MMEditSelAll.Enabled := TRUE;
MMEditFind.Enabled := TRUE;
END;
END;
PROCEDURE TForm1.OnResultsMemoKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
BEGIN
OnResultsMemoChange(Sender);
END;
PROCEDURE TForm1.OnResultsMemoMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
BEGIN
OnResultsMemoChange(Sender);
END;
PROCEDURE TForm1.SelectDll(Sender : TObject);
//Opens a dialog with which a ShlWAPI.dll can
//be selected.
VAR dlgretval : BOOLEAN;
VAR seldllname : STRING;
VAR seldllindex : INTEGER;
BEGIN
dlgretval := FALSE;
seldllname := '';
seldllindex := 0;
dlgretval := OpenDialog1.Execute();
IF dlgretval THEN
BEGIN
seldllname := OpenDialog1.FileName;
seldllindex := SelFileComboBox1.Items.Add(seldllname);
SelFileComboBox1.ItemIndex := seldllindex;
OnFileComboBoxChange(Sender);
END;
END;
PROCEDURE TForm1.RunFunctionNamesTest(Sender : TObject);
//Tests if the dynamic link library (dll) specified/selected
//in "SelFileComboBox1" exports the checked function names of
//"ListView1" by name and documents the results of the test in
//"Memo1".
VAR dllname : STRING;
VAR loaddllretval : INTEGER;
VAR dllverinfo : TSSTDllVerInfo;
VAR execresult : INTEGER;
BEGIN
//fdjaksdjfklaös
dllname := '';
loaddllretval := 0;
dllverinfo := NIL;
execresult := 0;
IF IsValidHandle(DllHandle) THEN
BEGIN
FreeLibrary(DllHandle);
DllHandle := 0;
END;
IF DllHandle = 0 THEN
BEGIN
dllname := SelFileComboBox1.Text;
loaddllretval := GetDllHandle(dllname, HMODULE(fdllhandle));
END;
IF loaddllretval = ERROR_SUCCESS THEN
BEGIN
TRY
dllverinfo := TSSTDllVerInfo.Create(dllname);
execresult := LogDllVersionInfo(dllname, dllverinfo, fdllhandle, Memo1.Lines);
//The ListView1's "Tag" field is used as a flag to
//determine whether or not the test has been run.
//A value of 1 indicates the successful completion
//of the comparison, a value of 0 means that the
//test is still pending or has failed.
IF execresult = ERROR_SUCCESS THEN
execresult := CompareToExportedDllNames(DllHandle, ListView1.Items);
IF execresult = ERROR_SUCCESS THEN
ListView1.Tag := INTEGER(TRUE)
ELSE
ShowMessage('Test failed with error code ' + IntToStr(execresult));
FINALLY
dllverinfo.Free();
END;
//Add two carriage returns to separate this from the next test info
Memo1.Lines.Add('');
Memo1.Lines.Add('');
IF execresult = ERROR_SUCCESS THEN
OnResultsMemoChange(Sender);
END
ELSE
BEGIN
ShowMessage('Please specify/select a valid dynamic link library in the File Name Combo Box');
SelFileComboBox1.SetFocus();
END;
END;
PROCEDURE TForm1.SaveResultsFileAs(Sender : TObject);
VAR getnameretval : INTEGER;
VAR dlgretval : BOOLEAN;
VAR filterindex : INTEGER;
VAR resultsfilename : STRING;
BEGIN
getnameretval := 0;
dlgretval := FALSE;
filterindex := 0;
resultsfilename := '';
getnameretval := GetDefResultFileName(DllHandle, resultsfilename);
SaveDialog1.FileName := resultsfilename;
dlgretval := SaveDialog1.Execute();
IF dlgretval THEN
BEGIN
filterindex := SaveDialog1.FilterIndex;
resultsfilename := SaveDialog1.FileName;
IF filterindex = 1 THEN
Memo1.Lines.SaveToFile(resultsfilename)
ELSE
IF filterindex = 2 THEN
SaveResultsAsCSV(DllHandle, ListView1.Items, resultsfilename);
END;
END;
PROCEDURE TForm1.Undo(Sender : TObject);
VAR combobox : TSSTAdvancedComboBox;
BEGIN
combobox := NIL;
IF ActiveControl = SelFileComboBox1 THEN
BEGIN
combobox := TSSTAdvancedComboBox(SelFileComboBox1);
combobox.Undo();
END
ELSE
//It appears as if Microsoft has built a minor error
//into the ListView class's edit control "Undo" ("EM_UNDO")
//functionality, in that EM_UNDO only restores the last
//three (3) letters of a modified caption after cut and
//delete operations and not the entire text that was
//removed (i.e. the text that was highlighted prior to
//the operation).
IF ActiveControl = ListView1 THEN
TSSTAdvancedListView(ListView1).EditUndo()
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
Memo1.Undo();
OnResultsMemoChange(Sender);
END
END;
PROCEDURE TForm1.CutText(Sender : TObject);
BEGIN
IF ActiveControl = SelFileComboBox1 THEN
BEGIN
TSSTAdvancedComboBox(SelFileComboBox1).CutEditText();
OnFileComboBoxChange(Sender);
END
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
TSSTAdvancedListView(ListView1).CutEditText();
MMeditUndo.Enabled := TSSTAdvancedListView(ListView1).EditCanUndo;
END
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
Memo1.CutToClipboard();
OnResultsMemoChange(Sender);
END;
END;
PROCEDURE TForm1.CopyText(Sender : TObject);
BEGIN
IF ActiveControl = SelFileComboBox1 THEN
TSSTAdvancedComboBox(SelFileComboBox1).CopyEditText()
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
IF ListView1.IsEditing THEN
TSSTAdvancedListView(ListView1).CopyEditText()
ELSE
TSSTAdvancedListView(ListView1).CopyCaptionsText();
END
ELSE
IF ActiveControl = Memo1 THEN
Memo1.CopyToClipboard();
END;
PROCEDURE TForm1.PasteText(Sender : TObject);
BEGIN
IF ActiveControl = SelFileComboBox1 THEN
TSSTAdvancedComboBox(SelFileComboBox1).PasteEditText()
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
TSSTAdvancedListView(ListView1).PasteEditText();
MMeditUndo.Enabled := TSSTAdvancedListView(ListView1).EditCanUndo;
END
ELSE
IF ActiveControl = Memo1 THEN
Memo1.PasteFromClipboard();
END;
PROCEDURE TForm1.DeleteText(Sender : TObject);
BEGIN
IF ActiveControl = SelFileComboBox1 THEN
BEGIN
IF SelFileComboBox1.SelLength = 0 THEN
SelFileComboBox1.SelLength := 1;
TSSTAdvancedComboBox(SelFileComboBox1).ClearEditText();
END
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
IF ListView1.IsEditing THEN
BEGIN
TSSTAdvancedListView(ListView1).ClearEditText();
MMeditUndo.Enabled := TSSTAdvancedListView(ListView1).EditCanUndo;
END
ELSE
DeleteFunctionNames(Sender);
END
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
IF Memo1.SelLength = 0 THEN
Memo1.SelLength := 1;
Memo1.ClearSelection();
END
END;
PROCEDURE TForm1.DeleteFunctionNames(Sender : TObject);
VAR numitems : INTEGER;
VAR currentlvitem : TListItem;
VAR protectedname : BOOLEAN;
VAR i : INTEGER;
BEGIN
numitems := 0;
currentlvitem := NIL;
protectedname := FALSE;
i := 0;
numitems := ListView1.Items.Count;
IF numitems > 0 THEN
BEGIN
IF ListView1.SelCount > 0 THEN
BEGIN
FOR i := (numitems - 1) DOWNTO 0 DO
BEGIN
protectedname := TRUE;
currentlvitem := ListView1.Items[i];
IF currentlvitem.Selected THEN
protectedname := IsProtectedFunctionName(currentlvitem);
IF protectedname = FALSE THEN
currentlvitem.Delete();
END
END;
END;
END;
PROCEDURE TForm1.SelectAll(Sender : TObject);
BEGIN
//ShowMessage('Select all');
IF ActiveControl = SelFileComboBox1 THEN
BEGIN
SelFileComboBox1.SelectAll();
OnFileComboBoxChange(Sender);
END
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
IF ListView1.IsEditing() = TRUE THEN
TSSTAdvancedListView(ListView1).EditSelectAll()
ELSE
TSSTAdvancedListView(ListView1).SelectAll();
//Update menu items
OnListView1Change(Sender, NIL, ctImage);
END
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
Memo1.SelectAll();
OnResultsMemoChange(Sender);
END
END;
PROCEDURE TForm1.ClearSelection(Sender : TObject);
BEGIN
//ShowMessage('Clear selection');
IF ActiveControl = SelFileComboBox1 THEN
BEGIN
SelFileComboBox1.SelLength := 0;
OnFileComboBoxChange(Sender);
END
ELSE
IF ActiveControl = ListView1 THEN
BEGIN
IF ListView1.IsEditing() = TRUE THEN
TSSTAdvancedListView(ListView1).ClearEditSel()
ELSE
TSSTAdvancedListView(ListView1).DeSelectAll();
//Update menu items
OnListView1Change(Sender, NIL, ctImage);
END
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
Memo1.SelLength := 0;
OnResultsMemoChange(Sender);
END;
END;
PROCEDURE TForm1.CheckSelListViewItems(Sender : TObject);
BEGIN
TSSTAdvancedListView(ListView1).CheckSelected();
END;
PROCEDURE TForm1.UnCheckSelListViewItems(Sender : TObject);
BEGIN
TSSTAdvancedListView(ListView1).UnCheckSelected();
END;
PROCEDURE TForm1.AddANSIFunctionName(Sender : TObject);
//Creates a new function name terminated by an uppercase A,
//denoting an ANSI function and adds it to the ListView
VAR newfunctionnum : INTEGER;
VAR newcaption : STRING;
VAR getcaptionretval : INTEGER;
VAR newlvitem : TListItem;
BEGIN
newfunctionnum := 0;
newcaption := '';
getcaptionretval := 0;
newlvitem := NIL;
newfunctionnum := 1;
getcaptionretval := TSSTAdvancedListView(ListView1).GetNextNewFunctionName(0, newfunctionnum, newcaption, csTypeANSI);
IF getcaptionretval = ERROR_SUCCESS THEN
BEGIN
TRY
newlvitem := ListView1.Items.Add();
newlvitem.Caption := newcaption;
EXCEPT
getcaptionretval := - 1;
END;
END;
IF getcaptionretval <> ERROR_SUCCESS THEN
ShowMessage('Can''t add function name');
END;
PROCEDURE TForm1.AddWCHARFunctionName(Sender : TObject);
//Creates a new function name terminated by an uppercase W,
//denoting a WideChar/Unicode function and adds it ListView1
VAR newfunctionnum : INTEGER;
VAR newcaption : STRING;
VAR getcaptionretval : INTEGER;
VAR newlvitem : TListItem;
BEGIN
newfunctionnum := 0;
newcaption := '';
getcaptionretval := 0;
newlvitem := NIL;
newfunctionnum := 1;
getcaptionretval := TSSTAdvancedListView(ListView1).GetNextNewFunctionName(0, newfunctionnum, newcaption, csTypeWCHAR);
IF getcaptionretval = ERROR_SUCCESS THEN
BEGIN
TRY
newlvitem := ListView1.Items.Add();
newlvitem.Caption := newcaption;
EXCEPT
getcaptionretval := - 1;
END;
END;
IF getcaptionretval <> ERROR_SUCCESS THEN
ShowMessage('Can''t add function name');
END;
PROCEDURE TForm1.AddANSIAndWCHARFunctionNames(Sender : TObject);
BEGIN
AddANSIFunctionName(Sender);
AddWCHARFunctionName(Sender);
END;
PROCEDURE TForm1.RenameFunctionName(Sender : TObject);
VAR currentlvitem : TListItem;
BEGIN
currentlvitem := NIL;
IF ListView1.IsEditing() = FALSE THEN
currentlvitem := ListView1.ItemFocused;
IF currentlvitem <> NIL THEN
BEGIN
IF MMEditDelete.Enabled = TRUE THEN
currentlvitem.EditCaption();
END
END;
PROCEDURE TForm1.FindText(Sender : TObject);
VAR newdlgpos : TPoint;
VAR dlgretval : BOOLEAN;
BEGIN
newdlgpos.x := 0;
newdlgpos.y := 0;
dlgretval := FALSE;
dlgretval := FindDialog1.Execute();
END;
PROCEDURE TForm1.OnFindDialogFind(Sender : TObject);
VAR txttofind : STRING;
VAR srchoptions : TSSTBasicTextSearchOptions;
VAR focusedlvitem : TListItem;
VAR searchstartindx : INTEGER;
VAR foundlvitem : TListItem;
VAR founditemindx : INTEGER;
VAR linefoundin : INTEGER;
VAR posfoundat : INTEGER;
BEGIN
txttofind := '';
srchoptions.WholeWordsOnly := FALSE;
srchoptions.MatchCase := FALSE;
srchoptions.SearchDirIsDown := FALSE;
focusedlvitem := NIL;
searchstartindx := 0;
foundlvitem := NIL;
founditemindx := 0;
linefoundin := 0;
posfoundat := 0;
//ShowMessage('Find text');
txttofind := FindDialog1.FindText;
IF frDown IN FindDialog1.Options THEN
srchoptions.SearchDirIsDown := TRUE;
IF frMatchCase IN FindDialog1.Options THEN
srchoptions.MatchCase := TRUE;
IF txttofind <> '' THEN
BEGIN
IF ActiveControl = ListView1 THEN
BEGIN
founditemindx := TSSTAdvancedListView(ListView1).FindText(txttofind, srchoptions, posfoundat);
IF founditemindx >= 0 THEN
BEGIN
focusedlvitem := ListView1.Items.Item[founditemindx];
TSSTAdvancedListView(ListView1).DeSelectAll();
focusedlvitem.Selected := TRUE;
focusedlvitem.Focused := TRUE;
focusedlvitem.MakeVisible(FALSE);
ListView1.SetFocus();
END
ELSE
FindDialog1.CloseDialog();
END
ELSE
IF ActiveControl = Memo1 THEN
BEGIN
linefoundin := TSSTAdvancedMemo(Memo1).FindText(txttofind, srchoptions, posfoundat);
IF linefoundin >= 0 THEN
BEGIN
//ShowMessage('Found in line ' + IntToStr(linefoundin) + ' at ' + IntToStr(posfoundat));
Memo1.SelStart := TSSTAdvancedMemo(Memo1).TextIndex(linefoundin) + posfoundat;
Memo1.SelLength := Length(txttofind);
Memo1.SetFocus();
END
ELSE
FindDialog1.CloseDialog();
END
END;
//ELSE
//BEGIN
//END;
END;
PROCEDURE TForm1.OpenOnlineHelp(Sender: TObject);
VAR openhlpretval : INTEGER;
VAR infomsg : STRING;
BEGIN
openhlpretval := 0;
infomsg := '';
infomsg := 'Ok to go online ?';
openhlpretval := MessageDlg(infomsg, mtConfirmation, mbYesNoCancel, 0);
IF openhlpretval = mrYes THEN
BEGIN
openhlpretval := ShellExecute(Handle, 'open', C_ONLINEHELPURL, NIL, NIL, SW_SHOWNORMAL);
IF openhlpretval <= 32 THEN //32 = SE_ERR_DLLNOTFOUND
BEGIN
infomsg := 'Sorry, opening the online help URL "' + C_ONLINEHELPURL + '" failed with error code ';
infomsg := infomsg + ' ' + IntToStr(openhlpretval);
ShowMessage(infomsg);
END;
END;
END;
PROCEDURE TForm1.ShowAboutDialog(Sender: TObject);
VAR appverinfo : TSSTDllVerInfo;
BEGIN
appverinfo := NIL;
TRY
appverinfo := TSSTDllVerInfo.Create(ParamStr(0));
//AboutBox
AboutBox.ProgramIcon.Picture.Icon.Handle := LoadIcon(HInstance, 'MAINICON');
AboutBox.ProductName.Caption := AboutBox.ProductName.Caption + appverinfo.ResourceProductName;
AboutBox.Version.Caption := AboutBox.Version.Caption + appverinfo.ResourceProductVersion;
AboutBox.Copyright.Caption := AboutBox.Copyright.Caption + appverinfo.ResourceLegalCopyright;
AboutBox.Description.Caption := AboutBox.Description.Caption + appverinfo.ResourceFileDescription;
AboutBox.ShowModal();
FINALLY
appverinfo.Free();
END;
END;
PROCEDURE TForm1.ExitApplication(Sender: TObject);
BEGIN
Close();
END;
FUNCTION TForm1.GetDllHandle(adllpathandname : STRING; VAR adllhandle : HMODULE) : INTEGER;
VAR retval : INTEGER;
VAR lasterrormode : UINT;
VAR loadflags : DWORD;
BEGIN
retval := 0;
lasterrormode := 0;
loadflags := 0;
adllhandle := 0;
IF FileExists(adllpathandname) THEN
BEGIN
adllhandle := GetModuleHandle(PChar(adllpathandname));
IF NOT IsValidHandle(adllhandle) THEN
BEGIN
TRY
lasterrormode := SetErrorMode(SEM_NOOPENFILEERRORBOX OR SEM_FAILCRITICALERRORS);
adllhandle := LoadLibrary(PChar(adllpathandname));
EXCEPT
SetErrorMode(lasterrormode);
adllhandle := 0;
END;
END;
IF NOT IsValidHandle(adllhandle) THEN
BEGIN
//CONST LOAD_IGNORE_CODE_AUTHZ_LEVEL = $00000010;
loadflags := DONT_RESOLVE_DLL_REFERENCES;
//If the next line should also fail, modifying the previous line
//to "loadflags := DONT_RESOLVE_DLL_REFERENCES OR $00000010;" may
//work.
adllhandle := LoadLibraryEx(PChar(adllpathandname), 0, loadflags);
END;
IF NOT IsValidHandle(adllhandle) THEN
BEGIN
retval := INTEGER(GetLastError());
IF retval = NO_ERROR THEN
retval := ERROR_DLL_NOT_FOUND; //ERROR_DLL_NOT_FOUND = 1157
END;
END
ELSE
retval := ERROR_INVALID_NAME;
GetDllHandle := retval;
END;
FUNCTION TForm1.GetDefaultShlWAPIDll(VAR apathandnamep : PChar) : INTEGER;
//Returns ERROR_SUCCESS if successful, or an error code otherwise.
VAR retval : INTEGER;
VAR dllhandle : THandle;
VAR needtofree : BOOLEAN;
VAR apiretval : DWORD;
BEGIN
retval := 0;
dllhandle := 0;
needtofree := FALSE;
apiretval := 0;
apathandnamep := NIL;
//Here we want to get a handle to the default version
//of ShlWAPI.dll for our application.
//Note, that for backward compatibility, Windows, as of
//version 6, may provide several versions of a particular dll,
//and we want to make sure we get a handle to the "right" dll,
//so check if ShlWAPI.dll has already been implicitly loaded
//(i.e. other dlls, such as ... depend on ShlWAPI.dll functions
//and as a result the operating system loader may have already
//mapped ShlWAPI.dll into the address space of our app.
//and all we need to do is get a handle to it).
dllhandle := GetModuleHandle(C_SHLWAPIDLLNAME);
IF dllhandle = 0 THEN
BEGIN
dllhandle := LoadLibrary(C_SHLWAPIDLLNAME);
IF IsValidHandle(dllhandle) THEN
needtofree := TRUE;
END;
IF IsValidHandle(dllhandle) THEN
BEGIN
TRY
apathandnamep := StrAlloc(MAX_PATH);
EXCEPT
retval := INTEGER(GetLastError());
//The Delphi SDK may have caught and reset
//the last error, or Windows may just not have
//recorded one. In both cases GetLastError()
//returns 0, so we have to provide an error
//code ourselves. This can be ERROR_OUTOFMEMORY (= 14),
//as below, or any other error code we consider
//appropriate or meaningful.
retval := ERROR_OUTOFMEMORY;
END;
END
ELSE
BEGIN
retval := INTEGER(GetLastError());
IF retval = NO_ERROR THEN
retval := ERROR_INVALID_HANDLE;
END;
IF retval = NO_ERROR THEN
BEGIN
apiretval := GetModuleFileName(dllhandle, apathandnamep, MAX_PATH);
IF apiretval = 0 THEN
BEGIN
retval := INTEGER(GetLastError());
IF retval = NO_ERROR THEN
retval := -1;
END;
END;
IF needtofree THEN
FreeLibrary(dllhandle);
GetDefaultShlWAPIDll := retval;
END;
FUNCTION TForm1.IsProtectedFunctionName(alistviewitem : TListItem) : BOOLEAN;
//Ensure that all hard-coded items are considered "protected" items that
//can NOT be renamed or deleted.
VAR retval : BOOLEAN;
BEGIN
retval := FALSE;
IF alistviewitem.Index < fnumprotectednames THEN
retval := TRUE;
IsProtectedFunctionName := retval;
END;
FUNCTION TForm1.SetListViewItemsDefState(VAR anumtotallvitems : INTEGER) : INTEGER;
//Returns number of checked items (per default, all)
//or -1 if no items in list
VAR retval : INTEGER;
VAR i : INTEGER;
BEGIN
retval := 0;
i := 0;
anumtotallvitems := ListView1.Items.Count;
IF anumtotallvitems > 0 THEN
BEGIN
FOR i := 0 TO anumtotallvitems - 1 DO
ListView1.Items[i].Checked := TRUE;
retval := anumtotallvitems;
END
ELSE
retval := -1;
SetListViewItemsDefState := retval;
END;
FUNCTION TForm1.LogDllVersionInfo(adllname : STRING; adllverinfoinst : TSSTDllVerInfo;
adllhandle : HMODULE; astrlist : TStrings) : INTEGER;
VAR retval : INTEGER;
VAR newinfoline : STRING;
BEGIN
retval := 0;
newinfoline := '';
IF adllverinfoinst <> NIL THEN
BEGIN
TRY
newinfoline := ExpandFileName(adllname);
newinfoline := 'Version information for ' + AnsiQuotedStr(newinfoline, '"') + ' : ';
astrlist.Add(newinfoline);
newinfoline := 'File description : ' + adllverinfoinst.ResourceFileDescription;
astrlist.Add(newinfoline);
newinfoline := '';
newinfoline := 'Product version : ' + adllverinfoinst.ResourceProductName;
astrlist.Add(newinfoline);
newinfoline := '';
newinfoline := 'Internal name : ' + adllverinfoinst.RetResourceInternalName;
astrlist.Add(newinfoline);
newinfoline := '';
newinfoline := 'File version : ' + adllverinfoinst.ResourceFileVersion;
astrlist.Add(newinfoline);
newinfoline := '';
newinfoline := 'Language : 0x' + adllverinfoinst.ResourceLanguageIdAsStr;
astrlist.Add(newinfoline);
newinfoline := 'Copyright : ' + adllverinfoinst.ResourceLegalCopyright;
astrlist.Add(newinfoline);
newinfoline := 'Comments : ' + adllverinfoinst.ResourceComments;
astrlist.Add(newinfoline);
newinfoline := 'Special Build : ' + adllverinfoinst.ResourceSpecialBuild;
astrlist.Add(newinfoline);
EXCEPT
retval := -1;
END;
END
ELSE
retval := -1;
IF retval = 0 THEN
BEGIN
retval := LogDllGetVersionInfo(adllhandle, astrlist);
Memo1.Lines.Add('');
END;
LogDllVersionInfo := retval;
END;
FUNCTION TForm1.LogDllGetVersionInfo(adllhandle : HMODULE; astrlist : TStrings) : INTEGER;
//Log information returned by the dll's DllGetVersionInfo function (if supported/implemented)
//Returns ERROR_SUCCESS if successful, or an error code otherwise.
VAR retval : INTEGER;
VAR procaddr : POINTER;
VAR dllverinfo2rec : TDllVersionInfo2;
VAR dllgetverresult : HRESULT;
VAR newinfoline : STRING;
BEGIN
retval := 0;
newinfoline := '';
procaddr := NIL;
FillChar(dllverinfo2rec, SizeOf(dllverinfo2rec), #0);
dllgetverresult := 0; //= S_OK
newinfoline := '';
IF IsValidHandle(adllhandle) THEN
BEGIN
TRY
procaddr := GetProcAddress(adllhandle, 'DllGetVersion');
IF (procaddr <> NIL) THEN
BEGIN
dllverinfo2rec.info1.cbSize := SizeOf(dllverinfo2rec);
dllgetverresult := TDllGetVersionProc(procaddr)(@dllverinfo2rec);
IF dllgetverresult <> S_OK THEN
BEGIN
dllverinfo2rec.info1.cbSize := SizeOf(dllverinfo2rec.info1);
dllgetverresult := 0;
dllgetverresult := TDllGetVersionProc(procaddr)(@dllverinfo2rec);
END;
IF dllgetverresult = S_OK THEN
BEGIN
IF dllverinfo2rec.info1.cbSize >= SizeOf(dllverinfo2rec.info1) THEN
BEGIN
newinfoline := 'The file''s DllGetVersion function returned the following version information: ';
astrlist.Add(newinfoline);
newinfoline := 'Major version : ' + IntToStr(dllverinfo2rec.info1.dwMajorVersion);
astrlist.Add(newinfoline);
newinfoline := 'Minor version : ' + IntToStr(dllverinfo2rec.info1.dwMinorVersion);
astrlist.Add(newinfoline);
newinfoline := 'Build number : ' + IntToStr(dllverinfo2rec.info1.dwBuildNumber);
astrlist.Add(newinfoline);
newinfoline := 'Platform ID : ' + IntToStr(dllverinfo2rec.info1.dwPlatformID);
astrlist.Add(newinfoline);
END;
IF dllverinfo2rec.info1.cbSize = SizeOf(dllverinfo2rec) THEN
BEGIN
newinfoline := 'ullVersion : 0x' + IntToHex(dllverinfo2rec.ullVersion, 16);
astrlist.Add(newinfoline);
END
END
ELSE //Retrieving the procedural address failed, log error
BEGIN
newinfoline := 'Retrieving the dll''s version by means of DllGetVersion failed with error code : 0x' +
IntToHex(dllgetverresult, 8);
astrlist.Add(newinfoline);
END
END
ELSE
BEGIN
newinfoline := 'The loaded dll does not export the DllGetVersion function.';
astrlist.Add(newinfoline);
END;
EXCEPT
retval := -1;
END;
END
ELSE
retval := -1;
LogDllGetVersionInfo := retval;
END;
FUNCTION TForm1.GetHighStrLen(aprevmaxlen : INTEGER; astr : STRING) : INTEGER;
VAR retval : INTEGER;
VAR comparisonlen : INTEGER;
BEGIN
retval := 0;
comparisonlen := 0;
retval := aprevmaxlen;
comparisonlen := Length(astr);
IF comparisonlen > aprevmaxlen THEN
retval := comparisonlen;
GetHighStrLen := retval;
END;
FUNCTION TForm1.GetMaxFunctionNameLen(aitemslist : TListItems) : INTEGER;
VAR retval : INTEGER;
VAR numlvitems : INTEGER;
VAR functionname : STRING;
VAR i : INTEGER;
BEGIN
retval := 0;
numlvitems := 0;
functionname := '';
i := 0;
numlvitems := aitemslist.Count;
FOR i := 0 TO (numlvitems - 1) DO
BEGIN
functionname := aitemslist.Item[i].Caption;
retval := GetHighStrLen(retval, functionname);
END;
GetMaxFunctionNameLen := retval;
END;
FUNCTION TForm1.WriteListHeader(amaxnamelen : INTEGER) : INTEGER;
VAR retval : INTEGER;
VAR captionlen : INTEGER;
VAR numfillchars : INTEGER;
VAR fillchsrstr : STRING;
VAR newinfoline : STRING;
BEGIN
retval := 0;
captionlen := 0;
numfillchars := 0;
fillchsrstr := '';
newinfoline := '';
TRY
newinfoline := 'Function Name';
captionlen := Length(newinfoline);
IF captionlen < amaxnamelen THEN
numfillchars := amaxnamelen - captionlen - 1;
IF numfillchars > 0 THEN
fillchsrstr := StringOfChar(' ', numfillchars) + ' ';
newinfoline := newinfoline + fillchsrstr + ' ' + 'Exported (Yes/No)';
Memo1.Lines.Add(newinfoline);
EXCEPT
retval := -1;
END;
WriteListHeader := retval;
END;
FUNCTION TForm1.LogNameCheckResult(afunctionname : STRING; supported : BOOLEAN; amaxnamelen : INTEGER) : INTEGER;
VAR retval : INTEGER;
VAR functionnamelen : INTEGER;
VAR numfillchars : INTEGER;
VAR fillchsrstr : STRING;
VAR newinfoline : STRING;
BEGIN
retval := 0;
functionnamelen := 0;
numfillchars := 0;
fillchsrstr := '';
newinfoline := '';
TRY
functionnamelen := Length(afunctionname);
IF functionnamelen < amaxnamelen THEN
numfillchars := amaxnamelen - functionnamelen - 1;
IF numfillchars > 0 THEN
BEGIN
fillchsrstr := StringOfChar(' ', numfillchars) + ' ';
END;
newinfoline := afunctionname + fillchsrstr + ' ';
IF supported THEN
newinfoline := newinfoline + 'Yes'
ELSE
newinfoline := newinfoline + 'No';
Memo1.Lines.Add(newinfoline);
EXCEPT
retval := -1;
END;
LogNameCheckResult := retval;
END;
FUNCTION TForm1.CompareToExportedDllNames(adllhandle : HMODULE; aitemslist : TListItems) : INTEGER;
//Determine if the checked function names in ListView1 are exported by name
//by the selected dynamic link library (dll) (i.e. the file selected into
//SelFileComboBox1's edit field).
//Returns ERROR_SUCCES (= 0) or an error code.
VAR retval : INTEGER;
VAR numlvitems : INTEGER;
VAR maxnamelen : INTEGER;
VAR functionname : STRING;
VAR supportednameslist : TStringList;
VAR unsupportednameslist : TStringList;
VAR procaddressp : POINTER;
VAR i : INTEGER;
BEGIN
retval := 0;
numlvitems := 0;
maxnamelen := 0;
functionname := '';
procaddressp := NIL;
i := 0;
IF NOT IsValidHandle(adllhandle) THEN
retval := ERROR_INVALID_HANDLE;
IF retval = NO_ERROR THEN
BEGIN
IF Assigned(aitemslist) THEN
numlvitems := aitemslist.Count
ELSE
retval := -1;
END;
IF numlvitems > 0 THEN
BEGIN
maxnamelen := GetMaxFunctionNameLen(aitemslist);
WriteListHeader(maxnamelen);
FOR i := 0 TO (numlvitems - 1) DO
BEGIN
aitemslist.Item[i].Data := NIL;
IF aitemslist.Item[i].Checked THEN
BEGIN
functionname := aitemslist.Item[i].Caption;
procaddressp := GetProcAddress(adllhandle, PChar(functionname));
IF procaddressp <> NIL THEN
BEGIN
//We use the list view item's "Data" field to
//store
aitemslist.Item[i].Data := TObject(1);
LogNameCheckResult(functionname, TRUE, maxnamelen);
END
ELSE
BEGIN
LogNameCheckResult(functionname, FALSE, maxnamelen);
END;
functionname := '';
END;
END;
END
ELSE
retval := -1;
CompareToExportedDllNames := retval;
END;
FUNCTION TForm1.SaveResultsAsCSV(adllhandle : HMODULE; aitemslist : TListItems; acsvfilename : STRING) : INTEGER;
//Export results as a ".csv" text file based on the data stored in
//the low word of the ListView1 items' "Data" fields during the test.
//Returns ERROR_SUCCES (= 0) or an error code on failure.
VAR retval : INTEGER;
VAR numlvitems : INTEGER;
VAR csvstringslist : TStringList;
VAR dllnamep : PChar;
VAR dllverinfo : TSSTDllVerInfo;
VAR functionname : STRING;
VAR newcsvline : STRING;
VAR i : INTEGER;
BEGIN
retval := 0;
numlvitems := 0;
csvstringslist := NIL;
dllnamep := NIL;
dllverinfo := NIL;
functionname := '';
newcsvline := '';
i := 0;
IF Assigned(aitemslist) THEN
numlvitems := aitemslist.Count
ELSE
retval := -1;
IF retval = NO_ERROR THEN
TRY
csvstringslist := TStringList.Create();
EXCEPT
retval := ERROR_OUTOFMEMORY;
END;
IF retval = ERROR_SUCCESS THEN
retval := GetModuleFileNameFromHandle(adllhandle, dllnamep);
IF retval = ERROR_SUCCESS THEN
BEGIN
TRY
dllverinfo := TSSTDllVerInfo.Create(dllnamep);
EXCEPT
retval := ERROR_OUTOFMEMORY;
END;
END;
IF retval = ERROR_SUCCESS THEN
BEGIN
IF numlvitems > 0 THEN
retval := LogDllVersionInfo(dllnamep, dllverinfo, adllhandle, csvstringslist)
ELSE
retval := -1;
END;
IF retval = ERROR_SUCCESS THEN
BEGIN
FOR i := 0 TO csvstringslist.Count - 1 DO
csvstringslist.Strings[i] := csvstringslist.Strings[i] + ',,';
newcsvline := 'Function Name,Exported (Yes/No),';
csvstringslist.Add(newcsvline);
END;
IF retval = ERROR_SUCCESS THEN
BEGIN
FOR i := 0 TO (numlvitems - 1) DO
BEGIN
IF aitemslist.Item[i].Checked THEN
BEGIN
functionname := aitemslist.Item[i].Caption;
IF INTEGER(aitemslist.Item[i].Data) AND $0001 <> 0 THEN
newcsvline := functionname + ',Yes,'
ELSE
newcsvline := functionname + ',NO,';
csvstringslist.Add(newcsvline);
functionname := '';
END;
END;
csvstringslist.SaveToFile(acsvfilename);
END;
IF dllnamep <> NIL THEN
StrDispose(dllnamep);
IF dllverinfo <> NIL THEN
dllverinfo.Free();
IF csvstringslist <> NIL THEN
csvstringslist.Free();
SaveResultsAsCSV := retval;
END;
FUNCTION TForm1.GetModuleFileNameFromHandle(adllhandle : HMODULE; VAR amodulenamep : PChar) : INTEGER;
//Retrieves the full path and name of the executable module from the handle
//in the first parameter. Returns ERROR_SUCCESS on success, or an error code
//otherwise.
//IMPORTANT ! The calling function is responsible for freeing the allocated string !
VAR retval : INTEGER;
BEGIN
retval := 0;
IF amodulenamep = NIL THEN
BEGIN
IF IsValidHandle(adllhandle) THEN
BEGIN
TRY
amodulenamep := StrAlloc(MAX_PATH);
EXCEPT
retval := ERROR_OUTOFMEMORY;
END;
END
ELSE
retval := ERROR_INVALID_HANDLE;
END
ELSE
retval := -1;
IF retval = ERROR_SUCCESS THEN
BEGIN
IF GetModuleFileName(adllhandle, amodulenamep, MAX_PATH) = 0 THEN
BEGIN
retval := INTEGER(GetLastError());
IF retval = NO_ERROR THEN
retval := -1;
END;
END;
GetModuleFileNameFromHandle := retval;
END;
FUNCTION TForm1.GetDefResultFileName(adllhandle : HMODULE; VAR adefaultfilename : STRING) : INTEGER;
//Create a default file name for the test results based on the version
//information stored in the dll.
VAR retval : INTEGER;
VAR dllnamep : PChar;
VAR dllverinfo : TSSTDllVerInfo;
BEGIN
retval := 0;
dllnamep := NIL;
dllverinfo := NIL;
retval := GetModuleFileNameFromHandle(adllhandle, dllnamep);
IF retval = ERROR_SUCCESS THEN
BEGIN
TRY
dllverinfo := TSSTDllVerInfo.Create(dllnamep);
EXCEPT
retval := ERROR_OUTOFMEMORY;
END;
END;
IF retval = ERROR_SUCCESS THEN
adefaultfilename := 'ShlWAPIDllVer' + dllverinfo.ResourceFileVersion;
IF dllverinfo <> NIL THEN
dllverinfo.Free();
IF dllnamep <> NIL THEN
StrDispose(dllnamep);
GetDefResultFileName := retval;
END;
end.
|
|
Download file
|
|
| Application Main Window Form |
|
object Form1: TForm1
Left = 345
Top = 221
Width = 640
Height = 430
Caption = 'SST ShlWAPI.dll Information Application'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Verdana'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
OnDestroy = OnDestroy
OnShow = OnShow
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 200
Top = 26
Width = 3
Height = 329
Cursor = crHSplit
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 624
Height = 26
Align = alTop
TabOrder = 0
object StaticText1: TStaticText
Left = 4
Top = 4
Width = 87
Height = 17
Caption = 'Selected file : '
TabOrder = 0
end
object SelFileComboBox1: TComboBox
Left = 92
Top = 2
Width = 441
Height = 21
Anchors = [akLeft, akTop, akRight]
ItemHeight = 13
Sorted = True
TabOrder = 1
OnChange = OnFileComboBoxChange
OnEnter = OnControlSetFocus
OnKeyUp = OnFileComboBoxKeyUp
end
object BrowseButton1: TButton
Left = 544
Top = 1
Width = 75
Height = 23
Anchors = [akTop, akRight]
Caption = 'Browse ...'
TabOrder = 2
OnClick = SelectDll
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 355
Width = 624
Height = 19
Panels = <>
ParentFont = True
SimplePanel = True
SimpleText = 'Test'
UseSystemFont = False
end
object Panel2: TPanel
Left = 0
Top = 26
Width = 200
Height = 329
Align = alLeft
Caption = 'Panel2'
TabOrder = 2
object ListView1: TListView
Left = 4
Top = 1
Width = 192
Height = 292
Anchors = [akLeft, akTop, akRight, akBottom]
Checkboxes = True
Columns = <
item
Caption = 'Function Name'
Width = 188
end>
Items.Data = {
7C3300007101000000000000FFFFFFFFFFFFFFFF00000000000000000B417373
6F6343726561746500000000FFFFFFFFFFFFFFFF000000000000000015417373
6F634765745065726365697665645479706500000000FFFFFFFFFFFFFFFF0000
000000000000104173736F63497344616E6765726F757300000000FFFFFFFFFF
FFFFFF00000000000000000E4173736F6351756572794B65794100000000FFFF
FFFFFFFFFFFF00000000000000000E4173736F6351756572794B657957000000
00FFFFFFFFFFFFFFFF0000000000000000114173736F63517565727953747269
6E674100000000FFFFFFFFFFFFFFFF0000000000000000164173736F63517565
7279537472696E6742794B65794100000000FFFFFFFFFFFFFFFF000000000000
0000164173736F635175657279537472696E6742794B65795700000000FFFFFF
FFFFFFFFFF0000000000000000114173736F635175657279537472696E675700
000000FFFFFFFFFFFFFFFF000000000000000008436872436D70494100000000
FFFFFFFFFFFFFFFF000000000000000008436872436D70495700000000FFFFFF
FFFFFFFFFF00000000000000000F436F6C6F7241646A7573744C756D61000000
00FFFFFFFFFFFFFFFF00000000000000000D436F6C6F72484C53546F52474200
000000FFFFFFFFFFFFFFFF00000000000000000D436F6C6F72524742546F484C
5300000000FFFFFFFFFFFFFFFF000000000000000018436F6E6E656374546F43
6F6E6E656374696F6E506F696E7400000000FFFFFFFFFFFFFFFF000000000000
00001444656C61794C6F61644661696C757265486F6F6B00000000FFFFFFFFFF
FFFFFF00000000000000000D446C6C47657456657273696F6E00000000FFFFFF
FFFFFFFFFF0000000000000000134765744163636570744C616E677561676573
4100000000FFFFFFFFFFFFFFFF0000000000000000134765744163636570744C
616E6775616765735700000000FFFFFFFFFFFFFFFF0000000000000000104765
744D656E75506F7346726F6D494400000000FFFFFFFFFFFFFFFF000000000000
000008486173684461746100000000FFFFFFFFFFFFFFFF000000000000000010
496E746C5374724571576F726B65724100000000FFFFFFFFFFFFFFFF00000000
0000000010496E746C5374724571576F726B65725700000000FFFFFFFFFFFFFF
FF00000000000000000C49734368617253706163654100000000FFFFFFFFFFFF
FFFF00000000000000000C49734368617253706163655700000000FFFFFFFFFF
FFFFFF0000000000000000144973496E7465726E6574455343456E61626C6564
00000000FFFFFFFFFFFFFFFF00000000000000000449734F5300000000FFFFFF
FFFFFFFFFF00000000000000000C4953747265616D5F436F707900000000FFFF
FFFFFFFFFFFF00000000000000000C4953747265616D5F5265616400000000FF
FFFFFFFFFFFFFF0000000000000000104953747265616D5F526561645069646C
00000000FFFFFFFFFFFFFFFF00000000000000000F4953747265616D5F526561
6453747200000000FFFFFFFFFFFFFFFF00000000000000000D4953747265616D
5F526573657400000000FFFFFFFFFFFFFFFF00000000000000000C4953747265
616D5F53697A6500000000FFFFFFFFFFFFFFFF00000000000000000D49537472
65616D5F577269746500000000FFFFFFFFFFFFFFFF0000000000000000114953
747265616D5F57726974655069646C00000000FFFFFFFFFFFFFFFF0000000000
000000104953747265616D5F577269746553747200000000FFFFFFFFFFFFFFFF
00000000000000001649556E6B6E6F776E5F41746F6D696352656C6561736500
000000FFFFFFFFFFFFFFFF00000000000000001049556E6B6E6F776E5F476574
5369746500000000FFFFFFFFFFFFFFFF00000000000000001249556E6B6E6F77
6E5F47657457696E646F7700000000FFFFFFFFFFFFFFFF000000000000000015
49556E6B6E6F776E5F51756572795365727669636500000000FFFFFFFFFFFFFF
FF00000000000000000C49556E6B6E6F776E5F53657400000000FFFFFFFFFFFF
FFFF00000000000000001049556E6B6E6F776E5F5365745369746500000000FF
FFFFFFFFFFFFFF00000000000000000D4D4C467265654C696272617279000000
00FFFFFFFFFFFFFFFF00000000000000000E4D4C4C6F61644C69627261727941
00000000FFFFFFFFFFFFFFFF00000000000000000E4D4C4C6F61644C69627261
72795700000000FFFFFFFFFFFFFFFF000000000000000009506172736555524C
4100000000FFFFFFFFFFFFFFFF000000000000000009506172736555524C5700
000000FFFFFFFFFFFFFFFF000000000000000011506174684164644261636B73
6C6173684100000000FFFFFFFFFFFFFFFF000000000000000011506174684164
644261636B736C6173685700000000FFFFFFFFFFFFFFFF000000000000000011
50617468416464457874656E73696F6E4100000000FFFFFFFFFFFFFFFF000000
00000000001150617468416464457874656E73696F6E5700000000FFFFFFFFFF
FFFFFF00000000000000000B50617468417070656E644100000000FFFFFFFFFF
FFFFFF00000000000000000B50617468417070656E645700000000FFFFFFFFFF
FFFFFF00000000000000000E506174684275696C64526F6F744100000000FFFF
FFFFFFFFFFFF00000000000000000E506174684275696C64526F6F7457000000
00FFFFFFFFFFFFFFFF0000000000000000115061746843616E6F6E6963616C69
7A654100000000FFFFFFFFFFFFFFFF0000000000000000115061746843616E6F
6E6963616C697A655700000000FFFFFFFFFFFFFFFF00000000000000000C5061
7468436F6D62696E654100000000FFFFFFFFFFFFFFFF00000000000000000C50
617468436F6D62696E655700000000FFFFFFFFFFFFFFFF000000000000000011
50617468436F6D6D6F6E5072656669784100000000FFFFFFFFFFFFFFFF000000
00000000001150617468436F6D6D6F6E5072656669785700000000FFFFFFFFFF
FFFFFF00000000000000001050617468436F6D70616374506174684100000000
FFFFFFFFFFFFFFFF00000000000000001250617468436F6D7061637450617468
45784100000000FFFFFFFFFFFFFFFF00000000000000001250617468436F6D70
6163745061746845785700000000FFFFFFFFFFFFFFFF00000000000000001050
617468436F6D70616374506174685700000000FFFFFFFFFFFFFFFF0000000000
000000125061746843726561746546726F6D55726C4100000000FFFFFFFFFFFF
FFFF0000000000000000165061746843726561746546726F6D55726C416C6C6F
6300000000FFFFFFFFFFFFFFFF00000000000000001250617468437265617465
46726F6D55726C5700000000FFFFFFFFFFFFFFFF00000000000000000F506174
6846696C654578697374734100000000FFFFFFFFFFFFFFFF0000000000000000
0F5061746846696C654578697374735700000000FFFFFFFFFFFFFFFF00000000
00000000125061746846696E64457874656E73696F6E4100000000FFFFFFFFFF
FFFFFF0000000000000000125061746846696E64457874656E73696F6E570000
0000FFFFFFFFFFFFFFFF0000000000000000115061746846696E6446696C654E
616D654100000000FFFFFFFFFFFFFFFF0000000000000000115061746846696E
6446696C654E616D655700000000FFFFFFFFFFFFFFFF00000000000000001650
61746846696E644E657874436F6D706F6E656E744100000000FFFFFFFFFFFFFF
FF0000000000000000165061746846696E644E657874436F6D706F6E656E7457
00000000FFFFFFFFFFFFFFFF00000000000000000F5061746846696E644F6E50
6174684100000000FFFFFFFFFFFFFFFF00000000000000000F5061746846696E
644F6E506174685700000000FFFFFFFFFFFFFFFF000000000000000014506174
6846696E6453756666697841727261794100000000FFFFFFFFFFFFFFFF000000
0000000000145061746846696E6453756666697841727261795700000000FFFF
FFFFFFFFFFFF00000000000000000C50617468476574417267734100000000FF
FFFFFFFFFFFFFF00000000000000000C50617468476574417267735700000000
FFFFFFFFFFFFFFFF000000000000000010506174684765744368617254797065
4100000000FFFFFFFFFFFFFFFF00000000000000001050617468476574436861
72547970655700000000FFFFFFFFFFFFFFFF0000000000000000135061746847
657444726976654E756D6265724100000000FFFFFFFFFFFFFFFF000000000000
0000135061746847657444726976654E756D6265725700000000FFFFFFFFFFFF
FFFF000000000000000012506174684973436F6E74656E745479706541000000
00FFFFFFFFFFFFFFFF000000000000000012506174684973436F6E74656E7454
7970655700000000FFFFFFFFFFFFFFFF00000000000000001050617468497344
69726563746F72794100000000FFFFFFFFFFFFFFFF0000000000000000105061
746849734469726563746F72795700000000FFFFFFFFFFFFFFFF000000000000
0000155061746849734469726563746F7279456D7074794100000000FFFFFFFF
FFFFFFFF0000000000000000155061746849734469726563746F7279456D7074
795700000000FFFFFFFFFFFFFFFF00000000000000000F50617468497346696C
65537065634100000000FFFFFFFFFFFFFFFF00000000000000000F5061746849
7346696C65537065635700000000FFFFFFFFFFFFFFFF00000000000000001250
61746849734C464E46696C65537065634100000000FFFFFFFFFFFFFFFF000000
0000000000125061746849734C464E46696C65537065635700000000FFFFFFFF
FFFFFFFF0000000000000000125061746849734E6574776F726B506174684100
000000FFFFFFFFFFFFFFFF0000000000000000125061746849734E6574776F72
6B506174685700000000FFFFFFFFFFFFFFFF00000000000000000D5061746849
735072656669784100000000FFFFFFFFFFFFFFFF00000000000000000D506174
6849735072656669785700000000FFFFFFFFFFFFFFFF00000000000000000F50
617468497352656C61746976654100000000FFFFFFFFFFFFFFFF000000000000
00000F50617468497352656C61746976655700000000FFFFFFFFFFFFFFFF0000
0000000000000B506174684973526F6F744100000000FFFFFFFFFFFFFFFF0000
0000000000000B506174684973526F6F745700000000FFFFFFFFFFFFFFFF0000
0000000000000F50617468497353616D65526F6F744100000000FFFFFFFFFFFF
FFFF00000000000000000F50617468497353616D65526F6F745700000000FFFF
FFFFFFFFFFFF00000000000000001350617468497353797374656D466F6C6465
724100000000FFFFFFFFFFFFFFFF000000000000000013506174684973537973
74656D466F6C6465725700000000FFFFFFFFFFFFFFFF00000000000000000A50
6174684973554E434100000000FFFFFFFFFFFFFFFF00000000000000000A5061
74684973554E435700000000FFFFFFFFFFFFFFFF000000000000000010506174
684973554E435365727665724100000000FFFFFFFFFFFFFFFF00000000000000
0010506174684973554E435365727665725700000000FFFFFFFFFFFFFFFF0000
00000000000015506174684973554E4353657276657253686172654100000000
FFFFFFFFFFFFFFFF000000000000000015506174684973554E43536572766572
53686172655700000000FFFFFFFFFFFFFFFF00000000000000000A5061746849
7355524C4100000000FFFFFFFFFFFFFFFF00000000000000000A506174684973
55524C5700000000FFFFFFFFFFFFFFFF00000000000000000F506174684D616B
655072657474794100000000FFFFFFFFFFFFFFFF00000000000000000F506174
684D616B655072657474795700000000FFFFFFFFFFFFFFFF0000000000000000
15506174684D616B6553797374656D466F6C6465724100000000FFFFFFFFFFFF
FFFF000000000000000015506174684D616B6553797374656D466F6C64657257
00000000FFFFFFFFFFFFFFFF00000000000000000E506174684D617463685370
65634100000000FFFFFFFFFFFFFFFF00000000000000000E506174684D617463
68537065635700000000FFFFFFFFFFFFFFFF000000000000000010506174684D
617463685370656345784100000000FFFFFFFFFFFFFFFF000000000000000010
506174684D617463685370656345785700000000FFFFFFFFFFFFFFFF00000000
000000001650617468506172736549636F6E4C6F636174696F6E4100000000FF
FFFFFFFFFFFFFF00000000000000001650617468506172736549636F6E4C6F63
6174696F6E5700000000FFFFFFFFFFFFFFFF0000000000000000105061746851
756F74655370616365734100000000FFFFFFFFFFFFFFFF000000000000000010
5061746851756F74655370616365735700000000FFFFFFFFFFFFFFFF00000000
00000000135061746852656C617469766550617468546F4100000000FFFFFFFF
FFFFFFFF0000000000000000135061746852656C617469766550617468546F57
00000000FFFFFFFFFFFFFFFF00000000000000000F5061746852656D6F766541
7267734100000000FFFFFFFFFFFFFFFF00000000000000000F5061746852656D
6F7665417267735700000000FFFFFFFFFFFFFFFF000000000000000014506174
6852656D6F76654261636B736C6173684100000000FFFFFFFFFFFFFFFF000000
0000000000145061746852656D6F76654261636B736C6173685700000000FFFF
FFFFFFFFFFFF0000000000000000115061746852656D6F7665426C616E6B7341
00000000FFFFFFFFFFFFFFFF0000000000000000115061746852656D6F766542
6C616E6B735700000000FFFFFFFFFFFFFFFF0000000000000000145061746852
656D6F7665457874656E73696F6E4100000000FFFFFFFFFFFFFFFF0000000000
000000145061746852656D6F7665457874656E73696F6E5700000000FFFFFFFF
FFFFFFFF0000000000000000135061746852656D6F766546696C655370656341
00000000FFFFFFFFFFFFFFFF0000000000000000135061746852656D6F766546
696C65537065635700000000FFFFFFFFFFFFFFFF000000000000000014506174
6852656E616D65457874656E73696F6E4100000000FFFFFFFFFFFFFFFF000000
0000000000145061746852656E616D65457874656E73696F6E5700000000FFFF
FFFFFFFFFFFF00000000000000001550617468536561726368416E645175616C
6966794100000000FFFFFFFFFFFFFFFF00000000000000001550617468536561
726368416E645175616C6966795700000000FFFFFFFFFFFFFFFF000000000000
00001350617468536574446C674974656D506174684100000000FFFFFFFFFFFF
FFFF00000000000000001350617468536574446C674974656D50617468570000
0000FFFFFFFFFFFFFFFF00000000000000000D50617468536B6970526F6F7441
00000000FFFFFFFFFFFFFFFF00000000000000000D50617468536B6970526F6F
745700000000FFFFFFFFFFFFFFFF00000000000000000E506174685374726970
506174684100000000FFFFFFFFFFFFFFFF00000000000000000E506174685374
726970506174685700000000FFFFFFFFFFFFFFFF000000000000000010506174
685374726970546F526F6F744100000000FFFFFFFFFFFFFFFF00000000000000
0010506174685374726970546F526F6F745700000000FFFFFFFFFFFFFFFF0000
0000000000000F50617468556E6465636F726174654100000000FFFFFFFFFFFF
FFFF00000000000000000F50617468556E6465636F726174655700000000FFFF
FFFFFFFFFFFF00000000000000001750617468556E457870616E64456E765374
72696E67734100000000FFFFFFFFFFFFFFFF0000000000000000175061746855
6E457870616E64456E76537472696E67735700000000FFFFFFFFFFFFFFFF0000
0000000000001750617468556E6D616B6553797374656D466F6C646572410000
0000FFFFFFFFFFFFFFFF00000000000000001750617468556E6D616B65537973
74656D466F6C6465725700000000FFFFFFFFFFFFFFFF00000000000000001250
617468556E71756F74655370616365734100000000FFFFFFFFFFFFFFFF000000
00000000001250617468556E71756F74655370616365735700000000FFFFFFFF
FFFFFFFF000000000000000008514953656172636800000000FFFFFFFFFFFFFF
FF00000000000000000D5348416C6C6F6353686172656400000000FFFFFFFFFF
FFFFFF00000000000000000C5348416E7369546F416E736900000000FFFFFFFF
FFFFFFFF00000000000000000F5348416E7369546F556E69636F646500000000
FFFFFFFFFFFFFFFF00000000000000000E53484175746F436F6D706C65746500
000000FFFFFFFFFFFFFFFF00000000000000000A5348436F70794B6579410000
0000FFFFFFFFFFFFFFFF00000000000000000A5348436F70794B657957000000
00FFFFFFFFFFFFFFFF00000000000000001153484372656174654D656D537472
65616D00000000FFFFFFFFFFFFFFFF0000000000000000145348437265617465
5368656C6C50616C6574746500000000FFFFFFFFFFFFFFFF0000000000000000
15534843726561746553747265616D4F6E46696C654100000000FFFFFFFFFFFF
FFFF000000000000000015534843726561746553747265616D4F6E46696C6557
00000000FFFFFFFFFFFFFFFF0000000000000000165348437265617465537472
65616D4F6E46696C65457800000000FFFFFFFFFFFFFFFF000000000000000015
534843726561746553747265616D5772617070657200000000FFFFFFFFFFFFFF
FF00000000000000000E534843726561746554687265616400000000FFFFFFFF
FFFFFFFF00000000000000001153484372656174655468726561645265660000
0000FFFFFFFFFFFFFFFF000000000000000011534844656C657465456D707479
4B65794100000000FFFFFFFFFFFFFFFF000000000000000011534844656C6574
65456D7074794B65795700000000FFFFFFFFFFFFFFFF00000000000000000C53
4844656C6574654B65794100000000FFFFFFFFFFFFFFFF00000000000000000C
534844656C6574654B65795700000000FFFFFFFFFFFFFFFF0000000000000000
12534844656C6574654F727068616E4B65794100000000FFFFFFFFFFFFFFFF00
0000000000000012534844656C6574654F727068616E4B65795700000000FFFF
FFFFFFFFFFFF00000000000000000E534844656C65746556616C756541000000
00FFFFFFFFFFFFFFFF00000000000000000E534844656C65746556616C756557
00000000FFFFFFFFFFFFFFFF0000000000000000105368656C6C4D6573736167
65426F784100000000FFFFFFFFFFFFFFFF0000000000000000105368656C6C4D
657373616765426F785700000000FFFFFFFFFFFFFFFF00000000000000000C53
48456E756D4B657945784100000000FFFFFFFFFFFFFFFF00000000000000000C
5348456E756D4B657945785700000000FFFFFFFFFFFFFFFF0000000000000000
0C5348456E756D56616C75654100000000FFFFFFFFFFFFFFFF00000000000000
000C5348456E756D56616C75655700000000FFFFFFFFFFFFFFFF000000000000
0000115348466F726D61744461746554696D654100000000FFFFFFFFFFFFFFFF
0000000000000000115348466F726D61744461746554696D655700000000FFFF
FFFFFFFFFFFF00000000000000000C53484672656553686172656400000000FF
FFFFFFFFFFFFFF0000000000000000105348476574496E7665727365434D4150
00000000FFFFFFFFFFFFFFFF00000000000000000E5348476574546872656164
52656600000000FFFFFFFFFFFFFFFF00000000000000000B534847657456616C
75654100000000FFFFFFFFFFFFFFFF00000000000000000B534847657456616C
75655700000000FFFFFFFFFFFFFFFF0000000000000000195348476574566965
77537461746550726F706572747942616700000000FFFFFFFFFFFFFFFF000000
00000000000F534849734368696C644F7253656C6600000000FFFFFFFFFFFFFF
FF000000000000000014534849734C6F774D656D6F72794D616368696E650000
0000FFFFFFFFFFFFFFFF00000000000000001453484C6F6164496E6469726563
74537472696E6700000000FFFFFFFFFFFFFFFF00000000000000000C53484C6F
636B53686172656400000000FFFFFFFFFFFFFFFF00000000000000001253484D
657373616765426F78436865636B4100000000FFFFFFFFFFFFFFFF0000000000
0000001253484D657373616765426F78436865636B5700000000FFFFFFFFFFFF
FFFF00000000000000001153484F70656E52656753747265616D324100000000
FFFFFFFFFFFFFFFF00000000000000001153484F70656E52656753747265616D
325700000000FFFFFFFFFFFFFFFF00000000000000001053484F70656E526567
53747265616D4100000000FFFFFFFFFFFFFFFF00000000000000001053484F70
656E52656753747265616D5700000000FFFFFFFFFFFFFFFF0000000000000000
1A534850726F70657274794261675F52656164537472416C6C6F6300000000FF
FFFFFFFFFFFFFF00000000000000000F53485175657279496E666F4B65794100
000000FFFFFFFFFFFFFFFF00000000000000000F53485175657279496E666F4B
65795700000000FFFFFFFFFFFFFFFF00000000000000000F5348517565727956
616C756545784100000000FFFFFFFFFFFFFFFF00000000000000000F53485175
65727956616C756545785700000000FFFFFFFFFFFFFFFF00000000000000000F
5348526567436C6F736555534B657900000000FFFFFFFFFFFFFFFF0000000000
00000011534852656743726561746555534B65794100000000FFFFFFFFFFFFFF
FF000000000000000011534852656743726561746555534B65795700000000FF
FFFFFFFFFFFFFF000000000000000016534852656744656C657465456D707479
55534B65794100000000FFFFFFFFFFFFFFFF0000000000000000165348526567
44656C657465456D70747955534B65795700000000FFFFFFFFFFFFFFFF000000
000000000013534852656744656C657465555356616C75654100000000FFFFFF
FFFFFFFFFF000000000000000013534852656744656C657465555356616C7565
5700000000FFFFFFFFFFFFFFFF00000000000000001253485265674475706C69
63617465484B657900000000FFFFFFFFFFFFFFFF00000000000000000F534852
6567456E756D55534B65794100000000FFFFFFFFFFFFFFFF0000000000000000
0F5348526567456E756D55534B65795700000000FFFFFFFFFFFFFFFF00000000
00000000115348526567456E756D555356616C75654100000000FFFFFFFFFFFF
FFFF0000000000000000115348526567456E756D555356616C75655700000000
FFFFFFFFFFFFFFFF0000000000000000145348526567476574426F6F6C555356
616C75654100000000FFFFFFFFFFFFFFFF000000000000000014534852656747
6574426F6F6C555356616C75655700000000FFFFFFFFFFFFFFFF000000000000
00000C5348526567476574496E745700000000FFFFFFFFFFFFFFFF0000000000
0000000D5348526567476574506174684100000000FFFFFFFFFFFFFFFF000000
00000000000D5348526567476574506174685700000000FFFFFFFFFFFFFFFF00
00000000000000105348526567476574555356616C75654100000000FFFFFFFF
FFFFFFFF0000000000000000105348526567476574555356616C756557000000
00FFFFFFFFFFFFFFFF00000000000000000E534852656747657456616C756541
00000000FFFFFFFFFFFFFFFF00000000000000000E534852656747657456616C
75655700000000FFFFFFFFFFFFFFFF00000000000000001A5348526567697374
657256616C696461746554656D706C61746500000000FFFFFFFFFFFFFFFF0000
0000000000000F53485265674F70656E55534B65794100000000FFFFFFFFFFFF
FFFF00000000000000000F53485265674F70656E55534B65795700000000FFFF
FFFFFFFFFFFF00000000000000001453485265675175657279496E666F55534B
65794100000000FFFFFFFFFFFFFFFF0000000000000000145348526567517565
7279496E666F55534B65795700000000FFFFFFFFFFFFFFFF0000000000000000
1253485265675175657279555356616C75654100000000FFFFFFFFFFFFFFFF00
000000000000001253485265675175657279555356616C75655700000000FFFF
FFFFFFFFFFFF00000000000000000D5348526567536574506174684100000000
FFFFFFFFFFFFFFFF00000000000000000D534852656753657450617468570000
0000FFFFFFFFFFFFFFFF0000000000000000105348526567536574555356616C
75654100000000FFFFFFFFFFFFFFFF0000000000000000105348526567536574
555356616C75655700000000FFFFFFFFFFFFFFFF000000000000000012534852
65675772697465555356616C75654100000000FFFFFFFFFFFFFFFF0000000000
0000001253485265675772697465555356616C75655700000000FFFFFFFFFFFF
FFFF000000000000000012534852656C65617365546872656164526566000000
00FFFFFFFFFFFFFFFF00000000000000001D534852756E496E64697265637452
6567436C69656E74436F6D6D616E6400000000FFFFFFFFFFFFFFFF0000000000
00000017534853656E644D65737361676542726F6164636173744100000000FF
FFFFFFFFFFFFFF000000000000000017534853656E644D65737361676542726F
6164636173745700000000FFFFFFFFFFFFFFFF00000000000000000E53485365
7454687265616452656600000000FFFFFFFFFFFFFFFF00000000000000000B53
4853657456616C75654100000000FFFFFFFFFFFFFFFF00000000000000000B53
4853657456616C75655700000000FFFFFFFFFFFFFFFF00000000000000000E53
48536B69704A756E6374696F6E00000000FFFFFFFFFFFFFFFF00000000000000
000953485374724475704100000000FFFFFFFFFFFFFFFF000000000000000009
53485374724475705700000000FFFFFFFFFFFFFFFF0000000000000000115348
53747269704D6E65756D6F6E69634100000000FFFFFFFFFFFFFFFF0000000000
00000011534853747269704D6E65756D6F6E69635700000000FFFFFFFFFFFFFF
FF00000000000000000F5348556E69636F6465546F416E736900000000FFFFFF
FFFFFFFFFF0000000000000000125348556E69636F6465546F556E69636F6465
00000000FFFFFFFFFFFFFFFF00000000000000000E5348556E6C6F636B536861
72656400000000FFFFFFFFFFFFFFFF00000000000000000B5374724361744275
66664100000000FFFFFFFFFFFFFFFF00000000000000000B5374724361744275
66665700000000FFFFFFFFFFFFFFFF00000000000000000C5374724361744368
61696E5700000000FFFFFFFFFFFFFFFF00000000000000000753747243617457
00000000FFFFFFFFFFFFFFFF0000000000000000075374724368724100000000
FFFFFFFFFFFFFFFF0000000000000000075374724368725700000000FFFFFFFF
FFFFFFFF000000000000000008537472436872494100000000FFFFFFFFFFFFFF
FF000000000000000008537472436872495700000000FFFFFFFFFFFFFFFF0000
000000000000095374724368724E495700000000FFFFFFFFFFFFFFFF00000000
00000000085374724368724E5700000000FFFFFFFFFFFFFFFF00000000000000
0008537472436D70434100000000FFFFFFFFFFFFFFFF00000000000000000853
7472436D70435700000000FFFFFFFFFFFFFFFF00000000000000000953747243
6D7049434100000000FFFFFFFFFFFFFFFF000000000000000009537472436D70
49435700000000FFFFFFFFFFFFFFFF000000000000000008537472436D704957
00000000FFFFFFFFFFFFFFFF00000000000000000E537472436D704C6F676963
616C5700000000FFFFFFFFFFFFFFFF000000000000000008537472436D704E41
00000000FFFFFFFFFFFFFFFF000000000000000008537472436D704E57000000
00FFFFFFFFFFFFFFFF0000000000000000085374724370794E5700000000FFFF
FFFFFFFFFFFF000000000000000009537472436D704E434100000000FFFFFFFF
FFFFFFFF000000000000000009537472436D704E435700000000FFFFFFFFFFFF
FFFF000000000000000009537472436D704E494100000000FFFFFFFFFFFFFFFF
000000000000000009537472436D704E495700000000FFFFFFFFFFFFFFFF0000
0000000000000A537472436D704E49434100000000FFFFFFFFFFFFFFFF000000
00000000000A537472436D704E49435700000000FFFFFFFFFFFFFFFF00000000
0000000007537472436D705700000000FFFFFFFFFFFFFFFF0000000000000000
075374724370795700000000FFFFFFFFFFFFFFFF000000000000000008537472
4353706E4100000000FFFFFFFFFFFFFFFF000000000000000008537472435370
6E5700000000FFFFFFFFFFFFFFFF0000000000000000095374724353706E4941
00000000FFFFFFFFFFFFFFFF0000000000000000095374724353706E49570000
0000FFFFFFFFFFFFFFFF0000000000000000075374724475704100000000FFFF
FFFFFFFFFFFF0000000000000000075374724475705700000000FFFFFFFFFFFF
FFFF000000000000000014537472466F726D61744279746553697A6536344100
000000FFFFFFFFFFFFFFFF000000000000000012537472466F726D6174427974
6553697A654100000000FFFFFFFFFFFFFFFF000000000000000012537472466F
726D61744279746553697A655700000000FFFFFFFFFFFFFFFF00000000000000
0013537472466F726D61744279746553697A65457800000000FFFFFFFFFFFFFF
FF000000000000000010537472466F726D61744B4253697A654100000000FFFF
FFFFFFFFFFFF000000000000000010537472466F726D61744B4253697A655700
000000FFFFFFFFFFFFFFFF00000000000000001453747246726F6D54696D6549
6E74657276616C4100000000FFFFFFFFFFFFFFFF000000000000000014537472
46726F6D54696D65496E74657276616C5700000000FFFFFFFFFFFFFFFF000000
00000000000F5374724973496E746C457175616C4100000000FFFFFFFFFFFFFF
FF00000000000000000F5374724973496E746C457175616C5700000000FFFFFF
FFFFFFFFFF0000000000000000085374724E4361744100000000FFFFFFFFFFFF
FFFF0000000000000000085374724E4361745700000000FFFFFFFFFFFFFFFF00
00000000000000085374725042726B4100000000FFFFFFFFFFFFFFFF00000000
00000000085374725042726B5700000000FFFFFFFFFFFFFFFF00000000000000
0008537472524368724100000000FFFFFFFFFFFFFFFF00000000000000000853
7472524368725700000000FFFFFFFFFFFFFFFF00000000000000000953747252
436872494100000000FFFFFFFFFFFFFFFF000000000000000009537472524368
72495700000000FFFFFFFFFFFFFFFF00000000000000000C537472526574546F
4253545200000000FFFFFFFFFFFFFFFF00000000000000000C53747252657454
6F4275664100000000FFFFFFFFFFFFFFFF00000000000000000C537472526574
546F4275665700000000FFFFFFFFFFFFFFFF00000000000000000C5374725265
74546F5374724100000000FFFFFFFFFFFFFFFF00000000000000000C53747252
6574546F5374725700000000FFFFFFFFFFFFFFFF000000000000000009537472
52537472494100000000FFFFFFFFFFFFFFFF0000000000000000095374725253
7472495700000000FFFFFFFFFFFFFFFF00000000000000000753747253706E41
00000000FFFFFFFFFFFFFFFF00000000000000000753747253706E5700000000
FFFFFFFFFFFFFFFF0000000000000000075374725374724100000000FFFFFFFF
FFFFFFFF0000000000000000075374725374725700000000FFFFFFFFFFFFFFFF
000000000000000008537472537472494100000000FFFFFFFFFFFFFFFF000000
000000000008537472537472495700000000FFFFFFFFFFFFFFFF000000000000
0000095374725374724E495700000000FFFFFFFFFFFFFFFF0000000000000000
085374725374724E5700000000FFFFFFFFFFFFFFFF00000000000000000D5374
72546F496E74363445784100000000FFFFFFFFFFFFFFFF00000000000000000D
537472546F496E74363445785700000000FFFFFFFFFFFFFFFF00000000000000
0009537472546F496E744100000000FFFFFFFFFFFFFFFF000000000000000009
537472546F496E745700000000FFFFFFFFFFFFFFFF00000000000000000B5374
72546F496E7445784100000000FFFFFFFFFFFFFFFF00000000000000000B5374
72546F496E7445785700000000FFFFFFFFFFFFFFFF0000000000000000085374
725472696D4100000000FFFFFFFFFFFFFFFF0000000000000000085374725472
696D5700000000FFFFFFFFFFFFFFFF00000000000000000F55726C4170706C79
536368656D654100000000FFFFFFFFFFFFFFFF00000000000000000F55726C41
70706C79536368656D655700000000FFFFFFFFFFFFFFFF000000000000000010
55726C43616E6F6E6963616C697A654100000000FFFFFFFFFFFFFFFF00000000
000000001055726C43616E6F6E6963616C697A655700000000FFFFFFFFFFFFFF
FF00000000000000000B55726C436F6D62696E654100000000FFFFFFFFFFFFFF
FF00000000000000000B55726C436F6D62696E655700000000FFFFFFFFFFFFFF
FF00000000000000000B55726C436F6D706172654100000000FFFFFFFFFFFFFF
FF00000000000000000B55726C436F6D706172655700000000FFFFFFFFFFFFFF
FF00000000000000001255726C43726561746546726F6D506174684100000000
FFFFFFFFFFFFFFFF00000000000000001255726C43726561746546726F6D5061
74685700000000FFFFFFFFFFFFFFFF00000000000000000A55726C4573636170
654100000000FFFFFFFFFFFFFFFF00000000000000000A55726C457363617065
5700000000FFFFFFFFFFFFFFFF00000000000000000955726C46697875705700
000000FFFFFFFFFFFFFFFF00000000000000000F55726C4765744C6F63617469
6F6E4100000000FFFFFFFFFFFFFFFF00000000000000000F55726C4765744C6F
636174696F6E5700000000FFFFFFFFFFFFFFFF00000000000000000B55726C47
6574506172744100000000FFFFFFFFFFFFFFFF00000000000000000B55726C47
6574506172745700000000FFFFFFFFFFFFFFFF00000000000000000855726C48
6173684100000000FFFFFFFFFFFFFFFF00000000000000000855726C48617368
5700000000FFFFFFFFFFFFFFFF00000000000000000655726C49734100000000
FFFFFFFFFFFFFFFF00000000000000000655726C49735700000000FFFFFFFFFF
FFFFFF00000000000000000F55726C49734E6F486973746F72794100000000FF
FFFFFFFFFFFFFF00000000000000000F55726C49734E6F486973746F72795700
000000FFFFFFFFFFFFFFFF00000000000000000C55726C49734F706171756541
00000000FFFFFFFFFFFFFFFF00000000000000000C55726C49734F7061717565
5700000000FFFFFFFFFFFFFFFF00000000000000000C55726C556E6573636170
654100000000FFFFFFFFFFFFFFFF00000000000000000C55726C556E65736361
70655700000000FFFFFFFFFFFFFFFF00000000000000000D5768696368506C61
74666F726D00000000FFFFFFFFFFFFFFFF00000000000000000A776E73707269
6E74664100000000FFFFFFFFFFFFFFFF00000000000000000A776E737072696E
74665700000000FFFFFFFFFFFFFFFF00000000000000000B77766E737072696E
74664100000000FFFFFFFFFFFFFFFF00000000000000000B77766E737072696E
74665700000000FFFFFFFFFFFFFFFF0000000000000000185348437265617465
5468726561645769746848616E646C6500000000FFFFFFFFFFFFFFFF00000000
0000000017534850726F70657274794261675F577269746542535452}
MultiSelect = True
TabOrder = 0
ViewStyle = vsReport
OnChange = OnListView1Change
OnChanging = OnListView1Changing
OnEdited = OnListView1Edited
OnEditing = OnListView1Editing
OnEnter = OnControlSetFocus
OnSelectItem = OnListView1SelItem
end
object RunCheckButton1: TButton
Left = 4
Top = 300
Width = 192
Height = 23
Anchors = [akLeft, akRight, akBottom]
Caption = 'Run Check'
TabOrder = 1
OnClick = RunFunctionNamesTest
OnEnter = OnControlSetFocus
end
end
object Panel3: TPanel
Left = 203
Top = 26
Width = 421
Height = 329
Align = alClient
Caption = 'Panel3'
TabOrder = 3
object Memo1: TMemo
Left = 1
Top = 1
Width = 416
Height = 292
Anchors = [akLeft, akTop, akRight, akBottom]
ScrollBars = ssVertical
TabOrder = 0
OnChange = OnResultsMemoChange
OnEnter = OnControlSetFocus
OnKeyUp = OnResultsMemoKeyUp
OnMouseUp = OnResultsMemoMouseUp
end
end
object MainMenu1: TMainMenu
Left = 4
object MainMenuFile: TMenuItem
Caption = 'File'
object MMFileOpen: TMenuItem
Caption = 'Open ...'
ShortCut = 16463
OnClick = SelectDll
end
object MMFileSep1: TMenuItem
Caption = '-'
end
object MMFileRunCheck: TMenuItem
Caption = 'Run Check'
OnClick = RunFunctionNamesTest
end
object MMFileSep2: TMenuItem
Caption = '-'
end
object MMFileSaveAs: TMenuItem
Caption = 'Save as ...'
OnClick = SaveResultsFileAs
end
object MMFileSep3: TMenuItem
Caption = '-'
end
object MMFileExit: TMenuItem
Caption = 'E&xit'
OnClick = ExitApplication
end
end
object MainMenuEdit: TMenuItem
Caption = 'Edit'
object MMeditUndo: TMenuItem
Caption = 'Undo'
ShortCut = 16474
OnClick = Undo
end
object MMEditSep1: TMenuItem
Caption = '-'
end
object MMEditCut: TMenuItem
Caption = 'Cut'
ShortCut = 16472
OnClick = CutText
end
object MMEditCopy: TMenuItem
Caption = 'Copy'
ShortCut = 16451
OnClick = CopyText
end
object MMEditPaste: TMenuItem
Caption = 'Paste'
ShortCut = 16470
OnClick = PasteText
end
object MMEditDelete: TMenuItem
Caption = 'Delete'
OnClick = DeleteText
end
object MMEditSep2: TMenuItem
Caption = '-'
end
object MMEditSelAll: TMenuItem
Caption = 'Select All'
ShortCut = 16449
OnClick = SelectAll
end
object MMEditClearSel: TMenuItem
Caption = 'Clear Selection'
OnClick = ClearSelection
end
object MMEditCheckSel: TMenuItem
Caption = 'Check Selected'
OnClick = CheckSelListViewItems
end
object MMeditUnCheckSel: TMenuItem
Caption = 'Un-check Selected'
OnClick = UnCheckSelListViewItems
end
object MMEditSep3: TMenuItem
Caption = '-'
end
object MMEditAddAnsiFunction: TMenuItem
Caption = 'Add ANSI Function Name'
OnClick = AddANSIFunctionName
end
object MMEditAddWCHARFunctionName: TMenuItem
Caption = 'Add WCHAR Function Name'
OnClick = AddWCHARFunctionName
end
object MMEditAddBothBunctkionNames: TMenuItem
Caption = 'Add Both'
OnClick = AddANSIAndWCHARFunctionNames
end
object MMEditRenameFunction: TMenuItem
Caption = 'Rename Function'
OnClick = RenameFunctionName
end
object MMEditSep4: TMenuItem
Caption = '-'
end
object MMEditFind: TMenuItem
Caption = 'Find ...'
ShortCut = 16454
OnClick = FindText
end
object MMEditFindNext: TMenuItem
Caption = 'Find Next'
ShortCut = 114
end
end
object MainMenuView: TMenuItem
Caption = 'View'
Visible = False
end
object MainMenuOptions: TMenuItem
Caption = 'Options'
Visible = False
end
object MainMenuHelp: TMenuItem
Caption = 'Help'
object MMHelpHelp: TMenuItem
Caption = 'Help'
ShortCut = 112
OnClick = OpenOnlineHelp
end
object MMHelpSeparator1: TMenuItem
Caption = '-'
end
object MMHelpAbout: TMenuItem
Caption = 'About ...'
OnClick = ShowAboutDialog
end
end
end
object OpenDialog1: TOpenDialog
FileName = 'ShlWAPI.dll'
Filter = 'Dynamic link libraries (*.dll)|*.dll|All files (*.*)|*.*'
Title = 'Select Dynamic Link Library'
Left = 516
end
object SaveDialog1: TSaveDialog
DefaultExt = 'txt'
Filter =
'Text (*.txt)|*.txt|Text (comma delimited)(*.csv)|*.csv|All Files' +
' (*.*)|*.*'
Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
Title = 'Save Information'
Left = 323
Top = 42
end
object FindDialog1: TFindDialog
OnFind = OnFindDialogFind
Left = 191
Top = 30
end
end
|
|
Download file
|
|
| About Dialog Unit |
|
{*****************************************************************************}
{ UNIT ShlWAPIFunctionInfoAbout.pas }
{ Copyright © Stoelzel Software Technologie 2017 }
{ }
{ Author: Dominic Stoelzel }
{ Version : 1.00 }
{ Created : September 30, 2017 }
{ Last modified : September 30, 2017, 01:15 (ds) }
{ }
{ Description of contents : Declares and implements the }
{ "About" dialog/window class that displays the version number of the }
{ (SST) ShlWAPIFunctionInfo application. }
{ }
{ Note : If you plan to modify the source code of the (SST) . }
{ ShlWAPIFunctionInfo application and redestribute your version, }
{ please also modify this dialog/window accordingly. }
{ }
{*****************************************************************************}
unit ShlWAPIFunctionInfoAbout;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
type TAboutBox = class(TForm)
Panel1: TPanel;
ProgramIcon: TImage;
ProductName: TLabel;
Version: TLabel;
Copyright: TLabel;
Description: TLabel;
OKButton: TButton;
private
{Private declarations }
public
{ Public declarations }
end;
var AboutBox: TAboutBox;
implementation
{$R *.DFM}
end.
|
|
Download file
|
|
| About Dialog Form |
|
object AboutBox: TAboutBox
Left = 375
Top = 292
BorderStyle = bsDialog
Caption = 'About'
ClientHeight = 213
ClientWidth = 384
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 8
Top = 8
Width = 368
Height = 161
BevelInner = bvRaised
BevelOuter = bvLowered
ParentColor = True
TabOrder = 0
object ProgramIcon: TImage
Left = 8
Top = 8
Width = 65
Height = 57
Picture.Data = {
07544269746D617076020000424D760200000000000076000000280000002000
0000200000000100040000000000000200000000000000000000100000000000
000000000000000080000080000000808000800000008000800080800000C0C0
C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787E
EEE00788787878878887803F3088887EEEE00788887888878887803F3088887E
EEE00877888887788888703F308887EEEEE00888777778888888037883088888
8EE007777777777777703787883087777EE00888888888888803787FF8830888
888008888888888880378777778830888880077777777788037873F3F3F87808
88E00888888888803787FFFFFFFF8830EEE00887777778800001111111111100
EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EE
EEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EE
EEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEE
EEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEE
EEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEE
EEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEE
EEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEE
EEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00000000000000000000000000000
0000}
Stretch = True
IsControl = True
end
object ProductName: TLabel
Left = 88
Top = 16
Width = 74
Height = 13
Caption = 'Product Name: '
IsControl = True
end
object Version: TLabel
Left = 88
Top = 40
Width = 41
Height = 13
Caption = 'Version: '
IsControl = True
end
object Copyright: TLabel
Left = 8
Top = 80
Width = 50
Height = 13
Caption = 'Copyright: '
IsControl = True
end
object Description: TLabel
Left = 8
Top = 104
Width = 59
Height = 13
Caption = 'Description: '
IsControl = True
end
end
object OKButton: TButton
Left = 132
Top = 180
Width = 120
Height = 25
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 1
end
end
|
|
Download file
|
|
| Application Manifest File |
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="SST.ShlWAPIFunctionInfo" type="win32">
<description>ShlWAPI.dll Function Information Application.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
|
|
Download file
|
|
| Resource Script File |
|
/*****************************************************************************/
/* UNIT ShlWAPIFunctionInfo.rc */
/* */
/* Author: Dominic Stoelzel */
/* Version : 1.01 */
/* Created : December 06, 2016 */
/* Last modified : November 29, 2017 16:25 (ds) */
/* */
/* Description of contents : Resource definition file for the SST */
/* ShlWAPI.dll information application's manifest resources. */
/* */
/* Note : Manifest resources have to be compiled using a command-line */
/* resource compiler, PRIOR to linking (under Delphi 5), */
/* (e.g. the Borland, Delphi 5 resource compiler Brc32.exe), */
/* as specifying the resource script directly in a project unit, */
/* can result in the build failing with */
/* error message "Invalid 16 bit resources". */
/* */
/*****************************************************************************/
#define RT_MANIFEST 24
//
// Manifest resources
//
//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
LANGUAGE 0x09, 0x01
1 RT_MANIFEST ".\\ShlWAPIFunctionInfo.xml"
|
|
Download file
|
|
|
|