KJohn Posted July 11, 2007 Share Posted July 11, 2007 (edited) [neoSearch - Screenshots - Testimonials - Feedback] Ξ [Koshy John]Release date: 01-01-2009, 00:00 IST (GMT +530) - version 1.86 (forward release)Size: 470KBDownload count: 12,675+Quick Feature List - Super-fast indexing (options to include/exclude paths, schedule, set priority; progress display window) - Six rapidly changing dynamic results that change as you type - Full list of results (re-sortable by name, size, date, path) - Super-Navigation - allows you to rapidly access any file or folder on your system using wildcards and path auto-completion. - Unicode support - foreign language search!USP - It's fast! Ridiculously fast! And it's amazingly light on memory and processor usage (proc spikes only if indexing at maximum speed). - It looks really really good. Vista-esque. Check out the screenshots. - It does not require administrative privileges! Use it ANYWHERE!Websites Hosting neoSearch and many many more... Edited December 20, 2008 by Koshy John Link to comment Share on other sites More sharing options...
James Posted July 11, 2007 Share Posted July 11, 2007 Hmm, this is good. I dont know why you are not allowing the source to be released Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ Link to comment Share on other sites More sharing options...
KJohn Posted July 12, 2007 Author Share Posted July 12, 2007 (edited) Hmm, this is good. I dont know why you are not allowing the source to be released I have, unfortunately, come across a lot of people who've rampantly copied other ppl's work and changed stuff here and there and pass it off as their own. I'll probably release the source or portions of it when I'm done working on it. Pardon my paranoia till then.If there are any feature betterments that you can suggest, that would be great.Oh and it has a built-in uninstaller, so no worries there.To get all the files you want indexed, you will have to change the included paths in the options window.Performance SampleOn my Windows Vista laptop having 122,714 files across 7 partitions (including 8500 songs, 25 movies and around 50 documents, apart from the regular programs):- default settings (only your desktop, start menu, documents folder, etc. as specified by windows are scanned)Indexing: 4.5 secondsSearches: 0.01 secs (max)- everything's included in options and nothing's excluded.Indexing: 3 minutes (long since every MP3 file is opened and ID3 tags scanned, similarly for documents and executables (like author, company, etc.)Searches (dynamic results): 0.04 secs (usually)Searches (all results): 0.17 secs (avg)This was run on a system with the following config:HP Pavilion dv9295eaCore2Duo 2 Ghz2GB DDR2 RAM2x120GB 5400rpm (not RAID; bottleneck coz of lower rpm; it'll run faster on desktops)Windows Vista UltimatePlease note that - it runs faster under XP on the same machine- it'll run faster on systems with 7200 rpm or higher HDDs, especially if there are more files whose meta data has to be read by manually opening them- it'll run faster on systems with faster processors if there are lesser files to be manually openedTipYou can find out the performance figures on you system by viewing the logs. Open up the options window and select logs.DoubtIs it possible to load an icon by updating a control where originally an image was loaded? just wondered coz the ctrl update function for the both are the same. it didn't work for me when i tried, but then i could have been overlooking something.... Edited July 12, 2007 by Koshy John Link to comment Share on other sites More sharing options...
XxXFaNtA Posted July 12, 2007 Share Posted July 12, 2007 Worked good, but after I wanted to Index all my Harddrives it gave me this error (90% complete and took quiet some time..damnit) /[center][/center] Link to comment Share on other sites More sharing options...
KJohn Posted July 12, 2007 Author Share Posted July 12, 2007 Worked good, but after I wanted to Index all my Harddrives it gave me this error (90% complete and took quiet some time..damnit) That error is caused in the section of the code where it tries to read the metadata of files. I haven't implemented it yet but I intend to let users to prevent neoSearch from scanning the metadata of files. It is caused when it is unable to create the object required to open the file. Relevant code: $oShellApp = ObjCreate("shell.application") $oDir = $oShellApp.NameSpace ($fpath) $oFile = $oDir.Parsename ($fname) If you can figure out why it was not able to do so by estimating what file it might hav been trying to index when it reached 90% and testing around that point by including/excluding that path, it would be easier to troubleshoot. If you percieve its too much of a waste of time, please wait while I write a generic fix (maybe by day after tomorrow). I'm a little busy right now with studies for examinations. I will definitely write a fix for this as soon as possible. Thank you for your report. Link to comment Share on other sites More sharing options...
Siao Posted July 12, 2007 Share Posted July 12, 2007 (edited) For me a partition worth ~40gb (~30gb of those are mp3) with ~15k files took 4.5 mins to index. Which is ok, I guess. Though the indexer totally choked on system partition for me, two times tried so far. Even if the logs showed that for whatever smart reason it decided to "heuristically" exclude pretty much whole lot of Program Files folders... that didn't seem to help it much Got to 41% moderately fast (maybe because it was excluding like crazy) and stuck on it, just consuming CPU and updating the tooltip veery slowly (like 30 mins to get to 50%). Edited July 12, 2007 by Siao "be smart, drink your wine" Link to comment Share on other sites More sharing options...
KJohn Posted July 12, 2007 Author Share Posted July 12, 2007 For me a partition worth ~40gb (~30gb of those are mp3) with ~15k files took 4.5 mins to index. Which is ok, I guess.Though the indexer totally choked on system partition for me, two times tried so far. Even if the logs showed that for whatever smart reason it decided to "heuristically" exclude pretty much whole lot of Program Files... that didn't seem to help it much Got to 41% moderately fast (maybe because it was excluding like crazy) and stuck on it, just consuming CPU and updating the tooltip veery slowly (like 30 mins to get to 50%).Quick update: I'm removing the meta-data indexing portion for now. Download again to see if it works.Heuristic exclusion of Program Files basically means that only executables from those folders are indexed. I did that to improve performance. I can remove it if you want but most ppl benefit from it being excluded. Link to comment Share on other sites More sharing options...
Siao Posted July 12, 2007 Share Posted July 12, 2007 (edited) Quick update: I'm removing the meta-data indexing portion for now. Download again to see if it works.Heuristic exclusion of Program Files basically means that only executables from those folders are indexed. I did that to improve performance. I can remove it if you want but most ppl benefit from it being excluded.Now without it that 40gb/15.000 files partition took 1:30 to index (although maybe it reused old index? although I uninstalled the old version).But if meta-data indexing means user could search by metadata, such as song title, then it's a very cool feature to have, and I wouldn't mind longer indexing time. Maybe consider adding "Advanced options", where the user could tweak the engine - turn on/off some of such parameters, and that "heuristic" too (search that wouldn't return all files is imo contradictory to the definition of search as a term, not even talking about practical use here), etc.For some reason now it managed the system partition too, BUT. It excluded most of "Program Files", as you say it does. It excluded whole system dir. Those two make for majority of files on the partition. Other files are just:1.5gb in "Documents and Settings", Temp and a couple of programs installed to the root.1.3gb pagefile and hybernate file.0.8gb of small junk (23.000 files) in Recycler, and that's where the indexer spent majority of time, according to Filemon. Can't say I blame it, because windows explorer takes awhile when opening it too (But quite frankly, excluding Recycled trash would make more sense than excluding data files in program files or system folder.)Indexing time 5:40 min. :\ Edited July 12, 2007 by Siao "be smart, drink your wine" Link to comment Share on other sites More sharing options...
KJohn Posted July 12, 2007 Author Share Posted July 12, 2007 Now without it that 40gb/15.000 files partition took 1:30 to index (although maybe it reused old index? although I uninstalled the old version).But if meta-data indexing means user could search by metadata, such as song title, then it's a very cool feature to have, and I wouldn't mind longer indexing time. Maybe consider adding "Advanced options", where the user could tweak the engine - turn on/off some of such parameters, and that "heuristic" too (search that wouldn't return all files is imo contradictory to the definition of search as a term, not even talking about practical use here), etc.For some reason now it managed the system partition too, BUT. It excluded most of "Program Files", as you say it does. It excluded whole system dir. Those two make for majority of files on the partition. Other files are just:1.5gb in "Documents and Settings", Temp and a couple of programs installed to the root.1.3gb pagefile and hybernate file.0.8gb of small junk (23.000 files) in Recycler, and that's where the indexer spent majority of time, according to Filemon. Can't say I blame it, because windows explorer takes awhile when opening it too (But quite frankly, excluding Recycled trash would make more sense than excluding data files in program files or system folder.)Indexing time 5:40 min. :\I can't believe I spent more than a year on search programs and overlooked the recycle bin!But then in my favour, I NEVER use the recycle bin. I don't know any power users that do. Its just one big copy operation before actually deleting it (if that's the idea).You could really use DiskMax. Check the first post for link to thread.I'll optimize the code soon. And as for why it took only 1:30 : That's coz metadata querying takes A LOT of time. I just removed that feature for the time being.Without metadata indexing, the program is similar to KJSearch - you can try that out for better information while indexing (check the link in the first post). Link to comment Share on other sites More sharing options...
lod3n Posted July 12, 2007 Share Posted July 12, 2007 This forum is called Example Scripts, not Cool EXEs."Rampantly copying other people's work and changing stuff" is how we all learn to be better coders. If you fail to credit the people upon whose work you've built, and instead claim that you built everything from the ground up - well, if you post your source, it's fairly easy to spot other peoples work and call you out on it.If however, you only post portions of code, how am I to know that you are not lifting some of my UDFs somewhere in your super-secret source code?Why don't you make it really really super-secret, and just not post anything? Problem solved for everyone. [font="Fixedsys"][list][*]All of my AutoIt Example Scripts[*]http://saneasylum.com[/list][/font] Link to comment Share on other sites More sharing options...
Skrip Posted July 13, 2007 Share Posted July 13, 2007 (edited) I attempted decompile. And 'The requested file could not be extracted'. He did something to it. Are you really that paranoid about it? Edited July 13, 2007 by Firestorm [left][sub]We're trapped in the belly of this horrible machine.[/sub][sup]And the machine is bleeding to death...[/sup][sup][/sup][/left] Link to comment Share on other sites More sharing options...
KJohn Posted July 13, 2007 Author Share Posted July 13, 2007 (edited) I really have a problem with people not releasing the code. People here give credit when it is due, and by not sharing the code, why should we help you by giving comments and suggestions. Also when you do share the code, we will be able to help, and give advise in a much better way. I agree with you in principle. Here's credit where credit is due. A complete copy of a previous version of the program will be put up in a few minutes. Happy? 1. Reading Meta Data (It was given to me without credit to anyone - the post where I asked for this is probably still in the help section) (I don't have the original copy; I changed it in my program to support Windows Vista and to return only the data i needed) expandcollapse popupFunc getmeta(ByRef $f, ByRef $fpath, ByRef $fname, ByRef $fext, ByRef $fcat, ByRef $fmeta) ;gets the meta information of the file in question ;the meta data retrieved depends on the file category ; ;Parameters: $f = full path of the file ; $fpath = file path ; $fname = file name ; $fext = file extension ; $fcat = category into which the file falls ; * $fmeta = meta information sent back ;categories: ; 2 - executables ; 3 - documents ; 5 - multimedia ; ;Return Value: 0 - in case of error ; 1 - if meta information was retrieved successfully Local $oShellApp;shell application object instance Local $oDir;directory object instance Local $oFile;file object instance $oShellApp = ObjCreate("shell.application") $oDir = $oShellApp.NameSpace ($fpath) $oFile = $oDir.Parsename ($fname) ;BRANCHING OUT BASED ON OPERATING SYSTEM - ONLY FILE META LEFT TO BE OBTAINED ;file meta is a hidden field that won't be displayed to the user ;but its values help in determining search results If @OSVersion = "WIN_VISTA" Then ;source code for Microsoft Windows Vista $fmeta = " ";metadata clearing Switch $fcat Case 2 If $fext = "exe" Then $fmeta = $oDir.GetDetailsOf ($oFile, 35)&" "&$oDir.GetDetailsOf ($oFile, 34)&" "&$oDir.GetDetailsOf ($oFile, 33) ;35 - Program Name ;33 - Company ;34 - Description EndIf Case 3;doc $fmeta = $oDir.GetDetailsOf ($oFile, 21)&" "&$oDir.GetDetailsOf ($oFile, 22)&" "&$oDir.GetDetailsOf ($oFile, 23) ;21 - Title ;22 - Subject ;23 - Category Case 5;mult If $fext = "mus" Then $fmeta = $oDir.GetDetailsOf ($oFile, 21)&" "&$oDir.GetDetailsOf ($oFile, 13)&" "&$oDir.GetDetailsOf ($oFile, 14) ;21 - Song Name ;13 - Artist ;14 - Album Title EndIf Case Else Return 0;unsupported file category EndSwitch ;end of source code for Microsoft Windows Vista ElseIf @OSVersion = "WIN_XP" Or @OSVersion = "WIN_2003" Then ;source code for Microsoft Windows XP and Windows 2003 $fmeta = " ";metadata clearing Switch $fcat Case 2 If $fext = "exe" Then $fmeta = $oDir.GetDetailsOf ($oFile, 30)&" "&$oDir.GetDetailsOf ($oFile, 38) ;30 - Program Name ;38 - Product Name EndIf Case 5;mult If $fext = "mus" Then $fmeta = $oDir.GetDetailsOf ($oFile, 10)&" "&$oDir.GetDetailsOf ($oFile, 16)&" "&$oDir.GetDetailsOf ($oFile, 17) ;10 - Song Name ;16 - Artist ;17 - Album Title EndIf Case Else Return 0;unsupported file category EndSwitch ;end of source code for Microsoft Windows XP and Windows 2003 Else Err(861,"Unsupported Operating System.","This appears to be a poorly hacked version.") EndIf $fmeta = StringStripWS($fmeta,7);to remove spaces introduced by absent meta information If $fmeta = "" Then $fmeta = " " Return 1 EndFunc 2. Talk object (erifash - correct me if I'm wrong) Func _TalkOBJ($s_text) Local $o_speech $o_speech = ObjCreate("SAPI.SpVoice") $o_speech.Speak ($s_text) $o_speech = "" EndFunc;==>_TalkOBJ 3. Round GUI Corners (gafrost - http://www.autoitscript.com/forum/index.php?showtopic=12449) Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3) Dim $pos, $ret, $ret2 $pos = WinGetPos($h_win) $ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long", $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3, "long", $i_y3) If $ret[0] Then $ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1) If $ret2[0] Then Return 1 Else Return 0 EndIf Else Return 0 EndIf EndFunc;==>_GuiRoundCorners Edited July 15, 2007 by Koshy John Link to comment Share on other sites More sharing options...
KJohn Posted July 13, 2007 Author Share Posted July 13, 2007 This forum is called Example Scripts, not Cool EXEs."Rampantly copying other people's work and changing stuff" is how we all learn to be better coders. If you fail to credit the people upon whose work you've built, and instead claim that you built everything from the ground up - well, if you post your source, it's fairly easy to spot other peoples work and call you out on it.If however, you only post portions of code, how am I to know that you are not lifting some of my UDFs somewhere in your super-secret source code?Why don't you make it really really super-secret, and just not post anything? Problem solved for everyone.I just hate to start an argument but I think you neglected to read the small type beneath the forum name. Here it is in bold:A forum to share your cool scripts, User Defined Functions and AutoIt-based applications with others. Link to comment Share on other sites More sharing options...
KJohn Posted July 13, 2007 Author Share Posted July 13, 2007 (edited) Source Code: 1. Main Program [autoit]#NoTrayIcon Opt("MustDeclareVars", 1) ;all variables must be predeclared Opt("RunErrorsFatal", 0) ;silent error Opt("TrayIconDebug", 0) ;no debug information Break(0) ;user cannot exit from tray icon #region - put the standard includes here ; #endregion ;setting compile information Global $title = "neoSearch";window title Global $lname = "neoSearch", $sname = "nS" Global $ver = "0.40", $vdate = "04 June 2007" ;setting path information Global $wp = @AppDataDir & "\neoSearch" Global $tp = @TempDir & "\nstd";neosearch temp dir Global $iep = @ProgramFilesDir & "\Internet Explorer\iexplore.exe" ;master initialization Global $logging = 0;no logging during startup phases startup() ;starting logging procedure If DirCreate($wp &"\logs") == 0 Then err(@ScriptLineNumber, "Unable to create logs folder.","Delete and recreate '" &$wp &"\logs'.") Global $fh_log = FileOpen($wp &"\logs\nSMain " &@YEAR&"-"&@MON&"-"&@MDAY &".txt", 9);file handle to log file $logging = 1;logs only if logging is 1 wlog(@CRLF&"neoSearch startup @ "&@hour&":"&@min&":"&@sec,1) wlog(" User authenticated as: "&@UserName&@CRLF,1) ;starting main program main() Exit ; ============================================================================ ; Main program code ; ============================================================================ Func main() gui_init();initializing gui section html_init();initializing html section ;initializing indexing engine DirCreate($tp) While 1 htmlgen(gstart()) WEnd EndFunc ; including other sections Func gui_init() ;stacks Global $ctrllib[100][2] Global $cltop = 0 Global $resno = 0;number of results on screen Global $maxres = 4;maximum number of results displayable ;coordinates Global $x_res = 0, $y_res = 76 Global $x_low = 0, $y_low = 320 ;search ctrl id Global $i_search;search input box Global $gflag ;results holder Global $resid[4][4] Global $respath[4] Global $oldquery;query entered by the user Global $qfile;filehandle to be opened iconexpand() EndFunc Func gstart() Local $msg;window polling message Local $mouse[5];polling the mouse Local $m_last;ctrlid on in last polling Local $m_click;storing the click state Local $m_eval Local $b_index;index button Local $b_options;options button Local $b_help;help button Local $l_index;index button Local $l_options;options button Local $l_help;help button Local $l_search;search for label Local $b_search;search button Local $winmin; windows min control id Local $winclose;windows close control id wlog("Creating the input gui") If DirCreate ($wp &"\res") = 0 Then Err(@ScriptLineNumber,"Unable to create resource folder.") _GuiRoundCorners(GuiCreate($title, 420, 380,-1, -1 , BitOR(0x80000000,$WS_BORDER)), 0, 0, 15, 15) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUISetBkColor(0xffffff) ;background images FileInstall("res\top.jpg",$wp &"\res\top",1) GUICtrlCreatePic ($wp &"\res\top",0,0,420,52);top background GuiCtrlSetState(-1,$GUI_DISABLE) FileDelete($wp &"\res\top") FileInstall("res\bottom.jpg",$wp &"\res\bottom",1) GUICtrlCreatePic ($wp &"\res\bottom",$x_low,$y_low,420,60);bottom background GuiCtrlSetState(-1,$GUI_DISABLE) FileDelete($wp &"\res\bottom") ;creating common controls FileInstall("res\min0.jpg",$wp &"\res\min0",1) FileInstall("res\min1.jpg",$wp &"\res\min1",1) FileInstall("res\min2.jpg",$wp &"\res\min2",1) $winmin = GUICtrlCreatePic ($wp &"\res\min0",340,0,26,17) CAssign("ctrl_"& $winmin,$wp &"\res\min",2) GUICtrlSetTip($winmin,"Minimize") FileInstall("res\close0.jpg",$wp &"\res\close0",1) FileInstall("res\close1.jpg",$wp &"\res\close1",1) FileInstall("res\close2.jpg",$wp &"\res\close2",1) $winclose = GUICtrlCreatePic ($wp &"\res\close0",365,0,43,17) CAssign("ctrl_"& $winclose,$wp &"\res\close",2) GUICtrlSetTip($winclose,"Close") ;menubar image FileInstall("res\mbar0.jpg",$wp &"\res\mbar0",1) GUICtrlCreatePic ($wp &"\res\mbar0",0,52,420,24) FileDelete($wp &"\res\mbar0") ;menubar buttons FileInstall("res\mbar0.jpg",$wp &"\res\mbar0",1) FileInstall("res\mbar1.jpg",$wp &"\res\mbar1",1) FileInstall("res\mbar2.jpg",$wp &"\res\mbar2",1) ;--index $b_index = GUICtrlCreatePic($wp &"\res\mbar0",218,52,66,24) GuiCtrlSetState(-1,$GUI_DISABLE) CAssign("ctrl_"& $b_index,$wp &"\res\mbar",2) $l_index = GUICtrlCreateLabel ("Index",233,55,40,20) GUICtrlSetFont($l_index,11,400,0,"Tahoma") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) ;--options $b_options = GUICtrlCreatePic($wp &"\res\mbar0",218+66,52,80,24) GuiCtrlSetState(-1,$GUI_DISABLE) CAssign("ctrl_"& $b_options,$wp &"\res\mbar",2) $l_options = GUICtrlCreateLabel ("Options",233+66,55,50,20) GUICtrlSetFont($l_options,11,400,0,"Tahoma") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) ;--help $b_help = GUICtrlCreatePic($wp &"\res\mbar0",218+146,52,56,24) GuiCtrlSetState(-1,$GUI_DISABLE) CAssign("ctrl_"& $b_help,$wp &"\res\mbar",2) $l_help = GUICtrlCreateLabel ("Info",233+146,55,40,20) GUICtrlSetFont($l_help,11,400,0,"Tahoma") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) #region - code by Koshy John ;highlights FileInstall("res\highlight0.jpg",$wp &"\res\highlight0",1) FileInstall("res\highlight1.jpg",$wp &"\res\highlight1",1) FileInstall("res\highlight2.jpg",$wp &"\res\highlight2",1) $resid[0][3] = GUICtrlCreatePic($wp &"\res\highlight0",$x_res,$y_res,420,61) $resid[1][3] = GUICtrlCreatePic($wp &"\res\highlight0",$x_res,$y_res+61,420,61) $resid[2][3] = GUICtrlCreatePic($wp &"\res\highlight0",$x_res,$y_res+2*61,420,61) $resid[3][3] = GUICtrlCreatePic($wp &"\res\highlight0",$x_res,$y_res+3*61,420,61) ;icons $resid[0][0] = GUICtrlCreatePic($wp &"\res\blank",$x_res + 12,$y_res + 6,48,48) $resid[1][0] = GUICtrlCreatePic($wp &"\res\blank",$x_res + 12,$y_res + 1*61 + 6,48,48) $resid[2][0] = GUICtrlCreatePic($wp &"\res\blank",$x_res + 12,$y_res + 2*61 + 6,48,48) $resid[3][0] = GUICtrlCreatePic($wp &"\res\blank",$x_res + 12,$y_res + 3*61 + 6,48,48) ;file names $resid[0][1] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 12,330,20) GUICtrlSetFont($resid[0][1],11,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) $resid[1][1] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 1*61 + 12,330,20) GUICtrlSetFont($resid[1][1],11,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) $resid[2][1] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 2*61 + 12,330,20) GUICtrlSetFont($resid[2][1],11,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) $resid[3][1] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 3*61 + 12,330,20) GUICtrlSetFont($resid[3][1],11,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) ;descriptions $resid[0][2] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 27,330,20) GUICtrlSetFont($resid[0][2],10,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1,0x888888) $resid[1][2] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 1*61 + 27,330,20) GUICtrlSetFont($resid[1][2],10,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1,0x888888) $resid[2][2] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 2*61 + 27,330,20) GUICtrlSetFont($resid[2][2],10,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1,0x888888) $resid[3][2] = GUICtrlCreateLabel (" ",$x_res + 12 + 48 + 12,$y_res + 3*61 + 27,330,20) GUICtrlSetFont($resid[3][2],10,400,0,"Trebuchet MS") GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1,0x888888) #endregion - end of dummy results ;search label $l_search = GUICtrlCreateLabel ("Search for:",$x_low + 31,$y_low + 20,60,20) GUICtrlSetFont($l_search,9,400,0,"Tahoma") GUICtrlSetColor(-1,0xffffff) GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT) ;search input $i_search = GUICtrlCreateInput("",$x_low + 107,$y_low + 15,230,23);search input box GUICtrlSetFont($i_search,10,400,0,"Tahoma") ;search button FileInstall("res\search0.jpg",$wp &"\res\search0",1) FileInstall("res\search1.jpg",$wp &"\res\search1",1) FileInstall("res\search2.jpg",$wp &"\res\search2",1) $b_search = GUICtrlCreatePic ($wp &"\res\search0",$x_low+107+230,$y_low+16,26,22) Local $b_searchproxy = GUICtrlCreateButton("", 800, 800, 0, 0, $BS_DEFPUSHBUTTON) CAssign("ctrl_"& $b_search,$wp &"\res\search",2) GUICtrlSetTip($b_search,"Search") GUISetState() WinSetTrans($title,"",240) If FileExists ($wp &"\data\nsraw.dat") = 0 Then If FileExists ($wp &"\nSindex.exe") = 0 Then FileInstall("index\nSindex.exe",$wp &"\nSindex.exe",1) Run($wp &"\nSindex.exe") sleep(500) If ProcessExists ("nSindex.exe") Then MsgBox(64,$title &" Indexing Engine","No index was found. Indexing has been started.") EndIf While 1 $msg = GUIGetMsg () displayres(GUICtrlRead($i_search)) ;contingencies If $msg = $l_index Then $msg = $b_index If $msg = $l_options Then $msg = $b_options If $msg = $l_help Then $msg = $b_help For $i = 0 To 3 For $j = 0 To 3 If $msg = $resid[$i][$j] Then $msg = $resid[$i][3] Next Next ;hover effects code $mouse = GUIGetCursorInfo() If Not (@error) Then ;contingencies If $mouse[4] = $l_index Then $mouse[4] = $b_index If $mouse[4] = $l_options Then $mouse[4] = $b_options If $mouse[4] = $l_help Then $mouse[4] = $b_help For $i = 0 To 3 For $j = 0 To 3 If $mouse[4] = $resid[$i][$j] Then $mouse[4] = $resid[$i][3] Next Next If $mouse[4] <> $m_last Then ;gui needs update because mouse has affected it $m_eval = CGetVal("ctrl_" &$m_last) If $m_eval <> "" Then GUICtrlSetImage ($m_last,$m_eval &"0");reseting old $m_eval = CGetVal("ctrl_" &$mouse[4]) If $m_eval <> "" Then If $mouse[2] Then GUICtrlSetImage ($mouse[4],$m_eval &"2");clicked new Else GUICtrlSetImage ($mouse[4],$m_eval &"1");hover new EndIf EndIf ElseIf $mouse[2] <> $m_click Then If $mouse[2] Then GUICtrlSetImage ($m_last,$m_eval &"2");clicked old Else GUICtrlSetImage ($m_last,$m_eval &"1");hover old EndIf EndIf If $m_click = 1 And $mouse[2] = 0 Then $msg = $m_last ElseIf CGetVal("ctrl_" &$msg) <> "" Then ContinueLoop EndIf $m_last = $mouse[4] $m_click = $mouse[2] EndIf ;click effects code Select Case $msg = $GUI_EVENT_CLOSE Or $msg = $winclose ;trans out only if the OS is not vista #region - code by Koshy John Local $i = 254 ProcessSetPriority("neoSearch.exe",3) While $i > 0 WinSetTrans($title, "Index", $i) If $i < 50 Then $i = $i - 20 ElseIf $i < 100 Then $i = $i - 18 ElseIf $i < 200 Then $i = $i - 12 Else $i = $i - 8 EndIf Sleep(10) WEnd GUIDelete() #endregion Exit Case $msg = $winmin GUISetState(@SW_MINIMIZE) ;results clicked Case $msg = $resid[0][3] If CGetVal("ctrl_"& $resid[0][3]) == 0 Then sleep(1) Else ShellExecute($respath[0]) EndIf Case $msg = $resid[1][3] If CGetVal("ctrl_"& $resid[1][3]) == 0 Then sleep(1) Else ShellExecute($respath[1]) EndIf Case $msg = $resid[2][3] If CGetVal("ctrl_"& $resid[2][3]) == 0 Then sleep(1) Else ShellExecute($respath[2]) EndIf Case $msg = $resid[3][3] If CGetVal("ctrl_"& $resid[3][3]) == 0 Then sleep(1) Else ShellExecute($respath[3]) EndIf ;search Case $msg = $b_search Or $msg = $b_searchproxy $msg = GUICtrlRead($i_search) If StringStripWS($msg,7) <> "" Then GUIDelete () Return $msg Else GUICtrlSetData($i_search,"Please enter a valid search term...") sleep(1000) GUICtrlSetData($i_search,"") EndIf ;buttons on menu bar Case $msg = $b_index If ProcessExists ("nSindex.exe") = 0 Then If MsgBox(36,$title &" Indexing Engine","Status: Not running"&@CRLF&"Do you want to start indexing?") = 6 Then If FileExists ($wp &"\nSindex.exe") = 0 Then FileInstall("index\nSindex.exe",$wp &"\nSindex.exe",1) Run($wp &"\nSindex.exe") sleep(250) If ProcessExists ("nSindex.exe") = 0 Then MsgBox(64,$title &" Indexing Engine","Unable to start indexing procedures.") If FileExists ($wp &"\data\nsraw.dat") Then ProcessSetPriority ("nSindex.exe",1) EndIf Else If MsgBox(36,$title &" Indexing Engine","Status: Running in the background"&@CRLF&"Do you want to stop indexing?") = 6 Then While ProcessExists ("nSindex.exe") ProcessClose ("nSindex.exe") WEnd sleep (50) DirRemove ($wp &"\temp",1) If ProcessExists ("nSindex.exe") Then MsgBox(64,$title &" Indexing Engine","Unable to stop indexing engine.") EndIf EndIf Case $msg = $b_options If FileExists ($wp &"\paths.txt") = 0 Then FileClose(FileOpen($wp &"\paths.txt",2)) If FileExists ($wp &"\exclude.txt") = 0 Then FileClose(FileOpen($wp &"\exclude.txt",2)) ShellExecuteWait($wp &"\paths.txt") ShellExecuteWait($wp &"\exclude.txt") Case $msg = $b_help MsgBox (64,"About " &$title,"neoSearch" &@CRLF&@CRLF &"version: 1.0"&@CRLF&"compiled on: 25 June 2007" &@CRLF&@CRLF&"Koshy John") EndSelect WEnd wlog("Input GUI closed.") EndFunc Func CAssign($var,$data,$flag) Local $point For $point = 0 To $cltop If $var <> $ctrllib[$point][0] Then ContinueLoop $ctrllib[$point][1] = $data Return Next $ctrllib[$cltop][0] = $var $ctrllib[$cltop][1] = $data $cltop = $cltop + 1 EndFunc Func CGetVal($var) Local $point For $point = 0 To $cltop - 1 If $var <> $ctrllib[$point][0] Then ContinueLoop Return $ctrllib[$point][1] Next Return 0 EndFunc Func iconexpand() DirCreate ($wp &"\res") FileInstall("res\ico\blank.jpg",$wp &"\res\blank",1) FileInstall("res\ico\dir.jpg",$wp &"\res\dir",1) FileInstall("res\ico\doc.jpg",$wp &"\res\doc",1) FileInstall("res\ico\exe.jpg",$wp &"\res\exe",1) FileInstall("res\ico\htm.jpg",$wp &"\res\htm",1) FileInstall("res\ico\img.jpg",$wp &"\res\img",1) FileInstall("res\ico\lnk.jpg",$wp &"\res\lnk",1) FileInstall("res\ico\mov.jpg",$wp &"\res\mov",1) FileInstall("res\ico\mus.jpg",$wp &"\res\mus",1) FileInstall("res\ico\pdf.jpg",$wp &"\res\pdf",1) FileInstall("res\ico\pps.jpg",$wp &"\res\pps",1) FileInstall("res\ico\ppt.jpg",$wp &"\res\ppt",1) FileInstall("res\ico\pub.jpg",$wp &"\res\pub",1) FileInstall("res\ico\rar.jpg",$wp &"\res\rar",1) FileInstall("res\ico\rm.jpg",$wp &"\res\rm",1) FileInstall("res\ico\txt.jpg",$wp &"\res\txt",1) FileInstall("res\ico\vid.jpg",$wp &"\res\vid",1) FileInstall("res\ico\xls.jpg",$wp &"\res\xls",1) FileInstall("res\ico\xps.jpg",$wp &"\res\xps",1) FileInstall("res\ico\zip.jpg",$wp &"\res\zip",1) EndFunc Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3) Dim $pos, $ret, $ret2 $pos = WinGetPos($h_win) $ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long", $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3, "long", $i_y3) If $ret[0] Then $ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1) If $ret2[0] Then Return 1 Else Return 0 EndIf Else Return 0 EndIf EndFunc Func html_init() DirRemove($tp,1) DirCreate($tp) FileInstall("html\dir.jpg",$tp &"\dir.jpg",1) FileInstall("html\doc.jpg",$tp &"\doc.jpg",1) FileInstall("html\exe.jpg",$tp &"\exe.jpg",1) FileInstall("html\lnk.jpg",$tp &"\lnk.jpg",1) FileInstall("html\htm.jpg",$tp &"\htm.jpg",1) FileInstall("html\img.jpg",$tp &"\img.jpg",1) FileInstall("html\mov.jpg",$tp &"\mov.jpg",1) FileInstall("html\mus.jpg",$tp &"\mus.jpg",1) FileInstall("html\pdf.jpg",$tp &"\pdf.jpg",1) FileInstall("html\pps.jpg",$tp &"\pps.jpg",1) FileInstall("html\ppt.jpg",$tp &"\ppt.jpg",1) FileInstall("html\pub.jpg",$tp &"\pub.jpg",1) FileInstall("html\rar.jpg",$tp &"\rar.jpg",1) FileInstall("html\rm.jpg",$tp &"\rm.jpg",1) FileInstall("html\txt.jpg",$tp &"\txt.jpg",1) FileInstall("html\vid.jpg",$tp &"\vid.jpg",1) FileInstall("html\xls.jpg",$tp &"\xls.jpg",1) FileInstall("html\xps.jpg",$tp &"\xps.jpg",1) FileInstall("html\zip.jpg",$tp &"\zip.jpg",1) FileInstall("html\alfamagkj",$tp &"\alfamagkj",1) FileInstall("html\hl91",$tp &"\hl91",1) FileInstall("html\wp.360",$tp &"\wp.360",1) FileInstall("html\xoskel",$tp &"\xoskel",1) FileInstall("html\http404",$tp &"\http404",1) EndFunc Func htmlgen($query) ;code by Koshy John Local $queryS[3] Local $f1 Local $starword Local $tags Local $fcode $query = StringStripWS($query,7) If $query = "" Then Return $qfile = $wp & "\data\" & StringLeft ($query, 2) & ".dat" If FileExists( $qfile) = 0 Then $qfile = $wp & "\data\" & StringLeft($query, 1) & ".dat" If FileExists ($qfile) = 0 Then Return $qfile = FileOpen ($qfile,0) If $qfile = -1 Then Return ;logically splitting the query $queryS = StringSplit ($query," ._-(") FileDelete($tp &"\results.htm") FileInstall("html\results.htm",$tp &"\results.htm",1) Local $fp = FileOpen($tp &"\results.htm",1) Local $timetaken = TimerInit () Local $dfiles = 0 While 1 $starword = FileReadLine ($qfile) If @error Then ExitLoop $tags = FileReadLine ($qfile) FileReadLine ($qfile) FileReadLine ($qfile) FileReadLine ($qfile) FileReadLine ($qfile) FileReadLine ($qfile) FileReadLine ($qfile) $fcode = FileReadLine ($qfile) If StringInStr ($starword, $queryS[1]) = 0 Then ContinueLoop For $i = 1 To $queryS[0] If StringInStr ($tags, $queryS[$i]) = 0 Then ContinueLoop 2 Next $dfiles = $dfiles + 1 FileWriteLine($fp,$fcode) WEnd FileClose($qfile) FileWriteLine($fp, "</table>") If $dfiles == 0 Then FileWriteLine($fp, "<p></p><center><img src=http404><font face=Tahoma size=4 color=gray> No folders or files of this type were found! </font><p><font face=Tahoma size=2 color=lightgray>Try some other file type(s) or search term(s). </font></p></center>") FileWriteLine($fp, "<p></p><p></p><div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext .75pt;padding:0in 0in 1.0pt 0in'></div><p></p><p></p>") FileWriteLine($fp, "<table border=0 cellspacing=0 cellpadding=0><tr><td><font size=2><b> You searched for '" & $query & "' on " & @ComputerName & ".</b></font></td></tr>") FileWriteLine($fp, "<tr><td><font size=2><b> Files/Folders Found: " & $dfiles & "</b></font></td></tr>") FileWriteLine($fp, "<tr><td><font size=2><b> Time Taken : "&Round(TimerDiff($timetaken) / 1000, 2)&" secs</b></font></td></tr></table><p></p>") FileWriteLine($fp, "<font size=2><b> Edited July 24, 2007 by Koshy John Link to comment Share on other sites More sharing options...
KJohn Posted July 14, 2007 Author Share Posted July 14, 2007 where r the guys who promised a lot of "comments and suggestions" if i shared the source? seriously... Link to comment Share on other sites More sharing options...
randallc Posted July 14, 2007 Share Posted July 14, 2007 Hi,I wasn't one to eg you on!.But it looks interesting, though doesn't run; if you're still develping it, i would lose the DOS; see my post today;Best, RandallSearchMiner ; modified Search Engine, non-Dos option for Extended characters in file names ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW Link to comment Share on other sites More sharing options...
KJohn Posted July 14, 2007 Author Share Posted July 14, 2007 Hi,I wasn't one to eg you on!.But it looks interesting, though doesn't run; if you're still develping it, i would lose the DOS; see my post today;Best, RandallSearchMiner ; modified Search Engine, non-Dos option for Extended characters in file namesI think it handles extended characters.. if what you suggest by extended characters is u (micro) and the like...I did one without the DOS using a recursive version of FileFindFirstFile/NextFile but the script used to crash (hard crash) when AutoIt tried to recurse into directories like "System Volume Information" and a couple of other directories like that within the windows folder itself (didn't want surprise directories on some random user's computer to ruin the experience). I stuck to DOS for that reason and for the reason that it was much faster. I've run thousands of test cases over the last year and this is as far as I've come so far.Your code is very impressive. Off hand I would say the differences between our code is that I've decided to allocate more time to indexing so as to get Google Desktop like search times while you've reduced indexing time but with a penalty of about 30 times the time taken for a single search.Would you like to compete? Link to comment Share on other sites More sharing options...
randallc Posted July 15, 2007 Share Posted July 15, 2007 (edited) I think it handles extended characters.. if what you suggest by extended characters is u (micro) and the like...I am interested to hear that, as I understood DOS did not retrurn characters over the 128 ANSI limit, and that has been my experience. , but I can't get either yor souce code to run, nor your exe file to return any search results? How can I test it, and how have others got it to work?but the script used to crash (hard crash) when AutoIt tried to recurse into directories like "System Volume Information"Not sure if i have that problem , as I can't find that folder; is it only a problem if your explorer settings allow hidden files, perhaps? This is important to me as I need to know if my new suggested _FileListToArray will work from Autoit; can you try it on your "System Volume Information" and let me know? - Does the inbuilt UDF for "_FileListToArray" also crash in that directory on your computer? [PS - see note and example files with times in the zip; "[actually faster than Dos when not recursed, and some functions even on recursed!]"] _FileListToArray new proposalI stuck to DOS for that reason and for the reason that it was much fasterMuch faster if you are doing the index before the search; not a lot faster for just the list?; but i can't tell yet , again, as i can't get yours to run. Although I have that in DOS at present as an alternative index option , but obviously()? without then extended charactersI've decided to allocate more time to indexingAs well, that means that the file details are not up to date if you retrieve them from the index and not on the fly?.. 30 times the time taken for a single search.is that true if my search only returns file/ directory/ extension? i thought it would be just as fast unless you requested those details as an option in the extended character search?Would you like to compete?Maybe not so much compete as comparae "oranges with oranges" to see what are really the differences. Obviously, also, i have not set up to allow only "slected" folders to be nominated for the indexing, and that makes a huge difference in your program? Best, randall [PS I had the same trouble as with mine; no results if I hadn't already set the search diectory and started the indexing; I saw some indexing ocurring, so thought it had already occurred] Below doc for some comparisons and further comments; Search._mydoc_Compare_KoshyJohnSearch.doc ( 49.5K ) Number of downloads: 5Some timing errors ;see same file in my next post Edited July 15, 2007 by randallc ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW Link to comment Share on other sites More sharing options...
KJohn Posted July 15, 2007 Author Share Posted July 15, 2007 is that true if my search only returns file/ directory/ extension? i thought it would be just as fast unless you requested those details as an option in the extended character search?Can you tell me what is the best way to get the fastest results from searchMiner?It took 2 minutes and 1.5 seconds for a single search for the term mp3 on my computer after building the index.The same search takes 0.64 seconds using neoSearch (189 times more if you consider this particular search).The options selected were:- Drives All (Off Fixed)- Not in folder names- Ext Char Search(Didn't change any of the default values in the input boxes: 4,0.5,0)A quick question: When i start indexing, it immediately goes to 'Writing index to drive C (Step 6 of 6)'... what are the previous 5 steps?When I turned off Ext Char Search, no results were returned for any search term. If it helps, I am running Windows Vista Ultimate and all drives are formatted NTFS.P.S. "System Volume Information" is the hidden access restricted folder in the root directory of any fixed drive that Windows accesses. It is in this directory that your system restore points and other volume based information are stored.P.P.S. While extended characters are cool to names files with in the tech world, I am of the opinion that having extended characters indexed is not worth it as the average Joe user will never (99%) type in a query containing an extended charater in an English based operating system. If you can give me a file name containing extended characters, I can create such a file and search for it using neoSearch and get back to you. (Please remember neoSearch is designed for only XP, 2003 and Vista: cmd.exe might return extended characters in these)And if you are looking for absolute performance, I've hit my personal peak in KJSearch (u'll find the link in the first post; I've stopped working on that one; I'm concentrating my efforts on a more user friendly interface now). Thanks for the detailed comparison! I know where I can improve now. You won't see the results soon since I have exams till the end of the month and industrial training for 2 weeks after that.One last question: Is your index similar to the results of 'dir /s /b' in DOS? And you do absolutely no post processing to the index after that? It that's the case, the same process takes 10 seconds using DOS (in neoSearch) while your method takes 21 seconds (stopwatch the listing process in neoSearch to verify). Link to comment Share on other sites More sharing options...
randallc Posted July 15, 2007 Share Posted July 15, 2007 (edited) Can you tell me what is the best way to get the fastest results from searchMiner?Only a quick concatenate so there is a large file for all directories... It that's the case, the same process takes 10 seconds using DOS (in neoSearch) while your method takes 21 secondsAs I keep forgetting, I have to turn computer on and off again between each index else there is a fast memory cahe of DOS (and probably AutoIt ) dir commands so the timing is inexact; even so, you are probably right about there being a difference of that order. I have had to ch the timing comments in the word doc for that reason.. Best, randall Edited July 15, 2007 by randallc ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now