From c55247d407ab518f708c5b62aa12a7326badc7cc Mon Sep 17 00:00:00 2001 From: Winkie <59116132+Winkie1000@users.noreply.github.com> Date: Mon, 30 Nov 2020 20:58:41 +0100 Subject: [PATCH] Add/change for v0.5.0 [Add] Possibility of icons per row in the ListView if an item has one. [Add] Option for icons in the ListView. [Add] Show larger icon for focused ListView-item. [Add] Checkmark in settings GUI for AppData/ProgramData application data folders as search folders. [Add] Creation of SQLite database with search items (all files with matching extenstions). [Add] Option to keep 1 database. [Change] Move settings file to 'Data' subfolder. [Add] Option to start with saved database results. [Add] Do not overwrite existing shortcuts when creating new ones. [Add] 'Do next' options at dialog after creating shotcuts. [Add] Menu entry to open 'personal folder' in Windows Explorer. [Bug fix] Minor bug fixes. --- ISMONISM.ahk | 649 +++++++++++++++++++++++++++++------- README.md | 21 +- Resources/Screenshot-01.png | Bin 28654 -> 44539 bytes Resources/Screenshot-02.png | Bin 20456 -> 14859 bytes 4 files changed, 546 insertions(+), 124 deletions(-) diff --git a/ISMONISM.ahk b/ISMONISM.ahk index d599748..95a91d1 100644 --- a/ISMONISM.ahk +++ b/ISMONISM.ahk @@ -71,15 +71,45 @@ SOFTWARE. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +> This script uses: + Class_SQLiteDB - https://github.com/AHK-just-me/Class_SQLiteDB + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to */ #LTrim #NoEnv #NoTrayIcon #SingleInstance, Force +SetBatchLines, -1 SetControlDelay, -1 SetWorkingDir, % A_ScriptDir +#Include + If ( A_IsCompiled and A_Is64bitOS ) ; Compiled is 32-bit EnvGet, sSysProgramFiles, ProgramW6432 Else @@ -92,9 +122,12 @@ Menu, ListViewMenu, Add, Copy selected path(s) to clipboard, SelectedToClipboard Menu, ListViewMenu, Add, Menu, ListViewMenu, Add, Show focused path in Windows Explorer, FocusedToExplorer Menu, ListViewMenu, Add, Search online for focused name, FocusedToInternet -Menu, FileMenu, Add, Start search`tF5, Dosearch +Menu, FileMenu, Add, Start a new search`tF5, Dosearch +Menu, FileMenu, Add, Reload last saved search`tF6, ReloadLastSaved +Menu, FileMenu, Add, +Menu, FileMenu, Add, Open personal folder in Windows Explorer`tCtrl+E, OpenPersonalFolder Menu, FileMenu, Add, -Menu, FileMenu, Add, Restart without saving settings to file`tCtrl+R, MainGuiReload +Menu, FileMenu, Add, Restart without modifying data files`tCtrl+R, MainGuiReload Menu, FileMenu, Add, Exit`tAlt+F4, MainGuiClose Menu, HelpMenu, Add, About`tF1, GoAbout Menu, MenuBar, Add, File, :FileMenu @@ -105,18 +138,19 @@ Menu, MenuBar, Add, Help, :HelpMenu Gui, MainGui: New, +Resize +MinSize650x400 +LabelMainGui Gui, MainGui: Margin, 10, 10 Gui, MainGui: Menu, MenuBar -Gui, MainGui: Add, ListView, w780 h600 AltSubmit Checked Disabled Grid gMainListEvent hwndhMainList1 vcMainList1, |Cnum|Program name|Program path +Gui, MainGui: Add, ListView, w780 h600 AltSubmit Checked Disabled Grid gMainListEvent hwndhMainList1 vcMainList1, |Cnum|Program name|Program path ; Column 1 = Checkmark + Icon Gui, MainGui: Font, Bold Gui, MainGui: Add, Button, ym w170 r2 gDoSearch hwndhButtonSearch, Start search Gui, MainGui: Font, Normal -Gui, MainGui: Add, Text, xp y+80 wp h1 Border hwndhBorder -Gui, MainGui: Add, Text, xp y+20 wp hwndhTextCaption, Personal shortcut folder: +Gui, MainGui: Add, Picture, xp+30 y+20 w64 h-1 hwndhFileIcon vcFileIcon +Gui, MainGui: Add, Text, xp-30 y+100 w170 h1 Border hwndhBorder +Gui, MainGui: Add, Text, xp y+20 wp hwndhTextFolderCaption, Personal shortcut folder: Gui, MainGui: Font, s8, Verdana Gui, MainGui: Font, s10, Tahoma Gui, MainGui: Font, s10, Consolas Gui, MainGui: Add, Text, xp y+m wp r6 hwndhTextPersonalFolder, % StrReplace( oSettings.PersonalFolder, "\", " \ " ) Gui, MainGui: Font, -Gui, MainGui: Add, Button, xp y+20 wp Disabled gCreateShortcuts hwndhButtonShortcut, Create shortcut(s)`n for checked items +Gui, MainGui: Add, Button, xp y+20 wp Disabled gCreateShortcuts hwndhButtonShortcut, Create shortcut(s)`n for checked item(s) Gui, MainGui: Add, Button, xp y+m wp Disabled gCheckedToClipboard hwndhButtonClipboard, Copy checked path(s)`n to clipboard Gui, MainGui: Add, StatusBar, h22 Gui, MainGui: Show, Center, ISMONISM @@ -130,63 +164,144 @@ If oSettings.MaximizeAtLaunch If oSettings.SearchAtLaunch Gosub, DoSearch +Else If oSettings.LastSavedAtLaunch + Gosub, ReloadLastSaved Else -{ - LV_ModifyCol( 3, 200) - LV_ModifyCol( 4, 200) - SB_SetText( "Ready.") -} + Gosub, MainGuiIdle Return -#IfWinActive ahk_group ISMONISM_Main - -^F5:: DoSearch: + Gosub, DeleteDatabase + If not bSearchCancel + { + Gosub, SearchBegin + Gosub, SearchFileLoop + } + If bSearchCancel + Gosub, SearchComplete + Else + Gosub, SearchListLoad +Return + +ReloadLastSaved: + If FileExist( "Data\search0.db" ) + { + Gosub, SearchBegin + Gosub, SearchListLoad + } + Else + { + ErrorMsg( "No database file found." ) + If not LV_GetCount() + Gosub, MainGuiIdle + } +Return + +SearchBegin: Menu, MenuBar, Disable, 2& - WinSet, Disable, , % "ahk_id " hButtonSearch + WinSet, Disable, , % "ahk_id " . hButtonSearch WinSet, Disable, , % "ahk_id " . hMainList1 bIsSearching := True LV_Delete( ) - aMenuItems := Array() + GuiControl, -Redraw, hMainList1 + GuiControl, , cFileIcon +Return + +SearchFileLoop: + SB_SetText( "Creating database." ) + Gosub, OpenDatabase + sSQL := "CREATE TABLE Shortcuts( Path );" + If not oDb.Exec( sSQL ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + sSQL := "CREATE TABLE Programs( Path );" + If not oDb.Exec( sSQL ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + + If not oDB.Exec( "BEGIN TRANSACTION;" ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) For index, sDir in oSettings.ShortcutDirs { - SB_SetText( "Scanning shortcut folder:" . sDir . ". (Press ESC to abort scanning)") + SB_SetText( "Scanning shortcut folder. (Press ESC to abort scanning) - " . sDir) Loop, Files, % sDir . "\*.lnk", R { - If bUserCancel + If bSearchCancel { - Gosub, SearchComplete + Gosub, SearchAborted Return } - aMenuItems.Push( FileGetShotcutPath( A_LoopFileLongPath ) ) + sFile := FileGetShotcutPath( A_LoopFileLongPath ) + sFileExt := FileGetExt( sFile ) + If HasVal( oSettings.FileTypes, sFileExt ) + { + sSQL := "INSERT INTO Shortcuts( Path ) VALUES (" SQLiteEscapeString( sFile ) . ");" + If not oDB.Exec( sSQL ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + } } } - + For index, sDir in oSettings.SearchDirs { - SB_SetText( "Scanning program folder: " . sDir . ". (Press ESC to abort scanning)" ) + SB_SetText( "Scanning program folder. (Press ESC to abort scanning) - " . sDir ) Loop, Files, % sDir . "\*.*", R { - If bUserCancel + If bSearchCancel { - Gosub, SearchComplete + Gosub, SearchAborted Return } If A_LoopFileExt and HasVal( oSettings.FileTypes, A_LoopFileExt ) { - If Not HasVal( aMenuItems, A_LoopFileLongPath ) - { - LV_Add( "", "", "", FileGetName( A_LoopFileLongPath ), A_LoopFileLongPath ) - } + sSQL := "INSERT INTO Programs( Path ) VALUES (" SQLiteEscapeString( A_LoopFileLongPath ) . ");" + If not oDB.Exec( sSQL ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + } + } + } + SB_SetText( "Writing to database." ) + If not oDb.Exec( "COMMIT TRANSACTION;" ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + Gosub, CloseDatabase +Return + +SearchListLoad: + Gosub, OpenDatabase + sSQL := "SELECT DISTINCT Path FROM Programs WHERE Path COLLATE NOCASE NOT IN ( SELECT DISTINCT path FROM Shortcuts )" + If not oDb.GetTable( sSQL, oTable ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + SB_SetText( "Reporting. (Press ESC to abort reporting)" ) + If oTable.HasRows + { + If oSettings.ListViewIcons + { + Il_Destroy( hImageList ) + hImageList := IL_Create( 0, 1 ) + LV_SetImageList( hImageList ) + } + Loop, % oTable.RowCount + { + If bSearchCancel + { + Gosub, SearchComplete + Return } + oTable.Next( oRow ) + If oSettings.ListViewIcons + i := Il_Add( hImageList, oRow[1] ) + LV_Add( "Icon" . i, "", "", FileGetName( oRow[1] ), oRow[1] ) } + oRow.Free() } + Gosub, CloseDatabase Gosub, SearchComplete Return SearchComplete: + GuiControl, +Redraw, hMainList1 If LV_GetCount() { + If oSettings.ListViewIcons + LV_ModifyCol( 1, 40) LV_ModifyCol( 2, 0) LV_ModifyCol( 3, "Sort" ) LV_ModifyCol( 3 ) @@ -194,27 +309,132 @@ SearchComplete: } WinSet, Enable, , % "ahk_id " . hMainList1 Menu, MenuBar, Enable, 2& - ControlSetText, , Start search, % "ahk_id " hButtonSearch bIsSearching := False - SB_SetText( bUserCancel - ? FormatInteger( LV_GetCount( ) ) . " item(s) found which are not in any shortcut folder (search aborted)." : FormatInteger( LV_GetCount( ) ) . " item(s) found which are not in any shortcut folder." ) - WinSet, Enable, , % "ahk_id " hButtonSearch - bUserCancel := False - aMenuItems := "" + ControlSetText, , New search, % "ahk_id " hButtonSearch + WinSet, Enable, , % "ahk_id " . hButtonSearch + Gosub, MainGuiUpdateStatus + FileDelete, Data\search0.db.tmp + bSearchCancel := False sDir := "" index := "" ControlFocus, , % "ahk_id " . hMainList1 Return +SearchAborted: + Gosub, CloseDatabase + FileMove, Data\search0.db.tmp, Data\search0.db, 1 +Return + +OpenDatabase: + odb := new SQLiteDB + If not oDb.OpenDb( A_ScriptDir . "\Data\search0.db" ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) +Return + +CloseDatabase: + If not oDb.CloseDB() + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) +Return + +DeleteDatabase: + If FileExist( A_ScriptDir . "\Data\search0.db" ) + { + Try + FileMove, Data\search0.db, Data\search0.db.tmp, 1 + Catch e + { + ErrorMsg( "File operations on the database file failed." ) + bSearchCancel := True + } + } +Return + +MainGuiUpdateStatus: + SB_SetText( LV_GetCount() = 1 ? "1 item in the list." : FormatInteger( LV_GetCount( ) ) . " items in the list." ) + Gosub, MainListEvent +Return + CreateShortcuts: - bCreateShortcuts := MainListToShortcuts( oSettings.PersonalFolder ) - If bCreateShortcuts - MsgBox, 64, ISMONISM, % "Done!`n" . bCreateShortcuts . " shortcuts created in " . oSettings.PersonalFolder + oShortcuts := MainListToShortcuts( oSettings.PersonalFolder ) + If IsObject( oShortcuts ) + { + Gui, MainGui: +Disabled + + bShortcutCreateRemoveListRow := oSettings.ShortcutCreateRemoveListRow + bShortcutCreateUpdateDatabase := oSettings.ShortcutCreateUpdateDatabase + Gui, ShortcutGui: New, -Resize +Toolwindow +LabelShortcutGui +OwnerMainGui + Gui, ShortcutGui: Default + Gui, ShortcutGui: Margin, 20, 15 + Gui, ShortcutGui: Add, Picture, xm ym w32 h32 Icon278 Section, % A_WinDir . "\System32\shell32.dll" + Gui, ShortcutGui: Font, Bold + Gui, ShortcutGui: Add, Text, ys+8, Done! + Gui, ShortcutGui: Font, + Gui, ShortcutGui: Add, Text, xm, % oShortcuts.Count() . " shortcut(s) created in:`n" . oSettings.PersonalFolder + Gui, ShortCutGui: Add, Text, , Do next: + Gui, ShortcutGui: Add, Checkbox, vbShortcutCreateRemoveListRow Checked%bShortcutCreateRemoveListRow%, Delete checkmarked row(s) from the list. + Gui, ShortcutGui: Add, Checkbox, vbShortcutCreateUpdateDatabase Checked%bShortcutCreateUpdateDatabase%, Update the database file. + Gui, ShortCutGui: Add, Text, + Gui, ShortcutGui: Add, Button, gShortcutGuiSet hwndhSchortcutGuiButton Hidden w80, OK + Gui, ShortcutGui: Show, Center, ISMONISM + ControlMove, , % ( WinGetWidth() / 2 ) - 40, , , , % "ahk_id " . hSchortcutGuiButton + Gui, ShortcutGui: Show, Center, ISMONISM + GuiControl, Show, % hSchortcutGuiButton + } Else - MsgBox, 16, ISMONISM, % "Error!`nCould not create (shortcuts in) " . oSettings.PersonalFolder - bCreateShortcuts := "" + ErrorMsg( "Could not create (shortcuts in) " . oSettings.PersonalFolder ) +Return + +ShortcutGuiSet: + Gui, ShortcutGui: Submit + Gui, MainGui: Default + If bShortcutCreateRemoveListRow + { + Loop + { + i := 0 + i := LV_GetNext( i, "C" ) + If not i + Break + LV_Delete( i ) + } + Gosub, MainGuiUpdateStatus + } + If bShortcutCreateUpdateDatabase + { + Gosub, OpenDatabase + For index, sPath in oShortcuts + { + sSQL := "INSERT INTO Shortcuts( Path ) VALUES (" SQLiteEscapeString( sPath ) . ");" + If not oDB.Exec( sSQL ) + DatabaseError( oDb.ErrorMsg , oDb.ErrorCode ) + } + Gosub, CloseDatabase + sDir := "" + index := "" + } + If ( bShortcutCreateRemoveListRow != oSettings.ShortcutCreateRemoveListRow ) or ( bShortcutCreateUpdateDatabase != oSettings.ShortcutCreateUpdateDatabase ) + { + oSettings.ShortcutCreateRemoveListRow := bShortcutCreateRemoveListRow + oSettings.ShortcutCreateUpdateDatabase := bShortcutCreateUpdateDatabase + bSettingNeedsSave := True + } + Gosub, ShortcutGuiClose + i := "" Return +ShortcutGuiEscape: +ShortcutGuiClose: + Gui, MainGui: -Disabled + Gui, MainGui: Default + Gui, ShortcutGui: Destroy + WinActivate, % "ahk_id " . hMainGui + oShortcuts := "" + bShortcutCreateRemoveListRow := "" + bShortcutCreateUpdateDatabase := "" + hSchortcutGuiButton := "" +Return + + CheckedToClipboard: Clipboard:= GetMainListPaths( "C" ) Return @@ -232,6 +452,8 @@ MainListEvent: } If ( A_GuiEvent = "ColClick" and A_EventInfo = 1) MainListSortChecked() + Else + GuiControl, , cFileIcon, % "*w64 *h-1 *Icon1 " GetListViewFocused( 4 ) Return MainGuiContextMenu: @@ -267,82 +489,116 @@ FocusedToInternet: sSelectedPaths := "" Return -!F9:: +MainGuiIdle: + LV_ModifyCol( 3, 200) + LV_ModifyCol( 4, 200) + SB_SetText( "Ready.") +Return + +OpenPersonalFolder: + Run, % "explore " . oSettings.PersonalFolder +Return + GoUserSettings: If bIsSearching Return bUserProgramFiles := False + bUserProfileData := False bUserStartMenu := False - bMaximizeAtLaunch := oSettings.MaximizeAtLaunch ? oSettings.MaximizeAtLaunch : 0 ; v0.3.1 -> v0.4.0 - bSearchAtLaunch := oSettings.SearchAtLaunch ? oSettings.SearchAtLaunch : 0 + bMaximizeAtLaunch := oSettings.MaximizeAtLaunch + bSearchAtLaunch := oSettings.SearchAtLaunch + bLastSavedAtLaunch := oSettings.LastSavedAtLaunch + bListViewIcons := oSettings.ListViewIcons + If not bSearchAtLaunch and not bLastSavedAtLaunch + bNothingAtLaunch := 1 + Gui, MainGui: +Disabled Gui, SettingsGui: New, -Resize +Toolwindow +LabelSettingsGui +OwnerMainGui Gui, SettingsGui: Default Gui, SettingsGui: Margin, 15, 15 - Gui, SettingsGui: Add, Tab3, AltSubmit viSettingsTab, Main|Search folder(s)|Shorcut folder(s)|File extension(s)|Search engine + Gui, SettingsGui: Add, Tab3, AltSubmit viSettingsTab, Main|Search folder(s)|Shorcut folder(s)|File extension(s)|Other Gui, SettingsGui: Tab, 1 - Gui, SettingsGui: Add, Text, x+15, When ISMONISM is launched: - Gui, SettingsGui: Add, Checkbox, xp yp+35 vbMaximizeAtLaunch Checked%bMaximizeAtLaunch%, Start with a maximized window - Gui, SettingsGui: Add, Checkbox, xp yp+35 vbSearchAtLaunch Checked%bSearchAtLaunch%, Start the search - Gui, SettingsGui: Add, Text, xs+15 yp+68 w500, Set a folder where shortcuts should be placed: - Gui, SettingsGui: Add, Edit, xp yp+35 w500 r1 vsPersonalFolder hwndhPersonalFolder, % oSettings.PersonalFolder - Gui, SettingsGui: Add, Button, xp+530 yp-1 w120 gSettingsGetPersonalFolder, Select folder - Gui, SettingsGui: Add, Button, xs+15 yp+38 w120 gSettingsDefaultPersonalFolder, Set default folder + Gui, SettingsGui: Add, Text, x+15 Section, When ISMONISM is launched: + Gui, SettingsGui: Add, Checkbox, x+m ys vbMaximizeAtLaunch Checked%bMaximizeAtLaunch%, Start with a maximized window + Gui, SettingsGui: Add, Radio, xp y+m Section vbNothingAtLaunch Checked%bNothingAtLaunch%, Do not load a search + Gui, SettingsGui: Add, Radio, xp y+m vbSearchAtLaunch Checked%bSearchAtLaunch%, Start a new search + Gui, SettingsGui: Add, Radio, xp y+m vbLastSavedAtLaunch Checked%bLastSavedAtLaunch%, Load the last saved search results + Gui, SettingsGui: Add, Text, xp y+m + Gui, SettingsGui: Add, Text, xm+15 y+m Section, Number of database files with searches to be kept: + Gui, SettingsGui: Add, Edit, x+m yp-3 w50 + Gui, SettingsGui: Add, UpDown, Range0-1 viDatabaseSaves, % oSettings.DatabaseSaves + Gui, SettingsGui: Add, Text, xp y+m + Gui, SettingsGui: Add, Text, xm+15 y+m w500, Set a folder where shortcuts should be placed: + Gui, SettingsGui: Add, Edit, xp y+m w500 r1 vsPersonalFolder hwndhPersonalFolder, % oSettings.PersonalFolder + Gui, SettingsGui: Add, Button, x+m yp-1 w120 gSettingsGetPersonalFolder, Select folder + Gui, SettingsGui: Add, Button, xm+15 yp+38 w120 gSettingsDefaultPersonalFolder, Set default folder Gui, SettingsGui: Tab, 2 - Gui, SettingsGui: Add, Text, x+15 w500, Set folder(s) where should be searched for 'missing' items: - Gui, SettingsGui: Add, Checkbox, xp yp+35 vbUserProgramFiles hwndhUserProgramFiles, % A_Is64bitOS ? " " . sSysProgramFiles . "`n " . sSysProgramFiles64 : " " . sSysProgramFiles - Gui, SettingsGui: Add, ListView, xp yp+50 w500 h200 AltSubmit Grid -ReadOnly hwndhSettingsListTab2, Folder - For index, sDir in oSettings.SearchDirs + Gui, SettingsGui: Add, Text, x+m w500, Set folder(s) where should be searched for 'missing' items: + Gui, SettingsGui: Add, Checkbox, xp y+m vbUserProgramFiles hwndhUserProgramFiles, % A_Is64bitOS ? " " . sSysProgramFiles . "`n " . sSysProgramFiles64 : " " . sSysProgramFiles + Gui, SettingsGui: Add, Checkbox, xp y+m vbUserProfileData hwndhUserProfileData, % " " . A_AppData . "`n " . A_AppDataCommon + Gui, SettingsGui: Add, ListView, xp yp+50 w500 h200 AltSubmit Grid -ReadOnly gSettingsListEvent hwndhSettingsListTab2, Folder + For index, sPath in oSettings.SearchDirs { - If (sDir = sSysProgramFiles Or sDir = sSysProgramFiles64 ) + If ( sPath = sSysProgramFiles Or sPath = sSysProgramFiles64 ) { bUserProgramFiles := True Continue } + Else If ( sPath = A_AppData Or sPath = A_AppDataCommon ) + { + bUserProfileData := True + Continue + } Else - LV_Add( "", sDir ) + LV_Add( "", sPath ) } - Gui, SettingsGui: Add, Button, xp+530 yp w120 Section gSettingsListAdd, Add - Gui, SettingsGui: Add, Button, xs wp gSettingsListEdit, Edit focused - Gui, SettingsGui: Add, Button, xs wp gSettingsListDelete, Remove selected + Gui, SettingsGui: Add, Button, x+m yp w120 Section gSettingsListAdd, Add + Gui, SettingsGui: Add, Button, xs wp Disabled gSettingsListEdit hwndhSettingsEditListTab2, Edit selected + Gui, SettingsGui: Add, Button, xs wp Disabled gSettingsListDelete hwndhSettingsDelListTab2, Remove selected Gui, SettingsGui: Tab, 3 - Gui, SettingsGui: Add, Text, x+15 w500, Set folder(s) with shortcuts: - Gui, SettingsGui: Add, Checkbox, xp yp+35 vbUserStartMenu hwndhUserStartMenu, % " " . A_StartMenu . "`n " . A_StartMenuCommon - Gui, SettingsGui: Add, ListView, xp yp+50 w500 h200 AltSubmit Grid -ReadOnly hwndhSettingsListTab3, Folder - For index, sDir in oSettings.ShortcutDirs + Gui, SettingsGui: Add, Text, x+m w500, Set folder(s) with shortcuts to compare against: + Gui, SettingsGui: Add, Checkbox, xp y+m vbUserStartMenu hwndhUserStartMenu, % " " . A_StartMenu . "`n " . A_StartMenuCommon + Gui, SettingsGui: Add, ListView, xp yp+50 w500 h200 AltSubmit Grid -ReadOnly gSettingsListEvent hwndhSettingsListTab3, Folder + For index, sPath in oSettings.ShortcutDirs { - If (sDir = A_StartMenu Or sDir = A_StartMenuCommon ) + If ( sPath = A_StartMenu Or sPath = A_StartMenuCommon ) { bUserStartMenu := True Continue } Else - LV_Add( "", sDir ) + LV_Add( "", sPath ) } - Gui, SettingsGui: Add, Button, xp+530 yp w120 Section gSettingsListAdd, Add - Gui, SettingsGui: Add, Button, xs wp gSettingsListEdit, Edit focused - Gui, SettingsGui: Add, Button, xs wp gSettingsListDelete, Remove selected + Gui, SettingsGui: Add, Button, x+m yp w120 Section gSettingsListAdd, Add + Gui, SettingsGui: Add, Button, xs wp Disabled gSettingsListEdit hwndhSettingsEditListTab3, Edit selected + Gui, SettingsGui: Add, Button, xs wp Disabled gSettingsListDelete hwndhSettingsDelListTab3, Remove selected Gui, SettingsGui: Tab, 4 Gui, SettingsGui: Add, Text, x+15 w500, Set file extension(s) which should be searched for: - Gui, SettingsGui: Add, ListView, xp yp+35 w500 h200 AltSubmit Grid -ReadOnly hwndhSettingsListTab4, File extension + Gui, SettingsGui: Add, ListView, xp y+m w500 h200 AltSubmit Grid -ReadOnly gSettingsListEvent hwndhSettingsListTab4, File extension For index, sExt in oSettings.FileTypes { LV_Add( "", sExt ) } - Gui, SettingsGui: Add, Button, xp+530 yp w120 Section gSettingsListAdd, Add - Gui, SettingsGui: Add, Button, xs wp gSettingsListEdit, Edit focused - Gui, SettingsGui: Add, Button, xs wp gSettingsListDelete, Remove selected + Gui, SettingsGui: Add, Button, x+m yp w120 Section gSettingsListAdd, Add + Gui, SettingsGui: Add, Button, xs wp Disabled gSettingsListEdit hwndhSettingsEditListTab4, Edit selected + Gui, SettingsGui: Add, Button, xs wp Disabled gSettingsListDelete hwndhSettingsDelListTab4, Remove selected Gui, SettingsGui: Tab, 5 - Gui, SettingsGui: Add, Text, x+15 w500, Set a search engine (the program name will be appended): - Gui, SettingsGui: Add, Edit, xp yp+35 w500 r1 vsSearchEngine hwndhSearchEngine, % oSettings.SearchURL - Gui, SettingsGui: Add, Button, xp yp+38 w120 gSettingsDefaultSearchEngine, Set default`nsearch engine + Gui, SettingsGui: Add, Checkbox, x+m vbListViewIcons Checked%bListViewIcons%, Show icons inside the list for items that have one + Gui, SettingsGui: Add, Text, xp y+m + Gui, SettingsGui: Add, Text, xp y+m w500, Set a search engine (the program name will be appended): + Gui, SettingsGui: Add, Edit, xp y+m wp r1 vsSearchEngine hwndhSearchEngine, % oSettings.SearchURL + Gui, SettingsGui: Add, Button, xp y+m w120 gSettingsDefaultSearchEngine, Set default`nsearch engine Gui, SettingsGui: Tab - Gui, SettingsGui: Add, Button, xm+560 w120 gSettingsGuiSet, &Apply settings + Gui, SettingsGui: Add, Button, xm w120 Hidden hwndhSettingsGuiApplyButton gSettingsGuiSet, &Apply settings + Gui, SettingsGui: Show, Center, ISMONISM settings + ControlMove, , % WinGetWidth() - 139, , , , % "ahk_id " . hSettingsGuiApplyButton Gui, SettingsGui: Show, Center, ISMONISM settings GuiControl, , % hUserProgramFiles, % bUserProgramFiles + GuiControl, , % hUserProfileData, % bUserProfileData GuiControl, , % hUserStartMenu, % bUserStartMenu + GuiControl, Show, % hSettingsGuiApplyButton Return SettingsGetPersonalFolder: @@ -372,9 +628,9 @@ SettingsListAdd: } Else { - sDir := FileSelectFolder( ) - If sDir - LV_Add( "", sDir ) + sPath := FileSelectFolder( ) + If sPath + LV_Add( "", sPath ) } Return @@ -382,7 +638,7 @@ SettingsListEdit: Gui, SettingsGui: Submit, NoHide Gui, SettingsGui: ListView, % hSettingsListTab%iSettingsTab% If iSettingsTab = 4 - SettingsEditListExt( ) + SettingsEditListField( ) Else SettingsEditListFolder( iSettingsTab ) Return @@ -393,12 +649,42 @@ SettingsListDelete: SettingsListDelItem( ) Return +SettingsListEvent: + Gui, SettingsGui: Submit, NoHide + Gui, SettingsGui: ListView, % hSettingsListTab%iSettingsTab% + i := 0 + Loop + { + i := LV_GetNext( i ) + If not i + { + If A_Index = 1 + { + WinSet, Disable, , % "ahk_id " . hSettingsEditListTab%iSettingsTab% + WinSet, Disable, , % "ahk_id " . hSettingsDelListTab%iSettingsTab% + } + Break + } + Else + { + WinSet, Enable, , % "ahk_id " . hSettingsEditListTab%iSettingsTab% + WinSet, Enable, , % "ahk_id " . hSettingsDelListTab%iSettingsTab% + If A_Index >= 2 + WinSet, Disable, , % "ahk_id " . hSettingsEditListTab%iSettingsTab% + } + } + i := "" +Return + SettingsGuiSet: Gui, SettingsGui: Submit sPersonalFolder := RegExReplace( sPersonalFolder, "\\$" ) oSettings.MaximizeAtLaunch := bMaximizeAtLaunch oSettings.SearchAtLaunch := bSearchAtLaunch + oSettings.LastSavedAtLaunch := bLastSavedAtLaunch + oSettings.DatabaseSaves := iDatabaseSaves oSettings.PersonalFolder := sPersonalFolder + oSettings.ListViewIcons := bListViewIcons oSettings.SearchURL := sSearchEngine a := Array() Gui, SettingsGui: ListView, % hSettingsListTab2 @@ -413,6 +699,11 @@ SettingsGuiSet: If A_Is64bitOS a.Push( sSysProgramFiles64 ) } + If bUserProfileData + { + a.Push( A_AppData ) + a.Push( A_AppDataCommon ) + } oSettings.SearchDirs := a a := Array() Gui, SettingsGui: ListView, % hSettingsListTab3 @@ -426,7 +717,7 @@ SettingsGuiSet: a.Push( A_StartMenu ) a.Push( A_StartMenuCommon ) } - oSettings.ShortCutDirs := a + oSettings.ShortcutDirs := a a := Array() Gui, SettingsGui: ListView, % hSettingsListTab4 Loop, % LV_GetCount() @@ -439,7 +730,7 @@ SettingsGuiSet: bSettingNeedsSave := True Gui, MainGui: Default ControlSetText, , % StrReplace( oSettings.PersonalFolder, "\", " \ " ), % "ahk_id " . hTextPersonalFolder - GoSub, SettingsGuiClose + Gosub, SettingsGuiClose Return SettingsGuiEscape: @@ -449,12 +740,19 @@ SettingsGuiClose: Gui, SettingsGui: Destroy WinActivate, % "ahk_id " . hMainGui bMaximizeAtLaunch := "" + bNothingAtLaunch := "" bSearchAtLaunch := "" + bLastSavedAtLaunch := "" + iDatabaseSaves := "" sPersonalFolder := "" + bUserProgramFiles := "" + bUserProfileData := "" + bUserProgramFiles := "" + bListViewIcons := "" sSearchEngine := "" iSettingsTab := "" index := "" - sDir := "" + sPath := "" sExt := "" sStr := "" hPersonalFolder := "" @@ -463,10 +761,11 @@ SettingsGuiClose: hSettingsListTab3 := "" hSettingsListTab4 := "" hUserProgramFiles := "" + hUserProfileData := "" hUserStartMenu := "" + hSettingsGuiApplyButton := "" Return -F1:: GoAbout: Gui, MainGui: +Disabled Gui, AboutGui: New, +LabelAboutGui +OwnerMainGui -SysMenu @@ -475,7 +774,7 @@ GoAbout: If A_IsCompiled Gui, AboutGui: Add, Picture, xm ym w40 h40 Section, % A_ScriptFullPath Else - Gui, AboutGui: Add, Text, xm-30 ym w0 h0, ; Because of the 'ys'-option of the Text below + Gui, AboutGui: Add, Picture, xm ym w40 h40 Icon3 Section, % A_WinDir . "\System32\shell32.dll" ; Something needed because of the 'ys'-option of the Text control below Gui, AboutGui: Add, Text, ys w375, ( ISMONISM is an utility for scanning folders recursively, to find files for which there is no matching shortcut in (a subfolder of) of any user-defined folder. @@ -486,10 +785,10 @@ GoAbout: Gui, AboutGui: Add, Text, xm Section, Version: Gui, AboutGui: Add, Text, xs, Creator: Gui, AboutGui: Add, Text, xs, License: - Gui, AboutGui: Add, Text, ys Section, 0.4.0 (2020-01-04) + Gui, AboutGui: Add, Text, ys Section, 0.5.0 (2021-11-30) Gui, AboutGui: Add, Text, xs, Winkie Gui, AboutGui: Add, Text, xs, see below for the license of ISMONISM and used components - Gui, AboutGui: Add, Tab3, xm AltSubmit viAboutTab, ISMONISM|JSON_ToObj()|JSON_Beautify()|Icon + Gui, AboutGui: Add, Tab3, xm AltSubmit viAboutTab, ISMONISM|JSON_ToObj()|JSON_Beautify()|Class_SQLiteDB|sqlite3.dll|Icon Gui, AboutGui: Tab, 1 Gui, AboutGui: Add, Button, x+15 w80 Default gAboutLaunchWebsite, Visit website Gui, AboutGui: Add, Text, xp yp+35, @@ -568,7 +867,47 @@ GoAbout: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ) - Gui, AboutGui: Tab, 4 + Gui, AboutGui: Tab, 4 + Gui, AboutGui: Add, Button, x+15 w80 Default gAboutLaunchWebsite, Visit website + Gui, AboutGui: Add, Text, xp yp+35, + ( + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to + ) + Gui, AboutGui: Tab, 5 + Gui, AboutGui: Add, Button, x+15 w80 Default gAboutLaunchWebsite, Visit website + Gui, AboutGui: Add, Text, xp yp+35, + ( + All of the code and documentation in SQLite has been dedicated to the public domain by the authors. + All code authors, and representatives of the companies they work for, + have signed affidavits dedicating their contributions to the public domain + and originals of those signed affidavits are stored in a firesafe at the main offices of Hwaci. + Anyone is free to copy, modify, publish, use, compile, sell, or distribute the original SQLite code, + either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + ) + Gui, AboutGui: Tab, 6 Gui, AboutGui: Add, Button, x+15 w80 Default gAboutLaunchWebsite, Visit website Gui, AboutGui: Add, Text, xp yp+35, ( @@ -587,6 +926,10 @@ AboutLaunchWebsite: Run, https://github.com/Jim-VxE/AHK-Lib-JSON_ToObj Else If iAboutTab = 3 Run, https://github.com/joedf/JSON_BnU + Else If iAboutTab = 4 + Run, https://github.com/AHK-just-me/Class_SQLiteDB + Else If iAboutTab = 5 + Run, https://www.sqlite.org/ Else Run, https://www.iconfinder.com/icons/1886938/files_folder_search_storage_icon iAboutTab := "" @@ -601,40 +944,48 @@ Return MainGuiSize: AutoXYWH( "wh", hMainList1 ) - AutoXYWH( "x", hButtonSearch, hBorder, hTextCaption, hTextPersonalFolder, hButtonShortcut, hButtonClipboard ) -Return - -ESC:: - If bIsSearching - bUserCancel := True + AutoXYWH( "x", hButtonSearch, hFileIcon, hBorder, hTextFolderCaption, hTextPersonalFolder, hButtonShortcut, hButtonClipboard ) Return -^F12:: SaveSettings: - oFile := FileOpen( "ISMONISM.json", "w" ) + oFile := FileOpen( "Data\ISMONISM.json", "w" ) oFile.Write( JSON_Beautify( oSettings ) ) oFile.Close( ) bSettingNeedsSave := False Return -^R:: MainGuiReload: Reload Return -!F4:: MainGuiClose: If bSettingNeedsSave Gosub, SaveSettings + If not oSettings.DatabaseSaves + { + If FileExist( "Data\search0.db" ) + { + Try + FileDelete, Data\search0.db + Catch e + ErrorMsg( "Could not delete the database file." ) + } + } ExitApp Return +#IfWinActive ahk_group ISMONISM_Main +ESC:: + If bIsSearching + bSearchCancel := True +Return #IfWinActive MainListToShortcuts( sPersonalFolder ) { Try { + a := Array() i := 0 Loop { @@ -644,16 +995,28 @@ MainListToShortcuts( sPersonalFolder ) LV_GetText( sName, i, 3 ) sName := FileGetBaseName( sName ) LV_GetText( sPath, i, 4 ) - If Not InStr( FileExist( sPersonalFolder ), "D" ) - FileCreateDir, % sPersonalFolder - FileCreateShortCut, % sPath, % sPersonalFolder . "\" . sName . ".lnk" - iOut++ + FileCreateDir, % sPersonalFolder + Loop, + { + If Not FileExist( sPersonalFolder . "\" . sName . ".lnk" ) + { + FileCreateShortCut, % sPath, % sPersonalFolder . "\" . sName . ".lnk" + a.Push( sPath ) + Break + } + Else + { + If A_Index > 1 + sName := RegExReplace( sName, " \(\d+\)$" ) + sName := sName . " (" . A_Index . ")" + } + } } - Return iOut + Return a } Catch e { - Return 0 + Return "" } } @@ -674,7 +1037,7 @@ GetMainListPaths( sRowType := "" ) Return v } -GetListViewFocused( iColumn) +GetListViewFocused( iColumn ) { i := LV_GetNext( i, "F" ) LV_GetText( v, i, iColumn ) @@ -683,11 +1046,12 @@ GetListViewFocused( iColumn) MainListSortChecked() { + Loop, % LV_GetCount() + LV_Modify( A_Index, "", "", "" ) + i := 0 If Not LV_GetNext( i, "C" ) { - Loop, % LV_GetCount() - LV_Modify( A_Index, "", "", "" ) LV_ModifyCol(3, "Sort") } Else @@ -707,16 +1071,36 @@ MainListSortChecked() GetSettingsFromFile() { Global bSettingNeedsSave - If FileExist( "ISMONISM.json" ) + FileCreateDir, Data + If FileExist( A_ScriptDir . "\ISMONISM.json" ) ; v0.4.0 -> 0.5.0 + { + FileMove, % A_ScriptDir . "\ISMONISM.json", % A_ScriptDir . "\Data\ISMONISM.json", 1 + } + If FileExist( "Data\ISMONISM.json" ) { - s := FileRead( "ISMONISM.json" ) + s := FileRead( "Data\ISMONISM.json" ) o := JSON_ToObj( s ) v := o.FileTypes If Not IsObject( v ) ; v0.3.1 -> v0.4.0 { a := StrSplit( v, "," ) o.FileTypes := a + bSettingNeedsSave := True + } + If o.MaximizeAtLaunch = "" ; v0.3.1 -> v0.4.0 + { + o.MaximizeAtLaunch := False + bSettingNeedsSave := True + } + If o.SearchAtLaunch = "" ; v0.4.0 -> v0.5.0 + { + o.SearchAtLaunch := False + o.LastSavedAtLaunch := False + o.ListViewIcons := False + o.ShortcutCreateRemoveListRow := 1 + o.ShortcutCreateUpdateDatabase := 1 + bSettingNeedsSave := True } } Else @@ -730,15 +1114,21 @@ GetSettingsFromFile() SetDefaultSettings() { o := Object() + o.DatabaseSaves := 0 o.FileTypes := [ "exe" ] + o.LastSavedAtLaunch := False + o.ListViewIcons := False o.MaximizeAtLaunch := False o.PersonalFolder := A_StartMenu . "\My shortcuts" o.SearchDirs := [ "C:\Program Files", "C:\Program Files (x86)" ] o.SearchAtLaunch := False o.SearchURL := "https://www.duckduckgo.com/?q=" + o.ShortcutCreateRemoveListRow := 1 + o.ShortcutCreateUpdateDatabase := 1 o.ShortcutDirs := [ A_StartMenu, A_StartMenuCommon ] Return o } + SettingsListDelItem() { Loop @@ -750,12 +1140,12 @@ SettingsListDelItem() } } -SettingsEditListExt( ) +SettingsEditListField( ) { If LV_GetCount( ) { i := LV_GetNext( 0, "F" ) - If i >= 1 + If i = 1 { LV_GetText( Txt, i) If Txt @@ -775,11 +1165,11 @@ SettingsEditListFolder( iSettingsTab ) If LV_GetCount( ) { i := LV_GetNext( 0, "F" ) - If i >= 1 + If i = 1 { - sDir := FileSelectFolder( ) - If sDir - LV_Modify( i, "Col", sDir ) + sPath := FileSelectFolder( ) + If sPath + LV_Modify( i, "Col", sPath ) } } } @@ -844,6 +1234,12 @@ FileGetName( sPath ) Return v } +FileGetExt( sPath ) +{ + SplitPath, sPath, , , v + Return v +} + FileGetShotcutPath( sPath ) { FileGetShortcut, % sPath, v @@ -857,6 +1253,12 @@ FileSelectFolder() Return v } +WinGetWidth( ) +{ + WinGetPos, , , v, , A + Return v +} + FormatInteger( Int ) { vVar := Int @@ -884,4 +1286,19 @@ HasVal(haystack, needle) If !(IsObject(haystack)) Throw Exception("Bad haystack!", -1, haystack) Return 0 -} \ No newline at end of file +} + +SQLiteEscapeString( Str ) +{ + Return "'" . StrReplace( Str, "'", "''") . "'" +} + +ErrorMsg( sMsg ) +{ + MsgBox, 262160, ISMONISM error, % sMsg +} + +DatabaseError( sMsg, iCode ) +{ + ErrorMsg( "SQLite database error:`n`nMsg:`t" . sMsg . "`nCode:`t" . iCode ) +} diff --git a/README.md b/README.md index 85f2987..1908196 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ISMONISM (*In Start Menu Or Not In Start Menu*) is an utility for scanning folders recursively, to find files for which there is no matching shortcut in (a subfolder of) any user-defined folder. -This utility was originally created with the Windows Start Menu in mind. By default it searches for executables (.exe) in the `Program Files` folders. However, both the extension(s) to search for and the search folder(s) are user configurable. +This utility was originally created with the Windows Start Menu in mind. By default it searches for executables (*.exe) in the `Program Files` folders. However, both the extension(s) to search for and the search folder(s) are user configurable. It has the ability to create shortcuts of found items in a user configurable 'personal shortcut folder' (By default a subfolder of the Start Menu). @@ -15,12 +15,15 @@ It has the ability to create shortcuts of found items in a user configurable 'pe ## Using the source code -The script is created with [AutoHotkey](https://www.autohotkey.com/download/) 1.1.32.00 Unicode. +The script is created with [AutoHotkey](https://www.autohotkey.com/download/) 1.1.32.00 - 1.1.33.02 Unicode. -In order to launch `ISMONISM.ahk` from the root of this repository the following scripts are needed in a [Library](https://www.autohotkey.com/docs/Functions.htm#lib): -- `JSON_ToObj.ahk` by Vxe from [here](https://github.com/Jim-VxE/AHK-Lib-JSON_ToObj). -- `JSON_Beautify.ahk` by Joe DF from [here](https://github.com/joedf/JSON_BnU). -- `AutoXYWH.ahk` by tmplinshi & toralf from [here](https://www.autohotkey.com/boards/viewtopic.php?f=6&t=1079). +In order to launch `ISMONISM.ahk` [from the root of this repository](ISMONISM.ahk) the following is needed: +- These scripts are needed in a [Library](https://www.autohotkey.com/docs/Functions.htm#lib): + - `JSON_ToObj.ahk` by Vxe from [here](https://github.com/Jim-VxE/AHK-Lib-JSON_ToObj). + - `JSON_Beautify.ahk` by Joe DF from [here](https://github.com/joedf/JSON_BnU). + - `AutoXYWH.ahk` by tmplinshi & toralf from [here](https://www.autohotkey.com/boards/viewtopic.php?f=6&t=1079). + - `Class_SQLiteDB.ahk` by just me form [here](https://github.com/AHK-just-me/Class_SQLiteDB). +- `sqlite3.dll` from [here](https://www.sqlite.org/download.html#win32) is needed alongside `ISMONISM.ahk`. Be sure to download the right bit-version. ## License and credits @@ -34,10 +37,12 @@ This script/application uses the following components: - `JSON_Beautify.ahk` by [Joe DF](https://joedf.ahkscript.org/about.html), licenced under the [MIT License](https://opensource.org/licenses/MIT). For more information see the top of the [source](ISMOMISM.ahk). - The icon/logo is copyrighted: (C) Iconic Hub, licensed free for commercial use. See the [Iconfinder.com file page](https://www.iconfinder.com/icons/1886938/files_folder_search_storage_icon). -- `HasVal()` by [jNizM](https://github.com/jNizM) & [Lexicos](https://github.com/Lexikos), unlicensed open source code from [here](https://github.com/jNizM/AHK_Scripts/blob/master/src/arrays/HasVal.ahk). For more information see the corresponding [AutoHotkey.com Forum post](https://www.autohotkey.com/boards/viewtopic.php?p=110388#p110388). +- `HasVal()` by [jNizM](https://github.com/jNizM) & [Lexicos](https://github.com/Lexikos), unlicensed open source code from [here](https://github.com/jNizM/AHK_Scripts/blob/master/src/arrays/HasVal.ahk). For more information see the corresponding [AutoHotkey.com forum post](https://www.autohotkey.com/boards/viewtopic.php?p=110388#p110388). - `AutoXYWH()` by [tmplinshi](https://github.com/tmplinshi) & [toralf](https://github.com/Toralf-AHK), unlicensed open source code from from [here](https://www.autohotkey.com/boards/viewtopic.php?f=6&t=1079). - `BetterBox()` by wolf_II, unlicensed open source code from [here](https://www.autohotkey.com/boards/viewtopic.php?p=253712). +- `Class_SQLiteDB` by [just me](https://github.com/AHK-just-me), open source code [released in the public domain](http://unlicense.org/). For more information see the top of the [source](ISMOMISM.ahk). +- `sqlite3.dll` by the [SQLite Developers](https://www.sqlite.org/crew.html), open source software [released in the public domain](https://www.sqlite.org/copyright.html). ## See also -This project was created as part of NANY 2020 (*New Apps for the New Year*), hosted by [DonationCoder.com](https://www.donationcoder.com/). For more information see [this forum topic](https://www.donationcoder.com/forum/index.php?topic=49299). \ No newline at end of file +This project was created as part of NANY 2020 (*New Apps for the New Year*), hosted by [DonationCoder.com](https://www.donationcoder.com/). For more information see the corresponding [DonationCoder.com forum topic](https://www.donationcoder.com/forum/index.php?topic=49299). \ No newline at end of file diff --git a/Resources/Screenshot-01.png b/Resources/Screenshot-01.png index 2d357f0397df51dadc2e771713c359bb27fefb18..6370b069ed9288dbca9d1b757588386a0ad71b08 100644 GIT binary patch literal 44539 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 MAjrRB)4n7B1zi6l(EtDd literal 28654 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ð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 ZxK~&{|hUND9iu= literal 20456 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 Y6t&(2C9ir4^os!EYvfm@wpVZe3+p(fZU6uP