From be61956a54aab6708cf1b7a4b3dea5d56bc8fa68 Mon Sep 17 00:00:00 2001 From: Miguel Date: Mon, 1 Sep 2025 14:39:44 +0200 Subject: [PATCH] Definicion terminada --- Everything-SDK/dll/Everything32.dll | Bin 0 -> 88232 bytes Everything-SDK/dll/Everything64.dll | Bin 0 -> 90280 bytes .../example/CSharp/Form1.Designer.cs | 83 + Everything-SDK/example/CSharp/Form1.cs | 260 ++ Everything-SDK/example/CSharp/Form1.resx | 120 + Everything-SDK/example/CSharp/Program.cs | 23 + .../example/CSharp/Properties/AssemblyInfo.cs | 33 + .../CSharp/Properties/Resources.Designer.cs | 71 + .../example/CSharp/Properties/Resources.resx | 117 + .../CSharp/Properties/Settings.Designer.cs | 30 + .../CSharp/Properties/Settings.settings | 7 + .../example/CSharp/WindowsApplication1.csproj | 94 + .../example/CSharp/WindowsApplication1.sln | 26 + .../example/CSharp/WindowsApplication1.suo | Bin 0 -> 16896 bytes ...wsApplication1.csproj.FileListAbsolute.txt | 10 + .../Debug/WindowsApplication1.Form1.resources | Bin 0 -> 180 bytes ...pplication1.Properties.Resources.resources | Bin 0 -> 180 bytes ...Application1.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/x86/Debug/WindowsApplication1.exe | Bin 0 -> 20480 bytes .../obj/x86/Debug/WindowsApplication1.pdb | Bin 0 -> 19968 bytes .../example/CSharpx64/Form1.Designer.cs | 83 + Everything-SDK/example/CSharpx64/Form1.cs | 228 ++ Everything-SDK/example/CSharpx64/Form1.resx | 120 + Everything-SDK/example/CSharpx64/Program.cs | 23 + .../CSharpx64/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../CSharpx64/Properties/Resources.resx | 117 + .../CSharpx64/Properties/Settings.Designer.cs | 30 + .../CSharpx64/Properties/Settings.settings | 7 + .../CSharpx64/WindowsApplication1.csproj | 110 + .../example/CSharpx64/WindowsApplication1.sln | 32 + .../example/CSharpx64/WindowsApplication1.suo | Bin 0 -> 17408 bytes ...wsApplication1.csproj.FileListAbsolute.txt | 20 + .../Debug/WindowsApplication1.Form1.resources | Bin 0 -> 180 bytes ...pplication1.Properties.Resources.resources | Bin 0 -> 180 bytes ...Application1.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/x64/Debug/WindowsApplication1.exe | Bin 0 -> 16384 bytes .../obj/x64/Debug/WindowsApplication1.pdb | Bin 0 -> 19968 bytes .../Debug/WindowsApplication1.Form1.resources | Bin 0 -> 180 bytes ...pplication1.Properties.Resources.resources | Bin 0 -> 180 bytes ...Application1.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../Everything C# CLI Example by dipique.URL | 5 + .../WindowsApplication1.sln | 20 + .../WindowsApplication1/Form1.Designer.vb | 72 + .../WindowsApplication1/Form1.resx | 120 + .../WindowsApplication1/Form1.vb | 74 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../WindowsApplication1.vbproj | 107 + .../WindowsApplication1.vbproj.user | 16 + ...wsApplication1.vbproj.FileListAbsolute.txt | 30 + Everything-SDK/example/dll.test.c | Bin 0 -> 2370 bytes Everything-SDK/example/dll.test.cpp | Bin 0 -> 802 bytes Everything-SDK/include/Everything.h | 253 ++ Everything-SDK/ipc/everything_ipc.h | 903 +++++ Everything-SDK/src/Everything.c | 3299 +++++++++++++++++ Everything-SDK/src/Everything32.def | 102 + Everything-SDK/src/Everything64.def | 103 + Everything-SDK/vs/sdk.dll.test.c.vcproj | 793 ++++ Everything-SDK/vs/sdk.dll.test.cpp.vcproj | 792 ++++ Everything-SDK/vs/sdk.dll.vcproj | 760 ++++ README.md | 13 +- SPECIFICATION.md | 245 ++ TECHNICAL_QUESTIONS.md | 111 + autobackups/SPECIFICATION.md | 258 ++ autobackups/config.json | 60 + autobackups/projects.json | 62 + autobackups/requirements.txt | 32 + config.json | 60 +- projects.json | 58 + requirements.txt | 40 +- 76 files changed, 10454 insertions(+), 25 deletions(-) create mode 100644 Everything-SDK/dll/Everything32.dll create mode 100644 Everything-SDK/dll/Everything64.dll create mode 100644 Everything-SDK/example/CSharp/Form1.Designer.cs create mode 100644 Everything-SDK/example/CSharp/Form1.cs create mode 100644 Everything-SDK/example/CSharp/Form1.resx create mode 100644 Everything-SDK/example/CSharp/Program.cs create mode 100644 Everything-SDK/example/CSharp/Properties/AssemblyInfo.cs create mode 100644 Everything-SDK/example/CSharp/Properties/Resources.Designer.cs create mode 100644 Everything-SDK/example/CSharp/Properties/Resources.resx create mode 100644 Everything-SDK/example/CSharp/Properties/Settings.Designer.cs create mode 100644 Everything-SDK/example/CSharp/Properties/Settings.settings create mode 100644 Everything-SDK/example/CSharp/WindowsApplication1.csproj create mode 100644 Everything-SDK/example/CSharp/WindowsApplication1.sln create mode 100644 Everything-SDK/example/CSharp/WindowsApplication1.suo create mode 100644 Everything-SDK/example/CSharp/obj/WindowsApplication1.csproj.FileListAbsolute.txt create mode 100644 Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.Form1.resources create mode 100644 Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.Properties.Resources.resources create mode 100644 Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.csproj.GenerateResource.Cache create mode 100644 Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.exe create mode 100644 Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.pdb create mode 100644 Everything-SDK/example/CSharpx64/Form1.Designer.cs create mode 100644 Everything-SDK/example/CSharpx64/Form1.cs create mode 100644 Everything-SDK/example/CSharpx64/Form1.resx create mode 100644 Everything-SDK/example/CSharpx64/Program.cs create mode 100644 Everything-SDK/example/CSharpx64/Properties/AssemblyInfo.cs create mode 100644 Everything-SDK/example/CSharpx64/Properties/Resources.Designer.cs create mode 100644 Everything-SDK/example/CSharpx64/Properties/Resources.resx create mode 100644 Everything-SDK/example/CSharpx64/Properties/Settings.Designer.cs create mode 100644 Everything-SDK/example/CSharpx64/Properties/Settings.settings create mode 100644 Everything-SDK/example/CSharpx64/WindowsApplication1.csproj create mode 100644 Everything-SDK/example/CSharpx64/WindowsApplication1.sln create mode 100644 Everything-SDK/example/CSharpx64/WindowsApplication1.suo create mode 100644 Everything-SDK/example/CSharpx64/obj/WindowsApplication1.csproj.FileListAbsolute.txt create mode 100644 Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.Form1.resources create mode 100644 Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.Properties.Resources.resources create mode 100644 Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.csproj.GenerateResource.Cache create mode 100644 Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.exe create mode 100644 Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.pdb create mode 100644 Everything-SDK/example/CSharpx64/obj/x86/Debug/WindowsApplication1.Form1.resources create mode 100644 Everything-SDK/example/CSharpx64/obj/x86/Debug/WindowsApplication1.Properties.Resources.resources create mode 100644 Everything-SDK/example/CSharpx64/obj/x86/Debug/WindowsApplication1.csproj.GenerateResource.Cache create mode 100644 Everything-SDK/example/Everything C# CLI Example by dipique.URL create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1.sln create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.Designer.vb create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.resx create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.vb create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.Designer.vb create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.myapp create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/AssemblyInfo.vb create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.Designer.vb create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.resx create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.Designer.vb create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.settings create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj.user create mode 100644 Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/obj/WindowsApplication1.vbproj.FileListAbsolute.txt create mode 100644 Everything-SDK/example/dll.test.c create mode 100644 Everything-SDK/example/dll.test.cpp create mode 100644 Everything-SDK/include/Everything.h create mode 100644 Everything-SDK/ipc/everything_ipc.h create mode 100644 Everything-SDK/src/Everything.c create mode 100644 Everything-SDK/src/Everything32.def create mode 100644 Everything-SDK/src/Everything64.def create mode 100644 Everything-SDK/vs/sdk.dll.test.c.vcproj create mode 100644 Everything-SDK/vs/sdk.dll.test.cpp.vcproj create mode 100644 Everything-SDK/vs/sdk.dll.vcproj create mode 100644 SPECIFICATION.md create mode 100644 TECHNICAL_QUESTIONS.md create mode 100644 autobackups/SPECIFICATION.md create mode 100644 autobackups/config.json create mode 100644 autobackups/projects.json create mode 100644 autobackups/requirements.txt create mode 100644 projects.json diff --git a/Everything-SDK/dll/Everything32.dll b/Everything-SDK/dll/Everything32.dll new file mode 100644 index 0000000000000000000000000000000000000000..2fff80e27bd5211866f5e1edab57051ed913b8fe GIT binary patch literal 88232 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 literal 0 HcmV?d00001 diff --git a/Everything-SDK/dll/Everything64.dll b/Everything-SDK/dll/Everything64.dll new file mode 100644 index 0000000000000000000000000000000000000000..1988411016317907512ebdf492745024f52eaf96 GIT binary patch literal 90280 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 + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(250, 12); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(84, 20); + this.button1.TabIndex = 0; + this.button1.Text = "Search"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // listBox1 + // + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(12, 38); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(762, 498); + this.listBox1.TabIndex = 2; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(232, 20); + this.textBox1.TabIndex = 3; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(786, 553); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.button1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.TextBox textBox1; + } +} + diff --git a/Everything-SDK/example/CSharp/Form1.cs b/Everything-SDK/example/CSharp/Form1.cs new file mode 100644 index 0000000..b9f1fb9 --- /dev/null +++ b/Everything-SDK/example/CSharp/Form1.cs @@ -0,0 +1,260 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace WindowsApplication1 +{ + public partial class Form1 : Form + { + const int EVERYTHING_OK = 0; + const int EVERYTHING_ERROR_MEMORY = 1; + const int EVERYTHING_ERROR_IPC = 2; + const int EVERYTHING_ERROR_REGISTERCLASSEX = 3; + const int EVERYTHING_ERROR_CREATEWINDOW = 4; + const int EVERYTHING_ERROR_CREATETHREAD = 5; + const int EVERYTHING_ERROR_INVALIDINDEX = 6; + const int EVERYTHING_ERROR_INVALIDCALL = 7; + + const int EVERYTHING_REQUEST_FILE_NAME = 0x00000001; + const int EVERYTHING_REQUEST_PATH = 0x00000002; + const int EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME = 0x00000004; + const int EVERYTHING_REQUEST_EXTENSION = 0x00000008; + const int EVERYTHING_REQUEST_SIZE = 0x00000010; + const int EVERYTHING_REQUEST_DATE_CREATED = 0x00000020; + const int EVERYTHING_REQUEST_DATE_MODIFIED = 0x00000040; + const int EVERYTHING_REQUEST_DATE_ACCESSED = 0x00000080; + const int EVERYTHING_REQUEST_ATTRIBUTES = 0x00000100; + const int EVERYTHING_REQUEST_FILE_LIST_FILE_NAME = 0x00000200; + const int EVERYTHING_REQUEST_RUN_COUNT = 0x00000400; + const int EVERYTHING_REQUEST_DATE_RUN = 0x00000800; + const int EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED = 0x00001000; + const int EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME = 0x00002000; + const int EVERYTHING_REQUEST_HIGHLIGHTED_PATH = 0x00004000; + const int EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME = 0x00008000; + + const int EVERYTHING_SORT_NAME_ASCENDING = 1; + const int EVERYTHING_SORT_NAME_DESCENDING = 2; + const int EVERYTHING_SORT_PATH_ASCENDING = 3; + const int EVERYTHING_SORT_PATH_DESCENDING = 4; + const int EVERYTHING_SORT_SIZE_ASCENDING = 5; + const int EVERYTHING_SORT_SIZE_DESCENDING = 6; + const int EVERYTHING_SORT_EXTENSION_ASCENDING = 7; + const int EVERYTHING_SORT_EXTENSION_DESCENDING = 8; + const int EVERYTHING_SORT_TYPE_NAME_ASCENDING = 9; + const int EVERYTHING_SORT_TYPE_NAME_DESCENDING = 10; + const int EVERYTHING_SORT_DATE_CREATED_ASCENDING = 11; + const int EVERYTHING_SORT_DATE_CREATED_DESCENDING = 12; + const int EVERYTHING_SORT_DATE_MODIFIED_ASCENDING = 13; + const int EVERYTHING_SORT_DATE_MODIFIED_DESCENDING = 14; + const int EVERYTHING_SORT_ATTRIBUTES_ASCENDING = 15; + const int EVERYTHING_SORT_ATTRIBUTES_DESCENDING = 16; + const int EVERYTHING_SORT_FILE_LIST_FILENAME_ASCENDING = 17; + const int EVERYTHING_SORT_FILE_LIST_FILENAME_DESCENDING = 18; + const int EVERYTHING_SORT_RUN_COUNT_ASCENDING = 19; + const int EVERYTHING_SORT_RUN_COUNT_DESCENDING = 20; + const int EVERYTHING_SORT_DATE_RECENTLY_CHANGED_ASCENDING = 21; + const int EVERYTHING_SORT_DATE_RECENTLY_CHANGED_DESCENDING = 22; + const int EVERYTHING_SORT_DATE_ACCESSED_ASCENDING = 23; + const int EVERYTHING_SORT_DATE_ACCESSED_DESCENDING= 24; + const int EVERYTHING_SORT_DATE_RUN_ASCENDING = 25; + const int EVERYTHING_SORT_DATE_RUN_DESCENDING = 26; + + const int EVERYTHING_TARGET_MACHINE_X86 = 1; + const int EVERYTHING_TARGET_MACHINE_X64 = 2; + const int EVERYTHING_TARGET_MACHINE_ARM = 3; + + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern UInt32 Everything_SetSearchW(string lpSearchString); + [DllImport("Everything32.dll")] + public static extern void Everything_SetMatchPath(bool bEnable); + [DllImport("Everything32.dll")] + public static extern void Everything_SetMatchCase(bool bEnable); + [DllImport("Everything32.dll")] + public static extern void Everything_SetMatchWholeWord(bool bEnable); + [DllImport("Everything32.dll")] + public static extern void Everything_SetRegex(bool bEnable); + [DllImport("Everything32.dll")] + public static extern void Everything_SetMax(UInt32 dwMax); + [DllImport("Everything32.dll")] + public static extern void Everything_SetOffset(UInt32 dwOffset); + + [DllImport("Everything32.dll")] + public static extern bool Everything_GetMatchPath(); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetMatchCase(); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetMatchWholeWord(); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetRegex(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetMax(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetOffset(); + [DllImport("Everything32.dll")] + public static extern IntPtr Everything_GetSearchW(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetLastError(); + + [DllImport("Everything32.dll")] + public static extern bool Everything_QueryW(bool bWait); + + [DllImport("Everything32.dll")] + public static extern void Everything_SortResultsByPath(); + + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetNumFileResults(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetNumFolderResults(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetNumResults(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetTotFileResults(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetTotFolderResults(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetTotResults(); + [DllImport("Everything32.dll")] + public static extern bool Everything_IsVolumeResult(UInt32 nIndex); + [DllImport("Everything32.dll")] + public static extern bool Everything_IsFolderResult(UInt32 nIndex); + [DllImport("Everything32.dll")] + public static extern bool Everything_IsFileResult(UInt32 nIndex); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern void Everything_GetResultFullPathName(UInt32 nIndex, StringBuilder lpString, UInt32 nMaxCount); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultPath(UInt32 nIndex); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultFileName(UInt32 nIndex); + + [DllImport("Everything32.dll")] + public static extern void Everything_Reset(); + [DllImport("Everything32.dll")] + public static extern void Everything_CleanUp(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetMajorVersion(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetMinorVersion(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetRevision(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetBuildNumber(); + [DllImport("Everything32.dll")] + public static extern bool Everything_Exit(); + [DllImport("Everything32.dll")] + public static extern bool Everything_IsDBLoaded(); + [DllImport("Everything32.dll")] + public static extern bool Everything_IsAdmin(); + [DllImport("Everything32.dll")] + public static extern bool Everything_IsAppData(); + [DllImport("Everything32.dll")] + public static extern bool Everything_RebuildDB(); + [DllImport("Everything32.dll")] + public static extern bool Everything_UpdateAllFolderIndexes(); + [DllImport("Everything32.dll")] + public static extern bool Everything_SaveDB(); + [DllImport("Everything32.dll")] + public static extern bool Everything_SaveRunHistory(); + [DllImport("Everything32.dll")] + public static extern bool Everything_DeleteRunHistory(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetTargetMachine(); + + // Everything 1.4 + [DllImport("Everything32.dll")] + public static extern void Everything_SetSort(UInt32 dwSortType); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetSort(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetResultListSort(); + [DllImport("Everything32.dll")] + public static extern void Everything_SetRequestFlags(UInt32 dwRequestFlags); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetRequestFlags(); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetResultListRequestFlags(); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultExtension(UInt32 nIndex); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetResultSize(UInt32 nIndex, out long lpFileSize); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetResultDateCreated(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetResultDateModified(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetResultDateAccessed(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetResultAttributes(UInt32 nIndex); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultFileListFileName(UInt32 nIndex); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetResultRunCount(UInt32 nIndex); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetResultDateRun(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything32.dll")] + public static extern bool Everything_GetResultDateRecentlyChanged(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultHighlightedFileName(UInt32 nIndex); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultHighlightedPath(UInt32 nIndex); + [DllImport("Everything32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultHighlightedFullPathAndFileName(UInt32 nIndex); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_GetRunCountFromFileName(string lpFileName); + [DllImport("Everything32.dll")] + public static extern bool Everything_SetRunCountFromFileName(string lpFileName, UInt32 dwRunCount); + [DllImport("Everything32.dll")] + public static extern UInt32 Everything_IncRunCountFromFileName(string lpFileName); + + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + UInt32 i; + + // set the search + Everything_SetSearchW(textBox1.Text); + + // use our own custom scrollbar... + // Everything_SetMax(listBox1.ClientRectangle.Height / listBox1.ItemHeight); + // Everything_SetOffset(VerticalScrollBarPosition...); + + // request name and size + Everything_SetRequestFlags(EVERYTHING_REQUEST_FILE_NAME | EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_DATE_MODIFIED | EVERYTHING_REQUEST_SIZE); + + Everything_SetSort(13); + + // execute the query + Everything_QueryW(true); + + // sort by path + // Everything_SortResultsByPath(); + + // clear the old list of results + listBox1.Items.Clear(); + + // set the window title + Text = textBox1.Text + " - " + Everything_GetNumResults() + " Results"; + + // loop through the results, adding each result to the listbox. + for (i = 0; i < Everything_GetNumResults(); i++) + { + long date_modified; + long size; + + Everything_GetResultDateModified(i, out date_modified); + Everything_GetResultSize(i, out size); + + // add it to the list box + listBox1.Items.Insert((int)i, "Size: " + size.ToString() + " Date Modified: " + DateTime.FromFileTime(date_modified).Year + "/" + DateTime.FromFileTime(date_modified).Month + "/" + DateTime.FromFileTime(date_modified).Day + " " + DateTime.FromFileTime(date_modified).Hour + ":" + DateTime.FromFileTime(date_modified).Minute.ToString("D2") + " Filename: " + Marshal.PtrToStringUni(Everything_GetResultFileName(i))); + } + } + } +} \ No newline at end of file diff --git a/Everything-SDK/example/CSharp/Form1.resx b/Everything-SDK/example/CSharp/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Everything-SDK/example/CSharp/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Everything-SDK/example/CSharp/Program.cs b/Everything-SDK/example/CSharp/Program.cs new file mode 100644 index 0000000..28a5e17 --- /dev/null +++ b/Everything-SDK/example/CSharp/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace WindowsApplication1 +{ + + static class Program + { + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Everything-SDK/example/CSharp/Properties/AssemblyInfo.cs b/Everything-SDK/example/CSharp/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2542af8 --- /dev/null +++ b/Everything-SDK/example/CSharp/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WindowsApplication1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WindowsApplication1")] +[assembly: AssemblyCopyright("Copyright © 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("00417877-82e2-4176-8724-bbe7870ee348")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Everything-SDK/example/CSharp/Properties/Resources.Designer.cs b/Everything-SDK/example/CSharp/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0b78595 --- /dev/null +++ b/Everything-SDK/example/CSharp/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsApplication1.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsApplication1.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Everything-SDK/example/CSharp/Properties/Resources.resx b/Everything-SDK/example/CSharp/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Everything-SDK/example/CSharp/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Everything-SDK/example/CSharp/Properties/Settings.Designer.cs b/Everything-SDK/example/CSharp/Properties/Settings.Designer.cs new file mode 100644 index 0000000..d021597 --- /dev/null +++ b/Everything-SDK/example/CSharp/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsApplication1.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Everything-SDK/example/CSharp/Properties/Settings.settings b/Everything-SDK/example/CSharp/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Everything-SDK/example/CSharp/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Everything-SDK/example/CSharp/WindowsApplication1.csproj b/Everything-SDK/example/CSharp/WindowsApplication1.csproj new file mode 100644 index 0000000..b2219ea --- /dev/null +++ b/Everything-SDK/example/CSharp/WindowsApplication1.csproj @@ -0,0 +1,94 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1} + WinExe + Properties + WindowsApplication1 + WindowsApplication1 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Everything-SDK/example/CSharp/WindowsApplication1.sln b/Everything-SDK/example/CSharp/WindowsApplication1.sln new file mode 100644 index 0000000..3fab4be --- /dev/null +++ b/Everything-SDK/example/CSharp/WindowsApplication1.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsApplication1", "WindowsApplication1.csproj", "{FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|x86.ActiveCfg = Debug|x86 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|x86.Build.0 = Debug|x86 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|Any CPU.Build.0 = Release|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|x86.ActiveCfg = Release|x86 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Everything-SDK/example/CSharp/WindowsApplication1.suo b/Everything-SDK/example/CSharp/WindowsApplication1.suo new file mode 100644 index 0000000000000000000000000000000000000000..079f001afaac1b351c4c5ff23cae31ed24b81e7d GIT binary patch literal 16896 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 literal 0 HcmV?d00001 diff --git a/Everything-SDK/example/CSharp/obj/WindowsApplication1.csproj.FileListAbsolute.txt b/Everything-SDK/example/CSharp/obj/WindowsApplication1.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..05d51e0 --- /dev/null +++ b/Everything-SDK/example/CSharp/obj/WindowsApplication1.csproj.FileListAbsolute.txt @@ -0,0 +1,10 @@ +D:\dev\everything\sdk\example\CSharp\bin\x86\Debug\WindowsApplication1.exe +D:\dev\everything\sdk\example\CSharp\bin\x86\Debug\WindowsApplication1.pdb +D:\dev\everything\sdk\example\CSharp\obj\x86\Debug\ResolveAssemblyReference.cache +D:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.Form1.resources +D:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.Properties.Resources.resources +D:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.csproj.GenerateResource.Cache +D:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.exe +D:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.pdb +C:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.exe +C:\dev\everything\sdk\example\CSharp\obj\x86\Debug\WindowsApplication1.pdb diff --git a/Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.Form1.resources b/Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYbk&hFbc^W^!S=l!DKH^=Gz?Hkt&;b!xHMD9hLiqIx|{B$gMr-b ziyaa0HE&AU;}3vuAv=OOWD>GO0kV{a1-u?B4Y)oL2q!9=g5>WbWg&6KE~@^ka>8Y* zg04cGQNZ|&Q>=DX{-da}aj`%Lvv_2*rt4`K7{3$v$%%=E;({ujsWSX`YmGKUCq~Gz z;3jH+CR-nw*<4t#EhZfq31`;aC<(UC3m57Rsx({-uY}G4J+D&nf}mM1yX*Kb*Jg?4 z<0t$N=lciTKom6z8v#Q|(Bg~>A!~j?dgfpqx$}_>Gr3IwWAf-WtW!A}8#@~m-z`2| zOr$|cBO(Ym86>Ek%BIojysZ{3bIQ_Y)T~x0n2tK3t5&I?<_l{7P)40Gb9!>ss@PVq z>)`>SK@p&VyZ$BPkM<@hVugqjsi5$U>z>a5sJMG@Gf+{icJ)S0>dz&Waf8m6LOoxU zh{ORrx>rb=6c490d+c*mHnptD31QOrS2DKlrsjY^^!lpT<7ZdYh0N-!HK zuxo{KcMKA1u8N&vT`b%dCzoKZfjp!FiEFvCg97bA`hl;XVy^}D9L5hS_ByWObr@C5 zCw6WXR}<^GnQ}LasPALEjVtZzKr*jipj+s!XyRqx7u-0yagBWgOW|eRC$2R&E+AGT zH&GV|>Hh;lW&1+%v|gJhz{U9e*7Oc>WkHm=;by+#$5urNkN6(*>CP)_|zC|;uw zvs!$Gc%ta7c4ADlI;whOg8DXFpmuIdU+;AVg=#NR z$vEgC7?$7%&G3U~ph|%KM-4(V`(}v1kEA9zF^MH07~Z~)Jtw@~eF7#d5;HrwFXg%~ zqpesOU0c=U$>=%@r$fajqb=+?;fJ7xcrv=)Iw6UPE^e-J^R=;^+bJB8BPT!!d(T*o z5RRC;S%|{xPR7Err>ntL4Q=1qu|rARA~~1><`AG;F$c^EYbTC*!vEJ^g-&go$;xBM z?*@6!dwJA-0CqP(EL>($x50{?6xrdgLChEZTmzZIilNU$;#?>r8c5#Io;Z&&e&PgGV&9<)G^(% z^JZaxXR@9DcB!e7;gl?We?c!fmS*fyhf5PiK6^x;A2rYDh5ZwI_iB5xdv59I?%J)l z@9W;Obg)vv$<^?#RY=h-0OU9YU z9^}p>OkbsQz+R+_6sIe67VX~>uZb9~S1y8{kgyvtPJbQz^I)7-ht8tj9ZH1abXVwh zz}G@A0{*Ln+ryD?oOVliILvfS!e5r~Hzd3y;a^GkwuGSwOWqvW5Xn+1g0pI}A|sJF zeO1CsfMNQ_$hQGS^c=X`qGzF7NAx0QKNdX{Z6XUWMvs6Jrxzsm4axnfr2hi-7;S5~ zNatx3&jvj=M8elo94j5;#&|}1B)l!Q0pm`|x*_4iu@^&O`bO+E5vI$4ar!&ZWAx+L zMQKUbj?y#4YTAt47=ms2Z#CUU!_)wav)xxy4!l(uX)Bc>SpaVps0l3nH_+el@>QH$ zA1|*I47WfblF{>|tQ+qb~L=F!o9pds&$zJYo-f9TiUGTd_dsB_3VSSYcNKOiP{wocN52Be1?)#PSVORyx48y8P=kH02Ad7uU)ARY zUp~a6yLSuo&dX=pL=Q>q zSECPv9>)rK!^6H7dJ5P-d)U`Qyn6maVi)N7P#IpqQQ~?$4ncp2#~|qPhrlb6{N$HTVTS6haqs`PH z-laYv#CY^DU_SahHF}iU=nyF7=w%Y(%b>3pPehNFNTTE&~7bbyi--C|Wk z9m*?f!j_t%!;(I8_uCV+kkZ@?r&(O$pcu^) zu4qxBSZf<`uS5)r!fRRq*H99$g}MMY&^|zw_5*IkC#WQCq1%-t-A#`HuAmzMucw`W zU6TH3x)b#j*?>nRB_rXT5@sd+3_S#{O~0;~RqPR8L!|q;2q+4CCMcuNPYLe}$Um0=e?RmGpb2=GLfa5=6xxp1BIqW- zry7D{72T#FK8tJUv@9EGPL|E|uq>~oXJxsLUY6y0dR>;+)7!Gdt3-g?Z=@DkZlXQ1 z+(KztZlgP8c@q_7*-8({awk0|%Qm_s%bV$nEIa5&vg{%#hkp0aW?Al~1G4O<&&l%B zG%L&fbU~H}=oyqj(M#W#c#1w?yv!@9`Wgn}=69DWkk9$5rMY>lmiDbBa^2#P8<@f2 zQ92Q-_?t7=$K0?*bn8(wS2Fa^(20B@XU^Ka#Ui$inuE<{M^c~D3Hv}t?tqpP7`Du! zZaI0~rh}$6)3IDHdvPioi=rwg{D6|y=_>CUNsmqy8~V_M{617iatcZ?oRA3Jnv=m=F| z10y3tBd3lI932|DV<|m7oLWj8890>Aj1G*X275D^fs;!GQX>PsqXQ?>$NGm(d>D81 zFogP-a?{7gdI!_}XuDj`9yirHIOv-xWzH1Mf?ja&cy)u)u(6}%3%W&FpJP*h-Y%Lj zZMu+m@|uzVf?jDxeI>^+3p62%4jRncPMb^XtY2c;uL)ptSMos6#J7wlabPDz|ou=(E(nr7XYSk?;Wq0g@CBtB29n)s?8gqi}`boj*weZ5{dH$&s z!r>Wz5D2-i=9Qp!R4Zsx7|ZfFz&t)!m8NPB}ktb(G6`**6amkM%;#Sf=+%SZ{(e-Y5LtA(hL}Hl+ zWlDBYFXRTbd9#Fd=O*WVOPl2e!)CtV5PR*Q>Fy;Y!fTE)=v-oz%BVJxF60o)xq)29 zZt{^TG3|C+hr^XLBjd~)dY_g(lQIoAJQke8S|JDfl9tPPYn5}AuO>I=t%4?JIZ)s^ zba6PgrWXl!7pUY%AyFbq5{&MJd;^YdG|l z%W?ET$n%UhtXq>%(Zl);BaPf`RXP1a8tCdw<_v=jEKSa@Zn&cfcV3j6<@}eM^>WR` z2`%qX!L==#$dfE8Kqh6v$uJRE-6D5`B<=2QpcW~f#+jr|DFY*7r{HvTdQq0`hldNA zjV++JG<55jS-|tMYMpI#zNnMu*<5!Y8eG$1?4V`NcoaX5$dFh;&T2*pdxKmao3}m- zyVTkhxQLN)urMey+B-UJ;ox+^<*T-qCG;nN%Pgm#@m;;b??C8%^VU*}%KD4Q?O! zbIfmaz{eJBfwJNtcoxktH=Gfu!Kh}(CL}y?4UcC7$ulHR1r^oL-{Fd<^MgQmv<74Z0 zzxiMw+!V#RQd2YlU4l_mlrR%;I?gX5L4Jz~1{g3g$cIirK5Gi{5fd6W22~*xRIbIn z9`_AFoFT>mgu)<-whHbB+;QCKTPRErT!}{T{ugc96b-A2*wC~M?OSoTu|};7+Hlq< zfJ3oX25mfCJOt3Fb2S=5!+89ppd&}~S-QtOmN=@abT!H&wa7+Y*XEDe44I5;S8={dQ>~X^erAJVgpZ9&w zO^%wTfvF(GL+5#3oH>7E;_a#;-X{k>uZ9{gG?rhMgItcVp_yLRIv zOo$zZ)(L8=Y#G!)ds$j759bsMn2pfRo0%cv?Aiwz+6_B zTLJ_O1Q#ibf&AY|vxjDJzk*LVue1@3Wco8NwmjLuRP;+?##G8r_B@%eLR(!)~w>VIdRwc+`e1J<*s3T8GVz*+yv1me-QAl0@qa^ zt1bO+$}aU(%CrXNbh$N@Z^gPU^96H1*hXrPD^`b}01NQf1vo8HxmFqZ9fE&$zJ$(l zhjE|m0YHGOT!G!Fj!}kA0S+KOXK*?vq2wC65-SU9fQLu{R zk*HtN#$*;ch|FLh-lvf}CXpBT+KMwhcq=l22C5DILI#lnbSZcm3rIjG2U47Orl8T{ zo^F*g?U=Xwx0@!|2FO5b(AJmlm)RyO`zcm36_4}rG8+G!A5p8)-P=sbP-C0B3-I+;NkTos;s1abhoM5cMh9Q%dI7c{!sgWO)aDE~TmT zGy;H1ozgmpb#zkdHRQEptFm6cof!L{>c{qW^L`E)J`0T&X8UpHOSD_sxwfCh)?RFD zKDovhFnEy-`^>-t44TKR|GRcDNByc>pl*S>1?m>4TcB=%x&`VMs9T_Jfw~1gSr)(x zE&o2OTy?hd$x^VcP2B=@3)C%8w?N$jbqmxjP`5zc0(A@2El{^W-2!zB{BJGrUt;+G AnE(I) literal 0 HcmV?d00001 diff --git a/Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.pdb b/Everything-SDK/example/CSharp/obj/x86/Debug/WindowsApplication1.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3d2a3bc84a05bc14d4da4475f4967b7757c168b4 GIT binary patch literal 19968 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 Y@lGNQDQKW51>Q7kS_5ef^e+wk7ln??O8@`> literal 0 HcmV?d00001 diff --git a/Everything-SDK/example/CSharpx64/Form1.Designer.cs b/Everything-SDK/example/CSharpx64/Form1.Designer.cs new file mode 100644 index 0000000..5798bd0 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Form1.Designer.cs @@ -0,0 +1,83 @@ +namespace WindowsApplication1 +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(250, 12); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(84, 20); + this.button1.TabIndex = 0; + this.button1.Text = "Search"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // listBox1 + // + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(12, 38); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(322, 199); + this.listBox1.TabIndex = 2; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(232, 20); + this.textBox1.TabIndex = 3; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(349, 251); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.button1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.TextBox textBox1; + } +} + diff --git a/Everything-SDK/example/CSharpx64/Form1.cs b/Everything-SDK/example/CSharpx64/Form1.cs new file mode 100644 index 0000000..0e7a7a9 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Form1.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace WindowsApplication1 +{ + public partial class Form1 : Form + { + const int EVERYTHING_OK = 0; + const int EVERYTHING_ERROR_MEMORY = 1; + const int EVERYTHING_ERROR_IPC = 2; + const int EVERYTHING_ERROR_REGISTERCLASSEX = 3; + const int EVERYTHING_ERROR_CREATEWINDOW = 4; + const int EVERYTHING_ERROR_CREATETHREAD = 5; + const int EVERYTHING_ERROR_INVALIDINDEX = 6; + const int EVERYTHING_ERROR_INVALIDCALL = 7; + + const int EVERYTHING_REQUEST_FILE_NAME = 0x00000001; + const int EVERYTHING_REQUEST_PATH = 0x00000002; + const int EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME = 0x00000004; + const int EVERYTHING_REQUEST_EXTENSION = 0x00000008; + const int EVERYTHING_REQUEST_SIZE = 0x00000010; + const int EVERYTHING_REQUEST_DATE_CREATED = 0x00000020; + const int EVERYTHING_REQUEST_DATE_MODIFIED = 0x00000040; + const int EVERYTHING_REQUEST_DATE_ACCESSED = 0x00000080; + const int EVERYTHING_REQUEST_ATTRIBUTES = 0x00000100; + const int EVERYTHING_REQUEST_FILE_LIST_FILE_NAME = 0x00000200; + const int EVERYTHING_REQUEST_RUN_COUNT = 0x00000400; + const int EVERYTHING_REQUEST_DATE_RUN = 0x00000800; + const int EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED = 0x00001000; + const int EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME = 0x00002000; + const int EVERYTHING_REQUEST_HIGHLIGHTED_PATH = 0x00004000; + const int EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME = 0x00008000; + + const int EVERYTHING_SORT_NAME_ASCENDING = 1; + const int EVERYTHING_SORT_NAME_DESCENDING = 2; + const int EVERYTHING_SORT_PATH_ASCENDING = 3; + const int EVERYTHING_SORT_PATH_DESCENDING = 4; + const int EVERYTHING_SORT_SIZE_ASCENDING = 5; + const int EVERYTHING_SORT_SIZE_DESCENDING = 6; + const int EVERYTHING_SORT_EXTENSION_ASCENDING = 7; + const int EVERYTHING_SORT_EXTENSION_DESCENDING = 8; + const int EVERYTHING_SORT_TYPE_NAME_ASCENDING = 9; + const int EVERYTHING_SORT_TYPE_NAME_DESCENDING = 10; + const int EVERYTHING_SORT_DATE_CREATED_ASCENDING = 11; + const int EVERYTHING_SORT_DATE_CREATED_DESCENDING = 12; + const int EVERYTHING_SORT_DATE_MODIFIED_ASCENDING = 13; + const int EVERYTHING_SORT_DATE_MODIFIED_DESCENDING = 14; + const int EVERYTHING_SORT_ATTRIBUTES_ASCENDING = 15; + const int EVERYTHING_SORT_ATTRIBUTES_DESCENDING = 16; + const int EVERYTHING_SORT_FILE_LIST_FILENAME_ASCENDING = 17; + const int EVERYTHING_SORT_FILE_LIST_FILENAME_DESCENDING = 18; + const int EVERYTHING_SORT_RUN_COUNT_ASCENDING = 19; + const int EVERYTHING_SORT_RUN_COUNT_DESCENDING = 20; + const int EVERYTHING_SORT_DATE_RECENTLY_CHANGED_ASCENDING = 21; + const int EVERYTHING_SORT_DATE_RECENTLY_CHANGED_DESCENDING = 22; + const int EVERYTHING_SORT_DATE_ACCESSED_ASCENDING = 23; + const int EVERYTHING_SORT_DATE_ACCESSED_DESCENDING = 24; + const int EVERYTHING_SORT_DATE_RUN_ASCENDING = 25; + const int EVERYTHING_SORT_DATE_RUN_DESCENDING = 26; + + const int EVERYTHING_TARGET_MACHINE_X86 = 1; + const int EVERYTHING_TARGET_MACHINE_X64 = 2; + const int EVERYTHING_TARGET_MACHINE_ARM = 3; + + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern UInt32 Everything_SetSearchW(string lpSearchString); + [DllImport("Everything64.dll")] + public static extern void Everything_SetMatchPath(bool bEnable); + [DllImport("Everything64.dll")] + public static extern void Everything_SetMatchCase(bool bEnable); + [DllImport("Everything64.dll")] + public static extern void Everything_SetMatchWholeWord(bool bEnable); + [DllImport("Everything64.dll")] + public static extern void Everything_SetRegex(bool bEnable); + [DllImport("Everything64.dll")] + public static extern void Everything_SetMax(UInt32 dwMax); + [DllImport("Everything64.dll")] + public static extern void Everything_SetOffset(UInt32 dwOffset); + + [DllImport("Everything64.dll")] + public static extern bool Everything_GetMatchPath(); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetMatchCase(); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetMatchWholeWord(); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetRegex(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetMax(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetOffset(); + [DllImport("Everything64.dll")] + public static extern IntPtr Everything_GetSearchW(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetLastError(); + + [DllImport("Everything64.dll")] + public static extern bool Everything_QueryW(bool bWait); + + [DllImport("Everything64.dll")] + public static extern void Everything_SortResultsByPath(); + + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetNumFileResults(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetNumFolderResults(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetNumResults(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetTotFileResults(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetTotFolderResults(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetTotResults(); + [DllImport("Everything64.dll")] + public static extern bool Everything_IsVolumeResult(UInt32 nIndex); + [DllImport("Everything64.dll")] + public static extern bool Everything_IsFolderResult(UInt32 nIndex); + [DllImport("Everything64.dll")] + public static extern bool Everything_IsFileResult(UInt32 nIndex); + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern void Everything_GetResultFullPathName(UInt32 nIndex, StringBuilder lpString, UInt32 nMaxCount); + [DllImport("Everything64.dll")] + public static extern void Everything_Reset(); + + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultFileName(UInt32 nIndex); + + // Everything 1.4 + [DllImport("Everything64.dll")] + public static extern void Everything_SetSort(UInt32 dwSortType); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetSort(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetResultListSort(); + [DllImport("Everything64.dll")] + public static extern void Everything_SetRequestFlags(UInt32 dwRequestFlags); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetRequestFlags(); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetResultListRequestFlags(); + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultExtension(UInt32 nIndex); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetResultSize(UInt32 nIndex, out long lpFileSize); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetResultDateCreated(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetResultDateModified(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetResultDateAccessed(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetResultAttributes(UInt32 nIndex); + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultFileListFileName(UInt32 nIndex); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetResultRunCount(UInt32 nIndex); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetResultDateRun(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything64.dll")] + public static extern bool Everything_GetResultDateRecentlyChanged(UInt32 nIndex, out long lpFileTime); + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultHighlightedFileName(UInt32 nIndex); + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultHighlightedPath(UInt32 nIndex); + [DllImport("Everything64.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr Everything_GetResultHighlightedFullPathAndFileName(UInt32 nIndex); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_GetRunCountFromFileName(string lpFileName); + [DllImport("Everything64.dll")] + public static extern bool Everything_SetRunCountFromFileName(string lpFileName, UInt32 dwRunCount); + [DllImport("Everything64.dll")] + public static extern UInt32 Everything_IncRunCountFromFileName(string lpFileName); + + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + UInt32 i; + + // set the search + Everything_SetSearchW(textBox1.Text); + + // use our own custom scrollbar... + // Everything_SetMax(listBox1.ClientRectangle.Height / listBox1.ItemHeight); + // Everything_SetOffset(VerticalScrollBarPosition...); + + // request name and size + Everything_SetRequestFlags(EVERYTHING_REQUEST_FILE_NAME | EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_DATE_MODIFIED | EVERYTHING_REQUEST_SIZE); + + Everything_SetSort(13); + + // execute the query + Everything_QueryW(true); + + // sort by path + // Everything_SortResultsByPath(); + + // clear the old list of results + listBox1.Items.Clear(); + + // set the window title + Text = textBox1.Text + " - " + Everything_GetNumResults() + " Results"; + + // loop through the results, adding each result to the listbox. + for (i = 0; i < Everything_GetNumResults(); i++) + { + long date_modified; + long size; + + Everything_GetResultDateModified(i, out date_modified); + Everything_GetResultSize(i, out size); + + // add it to the list box + listBox1.Items.Insert((int)i, "Size: " + size.ToString() + " Date Modified: " + DateTime.FromFileTime(date_modified).Year + "/" + DateTime.FromFileTime(date_modified).Month + "/" + DateTime.FromFileTime(date_modified).Day + " " + DateTime.FromFileTime(date_modified).Hour + ":" + DateTime.FromFileTime(date_modified).Minute.ToString("D2") + " Filename: " + Marshal.PtrToStringUni(Everything_GetResultFileName(i))); + } + } + } +} \ No newline at end of file diff --git a/Everything-SDK/example/CSharpx64/Form1.resx b/Everything-SDK/example/CSharpx64/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Everything-SDK/example/CSharpx64/Program.cs b/Everything-SDK/example/CSharpx64/Program.cs new file mode 100644 index 0000000..28a5e17 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace WindowsApplication1 +{ + + static class Program + { + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Everything-SDK/example/CSharpx64/Properties/AssemblyInfo.cs b/Everything-SDK/example/CSharpx64/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2542af8 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WindowsApplication1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WindowsApplication1")] +[assembly: AssemblyCopyright("Copyright © 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("00417877-82e2-4176-8724-bbe7870ee348")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Everything-SDK/example/CSharpx64/Properties/Resources.Designer.cs b/Everything-SDK/example/CSharpx64/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0b78595 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsApplication1.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsApplication1.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Everything-SDK/example/CSharpx64/Properties/Resources.resx b/Everything-SDK/example/CSharpx64/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Everything-SDK/example/CSharpx64/Properties/Settings.Designer.cs b/Everything-SDK/example/CSharpx64/Properties/Settings.Designer.cs new file mode 100644 index 0000000..d021597 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsApplication1.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Everything-SDK/example/CSharpx64/Properties/Settings.settings b/Everything-SDK/example/CSharpx64/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Everything-SDK/example/CSharpx64/WindowsApplication1.csproj b/Everything-SDK/example/CSharpx64/WindowsApplication1.csproj new file mode 100644 index 0000000..bc13428 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/WindowsApplication1.csproj @@ -0,0 +1,110 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1} + WinExe + Properties + WindowsApplication1 + WindowsApplication1 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Everything-SDK/example/CSharpx64/WindowsApplication1.sln b/Everything-SDK/example/CSharpx64/WindowsApplication1.sln new file mode 100644 index 0000000..bd0b1b2 --- /dev/null +++ b/Everything-SDK/example/CSharpx64/WindowsApplication1.sln @@ -0,0 +1,32 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsApplication1", "WindowsApplication1.csproj", "{FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|x64.ActiveCfg = Debug|x64 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|x64.Build.0 = Debug|x64 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|x86.ActiveCfg = Debug|x86 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Debug|x86.Build.0 = Debug|x86 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|Any CPU.Build.0 = Release|Any CPU + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|x64.ActiveCfg = Release|x64 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|x64.Build.0 = Release|x64 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|x86.ActiveCfg = Release|x86 + {FAB4597B-1FE6-4D40-8CD9-49BA8664C3B1}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Everything-SDK/example/CSharpx64/WindowsApplication1.suo b/Everything-SDK/example/CSharpx64/WindowsApplication1.suo new file mode 100644 index 0000000000000000000000000000000000000000..b34188d835913a532ae2635726805e276296fa57 GIT binary patch literal 17408 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 Qpc;W{1ga7Em5RXs0E(gV?EnA( literal 0 HcmV?d00001 diff --git a/Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.pdb b/Everything-SDK/example/CSharpx64/obj/x64/Debug/WindowsApplication1.pdb new file mode 100644 index 0000000000000000000000000000000000000000..9afe2eb0b1dfeeb356d4cb461baf83c3edab2b1f GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/Everything-SDK/example/CSharpx64/obj/x86/Debug/WindowsApplication1.Form1.resources b/Everything-SDK/example/CSharpx64/obj/x86/Debug/WindowsApplication1.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYbk&hFbc^W^!S=l!DKH^=Gz?Hkt&;b!xHMD9hLiqIx|{B$gMr-b ziyaa0HE&AU;}3vuAv=OOWD>GO0kV{a1-u?B4Y)oL2q!9=g5>WbWg&6KE~@^ka>8Y* zg04cGQNZ|&Q>=DX{-da}aj`%Lvv_2*rt4`K7{3$v$%%=E;({ujsWSX`YmGKUCq~Gz z;3jH+CR-nw*<4t#EhZfq31`;aC<(UC3m57Rsx({-uY}G4J+D&nf}mM1yX*Kb*Jg?4 z<0t$N=lciTKom6z8v#Q|(Bg~>A!~j?dgfpqx$}_>Gr3IwWAf-WtW!A}8#@~m-z`2| zOr$|cBO(Ym8 _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.Button1 = New System.Windows.Forms.Button + Me.TextBox1 = New System.Windows.Forms.TextBox + Me.ListBox1 = New System.Windows.Forms.ListBox + Me.SuspendLayout() + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(524, 98) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(100, 24) + Me.Button1.TabIndex = 0 + Me.Button1.Text = "Button1" + Me.Button1.UseVisualStyleBackColor = True + ' + 'TextBox1 + ' + Me.TextBox1.Location = New System.Drawing.Point(50, 102) + Me.TextBox1.Name = "TextBox1" + Me.TextBox1.Size = New System.Drawing.Size(468, 20) + Me.TextBox1.TabIndex = 1 + ' + 'ListBox1 + ' + Me.ListBox1.FormattingEnabled = True + Me.ListBox1.Location = New System.Drawing.Point(50, 155) + Me.ListBox1.Name = "ListBox1" + Me.ListBox1.Size = New System.Drawing.Size(574, 394) + Me.ListBox1.TabIndex = 2 + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(822, 796) + Me.Controls.Add(Me.ListBox1) + Me.Controls.Add(Me.TextBox1) + Me.Controls.Add(Me.Button1) + Me.Name = "Form1" + Me.Text = "Form1" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Button1 As System.Windows.Forms.Button + Friend WithEvents TextBox1 As System.Windows.Forms.TextBox + Friend WithEvents ListBox1 As System.Windows.Forms.ListBox + +End Class diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.resx b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.vb b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.vb new file mode 100644 index 0000000..1254750 --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/Form1.vb @@ -0,0 +1,74 @@ +' Add an Imports statement at the top of the class, structure, or +' module that uses the DllImport attribute. + +Public Class Form1 + + Public Declare Unicode Function Everything_SetSearchW Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal search As String) As UInt32 + Public Declare Unicode Function Everything_SetRequestFlags Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal dwRequestFlags As UInt32) As UInt32 + Public Declare Unicode Function Everything_QueryW Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal bWait As Integer) As Integer + Public Declare Unicode Function Everything_GetNumResults Lib "d:\dev\everything\sdk\dll\Everything32.dll" () As UInt32 + Public Declare Unicode Function Everything_GetResultFileNameW Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal index As UInt32) As IntPtr + Public Declare Unicode Function Everything_GetLastError Lib "d:\dev\everything\sdk\dll\Everything32.dll" () As UInt32 + Public Declare Unicode Function Everything_GetResultFullPathNameW Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal index As UInt32, ByVal buf As System.Text.StringBuilder, ByVal size As UInt32) As UInt32 + Public Declare Unicode Function Everything_GetResultSize Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal index As UInt32, ByRef size As UInt64) As Integer + Public Declare Unicode Function Everything_GetResultDateModified Lib "d:\dev\everything\sdk\dll\Everything32.dll" (ByVal index As UInt32, ByRef ft As UInt64) As Integer + + Public Const EVERYTHING_REQUEST_FILE_NAME = &H1 + Public Const EVERYTHING_REQUEST_PATH = &H00000002 + Public Const EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME = &H00000004 + Public Const EVERYTHING_REQUEST_EXTENSION = &H00000008 + Public Const EVERYTHING_REQUEST_SIZE = &H00000010 + Public Const EVERYTHING_REQUEST_DATE_CREATED = &H00000020 + Public Const EVERYTHING_REQUEST_DATE_MODIFIED = &H00000040 + Public Const EVERYTHING_REQUEST_DATE_ACCESSED = &H00000080 + Public Const EVERYTHING_REQUEST_ATTRIBUTES = &H00000100 + Public Const EVERYTHING_REQUEST_FILE_LIST_FILE_NAME = &H00000200 + Public Const EVERYTHING_REQUEST_RUN_COUNT = &H00000400 + Public Const EVERYTHING_REQUEST_DATE_RUN = &H00000800 + Public Const EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED = &H00001000 + Public Const EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME = &H00002000 + Public Const EVERYTHING_REQUEST_HIGHLIGHTED_PATH = &H00004000 + Public Const EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME = &H00008000 + + Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click + + Everything_SetSearchW(TextBox1.Text) + Everything_SetRequestFlags(EVERYTHING_REQUEST_FILE_NAME Or EVERYTHING_REQUEST_PATH Or EVERYTHING_REQUEST_SIZE Or EVERYTHING_REQUEST_DATE_MODIFIED) + Everything_QueryW(1) + + Dim NumResults As UInt32 + Dim i As UInt32 + Dim filename As New System.Text.StringBuilder(260) + Dim size As UInt64 + Dim ftdm As UInt64 + Dim DateModified As System.DateTime + + NumResults = Everything_GetNumResults() + + ListBox1.Items.Clear() + + If NumResults > 0 Then + For i = 0 To NumResults - 1 + + Everything_GetResultFullPathNameW(i, filename, filename.Capacity) + Everything_GetResultSize(i, size) + Everything_GetResultDateModified(i, ftdm) + + ' Everything uses &HFFFFFFFFFFFFFFFFUL for unknown dates + ' System.DateTime.FromFileTime does not like this value + ' so set the DateModified to Nothing when Everything returns &HFFFFFFFFFFFFFFFFUL + If ftdm = &HFFFFFFFFFFFFFFFFUL Then + DateModified = Nothing + Else + DateModified = System.DateTime.FromFileTime(ftdm) + + End If + + ' ListBox1.Items.Insert(i, filename.ToString() & " size:" & size & " date:" & DateModified.ToString()) + ListBox1.Items.Insert(i, System.Runtime.InteropServices.Marshal.PtrToStringUni(Everything_GetResultFileNameW(i)) & " Size:" & size & " Date Modified:" & DateModified.ToString()) + Next + End If + + End Sub + +End Class diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.Designer.vb b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.Designer.vb new file mode 100644 index 0000000..bd9a7b2 --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.5485 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.WindowsApplication1.Form1 + End Sub + End Class +End Namespace diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.myapp b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.myapp new file mode 100644 index 0000000..0f12f32 --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Form1 + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/AssemblyInfo.vb b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7e4fe9b --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.Designer.vb b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.Designer.vb new file mode 100644 index 0000000..219539d --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.5485 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WindowsApplication1.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.resx b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.Designer.vb b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.Designer.vb new file mode 100644 index 0000000..e721471 --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.5485 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WindowsApplication1.My.MySettings + Get + Return Global.WindowsApplication1.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.settings b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj new file mode 100644 index 0000000..5fef255 --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj @@ -0,0 +1,107 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {0D15552C-AEB4-4B1A-8CCD-1E533557EDA1} + WinExe + WindowsApplication1.My.MyApplication + WindowsApplication1 + WindowsApplication1 + WindowsForms + + + true + full + true + true + bin\Debug\ + WindowsApplication1.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + x86 + + + pdbonly + false + true + true + bin\Release\ + WindowsApplication1.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj.user b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj.user new file mode 100644 index 0000000..c8dfea1 --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/WindowsApplication1.vbproj.user @@ -0,0 +1,16 @@ + + + publish\ + + + + + + + + + 0 + en-US + false + + \ No newline at end of file diff --git a/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/obj/WindowsApplication1.vbproj.FileListAbsolute.txt b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/obj/WindowsApplication1.vbproj.FileListAbsolute.txt new file mode 100644 index 0000000..49f8c8e --- /dev/null +++ b/Everything-SDK/example/Visual Basic/WindowsApplication1/WindowsApplication1/obj/WindowsApplication1.vbproj.FileListAbsolute.txt @@ -0,0 +1,30 @@ +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\ResolveAssemblyReference.cache +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.Resources.resources +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.vbproj.GenerateResource.Cache +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.pdb +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.xml +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.exe +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.xml +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.pdb +C:\Users\Administrator\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.Form1.resources +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.exe +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.xml +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.pdb +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\ResolveAssemblyReference.cache +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.Form1.resources +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.Resources.resources +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.vbproj.GenerateResource.Cache +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.pdb +C:\Private\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.xml +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.exe +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.xml +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.pdb +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.pdb +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.xml +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\ResolveAssemblyReference.cache +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.Form1.resources +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.Resources.resources +C:\dev\everything\sdk\example\Visual Basic\WindowsApplication1\WindowsApplication1\obj\Debug\WindowsApplication1.vbproj.GenerateResource.Cache diff --git a/Everything-SDK/example/dll.test.c b/Everything-SDK/example/dll.test.c new file mode 100644 index 0000000000000000000000000000000000000000..965dd7c178ee73888d622a1ef04a409325de0acb GIT binary patch literal 2370 zcmd6oU2hUm5QgV=P5ciV45lKXUKnF+H6bn3Mnq)MMnkeepoN6i%3}Tg>*_P->|vMF z1?ipH?AO_ucix$I=Io!}x8;`Xa)i>5D;djNzR5x+GL;KCWA#`%a=?ATw}fkEZ>^Ht zH~T!nGL#tzAGi;|85tY9KH|$vY6eHK?wCkJ);?pWp8F=wi1m-yP2|}I+Y%Nv>3bOc z!dw)qw8YZ<7DPLTp+4`JtF8>F!I=!D$~iG_p;S2R`jy->7(dK4kV~vB)+rbziR4gT zn0#%$`e2vv*-Py;=b(^ZjPDpudevAO{RGSw{t30XAkNSrE8`h!dE6rP9AX#5Pt?~k zYT`Q}!vySxyyfi5JL$=Dv~J6h#Jo4;wY=dPu^vm4FD>3;zSrd?Pd_=g@$6u)$lKaS zM0yW)RPa0y#FC_IT2_F02wfzmv6_K=mD(d9pSAVkS)|E;co;z**;O z%)|}gaud%>Jak{o$Fg0eQMXkjN*Qa_s&aRkL8gMDWw<`ykXje-=SBKA(`?&mw%VoB zoZ=eG<#jXUPFjs3#EiW^Z;rSQGcZh*}LYu%U{IiZU4A+_8{GvR{yT+`sDiGp^j1|x@}Ci&gkfW z{|~agNPYdi$n{hpF literal 0 HcmV?d00001 diff --git a/Everything-SDK/example/dll.test.cpp b/Everything-SDK/example/dll.test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4ee78b6022acc25edc7b3908dd952c195e55edf6 GIT binary patch literal 802 zcmaKqPfx-?5XIlMCVqzoFQ5j!i(W*HiNXKzLP8J}nouyMV2tsrtG}70fTo&Fcek@M z@4b1uU!R-W&>kb!iROAzrZ?ppD$!U2qUXBOF>B7*lzEjOvZiZiVLv1@)(C`0)-E`G z&k6B9CnMDz$FR1XsYh%^o>ex8Oq?s@zpGS7o;@R0s2Y3R6uq$Pd7Y{2>);>c3cPi- ze=)X8JFnwGWr=0HIoeX#Y+v=+B3&FCpkSA8=zp=c86iGb%`x76j!Kz2xeL zL+x{(a5H6Zq@y#}--15{&u(Rg=A5 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// if not defined, version is 1. +#define EVERYTHING_SDK_VERSION 2 + +#define EVERYTHING_OK 0 // no error detected +#define EVERYTHING_ERROR_MEMORY 1 // out of memory. +#define EVERYTHING_ERROR_IPC 2 // Everything search client is not running +#define EVERYTHING_ERROR_REGISTERCLASSEX 3 // unable to register window class. +#define EVERYTHING_ERROR_CREATEWINDOW 4 // unable to create listening window +#define EVERYTHING_ERROR_CREATETHREAD 5 // unable to create listening thread +#define EVERYTHING_ERROR_INVALIDINDEX 6 // invalid index +#define EVERYTHING_ERROR_INVALIDCALL 7 // invalid call +#define EVERYTHING_ERROR_INVALIDREQUEST 8 // invalid request data, request data first. +#define EVERYTHING_ERROR_INVALIDPARAMETER 9 // bad parameter. + +#define EVERYTHING_SORT_NAME_ASCENDING 1 +#define EVERYTHING_SORT_NAME_DESCENDING 2 +#define EVERYTHING_SORT_PATH_ASCENDING 3 +#define EVERYTHING_SORT_PATH_DESCENDING 4 +#define EVERYTHING_SORT_SIZE_ASCENDING 5 +#define EVERYTHING_SORT_SIZE_DESCENDING 6 +#define EVERYTHING_SORT_EXTENSION_ASCENDING 7 +#define EVERYTHING_SORT_EXTENSION_DESCENDING 8 +#define EVERYTHING_SORT_TYPE_NAME_ASCENDING 9 +#define EVERYTHING_SORT_TYPE_NAME_DESCENDING 10 +#define EVERYTHING_SORT_DATE_CREATED_ASCENDING 11 +#define EVERYTHING_SORT_DATE_CREATED_DESCENDING 12 +#define EVERYTHING_SORT_DATE_MODIFIED_ASCENDING 13 +#define EVERYTHING_SORT_DATE_MODIFIED_DESCENDING 14 +#define EVERYTHING_SORT_ATTRIBUTES_ASCENDING 15 +#define EVERYTHING_SORT_ATTRIBUTES_DESCENDING 16 +#define EVERYTHING_SORT_FILE_LIST_FILENAME_ASCENDING 17 +#define EVERYTHING_SORT_FILE_LIST_FILENAME_DESCENDING 18 +#define EVERYTHING_SORT_RUN_COUNT_ASCENDING 19 +#define EVERYTHING_SORT_RUN_COUNT_DESCENDING 20 +#define EVERYTHING_SORT_DATE_RECENTLY_CHANGED_ASCENDING 21 +#define EVERYTHING_SORT_DATE_RECENTLY_CHANGED_DESCENDING 22 +#define EVERYTHING_SORT_DATE_ACCESSED_ASCENDING 23 +#define EVERYTHING_SORT_DATE_ACCESSED_DESCENDING 24 +#define EVERYTHING_SORT_DATE_RUN_ASCENDING 25 +#define EVERYTHING_SORT_DATE_RUN_DESCENDING 26 + +#define EVERYTHING_REQUEST_FILE_NAME 0x00000001 +#define EVERYTHING_REQUEST_PATH 0x00000002 +#define EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME 0x00000004 +#define EVERYTHING_REQUEST_EXTENSION 0x00000008 +#define EVERYTHING_REQUEST_SIZE 0x00000010 +#define EVERYTHING_REQUEST_DATE_CREATED 0x00000020 +#define EVERYTHING_REQUEST_DATE_MODIFIED 0x00000040 +#define EVERYTHING_REQUEST_DATE_ACCESSED 0x00000080 +#define EVERYTHING_REQUEST_ATTRIBUTES 0x00000100 +#define EVERYTHING_REQUEST_FILE_LIST_FILE_NAME 0x00000200 +#define EVERYTHING_REQUEST_RUN_COUNT 0x00000400 +#define EVERYTHING_REQUEST_DATE_RUN 0x00000800 +#define EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED 0x00001000 +#define EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME 0x00002000 +#define EVERYTHING_REQUEST_HIGHLIGHTED_PATH 0x00004000 +#define EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME 0x00008000 + +#define EVERYTHING_TARGET_MACHINE_X86 1 +#define EVERYTHING_TARGET_MACHINE_X64 2 +#define EVERYTHING_TARGET_MACHINE_ARM 3 + +#ifndef EVERYTHINGAPI +#define EVERYTHINGAPI __stdcall +#endif + +#ifndef EVERYTHINGUSERAPI +#define EVERYTHINGUSERAPI __declspec(dllimport) +#endif + +// write search state +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetSearchW(LPCWSTR lpString); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetSearchA(LPCSTR lpString); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetMatchPath(BOOL bEnable); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetMatchCase(BOOL bEnable); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetMatchWholeWord(BOOL bEnable); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetRegex(BOOL bEnable); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetMax(DWORD dwMax); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetOffset(DWORD dwOffset); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetReplyWindow(HWND hWnd); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetReplyID(DWORD dwId); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetSort(DWORD dwSort); // Everything 1.4.1 +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetRequestFlags(DWORD dwRequestFlags); // Everything 1.4.1 + +// read search state +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetMatchPath(void); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetMatchCase(void); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetMatchWholeWord(void); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetRegex(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetMax(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetOffset(void); +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetSearchA(void); +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetSearchW(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetLastError(void); +EVERYTHINGUSERAPI HWND EVERYTHINGAPI Everything_GetReplyWindow(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetReplyID(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetSort(void); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetRequestFlags(void); // Everything 1.4.1 + +// execute query +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_QueryA(BOOL bWait); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_QueryW(BOOL bWait); + +// query reply +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsQueryReply(UINT message,WPARAM wParam,LPARAM lParam,DWORD dwId); + +// write result state +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SortResultsByPath(void); + +// read result state +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetNumFileResults(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetNumFolderResults(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetNumResults(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetTotFileResults(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetTotFolderResults(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetTotResults(void); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsVolumeResult(DWORD dwIndex); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsFolderResult(DWORD dwIndex); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsFileResult(DWORD dwIndex); +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultFileNameW(DWORD dwIndex); +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultFileNameA(DWORD dwIndex); +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultPathW(DWORD dwIndex); +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultPathA(DWORD dwIndex); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultFullPathNameA(DWORD dwIndex,LPSTR buf,DWORD bufsize); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultFullPathNameW(DWORD dwIndex,LPWSTR wbuf,DWORD wbuf_size_in_wchars); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultListSort(void); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultListRequestFlags(void); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultExtensionW(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultExtensionA(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetResultSize(DWORD dwIndex,LARGE_INTEGER *lpSize); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetResultDateCreated(DWORD dwIndex,FILETIME *lpDateCreated); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetResultDateModified(DWORD dwIndex,FILETIME *lpDateModified); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetResultDateAccessed(DWORD dwIndex,FILETIME *lpDateAccessed); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultAttributes(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultFileListFileNameW(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultFileListFileNameA(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultRunCount(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetResultDateRun(DWORD dwIndex,FILETIME *lpDateRun); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_GetResultDateRecentlyChanged(DWORD dwIndex,FILETIME *lpDateRecentlyChanged); +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultHighlightedFileNameW(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultHighlightedFileNameA(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultHighlightedPathW(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultHighlightedPathA(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultHighlightedFullPathAndFileNameW(DWORD dwIndex); // Everything 1.4.1 +EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultHighlightedFullPathAndFileNameA(DWORD dwIndex); // Everything 1.4.1 + +// reset state and free any allocated memory +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_Reset(void); +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_CleanUp(void); + +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetMajorVersion(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetMinorVersion(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetRevision(void); +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetBuildNumber(void); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_Exit(void); +UINT EVERYTHINGAPI Everything_MSIExitAndStopService(void *msihandle); +UINT EVERYTHINGAPI Everything_MSIStartService(void *msihandle); +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsDBLoaded(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsAdmin(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsAppData(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_RebuildDB(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_UpdateAllFolderIndexes(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_SaveDB(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_SaveRunHistory(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_DeleteRunHistory(void); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetTargetMachine(void); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsFastSort(DWORD sortType); // Everything 1.4.1.859 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsFileInfoIndexed(DWORD fileInfoType); // Everything 1.4.1.859 + +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetRunCountFromFileNameW(LPCWSTR lpFileName); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetRunCountFromFileNameA(LPCSTR lpFileName); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_SetRunCountFromFileNameW(LPCWSTR lpFileName,DWORD dwRunCount); // Everything 1.4.1 +EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_SetRunCountFromFileNameA(LPCSTR lpFileName,DWORD dwRunCount); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_IncRunCountFromFileNameW(LPCWSTR lpFileName); // Everything 1.4.1 +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_IncRunCountFromFileNameA(LPCSTR lpFileName); // Everything 1.4.1 + +#ifdef UNICODE +#define Everything_SetSearch Everything_SetSearchW +#define Everything_GetSearch Everything_GetSearchW +#define Everything_Query Everything_QueryW +#define Everything_Query2 Everything_Query2W +#define Everything_GetResultFileName Everything_GetResultFileNameW +#define Everything_GetResultPath Everything_GetResultPathW +#define Everything_GetResultFullPathName Everything_GetResultFullPathNameW +#define Everything_GetResultExtension Everything_GetResultExtensionW +#define Everything_GetResultFileListFileName Everything_GetResultFileListFileNameW +#define Everything_GetResultHighlightedFileName Everything_GetResultHighlightedFileNameW +#define Everything_GetResultHighlightedPath Everything_GetResultHighlightedPathW +#define Everything_GetResultHighlightedFullPathAndFileName Everything_GetResultHighlightedFullPathAndFileNameW +#define Everything_GetRunCountFromFileName Everything_GetRunCountFromFileNameW +#define Everything_SetRunCountFromFileName Everything_SetRunCountFromFileNameW +#define Everything_IncRunCountFromFileName Everything_IncRunCountFromFileNameW +#else +#define Everything_SetSearch Everything_SetSearchA +#define Everything_GetSearch Everything_GetSearchA +#define Everything_Query Everything_QueryA +#define Everything_Query2 Everything_Query2A +#define Everything_GetResultFileName Everything_GetResultFileNameA +#define Everything_GetResultPath Everything_GetResultPathA +#define Everything_GetResultFullPathName Everything_GetResultFullPathNameA +#define Everything_GetResultExtension Everything_GetResultExtensionA +#define Everything_GetResultFileListFileName Everything_GetResultFileListFileNameA +#define Everything_GetResultHighlightedFileName Everything_GetResultHighlightedFileNameA +#define Everything_GetResultHighlightedPath Everything_GetResultHighlightedPathA +#define Everything_GetResultHighlightedFullPathAndFileName Everything_GetResultHighlightedFullPathAndFileNameA +#define Everything_GetRunCountFromFileName Everything_GetRunCountFromFileNameA +#define Everything_SetRunCountFromFileName Everything_SetRunCountFromFileNameA +#define Everything_IncRunCountFromFileName Everything_IncRunCountFromFileNameA +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/Everything-SDK/ipc/everything_ipc.h b/Everything-SDK/ipc/everything_ipc.h new file mode 100644 index 0000000..3d62e84 --- /dev/null +++ b/Everything-SDK/ipc/everything_ipc.h @@ -0,0 +1,903 @@ + +// Everything IPC + +#ifndef _EVERYTHING_IPC_H_ +#define _EVERYTHING_IPC_H_ + +// C +#ifdef __cplusplus +extern "C" { +#endif + +#define EVERYTHING_WM_IPC (WM_USER) + +#define EVERYTHING_IPC_TARGET_MACHINE_X86 1 +#define EVERYTHING_IPC_TARGET_MACHINE_X64 2 +#define EVERYTHING_IPC_TARGET_MACHINE_ARM 3 +#define EVERYTHING_IPC_TARGET_MACHINE_ARM64 4 + +// built in filters +#define EVERYTHING_IPC_FILTER_EVERYTHING 0 +#define EVERYTHING_IPC_FILTER_AUDIO 1 +#define EVERYTHING_IPC_FILTER_COMPRESSED 2 +#define EVERYTHING_IPC_FILTER_DOCUMENT 3 +#define EVERYTHING_IPC_FILTER_EXECUTABLE 4 +#define EVERYTHING_IPC_FILTER_FOLDER 5 +#define EVERYTHING_IPC_FILTER_PICTURE 6 +#define EVERYTHING_IPC_FILTER_VIDEO 7 +#define EVERYTHING_IPC_FILTER_CUSTOM 8 + +// EVERYTHING_WM_IPC (send to the Everything taskbar notification window) +// the Everything taskbar notification window is always created when Everything is running. (even when the taskbar notification icon is hidden) +// HWND everything_taskbar_notification_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); +// SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_*,lParam) + +// version format: major.minor.revision.build +// example: 1.4.1.877 +#define EVERYTHING_IPC_GET_MAJOR_VERSION 0 // int major_version = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_MAJOR_VERSION,0); +#define EVERYTHING_IPC_GET_MINOR_VERSION 1 // int minor_version = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_MINOR_VERSION,0); +#define EVERYTHING_IPC_GET_REVISION 2 // int revision = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_REVISION,0); +#define EVERYTHING_IPC_GET_BUILD_NUMBER 3 // int build = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_BUILD,0); +#define EVERYTHING_IPC_EXIT 4 // returns 1 if the program closes. +#define EVERYTHING_IPC_GET_TARGET_MACHINE 5 // int target_machine = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_TARGET_MACHINE,0); returns 0 if not supported. returns a EVERYTHING_IPC_TARGET_MACHINE_* value. requires Everything 1.4.1 + +// uninstall options +#define EVERYTHING_IPC_DELETE_START_MENU_SHORTCUTS 100 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_START_MENU_SHORTCUTS,0); +#define EVERYTHING_IPC_DELETE_QUICK_LAUNCH_SHORTCUT 101 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_QUICK_LAUNCH_SHORTCUT,0); +#define EVERYTHING_IPC_DELETE_DESKTOP_SHORTCUT 102 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_DESKTOP_SHORTCUT,0); +#define EVERYTHING_IPC_DELETE_FOLDER_CONTEXT_MENU 103 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_FOLDER_CONTEXT_MENU,0); +#define EVERYTHING_IPC_DELETE_RUN_ON_SYSTEM_STARTUP 104 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_RUN_ON_SYSTEM_STARTUP,0); +#define EVERYTHING_IPC_DELETE_URL_PROTOCOL 105 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_URL_PROTOCOL,0); + +// install options +#define EVERYTHING_IPC_CREATE_START_MENU_SHORTCUTS 200 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_CREATE_START_MENU_SHORTCUTS,0); +#define EVERYTHING_IPC_CREATE_QUICK_LAUNCH_SHORTCUT 201 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_CREATE_QUICK_LAUNCH_SHORTCUT,0); +#define EVERYTHING_IPC_CREATE_DESKTOP_SHORTCUT 202 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_CREATE_DESKTOP_SHORTCUT,0); +#define EVERYTHING_IPC_CREATE_FOLDER_CONTEXT_MENU 203 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_CREATE_FOLDER_CONTEXT_MENU,0); +#define EVERYTHING_IPC_CREATE_RUN_ON_SYSTEM_STARTUP 204 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_CREATE_RUN_ON_SYSTEM_STARTUP,0); +#define EVERYTHING_IPC_CREATE_URL_PROTOCOL 205 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_CREATE_URL_PROTOCOL,0); + +// get option status; 0 = no, 1 = yes, 2 = indeterminate (partially installed) +#define EVERYTHING_IPC_IS_START_MENU_SHORTCUTS 300 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_START_MENU_SHORTCUTS,0); +#define EVERYTHING_IPC_IS_QUICK_LAUNCH_SHORTCUT 301 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_QUICK_LAUNCH_SHORTCUT,0); +#define EVERYTHING_IPC_IS_DESKTOP_SHORTCUT 302 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_DESKTOP_SHORTCUT,0); +#define EVERYTHING_IPC_IS_FOLDER_CONTEXT_MENU 303 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_FOLDER_CONTEXT_MENU,0); +#define EVERYTHING_IPC_IS_RUN_ON_SYSTEM_STARTUP 304 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_RUN_ON_SYSTEM_STARTUP,0); +#define EVERYTHING_IPC_IS_URL_PROTOCOL 305 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_URL_PROTOCOL,0); +#define EVERYTHING_IPC_IS_SERVICE 306 // int ret = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_SERVICE,0); + +// indexing +#define EVERYTHING_IPC_IS_NTFS_DRIVE_INDEXED 400 // int is_indexed = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_NTFS_DRIVE_INDEXED,drive_index); drive_index: 0-25 = 0=A:, 1=B:, 2=C:... + +// requires Everything 1.4: +#define EVERYTHING_IPC_IS_DB_LOADED 401 // int is_db_loaded = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_DB_LOADED,0); +#define EVERYTHING_IPC_IS_DB_BUSY 402 // int is_db_busy = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_DB_BUSY,0); // db is busy, issueing another action will cancel the current one (if possible). +#define EVERYTHING_IPC_IS_ADMIN 403 // int is_admin = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_ADMIN,0); +#define EVERYTHING_IPC_IS_APPDATA 404 // int is_appdata = (int)SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_APPDATA,0); +#define EVERYTHING_IPC_REBUILD_DB 405 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_REBUILD,0); // forces all indexes to be rescanned. +#define EVERYTHING_IPC_UPDATE_ALL_FOLDER_INDEXES 406 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_UPDATE_ALL_FOLDER_INDEXES,0); // rescan all folder indexes. +#define EVERYTHING_IPC_SAVE_DB 407 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_SAVE_DB,0); // save the db to disk. +#define EVERYTHING_IPC_SAVE_RUN_HISTORY 408 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_SAVE_RUN_HISTORY,0); // save run history to disk. +#define EVERYTHING_IPC_DELETE_RUN_HISTORY 409 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_DELETE_RUN_HISTORY,0); // deletes all run history from memory and disk. +#define EVERYTHING_IPC_IS_FAST_SORT 410 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_FAST_SORT,EVERYTHING_IPC_SORT_*); // is the sort information indexed? +#define EVERYTHING_IPC_IS_FILE_INFO_INDEXED 411 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_FILE_INFO_INDEXED,EVERYTHING_IPC_FILE_INFO_*); // is the file/folder info indexed? + +// Everything 1.5 +#define EVERYTHING_IPC_QUEUE_REBUILD_DB 412 // SendMessage(everything_taskbar_notification_hwnd,EVERYTHING_WM_IPC,EVERYTHING_IPC_QUEUE_REBUILD_DB,0); // forces all indexes to be rescanned when the db is ready. + +// send the following to an existing Everything search window (requires Everything 1.4.1) +// SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_*,0); +#define EVERYTHING_IPC_IS_MATCH_CASE 500 // int is_match_case = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_MATCH_CASE,0); +#define EVERYTHING_IPC_IS_MATCH_WHOLE_WORD 501 // int is_match_whole_words = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_MATCH_WHOLE_WORD,0); +#define EVERYTHING_IPC_IS_MATCH_PATH 502 // int is_match_path = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_MATCH_PATH,0); +#define EVERYTHING_IPC_IS_MATCH_DIACRITICS 503 // int is_match_diacritics = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_MATCH_DIACRITICS,0); +#define EVERYTHING_IPC_IS_REGEX 504 // int is_regex = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_REGEX,0); +#define EVERYTHING_IPC_IS_FILTERS 505 // int is_filters = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_FILTERS,0); +#define EVERYTHING_IPC_IS_PREVIEW 506 // int is_preview = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_PREVIEW,0); +#define EVERYTHING_IPC_IS_STATUS_BAR 507 // int is_status_bar = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_STATUS_BAR,0); +#define EVERYTHING_IPC_IS_DETAILS 508 // int is_details = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_DETAILS,0); +#define EVERYTHING_IPC_GET_THUMBNAIL_SIZE 509 // int thumbnail_size = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_GET_THUMBNAIL_SIZE,0); 0 = details +#define EVERYTHING_IPC_GET_SORT 510 // int sort = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_GET_SORT,0); sort can be one of EVERYTHING_IPC_SORT_* types. +#define EVERYTHING_IPC_GET_ON_TOP 511 // int on_top = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_ON_TOP,0); 0=never, 1=always, 2=while searching. +#define EVERYTHING_IPC_GET_FILTER 512 // int filter = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_FILTER,0); filter can be one of EVERYTHING_IPC_FILTER_* types. +#define EVERYTHING_IPC_GET_FILTER_INDEX 513 // int filter_index = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_GET_FILTER_INDEX,0); + +// Everything 1.5 +#define EVERYTHING_IPC_IS_MATCH_PREFIX 514 // int is_match_prefix = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_MATCH_PREFIX,0); +#define EVERYTHING_IPC_IS_MATCH_SUFFIX 515 // int is_match_suffix = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_MATCH_SUFFIX,0); +#define EVERYTHING_IPC_IS_IGNORE_PUNCTUATION 516 // int is_ignore_punctuation = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_IGNORE_PUNCTUATION,0); +#define EVERYTHING_IPC_IS_IGNORE_WHITESPACE 517 // int is_ignore_whitespace = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_IGNORE_WHITESPACE,0); +#define EVERYTHING_IPC_IS_SEARCH_AS_YOU_TYPE 518 // int is_search_as_you_type = (int)SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),EVERYTHING_WM_IPC,EVERYTHING_IPC_IS_SEARCH_AS_YOU_TYPE,0); + +// command IDs to send to an Everything search window. +// SendMessage(FindWindow(EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS,0),WM_COMMAND,MAKEWPARAM(EVERYTHING_IPC_ID_*,0),0); + +// main menus + +#define EVERYTHING_IPC_ID_FILE_MENU 10001 +#define EVERYTHING_IPC_ID_EDIT_MENU 10002 +#define EVERYTHING_IPC_ID_SEARCH_MENU 10003 +#define EVERYTHING_IPC_ID_TOOLS_MENU 10004 +#define EVERYTHING_IPC_ID_HELP_MENU 10005 +#define EVERYTHING_IPC_ID_TOOLBAR 10006 +#define EVERYTHING_IPC_ID_SEARCH_EDIT 10007 +#define EVERYTHING_IPC_ID_FILTER 10008 +#define EVERYTHING_IPC_ID_RESULTS_HEADER 10009 +#define EVERYTHING_IPC_ID_STATUS 10010 +#define EVERYTHING_IPC_ID_VIEW_ZOOM_MENU 10012 +#define EVERYTHING_IPC_ID_VIEW_MENU 10013 +#define EVERYTHING_IPC_ID_VIEW_WINDOW_SIZE_MENU 10019 +#define EVERYTHING_IPC_ID_RESULT_LIST 10020 +#define EVERYTHING_IPC_ID_BOOKMARKS_MENU 10021 +#define EVERYTHING_IPC_ID_VIEW_SORT_BY_MENU 10022 +#define EVERYTHING_IPC_ID_VIEW_GOTO_MENU 10024 +#define EVERYTHING_IPC_ID_VIEW_ONTOP_MENU 10025 +#define EVERYTHING_IPC_ID_PREVIEW 10026 + +// TRAY +#define EVERYTHING_IPC_ID_TRAY_NEW_SEARCH_WINDOW 40001 +#define EVERYTHING_IPC_ID_TRAY_CONNECT_TO_ETP_SERVER 40004 +#define EVERYTHING_IPC_ID_TRAY_OPTIONS 40005 +#define EVERYTHING_IPC_ID_TRAY_EXIT 40006 +#define EVERYTHING_IPC_ID_TRAY_SHOW_SEARCH_WINDOW 40007 +#define EVERYTHING_IPC_ID_TRAY_TOGGLE_SEARCH_WINDOW 40008 + +// FILE +#define EVERYTHING_IPC_ID_FILE_NEW_WINDOW 40010 +#define EVERYTHING_IPC_ID_FILE_CLOSE 40011 +#define EVERYTHING_IPC_ID_FILE_EXPORT 40012 +#define EVERYTHING_IPC_ID_FILE_EXIT 40013 +#define EVERYTHING_IPC_ID_FILE_OPEN_FILELIST 40014 +#define EVERYTHING_IPC_ID_FILE_CLOSE_FILELIST 40015 + +// EDIT +#define EVERYTHING_IPC_ID_EDIT_CUT 40020 +#define EVERYTHING_IPC_ID_EDIT_COPY 40021 +#define EVERYTHING_IPC_ID_EDIT_PASTE 40022 +#define EVERYTHING_IPC_ID_EDIT_SELECT_ALL 40023 +#define EVERYTHING_IPC_ID_EDIT_INVERT_SELECTION 40029 + +// VIEW +#define EVERYTHING_IPC_ID_VIEW_ZOOM_IN 40030 +#define EVERYTHING_IPC_ID_VIEW_ZOOM_OUT 40031 +#define EVERYTHING_IPC_ID_VIEW_ZOOM_RESET 40032 +#define EVERYTHING_IPC_ID_VIEW_TOGGLE_FULLSCREEN 40034 +#define EVERYTHING_IPC_ID_VIEW_AUTO_FIT 40044 +#define EVERYTHING_IPC_ID_VIEW_AUTO_SIZE_1 40045 +#define EVERYTHING_IPC_ID_VIEW_AUTO_SIZE_2 40046 +#define EVERYTHING_IPC_ID_VIEW_AUTO_SIZE_3 40047 +#define EVERYTHING_IPC_ID_VIEW_REFRESH 40036 +#define EVERYTHING_IPC_ID_VIEW_FILTERS 40035 +#define EVERYTHING_IPC_ID_VIEW_SORT_BY_ASCENDING 40037 +#define EVERYTHING_IPC_ID_VIEW_SORT_BY_DESCENDING 40038 +#define EVERYTHING_IPC_ID_VIEW_STATUS_BAR 40039 +#define EVERYTHING_IPC_ID_VIEW_GOTO_BACK 40040 +#define EVERYTHING_IPC_ID_VIEW_GOTO_FORWARD 40041 +#define EVERYTHING_IPC_ID_VIEW_ONTOP_NEVER 40042 +#define EVERYTHING_IPC_ID_VIEW_ONTOP_ALWAYS 40043 +#define EVERYTHING_IPC_ID_VIEW_ONTOP_WHILE_SEARCHING 40048 +#define EVERYTHING_IPC_ID_VIEW_GOTO_HOME 40049 +#define EVERYTHING_IPC_ID_VIEW_TOGGLE_LTR_RTL 40050 +#define EVERYTHING_IPC_ID_VIEW_DETAILS 40051 +#define EVERYTHING_IPC_ID_VIEW_MEDIUM_ICONS 40052 +#define EVERYTHING_IPC_ID_VIEW_LARGE_ICONS 40053 +#define EVERYTHING_IPC_ID_VIEW_EXTRA_LARGE_ICONS 40054 +#define EVERYTHING_IPC_ID_VIEW_PREVIEW 40055 +#define EVERYTHING_IPC_ID_VIEW_GOTO_SHOW_ALL_HISTORY 40056 +#define EVERYTHING_IPC_ID_VIEW_INCREASE_THUMBNAIL_SIZE 40057 +#define EVERYTHING_IPC_ID_VIEW_DECREASE_THUMBNAIL_SIZE 40058 +#define EVERYTHING_IPC_ID_VIEW_SHOW_FILTERS 40096 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_HIDE_FILTERS 40097 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_SHOW_PREVIEW 40098 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_HIDE_PREVIEW 40099 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_SHOW_STATUS_BAR 40100 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_HIDE_STATUS_BAR 40101 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_DETAILS_NO_TOGGLE 40102 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_MEDIUM_ICONS_NO_TOGGLE 40103 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_LARGE_ICONS_NO_TOGGLE 40104 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_VIEW_EXTRA_LARGE_ICONS_NO_TOGGLE 40105 // Everything 1.4.1 + +// SEARCH +#define EVERYTHING_IPC_ID_SEARCH_TOGGLE_MATCH_CASE 40060 +#define EVERYTHING_IPC_ID_SEARCH_TOGGLE_MATCH_WHOLE_WORD 40061 +#define EVERYTHING_IPC_ID_SEARCH_TOGGLE_MATCH_PATH 40062 +#define EVERYTHING_IPC_ID_SEARCH_TOGGLE_REGEX 40063 +#define EVERYTHING_IPC_ID_SEARCH_TOGGLE_MATCH_DIACRITICS 40066 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_ADD 40067 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_ORGANIZE 40068 +#define EVERYTHING_IPC_ID_SEARCH_ADVANCED_SEARCH 40069 +#define EVERYTHING_IPC_ID_SEARCH_ENABLE_MATCH_CASE 40106 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_ENABLE_MATCH_WHOLE_WORD 40107 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_ENABLE_MATCH_PATH 40108 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_ENABLE_REGEX 40109 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_ENABLE_MATCH_DIACRITICS 40110 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_DISABLE_MATCH_CASE 40111 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_DISABLE_MATCH_WHOLE_WORD 40112 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_DISABLE_MATCH_PATH 40113 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_DISABLE_REGEX 40114 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_DISABLE_MATCH_DIACRITICS 40115 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_EVERYTHING 40116 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_AUDIO 40117 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_COMPRESSED 40118 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_DOCUMENT 40119 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_EXECUTABLE 40120 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_FOLDER 40121 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_PICTURE 40122 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_VIDEO 40123 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_AUDIO_NO_TOGGLE 40124 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_COMPRESSED_NO_TOGGLE 40125 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_DOCUMENT_NO_TOGGLE 40126 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_EXECUTABLE_NO_TOGGLE 40127 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_FOLDER_NO_TOGGLE 40128 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_PICTURE_NO_TOGGLE 40129 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_SEARCH_FILTER_VIDEO_NO_TOGGLE 40130 // Everything 1.4.1 + +// TOOLS +#define EVERYTHING_IPC_ID_TOOLS_CONNECT_TO_ETP_SERVER 40072 +#define EVERYTHING_IPC_ID_TOOLS_DISCONNECT_FROM_ETP_SERVER 40073 +#define EVERYTHING_IPC_ID_TOOLS_OPTIONS 40074 +#define EVERYTHING_IPC_ID_TOOLS_CONSOLE 40075 +#define EVERYTHING_IPC_ID_TOOLS_EDITOR 40076 + +// HELP +#define EVERYTHING_IPC_ID_HELP_VIEW_HELP_TOPICS 40080 +#define EVERYTHING_IPC_ID_HELP_OPEN_EVERYTHING_WEBSITE 40081 +#define EVERYTHING_IPC_ID_HELP_CHECK_FOR_UPDATES 40082 +#define EVERYTHING_IPC_ID_HELP_ABOUT_EVERYTHING 40083 +#define EVERYTHING_IPC_ID_HELP_SEARCH_SYNTAX 40084 +#define EVERYTHING_IPC_ID_HELP_COMMAND_LINE_OPTIONS 40085 +#define EVERYTHING_IPC_ID_HELP_REGEX_SYNTAX 40086 +#define EVERYTHING_IPC_ID_HELP_DONATE 40087 + +// bookmarks +#define EVERYTHING_IPC_ID_BOOKMARK_ADD 40090 +#define EVERYTHING_IPC_ID_BOOKMARK_ORGANIZE 40091 +#define EVERYTHING_IPC_ID_BOOKMARK_START 44000 +#define EVERYTHING_IPC_ID_BOOKMARK_END 45000 // exclusive + +#define EVERYTHING_IPC_ID_FILTER_START 45000 +#define EVERYTHING_IPC_ID_FILTER_END 46000 // exclusive + +#define EVERYTHING_IPC_ID_VIEW_GOTO_START 46000 +#define EVERYTHING_IPC_ID_VIEW_GOTO_END 47000 // exclusive + +// files +#define EVERYTHING_IPC_ID_FILE_OPEN 41000 +#define EVERYTHING_IPC_ID_FILE_OPEN_NEW 41048 +#define EVERYTHING_IPC_ID_FILE_OPEN_WITH 41049 +#define EVERYTHING_IPC_ID_FILE_EDIT 41050 +#define EVERYTHING_IPC_ID_FILE_PLAY 41051 +#define EVERYTHING_IPC_ID_FILE_PRINT 41052 +#define EVERYTHING_IPC_ID_FILE_PREVIEW 41053 +#define EVERYTHING_IPC_ID_FILE_PRINT_TO 41054 +#define EVERYTHING_IPC_ID_FILE_RUN_AS 41055 +#define EVERYTHING_IPC_ID_FILE_OPEN_WITH_DEFAULT_VERB 41056 +#define EVERYTHING_IPC_ID_FILE_OPEN_AND_CLOSE 41057 +#define EVERYTHING_IPC_ID_FILE_EXPLORE_PATH 41002 +#define EVERYTHING_IPC_ID_FILE_OPEN_PATH 41003 +#define EVERYTHING_IPC_ID_FILE_DELETE 41004 +#define EVERYTHING_IPC_ID_FILE_PERMANENTLY_DELETE 41005 +#define EVERYTHING_IPC_ID_FILE_RENAME 41006 +#define EVERYTHING_IPC_ID_FILE_COPY_FULL_PATH_AND_NAME 41007 +#define EVERYTHING_IPC_ID_FILE_COPY_PATH 41008 +#define EVERYTHING_IPC_ID_FILE_PROPERTIES 41009 +#define EVERYTHING_IPC_ID_FILE_READ_EXTENDED_INFORMATION 41064 +#define EVERYTHING_IPC_ID_FILE_CREATE_SHORTCUT 41065 +#define EVERYTHING_IPC_ID_FILE_SET_RUN_COUNT 41068 +#define EVERYTHING_IPC_ID_FILE_COPY_NAME 41011 +#define EVERYTHING_IPC_ID_FILE_OPEN_AND_DO_NOT_CLOSE 41076 + +// result list +#define EVERYTHING_IPC_ID_RESULT_LIST_EXPLORE 41001 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS 41010 +#define EVERYTHING_IPC_ID_RESULT_LIST_AUTOFIT_COLUMNS 41012 +#define EVERYTHING_IPC_ID_RESULT_LIST_DOWN 41018 +#define EVERYTHING_IPC_ID_RESULT_LIST_UP 41019 +#define EVERYTHING_IPC_ID_RESULT_LIST_PAGE_UP 41020 +#define EVERYTHING_IPC_ID_RESULT_LIST_PAGE_DOWN 41021 +#define EVERYTHING_IPC_ID_RESULT_LIST_START 41022 +#define EVERYTHING_IPC_ID_RESULT_LIST_END 41023 +#define EVERYTHING_IPC_ID_RESULT_LIST_DOWN_EXTEND 41024 +#define EVERYTHING_IPC_ID_RESULT_LIST_UP_EXTEND 41025 +#define EVERYTHING_IPC_ID_RESULT_LIST_PAGE_UP_EXTEND 41026 +#define EVERYTHING_IPC_ID_RESULT_LIST_PAGE_DOWN_EXTEND 41027 +#define EVERYTHING_IPC_ID_RESULT_LIST_START_EXTEND 41028 +#define EVERYTHING_IPC_ID_RESULT_LIST_END_EXTEND 41029 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_DOWN 41030 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_UP 41031 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_PAGE_UP 41032 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_PAGE_DOWN 41033 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_START 41034 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_END 41035 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_LEFT 41036 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_RIGHT 41037 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_PAGE_LEFT 41038 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_PAGE_RIGHT 41039 +#define EVERYTHING_IPC_ID_RESULT_LIST_SELECT_FOCUS 41040 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_FOCUS_SELECTION 41041 +#define EVERYTHING_IPC_ID_RESULT_LIST_CONTEXT_MENU 41046 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_DOWN_EXTEND 41058 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_UP_EXTEND 41059 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_PAGE_UP_EXTEND 41060 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_PAGE_DOWN_EXTEND 41061 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_START_EXTEND 41062 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_END_EXTEND 41063 +#define EVERYTHING_IPC_ID_RESULT_LIST_AUTOFIT 41066 +#define EVERYTHING_IPC_ID_RESULT_LIST_COPY_CSV 41067 +#define EVERYTHING_IPC_ID_RESULT_LIST_LEFT_EXTEND 41070 +#define EVERYTHING_IPC_ID_RESULT_LIST_RIGHT_EXTEND 41071 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_LEFT_EXTEND 41072 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_RIGHT_EXTEND 41073 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_MOST_RUN 41074 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_LAST_RUN 41075 +#define EVERYTHING_IPC_ID_RESULT_LIST_LEFT 41079 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_RIGHT 41080 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_LEFT 41081 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_FOCUS_RIGHT 41082 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_LEFT_SCROLL_ONLY 41083 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_RIGHT_SCROLL_ONLY 41084 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_PAGE_LEFT_SCROLL_ONLY 41085 // Everything 1.4.1 +#define EVERYTHING_IPC_ID_RESULT_LIST_SCROLL_PAGE_RIGHT_SCROLL_ONLY 41086 // Everything 1.4.1 + +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_NAME 41300 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_PATH 41301 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_SIZE 41302 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_EXTENSION 41303 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_TYPE 41304 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_DATE_MODIFIED 41305 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_DATE_CREATED 41306 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_ATTRIBUTES 41307 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_FILE_LIST_FILENAME 41308 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_RUN_COUNT 41309 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_DATE_RECENTLY_CHANGED 41310 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_DATE_ACCESSED 41311 +#define EVERYTHING_IPC_ID_RESULT_LIST_SORT_BY_DATE_RUN 41312 + +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_NAME_COLUMN 41400 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_PATH_COLUMN 41401 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_SIZE_COLUMN 41402 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_EXTENSION_COLUMN 41403 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_TYPE_COLUMN 41404 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_DATE_MODIFIED_COLUMN 41405 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_DATE_CREATED_COLUMN 41406 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_ATTRIBUTES_COLUMN 41407 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_FILE_LIST_FILENAME_COLUMN 41408 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_RUN_COUNT_COLUMN 41409 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_DATE_RECENTLY_CHANGED_COLUMN 41410 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_DATE_ACCESSED_COLUMN 41411 +#define EVERYTHING_IPC_ID_RESULT_LIST_TOGGLE_DATE_RUN_COLUMN 41412 + +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_NAME_COLUMN_TO_FIT 41600 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_PATH_COLUMN_TO_FIT 41601 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_SIZE_COLUMN_TO_FIT 41602 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_EXTENSION_COLUMN_TO_FIT 41603 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_TYPE_COLUMN_TO_FIT 41604 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_DATE_MODIFIED_COLUMN_TO_FIT 41605 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_DATE_CREATED_COLUMN_TO_FIT 41606 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_ATTRIBUTES_COLUMN_TO_FIT 41607 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_FILE_LIST_FILENAME_COLUMN_TO_FIT 41608 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_RUN_COUNT_COLUMN_TO_FIT 41609 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_DATE_RECENTLY_CHANGED_COLUMN_TO_FIT 41610 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_DATE_ACCESSED_COLUMN_TO_FIT 41611 +#define EVERYTHING_IPC_ID_RESULT_LIST_SIZE_DATE_RUN_COLUMN_TO_FIT 41612 + +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB01 41500 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB02 41501 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB03 41502 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB04 41503 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB05 41504 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB06 41505 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB07 41506 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB08 41507 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB09 41508 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB10 41509 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB11 41510 +#define EVERYTHING_IPC_ID_FILE_CUSTOM_VERB12 41511 + +// search +#define EVERYTHING_IPC_ID_SEARCH_EDIT_FOCUS 42000 +#define EVERYTHING_IPC_ID_SEARCH_EDIT_WORD_DELETE_TO_START 42019 +#define EVERYTHING_IPC_ID_SEARCH_EDIT_AUTO_COMPLETE 42020 +#define EVERYTHING_IPC_ID_SEARCH_EDIT_SHOW_SEARCH_HISTORY 42021 +#define EVERYTHING_IPC_ID_SEARCH_EDIT_SHOW_ALL_SEARCH_HISTORY 42022 + +#define EVERYTHING_IPC_ID_TRAY_EDITOR 41700 +#define EVERYTHING_IPC_ID_TRAY_OPEN_FILELIST 41701 + +#define EVERYTHING_IPC_ID_INDEX_UPDATE_ALL_FOLDERS_NOW 41800 +#define EVERYTHING_IPC_ID_INDEX_FORCE_REBUILD 41801 + +// find the everything IPC window +#define EVERYTHING_IPC_WNDCLASSW L"EVERYTHING_TASKBAR_NOTIFICATION" +#define EVERYTHING_IPC_WNDCLASSA "EVERYTHING_TASKBAR_NOTIFICATION" + +// an Everything search window +#define EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASSW L"EVERYTHING" +#define EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASSA "EVERYTHING" + +// this global window message is sent to all top level windows when everything starts. +#define EVERYTHING_IPC_CREATEDW L"EVERYTHING_IPC_CREATED" +#define EVERYTHING_IPC_CREATEDA "EVERYTHING_IPC_CREATED" + +// search flags for querys +#define EVERYTHING_IPC_MATCHCASE 0x00000001 // match case +#define EVERYTHING_IPC_MATCHWHOLEWORD 0x00000002 // match whole word +#define EVERYTHING_IPC_MATCHPATH 0x00000004 // include paths in search +#define EVERYTHING_IPC_REGEX 0x00000008 // enable regex +#define EVERYTHING_IPC_MATCHACCENTS 0x00000010 // match diacritic marks +#define EVERYTHING_IPC_MATCHDIACRITICS 0x00000010 // match diacritic marks +#define EVERYTHING_IPC_MATCHPREFIX 0x00000020 // match prefix (Everything 1.5) +#define EVERYTHING_IPC_MATCHSUFFIX 0x00000040 // match suffix (Everything 1.5) +#define EVERYTHING_IPC_IGNOREPUNCTUATION 0x00000080 // ignore punctuation (Everything 1.5) +#define EVERYTHING_IPC_IGNOREWHITESPACE 0x00000100 // ignore white-space (Everything 1.5) + +// item flags +#define EVERYTHING_IPC_FOLDER 0x00000001 // The item is a folder. (it's a file if not set) +#define EVERYTHING_IPC_DRIVE 0x00000002 // the file or folder is a drive/root. +#define EVERYTHING_IPC_ROOT 0x00000002 // the file or folder is a root. + +typedef struct EVERYTHING_IPC_COMMAND_LINE +{ + DWORD show_command; // MUST be one of the SW_* ShowWindow() commands + + // null terminated variable sized command line text in UTF-8. + BYTE command_line_text[1]; + +}EVERYTHING_IPC_COMMAND_LINE; + +// the WM_COPYDATA message for a query. +#define EVERYTHING_IPC_COPYDATA_COMMAND_LINE_UTF8 0 // Send a EVERYTHING_IPC_COMMAND_LINE structure. +#define EVERYTHING_IPC_COPYDATAQUERYA 1 +#define EVERYTHING_IPC_COPYDATAQUERYW 2 + +// all results +#define EVERYTHING_IPC_ALLRESULTS 0xFFFFFFFF // all results + +// macro to get the filename of an item +#define EVERYTHING_IPC_ITEMFILENAMEA(list,item) (CHAR *)((CHAR *)(list) + ((EVERYTHING_IPC_ITEMA *)(item))->filename_offset) +#define EVERYTHING_IPC_ITEMFILENAMEW(list,item) (WCHAR *)((CHAR *)(list) + ((EVERYTHING_IPC_ITEMW *)(item))->filename_offset) + +// macro to get the path of an item +#define EVERYTHING_IPC_ITEMPATHA(list,item) (CHAR *)((CHAR *)(list) + ((EVERYTHING_IPC_ITEMA *)(item))->path_offset) +#define EVERYTHING_IPC_ITEMPATHW(list,item) (WCHAR *)((CHAR *)(list) + ((EVERYTHING_IPC_ITEMW *)(item))->path_offset) + +#pragma pack (push,1) + +// +// Varible sized query struct sent to everything. +// +// sent in the form of a WM_COPYDATA message with EVERYTHING_IPC_COPYDATAQUERY as the +// dwData member in the COPYDATASTRUCT struct. +// set the lpData member of the COPYDATASTRUCT struct to point to your EVERYTHING_IPC_QUERY struct. +// set the cbData member of the COPYDATASTRUCT struct to the size of the +// EVERYTHING_IPC_QUERY struct minus the size of a TCHAR plus the length of the search string in bytes plus +// one TCHAR for the null terminator. +// +// NOTE: to determine the size of this structure use +// ASCII: sizeof(EVERYTHING_IPC_QUERYA) - sizeof(CHAR) + strlen(search_string)*sizeof(CHAR) + sizeof(CHAR) +// UNICODE: sizeof(EVERYTHING_IPC_QUERYW) - sizeof(WCHAR) + wcslen(search_string)*sizeof(WCHAR) + sizeof(WCHAR) +// +// NOTE: Everything will only do one query per window. +// Sending another query when a query has not completed +// will cancel the old query and start the new one. +// +// Everything will send the results to the reply_hwnd in the form of a +// WM_COPYDATA message with the dwData value you specify. +// +// Everything will return TRUE if successful. +// returns FALSE if not supported. +// +// If you query with EVERYTHING_IPC_COPYDATAQUERYW, the results sent from Everything will be Unicode. +// + +typedef struct EVERYTHING_IPC_QUERYW +{ + // the window that will receive the new results. + // only 32bits are required to store a window handle. (even on x64) + DWORD reply_hwnd; + + // the value to set the dwData member in the COPYDATASTRUCT struct + // sent by Everything when the query is complete. + DWORD reply_copydata_message; + + // search flags (see EVERYTHING_IPC_MATCHCASE | EVERYTHING_IPC_MATCHWHOLEWORD | EVERYTHING_IPC_MATCHPATH) + DWORD search_flags; + + // only return results after 'offset' results (0 to return from the first result) + // useful for scrollable lists + DWORD offset; + + // the number of results to return + // zero to return no results + // EVERYTHING_IPC_ALLRESULTS to return ALL results + DWORD max_results; + + // null terminated string. variable lengthed search string buffer. + WCHAR search_string[1]; + +}EVERYTHING_IPC_QUERYW; + +// ASCII version +typedef struct EVERYTHING_IPC_QUERYA +{ + // the window that will receive the new results. + // only 32bits are required to store a window handle. (even on x64) + DWORD reply_hwnd; + + // the value to set the dwData member in the COPYDATASTRUCT struct + // sent by Everything when the query is complete. + DWORD reply_copydata_message; + + // search flags (see EVERYTHING_IPC_MATCHCASE | EVERYTHING_IPC_MATCHWHOLEWORD | EVERYTHING_IPC_MATCHPATH) + DWORD search_flags; + + // only return results after 'offset' results (0 to return from the first result) + // useful for scrollable lists + DWORD offset; + + // the number of results to return + // zero to return no results + // EVERYTHING_IPC_ALLRESULTS to return ALL results + DWORD max_results; + + // null terminated string. variable lengthed search string buffer. + CHAR search_string[1]; + +}EVERYTHING_IPC_QUERYA; + +// +// Varible sized result list struct received from Everything. +// +// Sent in the form of a WM_COPYDATA message to the hwnd specifed in the +// EVERYTHING_IPC_QUERY struct. +// the dwData member of the COPYDATASTRUCT struct will match the sent +// reply_copydata_message member in the EVERYTHING_IPC_QUERY struct. +// +// make a copy of the data before returning. +// +// return TRUE if you processed the WM_COPYDATA message. +// + +typedef struct EVERYTHING_IPC_ITEMW +{ + // item flags + DWORD flags; + + // The offset of the filename from the beginning of the list structure. + // (wchar_t *)((char *)everything_list + everythinglist->name_offset) + DWORD filename_offset; + + // The offset of the filename from the beginning of the list structure. + // (wchar_t *)((char *)everything_list + everythinglist->path_offset) + DWORD path_offset; + +}EVERYTHING_IPC_ITEMW; + +typedef struct EVERYTHING_IPC_ITEMA +{ + // item flags + DWORD flags; + + // The offset of the filename from the beginning of the list structure. + // (char *)((char *)everything_list + everythinglist->name_offset) + DWORD filename_offset; + + // The offset of the filename from the beginning of the list structure. + // (char *)((char *)everything_list + everythinglist->path_offset) + DWORD path_offset; + +}EVERYTHING_IPC_ITEMA; + +typedef struct EVERYTHING_IPC_LISTW +{ + // the total number of folders found. + DWORD totfolders; + + // the total number of files found. + DWORD totfiles; + + // totfolders + totfiles + DWORD totitems; + + // the number of folders available. + DWORD numfolders; + + // the number of files available. + DWORD numfiles; + + // the number of items available. + DWORD numitems; + + // index offset of the first result in the item list. + DWORD offset; + + // variable lengthed item list. + // use numitems to determine the actual number of items available. + EVERYTHING_IPC_ITEMW items[1]; + +}EVERYTHING_IPC_LISTW; + +typedef struct EVERYTHING_IPC_LISTA +{ + // the total number of folders found. + DWORD totfolders; + + // the total number of files found. + DWORD totfiles; + + // totfolders + totfiles + DWORD totitems; + + // the number of folders available. + DWORD numfolders; + + // the number of files available. + DWORD numfiles; + + // the number of items available. + DWORD numitems; + + // index offset of the first result in the item list. + DWORD offset; + + // variable lengthed item list. + // use numitems to determine the actual number of items available. + EVERYTHING_IPC_ITEMA items[1]; + +}EVERYTHING_IPC_LISTA; + +#pragma pack (pop) + +#ifdef UNICODE +#define EVERYTHING_IPC_COPYDATAQUERY EVERYTHING_IPC_COPYDATAQUERYW +#define EVERYTHING_IPC_ITEMFILENAME EVERYTHING_IPC_ITEMFILENAMEW +#define EVERYTHING_IPC_ITEMPATH EVERYTHING_IPC_ITEMPATHW +#define EVERYTHING_IPC_QUERY EVERYTHING_IPC_QUERYW +#define EVERYTHING_IPC_ITEM EVERYTHING_IPC_ITEMW +#define EVERYTHING_IPC_LIST EVERYTHING_IPC_LISTW +#define EVERYTHING_IPC_WNDCLASS EVERYTHING_IPC_WNDCLASSW +#define EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASSW +#define EVERYTHING_IPC_CREATED EVERYTHING_IPC_CREATEDW +#else +#define EVERYTHING_IPC_COPYDATAQUERY EVERYTHING_IPC_COPYDATAQUERYA +#define EVERYTHING_IPC_ITEMFILENAME EVERYTHING_IPC_ITEMFILENAMEA +#define EVERYTHING_IPC_ITEMPATH EVERYTHING_IPC_ITEMPATHA +#define EVERYTHING_IPC_QUERY EVERYTHING_IPC_QUERYA +#define EVERYTHING_IPC_ITEM EVERYTHING_IPC_ITEMA +#define EVERYTHING_IPC_LIST EVERYTHING_IPC_LISTA +#define EVERYTHING_IPC_WNDCLASS EVERYTHING_IPC_WNDCLASSA +#define EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASS EVERYTHING_IPC_SEARCH_CLIENT_WNDCLASSA +#define EVERYTHING_IPC_CREATED EVERYTHING_IPC_CREATEDA +#endif + +// the WM_COPYDATA message for a query. +// requires Everything 1.4.1 +#define EVERYTHING_IPC_COPYDATA_QUERY2A 17 +#define EVERYTHING_IPC_COPYDATA_QUERY2W 18 + +#define EVERYTHING_IPC_SORT_NAME_ASCENDING 1 +#define EVERYTHING_IPC_SORT_NAME_DESCENDING 2 +#define EVERYTHING_IPC_SORT_PATH_ASCENDING 3 +#define EVERYTHING_IPC_SORT_PATH_DESCENDING 4 +#define EVERYTHING_IPC_SORT_SIZE_ASCENDING 5 +#define EVERYTHING_IPC_SORT_SIZE_DESCENDING 6 +#define EVERYTHING_IPC_SORT_EXTENSION_ASCENDING 7 +#define EVERYTHING_IPC_SORT_EXTENSION_DESCENDING 8 +#define EVERYTHING_IPC_SORT_TYPE_NAME_ASCENDING 9 +#define EVERYTHING_IPC_SORT_TYPE_NAME_DESCENDING 10 +#define EVERYTHING_IPC_SORT_DATE_CREATED_ASCENDING 11 +#define EVERYTHING_IPC_SORT_DATE_CREATED_DESCENDING 12 +#define EVERYTHING_IPC_SORT_DATE_MODIFIED_ASCENDING 13 +#define EVERYTHING_IPC_SORT_DATE_MODIFIED_DESCENDING 14 +#define EVERYTHING_IPC_SORT_ATTRIBUTES_ASCENDING 15 +#define EVERYTHING_IPC_SORT_ATTRIBUTES_DESCENDING 16 +#define EVERYTHING_IPC_SORT_FILE_LIST_FILENAME_ASCENDING 17 +#define EVERYTHING_IPC_SORT_FILE_LIST_FILENAME_DESCENDING 18 +#define EVERYTHING_IPC_SORT_RUN_COUNT_ASCENDING 19 +#define EVERYTHING_IPC_SORT_RUN_COUNT_DESCENDING 20 +#define EVERYTHING_IPC_SORT_DATE_RECENTLY_CHANGED_ASCENDING 21 +#define EVERYTHING_IPC_SORT_DATE_RECENTLY_CHANGED_DESCENDING 22 +#define EVERYTHING_IPC_SORT_DATE_ACCESSED_ASCENDING 23 +#define EVERYTHING_IPC_SORT_DATE_ACCESSED_DESCENDING 24 +#define EVERYTHING_IPC_SORT_DATE_RUN_ASCENDING 25 +#define EVERYTHING_IPC_SORT_DATE_RUN_DESCENDING 26 + +#define EVERYTHING_IPC_QUERY2_REQUEST_NAME 0x00000001 +#define EVERYTHING_IPC_QUERY2_REQUEST_PATH 0x00000002 +#define EVERYTHING_IPC_QUERY2_REQUEST_FULL_PATH_AND_NAME 0x00000004 +#define EVERYTHING_IPC_QUERY2_REQUEST_EXTENSION 0x00000008 +#define EVERYTHING_IPC_QUERY2_REQUEST_SIZE 0x00000010 +#define EVERYTHING_IPC_QUERY2_REQUEST_DATE_CREATED 0x00000020 +#define EVERYTHING_IPC_QUERY2_REQUEST_DATE_MODIFIED 0x00000040 +#define EVERYTHING_IPC_QUERY2_REQUEST_DATE_ACCESSED 0x00000080 +#define EVERYTHING_IPC_QUERY2_REQUEST_ATTRIBUTES 0x00000100 +#define EVERYTHING_IPC_QUERY2_REQUEST_FILE_LIST_FILE_NAME 0x00000200 +#define EVERYTHING_IPC_QUERY2_REQUEST_RUN_COUNT 0x00000400 +#define EVERYTHING_IPC_QUERY2_REQUEST_DATE_RUN 0x00000800 +#define EVERYTHING_IPC_QUERY2_REQUEST_DATE_RECENTLY_CHANGED 0x00001000 +#define EVERYTHING_IPC_QUERY2_REQUEST_HIGHLIGHTED_NAME 0x00002000 +#define EVERYTHING_IPC_QUERY2_REQUEST_HIGHLIGHTED_PATH 0x00004000 +#define EVERYTHING_IPC_QUERY2_REQUEST_HIGHLIGHTED_FULL_PATH_AND_NAME 0x00008000 + +#define EVERYTHING_IPC_FILE_INFO_FILE_SIZE 1 +#define EVERYTHING_IPC_FILE_INFO_FOLDER_SIZE 2 +#define EVERYTHING_IPC_FILE_INFO_DATE_CREATED 3 +#define EVERYTHING_IPC_FILE_INFO_DATE_MODIFIED 4 +#define EVERYTHING_IPC_FILE_INFO_DATE_ACCESSED 5 +#define EVERYTHING_IPC_FILE_INFO_ATTRIBUTES 6 + +#pragma pack (push,1) + +// +// Varible sized query struct sent to everything. +// +// sent in the form of a WM_COPYDATA message with EVERYTHING_IPC_COPYDATA_QUERY2 as the +// dwData member in the COPYDATASTRUCT struct. +// set the lpData member of the COPYDATASTRUCT struct to point to your EVERYTHING_IPC_QUERY struct. +// set the cbData member of the COPYDATASTRUCT struct to the size of the +// EVERYTHING_IPC_QUERY struct minus the size of a TCHAR plus the length of the search string in bytes plus +// one TCHAR for the null terminator. +// +// NOTE: Everything will only do one query per window. +// Sending another query when a query has not completed +// will cancel the old query and start the new one. +// +// Everything will send the results to the reply_hwnd in the form of a +// WM_COPYDATA message with the dwData value you specify. +// +// Everything will return TRUE if successful. +// returns FALSE if not supported. +// +// If you query with EVERYTHING_IPC_COPYDATA_QUERYW, the results sent from Everything will be Unicode. +// + +// ASCII version +typedef struct EVERYTHING_IPC_QUERY2 +{ + // the window that will receive the new results. + // only 32bits are required to store a window handle. (even on x64) + DWORD reply_hwnd; + + // the value to set the dwData member in the COPYDATASTRUCT struct + // sent by Everything when the query is complete. + DWORD reply_copydata_message; + + // search flags (see EVERYTHING_IPC_MATCHCASE | EVERYTHING_IPC_MATCHWHOLEWORD | EVERYTHING_IPC_MATCHPATH) + DWORD search_flags; + + // only return results after 'offset' results (0 to return from the first result) + // useful for scrollable lists + DWORD offset; + + // the number of results to return + // zero to return no results + // EVERYTHING_IPC_ALLRESULTS to return ALL results + DWORD max_results; + + // request types. + // one or more of EVERYTHING_IPC_QUERY2_REQUEST_* types. + DWORD request_flags; + + // sort type, set to one of EVERYTHING_IPC_SORT_* types. + // set to EVERYTHING_IPC_SORT_NAME_ASCENDING for the best performance (there will never be a performance hit when sorting by name ascending). + // Other sorts will also be instant if the corresponding fast sort is enabled from Tools -> Options -> Indexes. + DWORD sort_type; + + // followed by null terminated search. + // TCHAR search_string[1]; + +}EVERYTHING_IPC_QUERY2; + +typedef struct EVERYTHING_IPC_ITEM2 +{ + // item flags one of (EVERYTHING_IPC_FOLDER|EVERYTHING_IPC_DRIVE|EVERYTHING_IPC_ROOT) + DWORD flags; + + // offset from the start of the EVERYTHING_IPC_LIST2 struct to the data content + DWORD data_offset; + + // data found at data_offset + // if EVERYTHING_IPC_QUERY2_REQUEST_NAME was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text. + // if EVERYTHING_IPC_QUERY2_REQUEST_PATH was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text. + // if EVERYTHING_IPC_QUERY2_REQUEST_FULL_PATH_AND_NAME was set in request_flags, DWORD name_length (excluding the null terminator); followed by null terminated text. + // if EVERYTHING_IPC_QUERY2_REQUEST_SIZE was set in request_flags, LARGE_INTERGER size; + // if EVERYTHING_IPC_QUERY2_REQUEST_EXTENSION was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text; + // if EVERYTHING_IPC_QUERY2_REQUEST_TYPE_NAME was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text; + // if EVERYTHING_IPC_QUERY2_REQUEST_DATE_CREATED was set in request_flags, FILETIME date; + // if EVERYTHING_IPC_QUERY2_REQUEST_DATE_MODIFIED was set in request_flags, FILETIME date; + // if EVERYTHING_IPC_QUERY2_REQUEST_DATE_ACCESSED was set in request_flags, FILETIME date; + // if EVERYTHING_IPC_QUERY2_REQUEST_ATTRIBUTES was set in request_flags, DWORD attributes; + // if EVERYTHING_IPC_QUERY2_REQUEST_FILELIST_FILENAME was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text; + // if EVERYTHING_IPC_QUERY2_REQUEST_RUN_COUNT was set in request_flags, DWORD run_count; + // if EVERYTHING_IPC_QUERY2_REQUEST_DATE_RUN was set in request_flags, FILETIME date; + // if EVERYTHING_IPC_QUERY2_REQUEST_DATE_RECENTLY_CHANGED was set in request_flags, FILETIME date; + // if EVERYTHING_IPC_QUERY2_REQUEST_HIGHLIGHTED_NAME was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text; ** = *, *text* = highlighted text + // if EVERYTHING_IPC_QUERY2_REQUEST_HIGHLIGHTED_PATH was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text; ** = *, *text* = highlighted text + // if EVERYTHING_IPC_QUERY2_REQUEST_HIGHLIGHTED_FULL_PATH_AND_NAME was set in request_flags, DWORD name_length in characters (excluding the null terminator); followed by null terminated text; ** = *, *text* = highlighted text + +}EVERYTHING_IPC_ITEM2; + +typedef struct EVERYTHING_IPC_LIST2 +{ + // number of items found. + DWORD totitems; + + // the number of items available. + DWORD numitems; + + // index offset of the first result in the item list. + DWORD offset; + + // valid request types. + DWORD request_flags; + + // this sort type. + // one of EVERYTHING_IPC_SORT_* types. + // maybe different to requested sort type. + DWORD sort_type; + + // items follow. + // EVERYTHING_IPC_ITEM2 items[numitems] + + // item data follows. + +}EVERYTHING_IPC_LIST2; + +#pragma pack (pop) + +// Get the Run Count for a file, by filename. +// COPYDATASTRUCT cds; +// cds.dwData = EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTA; +// cds.lpData = TEXT("C:\\folder\\file.txt"); +// cds.cbData = size in bytes of cds.lpData including null terminator. +// SendMessage(everything_taskbar_notification_hwnd,WM_COPYDATA,(WPARAM)(HWND)notify_hwnd,(LPARAM)(COPYDATASTRUCT *)&cds); + +#define EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTA 19 +#define EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTW 20 + +#pragma pack (push,1) + +typedef struct EVERYTHING_IPC_RUN_HISTORY +{ + DWORD run_count; + + // null terminated ansi/wchar filename follows. + // TCHAR filename[]; + +}EVERYTHING_IPC_RUN_HISTORY; + +#pragma pack (pop) + +// Set the Run Count by one for a file, by filename. +// COPYDATASTRUCT cds; +// cds.dwData = EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTA; +// cds.lpData = (EVERYTHING_IPC_RUN_HISTORY *)run_history; +// cds.cbData = size in bytes of cds.lpData including null terminator. +// SendMessage(everything_taskbar_notification_hwnd,WM_COPYDATA,(WPARAM)(HWND)notify_hwnd,(LPARAM)(COPYDATASTRUCT *)&cds); + +#define EVERYTHING_IPC_COPYDATA_SET_RUN_COUNTA 21 +#define EVERYTHING_IPC_COPYDATA_SET_RUN_COUNTW 22 + +// Increment the Run Count by one for a file, by filename. +// COPYDATASTRUCT cds; +// cds.dwData = EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTA; +// cds.lpData = TEXT("C:\\folder\\file.txt"); +// cds.cbData = size in bytes of cds.lpData including null terminator. +// SendMessage(everything_taskbar_notification_hwnd,WM_COPYDATA,(WPARAM)(HWND)notify_hwnd,(LPARAM)(COPYDATASTRUCT *)&cds); + +#define EVERYTHING_IPC_COPYDATA_INC_RUN_COUNTA 23 +#define EVERYTHING_IPC_COPYDATA_INC_RUN_COUNTW 24 + +#ifdef UNICODE +#define EVERYTHING_IPC_COPYDATA_QUERY2 EVERYTHING_IPC_COPYDATA_QUERY2W +#else +#define EVERYTHING_IPC_COPYDATA_QUERY2 EVERYTHING_IPC_COPYDATA_QUERY2A +#endif + +// end extern C +#ifdef __cplusplus +} +#endif + +#endif // _EVERYTHING_H_ + diff --git a/Everything-SDK/src/Everything.c b/Everything-SDK/src/Everything.c new file mode 100644 index 0000000..fdb1b03 --- /dev/null +++ b/Everything-SDK/src/Everything.c @@ -0,0 +1,3299 @@ + +// +// Copyright (C) 2022 David Carpenter +// +// Permission is hereby granted, free of charge, +// to any person obtaining a copy of this software +// and associated documentation files (the "Software"), +// to deal in the Software without restriction, +// including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// 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 OR COPYRIGHT HOLDERS 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. +// + +// Notes: +// this project builds the dll (visual studio will also build the lib for us) +// we declare all exported calls to __stdcall, so theres no need to set the default calling standard. + +// disable warnings +#pragma warning(disable : 4996) // deprecation + +#define EVERYTHINGUSERAPI __declspec(dllexport) + +// include +#include "../include/Everything.h" +#include "../ipc/Everything_IPC.h" + +// return copydata code +#define _EVERYTHING_COPYDATA_QUERYREPLY 0 + +#define _EVERYTHING_MSGFLT_ALLOW 1 + +typedef struct _EVERYTHING_tagCHANGEFILTERSTRUCT +{ + DWORD cbSize; + DWORD ExtStatus; +}_EVERYTHING_CHANGEFILTERSTRUCT, *_EVERYTHING_PCHANGEFILTERSTRUCT; + +static void *_Everything_Alloc(DWORD size); +static void _Everything_Free(void *ptr); +static void _Everything_Initialize(void); +static void _Everything_Lock(void); +static void _Everything_Unlock(void); +static DWORD _Everything_StringLengthA(LPCSTR start); +static DWORD _Everything_StringLengthW(LPCWSTR start); +static BOOL EVERYTHINGAPI _Everything_Query(void); +static BOOL _Everything_ShouldUseVersion2(void); +static BOOL _Everything_SendIPCQuery(void); +static BOOL _Everything_SendIPCQuery2(HWND everything_hwnd); +static void _Everything_FreeLists(void); +static BOOL _Everything_IsValidResultIndex(DWORD dwIndex); +static void *_Everything_GetRequestData(DWORD dwIndex,DWORD dwRequestType); +static BOOL _Everything_IsSchemeNameW(LPCWSTR s); +static BOOL _Everything_IsSchemeNameA(LPCSTR s); +static void _Everything_ChangeWindowMessageFilter(HWND hwnd); +static BOOL _Everything_GetResultRequestData(DWORD dwIndex,DWORD dwRequestType,void *data,int size); +static LPCWSTR _Everything_GetResultRequestStringW(DWORD dwIndex,DWORD dwRequestType); +static LPCSTR _Everything_GetResultRequestStringA(DWORD dwIndex,DWORD dwRequestType); +static BOOL _Everything_SendAPIBoolCommand(int command,LPARAM lParam); +static DWORD _Everything_SendAPIDwordCommand(int command,LPARAM lParam); +static LRESULT _Everything_SendCopyData(int command,const void *data,int size); +static LRESULT WINAPI _Everything_window_proc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam); +static DWORD _Everything_GetNumResults(void); + +// internal state +static BOOL _Everything_MatchPath = FALSE; +static BOOL _Everything_MatchCase = FALSE; +static BOOL _Everything_MatchWholeWord = FALSE; +static BOOL _Everything_Regex = FALSE; +static DWORD _Everything_LastError = FALSE; +static DWORD _Everything_Max = EVERYTHING_IPC_ALLRESULTS; +static DWORD _Everything_Offset = 0; +static DWORD _Everything_Sort = EVERYTHING_SORT_NAME_ASCENDING; +static DWORD _Everything_RequestFlags = EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_FILE_NAME; +static BOOL _Everything_IsUnicodeQuery = FALSE; +static DWORD _Everything_QueryVersion = 0; +static BOOL _Everything_IsUnicodeSearch = FALSE; +static void *_Everything_Search = NULL; // wchar or char +static EVERYTHING_IPC_LIST2 *_Everything_List2 = NULL; +static void *_Everything_List = NULL; // EVERYTHING_IPC_LISTW or EVERYTHING_IPC_LISTA +static volatile BOOL _Everything_Initialized = FALSE; +static volatile LONG _Everything_InterlockedCount = 0; +static CRITICAL_SECTION _Everything_cs; +static HWND _Everything_ReplyWindow = 0; +static DWORD _Everything_ReplyID = 0; +static BOOL (WINAPI *_Everything_pChangeWindowMessageFilterEx)(HWND hWnd,UINT message,DWORD action,_EVERYTHING_PCHANGEFILTERSTRUCT pChangeFilterStruct) = 0; +static HANDLE _Everything_user32_hdll = NULL; +static BOOL _Everything_GotChangeWindowMessageFilterEx = FALSE; + +static void _Everything_Initialize(void) +{ + if (!_Everything_Initialized) + { + if (InterlockedIncrement(&_Everything_InterlockedCount) == 1) + { + // do the initialization.. + InitializeCriticalSection(&_Everything_cs); + + _Everything_Initialized = 1; + } + else + { + // wait for initialization by other thread. + while (!_Everything_Initialized) Sleep(0); + } + } +} + +static void _Everything_Lock(void) +{ + _Everything_Initialize(); + + EnterCriticalSection(&_Everything_cs); +} + +static void _Everything_Unlock(void) +{ + LeaveCriticalSection(&_Everything_cs); +} + +// avoid other libs +static DWORD _Everything_StringLengthA(LPCSTR start) +{ + register LPCSTR s; + + s = start; + + while(*s) + { + s++; + } + + return (DWORD)(s-start); +} + +static DWORD _Everything_StringLengthW(LPCWSTR start) +{ + register LPCWSTR s; + + s = start; + + while(*s) + { + s++; + } + + return (DWORD)(s-start); +} + +void EVERYTHINGAPI Everything_SetSearchW(LPCWSTR lpString) +{ + DWORD len; + + _Everything_Lock(); + + if (_Everything_Search) + { + _Everything_Free(_Everything_Search); + } + + len = _Everything_StringLengthW(lpString) + 1; + + _Everything_Search = _Everything_Alloc(len*sizeof(WCHAR)); + if (_Everything_Search) + { + CopyMemory(_Everything_Search,lpString,len*sizeof(WCHAR)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + _Everything_IsUnicodeSearch = 1; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetSearchA(LPCSTR lpString) +{ + DWORD size; + + _Everything_Lock(); + + if (_Everything_Search) + { + _Everything_Free(_Everything_Search); + } + + size = _Everything_StringLengthA(lpString) + 1; + + _Everything_Search = _Everything_Alloc(size); + if (_Everything_Search) + { + CopyMemory(_Everything_Search,lpString,size); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + _Everything_IsUnicodeSearch = 0; + + _Everything_Unlock(); +} + +LPCSTR EVERYTHINGAPI Everything_GetSearchA(void) +{ + LPCSTR ret; + + _Everything_Lock(); + + if (_Everything_Search) + { + if (_Everything_IsUnicodeSearch) + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = NULL; + } + else + { + ret = (LPCSTR)_Everything_Search; + } + } + else + { + ret = ""; + } + + _Everything_Unlock(); + + return ret; +} + +LPCWSTR EVERYTHINGAPI Everything_GetSearchW(void) +{ + LPCWSTR ret; + + _Everything_Lock(); + + if (_Everything_Search) + { + if (!_Everything_IsUnicodeSearch) + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = NULL; + } + else + { + ret = (LPCWSTR)_Everything_Search; + } + } + else + { + ret = L""; + } + + _Everything_Unlock(); + + return ret; +} + +void EVERYTHINGAPI Everything_SetMatchPath(BOOL bEnable) +{ + _Everything_Lock(); + + _Everything_MatchPath = bEnable; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetMatchCase(BOOL bEnable) +{ + _Everything_Lock(); + + _Everything_MatchCase = bEnable; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetMatchWholeWord(BOOL bEnable) +{ + _Everything_Lock(); + + _Everything_MatchWholeWord = bEnable; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetRegex(BOOL bEnable) +{ + _Everything_Lock(); + + _Everything_Regex = bEnable; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetMax(DWORD dwMax) +{ + _Everything_Lock(); + + _Everything_Max = dwMax; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetOffset(DWORD dwOffset) +{ + _Everything_Lock(); + + _Everything_Offset = dwOffset; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetSort(DWORD dwSort) +{ + _Everything_Lock(); + + _Everything_Sort = dwSort; + + _Everything_Unlock(); +} + +EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SetRequestFlags(DWORD dwRequestFlags) +{ + _Everything_Lock(); + + _Everything_RequestFlags = dwRequestFlags; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetReplyWindow(HWND hWnd) +{ + _Everything_Lock(); + + _Everything_ReplyWindow = hWnd; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_SetReplyID(DWORD dwId) +{ + _Everything_Lock(); + + _Everything_ReplyID = dwId; + + _Everything_Unlock(); +} + +BOOL EVERYTHINGAPI Everything_GetMatchPath(void) +{ + BOOL ret; + + _Everything_Lock(); + + ret = _Everything_MatchPath; + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_GetMatchCase(void) +{ + BOOL ret; + + _Everything_Lock(); + + ret = _Everything_MatchCase; + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_GetMatchWholeWord(void) +{ + BOOL ret; + + _Everything_Lock(); + + ret = _Everything_MatchWholeWord; + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_GetRegex(void) +{ + BOOL ret; + + _Everything_Lock(); + + ret = _Everything_Regex; + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetMax(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_Max; + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetOffset(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_Offset; + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetSort(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_Sort; + + _Everything_Unlock(); + + return ret; +} + +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetRequestFlags(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_RequestFlags; + + _Everything_Unlock(); + + return ret; +} + +HWND EVERYTHINGAPI Everything_GetReplyWindow(void) +{ + HWND ret; + + _Everything_Lock(); + + ret = _Everything_ReplyWindow; + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetReplyID(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_ReplyID; + + _Everything_Unlock(); + + return ret; +} + +// custom window proc +static LRESULT WINAPI _Everything_window_proc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) +{ + switch(msg) + { + case WM_COPYDATA: + { + COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam; + + switch(cds->dwData) + { + case _EVERYTHING_COPYDATA_QUERYREPLY: + + if (_Everything_QueryVersion == 2) + { + _Everything_FreeLists(); + + _Everything_List2 = _Everything_Alloc(cds->cbData); + + if (_Everything_List2) + { + CopyMemory(_Everything_List2,cds->lpData,cds->cbData); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + PostQuitMessage(0); + + return TRUE; + } + else + if (_Everything_QueryVersion == 1) + { + _Everything_FreeLists(); + + _Everything_List = _Everything_Alloc(cds->cbData); + + if (_Everything_List) + { + CopyMemory(_Everything_List,cds->lpData,cds->cbData); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + PostQuitMessage(0); + + return TRUE; + } + + break; + } + + break; + } + } + + return DefWindowProc(hwnd,msg,wParam,lParam); +} + +// get the search length +static DWORD _Everything_GetSearchLengthW(void) +{ + if (_Everything_Search) + { + if (_Everything_IsUnicodeSearch) + { + return _Everything_StringLengthW((LPCWSTR )_Everything_Search); + } + else + { + return MultiByteToWideChar(CP_ACP,0,(LPCSTR )_Everything_Search,-1,0,0); + } + } + + return 0; +} + +// get the search length +static DWORD _Everything_GetSearchLengthA(void) +{ + if (_Everything_Search) + { + if (_Everything_IsUnicodeSearch) + { + return WideCharToMultiByte(CP_ACP,0,(LPCWSTR )_Everything_Search,-1,0,0,0,0); + } + else + { + return _Everything_StringLengthA((LPCSTR )_Everything_Search); + } + } + + return 0; +} + +// get the search +static void _Everything_GetSearchTextW(LPWSTR wbuf) +{ + DWORD wlen; + + if (_Everything_Search) + { + wlen = _Everything_GetSearchLengthW(); + + if (_Everything_IsUnicodeSearch) + { + CopyMemory(wbuf,_Everything_Search,(wlen+1) * sizeof(WCHAR)); + + return; + } + else + { + MultiByteToWideChar(CP_ACP,0,(LPCSTR )_Everything_Search,-1,wbuf,wlen+1); + + return; + } + } + + *wbuf = 0; +} + +// get the search +static void _Everything_GetSearchTextA(LPSTR buf) +{ + DWORD len; + + if (_Everything_Search) + { + len = _Everything_GetSearchLengthA(); + + if (_Everything_IsUnicodeSearch) + { + WideCharToMultiByte(CP_ACP,0,(LPCWSTR )_Everything_Search,-1,buf,len+1,0,0); + + return; + } + else + { + CopyMemory(buf,_Everything_Search,len+1); + + return; + } + } + + *buf = 0; +} + +static DWORD EVERYTHINGAPI _Everything_query_thread_proc(void *param) +{ + HWND everything_hwnd; + + everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); + if (everything_hwnd) + { + WNDCLASSEX wcex; + HWND hwnd; + MSG msg; + int ret; + + ZeroMemory(&wcex,sizeof(WNDCLASSEX)); + wcex.cbSize = sizeof(WNDCLASSEX); + + if (!GetClassInfoEx(GetModuleHandle(0),TEXT("EVERYTHING_DLL"),&wcex)) + { + ZeroMemory(&wcex,sizeof(WNDCLASSEX)); + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.hInstance = GetModuleHandle(0); + wcex.lpfnWndProc = _Everything_window_proc; + wcex.lpszClassName = TEXT("EVERYTHING_DLL"); + + if (!RegisterClassEx(&wcex)) + { + _Everything_LastError = EVERYTHING_ERROR_REGISTERCLASSEX; + + return 0; + } + } + +//FIXME: this should be static so we keep file info cached. + + hwnd = CreateWindow( + TEXT("EVERYTHING_DLL"), + TEXT(""), + 0, + 0,0,0,0, + 0,0,GetModuleHandle(0),0); + + if (hwnd) + { + _Everything_ChangeWindowMessageFilter(hwnd); + + _Everything_ReplyWindow = hwnd; + _Everything_ReplyID = _EVERYTHING_COPYDATA_QUERYREPLY; + + if (_Everything_SendIPCQuery()) + { + // message pump +loop: + + WaitMessage(); + + // update windows + while(PeekMessage(&msg,NULL,0,0,0)) + { + ret = (DWORD)GetMessage(&msg,0,0,0); + if (ret == -1) goto exit; + if (!ret) goto exit; + + // let windows handle it. + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + goto loop; + } + +exit: + + // get result from window. + DestroyWindow(hwnd); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_CREATEWINDOW; + } + } + else + { + // the everything window was not found. + // we can optionally RegisterWindowMessage("EVERYTHING_IPC_CREATED") and + // wait for Everything to post this message to all top level windows when its up and running. + _Everything_LastError = EVERYTHING_ERROR_IPC; + } + + return 0; +} + +static BOOL EVERYTHINGAPI _Everything_Query(void) +{ + HANDLE hthread; + DWORD thread_id; + + // reset the error flag. + _Everything_LastError = 0; + + hthread = CreateThread(0,0,_Everything_query_thread_proc,0,0,&thread_id); + + if (hthread) + { + WaitForSingleObject(hthread,INFINITE); + + CloseHandle(hthread); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_CREATETHREAD; + } + + return (_Everything_LastError == 0)?TRUE:FALSE; +} + +static BOOL _Everything_SendIPCQuery2(HWND everything_hwnd) +{ + BOOL ret; + DWORD size; + EVERYTHING_IPC_QUERY2 *query; + + // try version 2. + + if (_Everything_IsUnicodeQuery) + { + // unicode + size = sizeof(EVERYTHING_IPC_QUERY2) + ((_Everything_GetSearchLengthW() + 1) * sizeof(WCHAR)); + } + else + { + // ansi + size = sizeof(EVERYTHING_IPC_QUERY2) + ((_Everything_GetSearchLengthA() + 1) * sizeof(char)); + } + + // alloc + query = _Everything_Alloc(size); + + if (query) + { + COPYDATASTRUCT cds; + + query->max_results = _Everything_Max; + query->offset = _Everything_Offset; + query->reply_copydata_message = _Everything_ReplyID; + query->search_flags = (_Everything_Regex?EVERYTHING_IPC_REGEX:0) | (_Everything_MatchCase?EVERYTHING_IPC_MATCHCASE:0) | (_Everything_MatchWholeWord?EVERYTHING_IPC_MATCHWHOLEWORD:0) | (_Everything_MatchPath?EVERYTHING_IPC_MATCHPATH:0); + query->reply_hwnd = (DWORD)(DWORD_PTR)_Everything_ReplyWindow; + query->sort_type = (DWORD)_Everything_Sort; + query->request_flags = (DWORD)_Everything_RequestFlags; + + if (_Everything_IsUnicodeQuery) + { + _Everything_GetSearchTextW((LPWSTR)(query + 1)); + } + else + { + _Everything_GetSearchTextA((LPSTR)(query + 1)); + } + + cds.cbData = size; + cds.dwData = _Everything_IsUnicodeQuery ? EVERYTHING_IPC_COPYDATA_QUERY2W : EVERYTHING_IPC_COPYDATA_QUERY2A; + cds.lpData = query; + + if (SendMessage(everything_hwnd,WM_COPYDATA,(WPARAM)_Everything_ReplyWindow,(LPARAM)&cds)) + { + // successful. + ret = TRUE; + } + else + { + // no ipc + _Everything_LastError = EVERYTHING_ERROR_IPC; + + ret = FALSE; + } + + // get result from window. + _Everything_Free(query); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + + ret = FALSE; + } + + return ret; +} + +static BOOL _Everything_ShouldUseVersion2(void) +{ + if (_Everything_RequestFlags != (EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_FILE_NAME)) + { + return TRUE; + } + + if (_Everything_Sort != EVERYTHING_SORT_NAME_ASCENDING) + { + return TRUE; + } + + // just use version 1 + return FALSE; +} + +static BOOL _Everything_SendIPCQuery(void) +{ + HWND everything_hwnd; + BOOL ret; + + // find the everything ipc window. + everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); + if (everything_hwnd) + { + _Everything_QueryVersion = 2; + + // try version 2 first (if we specified some non-version 1 request flags or sort) + if ((_Everything_ShouldUseVersion2()) && (_Everything_SendIPCQuery2(everything_hwnd))) + { + // successful. + ret = TRUE; + } + else + { + DWORD len; + DWORD size; + void *query; + + // try version 1. + + if (_Everything_IsUnicodeQuery) + { + // unicode + len = _Everything_GetSearchLengthW(); + + size = sizeof(EVERYTHING_IPC_QUERYW) - sizeof(WCHAR) + len*sizeof(WCHAR) + sizeof(WCHAR); + } + else + { + // ansi + len = _Everything_GetSearchLengthA(); + + size = sizeof(EVERYTHING_IPC_QUERYA) - sizeof(char) + (len*sizeof(char)) + sizeof(char); + } + + // alloc + query = _Everything_Alloc(size); + + if (query) + { + COPYDATASTRUCT cds; + + if (_Everything_IsUnicodeQuery) + { + ((EVERYTHING_IPC_QUERYW *)query)->max_results = _Everything_Max; + ((EVERYTHING_IPC_QUERYW *)query)->offset = _Everything_Offset; + ((EVERYTHING_IPC_QUERYW *)query)->reply_copydata_message = _Everything_ReplyID; + ((EVERYTHING_IPC_QUERYW *)query)->search_flags = (_Everything_Regex?EVERYTHING_IPC_REGEX:0) | (_Everything_MatchCase?EVERYTHING_IPC_MATCHCASE:0) | (_Everything_MatchWholeWord?EVERYTHING_IPC_MATCHWHOLEWORD:0) | (_Everything_MatchPath?EVERYTHING_IPC_MATCHPATH:0); + ((EVERYTHING_IPC_QUERYW *)query)->reply_hwnd = (DWORD)(DWORD_PTR)_Everything_ReplyWindow; + + _Everything_GetSearchTextW(((EVERYTHING_IPC_QUERYW *)query)->search_string); + } + else + { + ((EVERYTHING_IPC_QUERYA *)query)->max_results = _Everything_Max; + ((EVERYTHING_IPC_QUERYA *)query)->offset = _Everything_Offset; + ((EVERYTHING_IPC_QUERYA *)query)->reply_copydata_message = _Everything_ReplyID; + ((EVERYTHING_IPC_QUERYA *)query)->search_flags = (_Everything_Regex?EVERYTHING_IPC_REGEX:0) | (_Everything_MatchCase?EVERYTHING_IPC_MATCHCASE:0) | (_Everything_MatchWholeWord?EVERYTHING_IPC_MATCHWHOLEWORD:0) | (_Everything_MatchPath?EVERYTHING_IPC_MATCHPATH:0); + ((EVERYTHING_IPC_QUERYA *)query)->reply_hwnd = (DWORD)(DWORD_PTR)_Everything_ReplyWindow; + + _Everything_GetSearchTextA(((EVERYTHING_IPC_QUERYA *)query)->search_string); + } + + cds.cbData = size; + cds.dwData = _Everything_IsUnicodeQuery ? EVERYTHING_IPC_COPYDATAQUERYW : EVERYTHING_IPC_COPYDATAQUERYA; + cds.lpData = query; + + _Everything_QueryVersion = 1; + + if (SendMessage(everything_hwnd,WM_COPYDATA,(WPARAM)_Everything_ReplyWindow,(LPARAM)&cds)) + { + // successful. + ret = TRUE; + } + else + { + // no ipc + _Everything_LastError = EVERYTHING_ERROR_IPC; + + ret = FALSE; + } + + // get result from window. + _Everything_Free(query); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + + ret = FALSE; + } + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_IPC; + + ret = FALSE; + } + + return ret; +} + +BOOL EVERYTHINGAPI Everything_QueryA(BOOL bWait) +{ + BOOL ret; + + _Everything_Lock(); + + _Everything_IsUnicodeQuery = FALSE; + + if (bWait) + { + ret = _Everything_Query(); + } + else + { + ret = _Everything_SendIPCQuery(); + } + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_QueryW(BOOL bWait) +{ + BOOL ret; + + _Everything_Lock(); + + _Everything_IsUnicodeQuery = TRUE; + + if (bWait) + { + ret = _Everything_Query(); + } + else + { + ret = _Everything_SendIPCQuery(); + } + + _Everything_Unlock(); + + return ret; +} + +static int __cdecl _Everything_CompareA(const void *a,const void *b) +{ + int i; + + i = stricmp(EVERYTHING_IPC_ITEMPATHA(_Everything_List,a),EVERYTHING_IPC_ITEMPATHA(_Everything_List,b)); + + if (!i) + { + return stricmp(EVERYTHING_IPC_ITEMFILENAMEA(_Everything_List,a),EVERYTHING_IPC_ITEMFILENAMEA(_Everything_List,b)); + } + else + if (i > 0) + { + return 1; + } + else + { + return -1; + } +} + +static int __cdecl _Everything_CompareW(const void *a,const void *b) +{ + int i; + + i = wcsicmp(EVERYTHING_IPC_ITEMPATHW(_Everything_List,a),EVERYTHING_IPC_ITEMPATHW(_Everything_List,b)); + + if (!i) + { + return wcsicmp(EVERYTHING_IPC_ITEMFILENAMEW(_Everything_List,a),EVERYTHING_IPC_ITEMFILENAMEW(_Everything_List,b)); + } + else + if (i > 0) + { + return 1; + } + else + { + return -1; + } +} + +void EVERYTHINGAPI Everything_SortResultsByPath(void) +{ + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + qsort(((EVERYTHING_IPC_LISTW *)_Everything_List)->items,((EVERYTHING_IPC_LISTW *)_Everything_List)->numitems,sizeof(EVERYTHING_IPC_ITEMW),_Everything_CompareW); + } + else + { + qsort(((EVERYTHING_IPC_LISTA *)_Everything_List)->items,((EVERYTHING_IPC_LISTA *)_Everything_List)->numitems,sizeof(EVERYTHING_IPC_ITEMA),_Everything_CompareA); + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + } + +//FIXME://TODO: sort list2 + + _Everything_Unlock(); +} + +DWORD EVERYTHINGAPI Everything_GetLastError(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_LastError; + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetNumFileResults(void) +{ + DWORD ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->numfiles; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->numfiles; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = 0; + } + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetNumFolderResults(void) +{ + DWORD ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->numfolders; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->numfolders; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = 0; + } + + _Everything_Unlock(); + + return ret; +} + +static DWORD _Everything_GetNumResults(void) +{ + DWORD ret; + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->numitems; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->numitems; + } + } + else + if (_Everything_List2) + { + ret = _Everything_List2->numitems; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = 0; + } + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetNumResults(void) +{ + DWORD ret; + + _Everything_Lock(); + + ret = _Everything_GetNumResults(); + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetTotFileResults(void) +{ + DWORD ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->totfiles; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->totfiles; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = 0; + } + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetTotFolderResults(void) +{ + DWORD ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->totfolders; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->totfolders; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = 0; + } + + _Everything_Unlock(); + + return ret; +} + +DWORD EVERYTHINGAPI Everything_GetTotResults(void) +{ + DWORD ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->totitems; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->totitems; + } + } + else + if (_Everything_List2) + { + ret = _Everything_List2->totitems; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = 0; + } + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_IsVolumeResult(DWORD dwIndex) +{ + BOOL ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + if (_Everything_IsUnicodeQuery) + { + ret = (((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex].flags & EVERYTHING_IPC_DRIVE) ? TRUE : FALSE; + } + else + { + ret = (((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex].flags & EVERYTHING_IPC_DRIVE) ? TRUE : FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + if (_Everything_List2) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = (((EVERYTHING_IPC_ITEM2 *)(_Everything_List2 + 1))[dwIndex].flags & EVERYTHING_IPC_DRIVE) ? TRUE : FALSE; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = FALSE; + } + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_IsFolderResult(DWORD dwIndex) +{ + BOOL ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + if (_Everything_IsUnicodeQuery) + { + ret = ((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex].flags & (EVERYTHING_IPC_FOLDER) ? TRUE : FALSE; + } + else + { + ret = ((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex].flags & (EVERYTHING_IPC_FOLDER) ? TRUE : FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + if (_Everything_List2) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = (((EVERYTHING_IPC_ITEM2 *)(_Everything_List2 + 1))[dwIndex].flags & (EVERYTHING_IPC_FOLDER)) ? TRUE : FALSE; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = FALSE; + } + + _Everything_Unlock(); + + return ret; +} + +BOOL EVERYTHINGAPI Everything_IsFileResult(DWORD dwIndex) +{ + BOOL ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + if (_Everything_IsUnicodeQuery) + { + ret = (((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex].flags & (EVERYTHING_IPC_FOLDER)) ? FALSE : TRUE; + } + else + { + ret = (((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex].flags & (EVERYTHING_IPC_FOLDER)) ? FALSE : TRUE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + if (_Everything_List2) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = (((EVERYTHING_IPC_ITEM2 *)(_Everything_List2 + 1))[dwIndex].flags & (EVERYTHING_IPC_FOLDER)) ? FALSE : TRUE; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = FALSE; + } + + _Everything_Unlock(); + + return ret; +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultFileNameW(DWORD dwIndex) +{ + LPCWSTR ret; + + _Everything_Lock(); + + if ((_Everything_List) && (_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = EVERYTHING_IPC_ITEMFILENAMEW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex]); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + if ((_Everything_List2) && (_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_FILE_NAME); + + if (ret) + { + // skip length in characters. + ret = (LPCWSTR)(((char *)ret) + sizeof(DWORD)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = NULL; + } + + _Everything_Unlock(); + + return ret; +} + +LPCSTR EVERYTHINGAPI Everything_GetResultFileNameA(DWORD dwIndex) +{ + LPCSTR ret; + + _Everything_Lock(); + + if ((_Everything_List) && (!_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = EVERYTHING_IPC_ITEMFILENAMEA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex]); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + if ((_Everything_List2) && (!_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_FILE_NAME); + + if (ret) + { + // skip length in characters. + ret = (LPCSTR)(((char *)ret) + sizeof(DWORD)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = NULL; + } + + _Everything_Unlock(); + + return ret; +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultPathW(DWORD dwIndex) +{ + LPCWSTR ret; + + _Everything_Lock(); + + if ((_Everything_List) && (_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = EVERYTHING_IPC_ITEMPATHW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex]); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + if ((_Everything_List2) && (_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_PATH); + + if (ret) + { + // skip length in characters. + ret = (LPCWSTR)(((char *)ret) + sizeof(DWORD)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = NULL; + } + + _Everything_Unlock(); + + return ret; +} + +LPCSTR EVERYTHINGAPI Everything_GetResultPathA(DWORD dwIndex) +{ + LPCSTR ret; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = EVERYTHING_IPC_ITEMPATHA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex]); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + if ((_Everything_List2) && (!_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + ret = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_PATH); + + if (ret) + { + // skip length in characters. + ret = (LPCSTR)(((char *)ret) + sizeof(DWORD)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = NULL; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = NULL; + } + + _Everything_Unlock(); + + return ret; +} + +// max is in chars +static DWORD _Everything_CopyW(LPWSTR buf,DWORD bufmax,DWORD catlen,LPCWSTR s) +{ + DWORD wlen; + + if (buf) + { + buf += catlen; + bufmax -= catlen; + } + + wlen = _Everything_StringLengthW(s); + if (!wlen) + { + if (buf) + { + buf[wlen] = 0; + } + + return catlen; + } + + // terminate + if (wlen > bufmax-1) wlen = bufmax-1; + + if (buf) + { + CopyMemory(buf,s,wlen*sizeof(WCHAR)); + + buf[wlen] = 0; + } + + return wlen + catlen; +} + +static DWORD _Everything_CopyA(LPSTR buf,DWORD max,DWORD catlen,LPCSTR s) +{ + DWORD len; + + if (buf) + { + buf += catlen; + max -= catlen; + } + + len = _Everything_StringLengthA(s); + if (!len) + { + if (buf) + { + buf[len] = 0; + } + + return catlen; + } + + // terminate + if (len > max-1) len = max-1; + + if (buf) + { + CopyMemory(buf,s,len*sizeof(char)); + + buf[len] = 0; + } + + return len + catlen; + +} + +// max is in chars +static DWORD _Everything_CopyWFromA(LPWSTR buf,DWORD bufmax,DWORD catlen,LPCSTR s) +{ + DWORD wlen; + + if (buf) + { + buf += catlen; + bufmax -= catlen; + } + + wlen = MultiByteToWideChar(CP_ACP,0,s,_Everything_StringLengthA(s),0,0); + if (!wlen) + { + if (buf) + { + buf[wlen] = 0; + } + + return catlen; + } + + // terminate + if (wlen > bufmax-1) wlen = bufmax-1; + + if (buf) + { + MultiByteToWideChar(CP_ACP,0,s,_Everything_StringLengthA(s),buf,wlen); + + buf[wlen] = 0; + } + + return wlen + catlen; +} + +static DWORD _Everything_CopyAFromW(LPSTR buf,DWORD max,DWORD catlen,LPCWSTR s) +{ + DWORD len; + + if (buf) + { + buf += catlen; + max -= catlen; + } + + len = WideCharToMultiByte(CP_ACP,0,s,_Everything_StringLengthW(s),0,0,0,0); + if (!len) + { + if (buf) + { + buf[len] = 0; + } + + return catlen; + } + + // terminate + if (len > max-1) len = max-1; + + if (buf) + { + WideCharToMultiByte(CP_ACP,0,s,_Everything_StringLengthW(s),buf,len,0,0); + + buf[len] = 0; + } + + return len + catlen; + +} + +DWORD EVERYTHINGAPI Everything_GetResultFullPathNameW(DWORD dwIndex,LPWSTR wbuf,DWORD wbuf_size_in_wchars) +{ + DWORD len; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,EVERYTHING_IPC_ITEMPATHW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex])); + + if (len) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,len,_Everything_IsSchemeNameW(EVERYTHING_IPC_ITEMPATHW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex])) ? L"/" : L"\\"); + } + } + else + { + len = _Everything_CopyWFromA(wbuf,wbuf_size_in_wchars,0,EVERYTHING_IPC_ITEMPATHA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex])); + + if (len) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,len,_Everything_IsSchemeNameA(EVERYTHING_IPC_ITEMPATHA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex])) ? L"/" : L"\\"); + } + } + + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,len,EVERYTHING_IPC_ITEMFILENAMEW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex])); + } + else + { + len = _Everything_CopyWFromA(wbuf,wbuf_size_in_wchars,len,EVERYTHING_IPC_ITEMFILENAMEA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex])); + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,L""); + } + } + else + if (_Everything_List2) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + const void *full_path_and_name; + + full_path_and_name = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME); + + if (full_path_and_name) + { + // skip number of characters. + full_path_and_name = (void *)(((char *)full_path_and_name) + sizeof(DWORD)); + + // we got the full path and name already. + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,full_path_and_name); + } + else + { + len = _Everything_CopyWFromA(wbuf,wbuf_size_in_wchars,0,full_path_and_name); + } + } + else + { + const void *path; + + path = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_PATH); + + if (path) + { + const void *name; + + // skip number of characters. + path = (void *)(((char *)path) + sizeof(DWORD)); + + name = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_FILE_NAME); + + if (name) + { + // skip number of characters. + name = (void *)(((char *)name) + sizeof(DWORD)); + + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,path); + + if (len) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,len,_Everything_IsSchemeNameW(path) ? L"/" : L"\\"); + } + } + else + { + len = _Everything_CopyWFromA(wbuf,wbuf_size_in_wchars,0,path); + + if (len) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,len,_Everything_IsSchemeNameA(path) ? L"/" : L"\\"); + } + } + + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,len,name); + } + else + { + len = _Everything_CopyWFromA(wbuf,wbuf_size_in_wchars,len,name); + } + } + else + { + // name data not available. + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,L""); + } + } + else + { + // path data not available. + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,L""); + } + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,L""); + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + len = _Everything_CopyW(wbuf,wbuf_size_in_wchars,0,L""); + } + + _Everything_Unlock(); + + return len; +} + +DWORD EVERYTHINGAPI Everything_GetResultFullPathNameA(DWORD dwIndex,LPSTR buf,DWORD bufsize) +{ + DWORD len; + + _Everything_Lock(); + + if (_Everything_List) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyAFromW(buf,bufsize,0,EVERYTHING_IPC_ITEMPATHW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex])); + } + else + { + len = _Everything_CopyA(buf,bufsize,0,EVERYTHING_IPC_ITEMPATHA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex])); + } + + if (len) + { + len = _Everything_CopyA(buf,bufsize,len,_Everything_IsSchemeNameA(buf) ? "/" : "\\"); + } + + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyAFromW(buf,bufsize,len,EVERYTHING_IPC_ITEMFILENAMEW(_Everything_List,&((EVERYTHING_IPC_LISTW *)_Everything_List)->items[dwIndex])); + } + else + { + len = _Everything_CopyA(buf,bufsize,len,EVERYTHING_IPC_ITEMFILENAMEA(_Everything_List,&((EVERYTHING_IPC_LISTA *)_Everything_List)->items[dwIndex])); + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + len = _Everything_CopyA(buf,bufsize,0,""); + } + } + else + if (_Everything_List2) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + const void *full_path_and_name; + + full_path_and_name = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME); + + if (full_path_and_name) + { + // skip number of characters. + full_path_and_name = (void *)(((char *)full_path_and_name) + sizeof(DWORD)); + + // we got the full path and name already. + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyAFromW(buf,bufsize,0,full_path_and_name); + } + else + { + len = _Everything_CopyA(buf,bufsize,0,full_path_and_name); + } + } + else + { + const void *path; + + path = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_PATH); + + if (path) + { + const void *name; + + // skip number of characters. + path = (void *)(((char *)path) + sizeof(DWORD)); + + name = _Everything_GetRequestData(dwIndex,EVERYTHING_REQUEST_FILE_NAME); + + if (name) + { + // skip number of characters. + name = (void *)(((char *)name) + sizeof(DWORD)); + + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyAFromW(buf,bufsize,0,path); + } + else + { + len = _Everything_CopyA(buf,bufsize,0,path); + } + + if (len) + { + len = _Everything_CopyA(buf,bufsize,len,_Everything_IsSchemeNameA(buf) ? "/" : "\\"); + } + + if (_Everything_IsUnicodeQuery) + { + len = _Everything_CopyAFromW(buf,bufsize,len,name); + } + else + { + len = _Everything_CopyA(buf,bufsize,len,name); + } + } + else + { + // name data not available. + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + + len = _Everything_CopyA(buf,bufsize,0,""); + } + } + else + { + // path data not available. + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + + len = _Everything_CopyA(buf,bufsize,0,""); + } + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + len = _Everything_CopyA(buf,bufsize,0,""); + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + len = _Everything_CopyA(buf,bufsize,0,""); + } + + _Everything_Unlock(); + + return len; +} + +BOOL EVERYTHINGAPI Everything_IsQueryReply(UINT message,WPARAM wParam,LPARAM lParam,DWORD dwId) +{ + if (message == WM_COPYDATA) + { + COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam; + + if (cds) + { + if ((cds->dwData == _Everything_ReplyID) && (cds->dwData == dwId)) + { + if (_Everything_QueryVersion == 2) + { + _Everything_FreeLists(); + + _Everything_List2 = _Everything_Alloc(cds->cbData); + + if (_Everything_List2) + { + _Everything_LastError = 0; + + CopyMemory(_Everything_List2,cds->lpData,cds->cbData); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + return TRUE; + } + else + if (_Everything_QueryVersion == 1) + { + if (_Everything_IsUnicodeQuery) + { + _Everything_FreeLists(); + + // TODO: check the size is valid. + _Everything_List = _Everything_Alloc(cds->cbData); + + if (_Everything_List) + { + _Everything_LastError = 0; + + CopyMemory(_Everything_List,cds->lpData,cds->cbData); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + return TRUE; + } + else + { + _Everything_FreeLists(); + + // TODO: check the size is valid. + _Everything_List = _Everything_Alloc(cds->cbData); + + if (_Everything_List) + { + _Everything_LastError = 0; + + CopyMemory(_Everything_List,cds->lpData,cds->cbData); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + } + + return TRUE; + } + } + } + } + } + + return FALSE; +} + +void EVERYTHINGAPI Everything_Reset(void) +{ + _Everything_Lock(); + + if (_Everything_Search) + { + _Everything_Free(_Everything_Search); + + _Everything_Search = 0; + } + + _Everything_FreeLists(); + + // reset state + _Everything_MatchPath = FALSE; + _Everything_MatchCase = FALSE; + _Everything_MatchWholeWord = FALSE; + _Everything_Regex = FALSE; + _Everything_LastError = FALSE; + _Everything_Max = EVERYTHING_IPC_ALLRESULTS; + _Everything_Offset = 0; + _Everything_Sort = EVERYTHING_SORT_NAME_ASCENDING; + _Everything_RequestFlags = EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_FILE_NAME; + _Everything_IsUnicodeQuery = FALSE; + _Everything_IsUnicodeSearch = FALSE; + + _Everything_Unlock(); +} + +void EVERYTHINGAPI Everything_CleanUp(void) +{ + Everything_Reset(); + DeleteCriticalSection(&_Everything_cs); + _Everything_Initialized = 0; + _Everything_InterlockedCount = 0; +} + +static void *_Everything_Alloc(DWORD size) +{ + return HeapAlloc(GetProcessHeap(),0,size); +} + +static void _Everything_Free(void *ptr) +{ + HeapFree(GetProcessHeap(),0,ptr); +} + +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultListSort(void) +{ + DWORD dwSort; + + _Everything_Lock(); + + dwSort = EVERYTHING_SORT_NAME_ASCENDING; + + if (_Everything_List2) + { + dwSort = _Everything_List2->sort_type; + } + + _Everything_Unlock(); + + return dwSort; +} + +EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultListRequestFlags(void) +{ + DWORD dwRequestFlags; + + _Everything_Lock(); + + dwRequestFlags = EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_FILE_NAME; + + if (_Everything_List2) + { + dwRequestFlags = _Everything_List2->request_flags; + } + + _Everything_Unlock(); + + return dwRequestFlags; +} + +static void _Everything_FreeLists(void) +{ + if (_Everything_List) + { + _Everything_Free(_Everything_List); + + _Everything_List = 0; + } + + if (_Everything_List2) + { + _Everything_Free(_Everything_List2); + + _Everything_List2 = 0; + } +} + +static BOOL _Everything_IsValidResultIndex(DWORD dwIndex) +{ + if (dwIndex < 0) + { + return FALSE; + } + + if (dwIndex >= _Everything_GetNumResults()) + { + return FALSE; + } + + return TRUE; +} + +// assumes _Everything_List2 and dwIndex are valid. +static void *_Everything_GetRequestData(DWORD dwIndex,DWORD dwRequestType) +{ + char *p; + EVERYTHING_IPC_ITEM2 *items; + + items = (EVERYTHING_IPC_ITEM2 *)(_Everything_List2 + 1); + + p = ((char *)_Everything_List2) + items[dwIndex].data_offset; + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_FILE_NAME) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_FILE_NAME) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_PATH) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_PATH) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_EXTENSION) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_EXTENSION) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_SIZE) + { + if (dwRequestType == EVERYTHING_REQUEST_SIZE) + { + return p; + } + + p += sizeof(LARGE_INTEGER); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_DATE_CREATED) + { + if (dwRequestType == EVERYTHING_REQUEST_DATE_CREATED) + { + return p; + } + + p += sizeof(FILETIME); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_DATE_MODIFIED) + { + if (dwRequestType == EVERYTHING_REQUEST_DATE_MODIFIED) + { + return p; + } + + p += sizeof(FILETIME); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_DATE_ACCESSED) + { + if (dwRequestType == EVERYTHING_REQUEST_DATE_ACCESSED) + { + return p; + } + + p += sizeof(FILETIME); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_ATTRIBUTES) + { + if (dwRequestType == EVERYTHING_REQUEST_ATTRIBUTES) + { + return p; + } + + p += sizeof(DWORD); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_FILE_LIST_FILE_NAME) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_FILE_LIST_FILE_NAME) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_RUN_COUNT) + { + if (dwRequestType == EVERYTHING_REQUEST_RUN_COUNT) + { + return p; + } + + p += sizeof(DWORD); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_DATE_RUN) + { + if (dwRequestType == EVERYTHING_REQUEST_DATE_RUN) + { + return p; + } + + p += sizeof(FILETIME); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED) + { + if (dwRequestType == EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED) + { + return p; + } + + p += sizeof(FILETIME); + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_HIGHLIGHTED_PATH) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_HIGHLIGHTED_PATH) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + if (_Everything_List2->request_flags & EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME) + { + DWORD len; + + if (dwRequestType == EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME) + { + return p; + } + + len = *(DWORD *)p; + p += sizeof(DWORD); + + if (_Everything_IsUnicodeQuery) + { + p += (len + 1) * sizeof(WCHAR); + } + else + { + p += (len + 1) * sizeof(CHAR); + } + } + + return NULL; +} + +static BOOL _Everything_IsSchemeNameW(LPCWSTR s) +{ + LPCWSTR p; + + p = s; + + while(*p) + { + if (*p == ':') + { + p++; + + if ((p[0] == '/') && (p[1] == '/')) + { + return TRUE; + } + + break; + } + + p++; + } + + return FALSE; +} + +static BOOL _Everything_IsSchemeNameA(LPCSTR s) +{ + LPCSTR p; + + p = s; + + while(*p) + { + if (*p == ':') + { + p++; + + if ((p[0] == '/') && (p[1] == '/')) + { + return TRUE; + } + + break; + } + + p++; + } + + return FALSE; +} + +static void _Everything_ChangeWindowMessageFilter(HWND hwnd) +{ + if (!_Everything_GotChangeWindowMessageFilterEx) + { + // allow the everything window to send a reply. + _Everything_user32_hdll = LoadLibraryW(L"user32.dll"); + + if (_Everything_user32_hdll) + { + _Everything_pChangeWindowMessageFilterEx = (BOOL (WINAPI *)(HWND hWnd,UINT message,DWORD action,_EVERYTHING_PCHANGEFILTERSTRUCT pChangeFilterStruct))GetProcAddress(_Everything_user32_hdll,"ChangeWindowMessageFilterEx"); + } + + _Everything_GotChangeWindowMessageFilterEx = 1; + } + + if (_Everything_GotChangeWindowMessageFilterEx) + { + if (_Everything_pChangeWindowMessageFilterEx) + { + _Everything_pChangeWindowMessageFilterEx(hwnd,WM_COPYDATA,_EVERYTHING_MSGFLT_ALLOW,0); + } + } +} + +static LPCWSTR _Everything_GetResultRequestStringW(DWORD dwIndex,DWORD dwRequestType) +{ + LPCWSTR str; + + _Everything_Lock(); + + if ((_Everything_List2) && (_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + str = _Everything_GetRequestData(dwIndex,dwRequestType); + if (str) + { + // skip length in characters. + str = (LPCWSTR)(((char *)str) + sizeof(DWORD)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + str = NULL; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + str = NULL; + } + + _Everything_Unlock(); + + return str; +} + +static LPCSTR _Everything_GetResultRequestStringA(DWORD dwIndex,DWORD dwRequestType) +{ + LPCSTR str; + + _Everything_Lock(); + + if ((_Everything_List2) && (!_Everything_IsUnicodeQuery)) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + str = _Everything_GetRequestData(dwIndex,dwRequestType); + if (str) + { + // skip length in characters. + str = (LPCSTR)(((char *)str) + sizeof(DWORD)); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + str = NULL; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + str = NULL; + } + + _Everything_Unlock(); + + return str; +} + +static BOOL _Everything_GetResultRequestData(DWORD dwIndex,DWORD dwRequestType,void *data,int size) +{ + BOOL ret; + + _Everything_Lock(); + + if (_Everything_List2) + { + if (_Everything_IsValidResultIndex(dwIndex)) + { + void *request_data; + + request_data = _Everything_GetRequestData(dwIndex,dwRequestType); + if (request_data) + { + CopyMemory(data,request_data,size); + + ret = TRUE; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDREQUEST; + + ret = FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDINDEX; + + ret = FALSE; + } + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = FALSE; + } + + _Everything_Unlock(); + + return ret; +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultExtensionW(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringW(dwIndex,EVERYTHING_REQUEST_EXTENSION); +} + +LPCSTR EVERYTHINGAPI Everything_GetResultExtensionA(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringA(dwIndex,EVERYTHING_REQUEST_EXTENSION); +} + +BOOL EVERYTHINGAPI Everything_GetResultSize(DWORD dwIndex,LARGE_INTEGER *lpSize) +{ + return _Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_SIZE,lpSize,sizeof(LARGE_INTEGER)); +} + +BOOL EVERYTHINGAPI Everything_GetResultDateCreated(DWORD dwIndex,FILETIME *lpDateCreated) +{ + return _Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_DATE_CREATED,lpDateCreated,sizeof(FILETIME)); +} + +BOOL EVERYTHINGAPI Everything_GetResultDateModified(DWORD dwIndex,FILETIME *lpDateModified) +{ + return _Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_DATE_MODIFIED,lpDateModified,sizeof(FILETIME)); +} + +BOOL EVERYTHINGAPI Everything_GetResultDateAccessed(DWORD dwIndex,FILETIME *lpDateAccessed) +{ + return _Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_DATE_ACCESSED,lpDateAccessed,sizeof(FILETIME)); +} + +DWORD EVERYTHINGAPI Everything_GetResultAttributes(DWORD dwIndex) +{ + DWORD dwAttributes; + + if (_Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_ATTRIBUTES,&dwAttributes,sizeof(DWORD))) + { + return dwAttributes; + } + + return INVALID_FILE_ATTRIBUTES; +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultFileListFileNameW(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringW(dwIndex,EVERYTHING_REQUEST_FILE_LIST_FILE_NAME); +} + +LPCSTR EVERYTHINGAPI Everything_GetResultFileListFileNameA(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringA(dwIndex,EVERYTHING_REQUEST_FILE_LIST_FILE_NAME); +} + +DWORD EVERYTHINGAPI Everything_GetResultRunCount(DWORD dwIndex) +{ + DWORD dwRunCount; + + if (_Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_RUN_COUNT,&dwRunCount,sizeof(DWORD))) + { + return dwRunCount; + } + + return 0; +} + +BOOL EVERYTHINGAPI Everything_GetResultDateRun(DWORD dwIndex,FILETIME *lpDateRun) +{ + return _Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_DATE_RUN,lpDateRun,sizeof(FILETIME)); +} + +BOOL EVERYTHINGAPI Everything_GetResultDateRecentlyChanged(DWORD dwIndex,FILETIME *lpDateRecentlyChanged) +{ + return _Everything_GetResultRequestData(dwIndex,EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED,lpDateRecentlyChanged,sizeof(FILETIME)); +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultHighlightedFileNameW(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringW(dwIndex,EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME); +} + +LPCSTR EVERYTHINGAPI Everything_GetResultHighlightedFileNameA(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringA(dwIndex,EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME); +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultHighlightedPathW(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringW(dwIndex,EVERYTHING_REQUEST_HIGHLIGHTED_PATH); +} + +LPCSTR EVERYTHINGAPI Everything_GetResultHighlightedPathA(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringA(dwIndex,EVERYTHING_REQUEST_HIGHLIGHTED_PATH); +} + +LPCWSTR EVERYTHINGAPI Everything_GetResultHighlightedFullPathAndFileNameW(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringW(dwIndex,EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME); +} + +LPCSTR EVERYTHINGAPI Everything_GetResultHighlightedFullPathAndFileNameA(DWORD dwIndex) +{ + return _Everything_GetResultRequestStringA(dwIndex,EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME); +} + +static BOOL _Everything_SendAPIBoolCommand(int command,LPARAM lParam) +{ + HWND everything_hwnd; + + everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); + if (everything_hwnd) + { + _Everything_LastError = 0; + + // use SendMessageTimeout and check the message was sent successfully.. + if (SendMessage(everything_hwnd,EVERYTHING_WM_IPC,command,lParam)) + { + return TRUE; + } + else + { + return FALSE; + } + } + else + { + // the everything window was not found. + // we can optionally RegisterWindowMessage("EVERYTHING_IPC_CREATED") and + // wait for Everything to post this message to all top level windows when its up and running. + _Everything_LastError = EVERYTHING_ERROR_IPC; + + return FALSE; + } +} + +static DWORD _Everything_SendAPIDwordCommand(int command,LPARAM lParam) +{ + HWND everything_hwnd; + + everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); + if (everything_hwnd) + { + _Everything_LastError = 0; + + // use SendMessageTimeout and check the message was sent successfully.. + return (DWORD)SendMessage(everything_hwnd,EVERYTHING_WM_IPC,command,lParam); + } + else + { + // the everything window was not found. + // we can optionally RegisterWindowMessage("EVERYTHING_IPC_CREATED") and + // wait for Everything to post this message to all top level windows when its up and running. + _Everything_LastError = EVERYTHING_ERROR_IPC; + + return 0; + } +} + +BOOL EVERYTHINGAPI Everything_IsDBLoaded(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_IS_DB_LOADED,0); +} + +BOOL EVERYTHINGAPI Everything_IsAdmin(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_IS_ADMIN,0); +} + +BOOL EVERYTHINGAPI Everything_IsAppData(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_IS_APPDATA,0); +} + +BOOL EVERYTHINGAPI Everything_RebuildDB(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_REBUILD_DB,0); +} + +BOOL EVERYTHINGAPI Everything_UpdateAllFolderIndexes(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_UPDATE_ALL_FOLDER_INDEXES,0); +} + +BOOL EVERYTHINGAPI Everything_SaveDB(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_SAVE_DB,0); +} + +BOOL EVERYTHINGAPI Everything_SaveRunHistory(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_SAVE_RUN_HISTORY,0); +} + +BOOL EVERYTHINGAPI Everything_DeleteRunHistory(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_DELETE_RUN_HISTORY,0); +} + +DWORD EVERYTHINGAPI Everything_GetMajorVersion(void) +{ + return _Everything_SendAPIDwordCommand(EVERYTHING_IPC_GET_MAJOR_VERSION,0); +} + +DWORD EVERYTHINGAPI Everything_GetMinorVersion(void) +{ + return _Everything_SendAPIDwordCommand(EVERYTHING_IPC_GET_MINOR_VERSION,0); +} + +DWORD EVERYTHINGAPI Everything_GetRevision(void) +{ + return _Everything_SendAPIDwordCommand(EVERYTHING_IPC_GET_REVISION,0); +} + +DWORD EVERYTHINGAPI Everything_GetBuildNumber(void) +{ + return _Everything_SendAPIDwordCommand(EVERYTHING_IPC_GET_BUILD_NUMBER,0); +} + +DWORD EVERYTHINGAPI Everything_GetTargetMachine(void) +{ + return _Everything_SendAPIDwordCommand(EVERYTHING_IPC_GET_TARGET_MACHINE,0); +} + +BOOL EVERYTHINGAPI Everything_Exit(void) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_EXIT,0); +} + +// can be called as admin or standard user. +// will self elevate if needed. +// +// internal use only. +// TODO: no longer used, remove. +UINT EVERYTHINGAPI Everything_MSIExitAndStopService(void *msihandle) +{ + // close Everything client + { + HWND everything_hwnd; + + everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); + if (everything_hwnd) + { + DWORD dwProcessId; + HANDLE process_handle; + + process_handle = 0; + + // wait for Everything to exit. + if (GetWindowThreadProcessId(everything_hwnd,&dwProcessId)) + { + process_handle = OpenProcess(SYNCHRONIZE,FALSE,dwProcessId); + } + + SendMessage(everything_hwnd,WM_CLOSE,0,0); + + if (process_handle) + { + WaitForSingleObject(process_handle,60000); + + CloseHandle(process_handle); + } + } + } + + // stop Everything Service. + { + HANDLE scm_handle; + + // failed? check status.. + scm_handle = OpenSCManager(0,0,SC_MANAGER_ENUMERATE_SERVICE); + + if (scm_handle) + { + SC_HANDLE service_handle; + + service_handle = OpenService(scm_handle,L"Everything",SERVICE_QUERY_CONFIG|SERVICE_QUERY_STATUS); + + if (service_handle) + { + QUERY_SERVICE_CONFIG *service_config; + DWORD bytes_needed; + + service_config = _Everything_Alloc(8192); + if (service_config) + { + if (QueryServiceConfig(service_handle,service_config,8192,&bytes_needed)) + { + if (_Everything_StringLengthW(service_config->lpBinaryPathName) < MAX_PATH) + { + wchar_t filename_wbuf[MAX_PATH]; + const wchar_t *p; + wchar_t *d; + + p = service_config->lpBinaryPathName; + d = filename_wbuf; + + if (*p == '"') + { + p++; + + while(*p) + { + if (*p == '"') + { + break; + } + + *d++ = *p; + p++; + } + } + else + { + while(*p) + { + if (*p == ' ') + { + break; + } + + *d++ = *p; + p++; + } + } + + *d = 0; + + if (*filename_wbuf) + { + SERVICE_STATUS_PROCESS status_process; + HANDLE process_handle; + + process_handle = 0; + + if (QueryServiceStatusEx(service_handle,SC_STATUS_PROCESS_INFO,(BYTE *)&status_process,sizeof(SERVICE_STATUS_PROCESS),&bytes_needed)) + { + if (status_process.dwProcessId) + { + // wait for Everything to exit. + process_handle = OpenProcess(SYNCHRONIZE,FALSE,status_process.dwProcessId); + } + } + +// MessageBox(0,L"EXEC OK",L"EverythingSDK",MB_OK) ; + + // stop service. + if (GetFileAttributes(filename_wbuf) != INVALID_FILE_ATTRIBUTES) + { + SHELLEXECUTEINFO sei; + + ZeroMemory(&sei,sizeof(SHELLEXECUTEINFO)); + + sei.cbSize = sizeof(SHELLEXECUTEINFO); + sei.lpFile = filename_wbuf; + sei.lpParameters = L"-stop-service"; + sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI; + + if (ShellExecuteEx(&sei)) + { + WaitForSingleObject(sei.hProcess,60000); + + CloseHandle(sei.hProcess); + } + } + + if (process_handle) + { + WaitForSingleObject(process_handle,60000); + +// MessageBox(0,L"WAIT OK",L"EverythingSDK",MB_OK) ; + + CloseHandle(process_handle); + } + } + } + } + + _Everything_Free(service_config); + } + + CloseServiceHandle(service_handle); + } + + CloseServiceHandle(scm_handle); + } + } + + return 0; +} + +// MUST be called as an admin +// internal use only. +// TODO: no longer used, remove. +UINT EVERYTHINGAPI Everything_MSIStartService(void *msihandle) +{ + HANDLE scm_handle; + + scm_handle = OpenSCManager(0,0,SC_MANAGER_ENUMERATE_SERVICE); + + if (scm_handle) + { + SC_HANDLE service_handle; + + service_handle = OpenService(scm_handle,L"Everything",SERVICE_START); + + if (service_handle) + { + StartService(service_handle,0,NULL); + + CloseServiceHandle(service_handle); + } + + CloseServiceHandle(scm_handle); + } + + return 0; +} + +BOOL EVERYTHINGAPI Everything_IsFastSort(DWORD sortType) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_IS_FAST_SORT,(LPARAM)sortType); +} + +BOOL EVERYTHINGAPI Everything_IsFileInfoIndexed(DWORD fileInfoType) +{ + return _Everything_SendAPIBoolCommand(EVERYTHING_IPC_IS_FILE_INFO_INDEXED,(LPARAM)fileInfoType); +} + +static LRESULT _Everything_SendCopyData(int command,const void *data,int size) +{ + HWND everything_hwnd; + + everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); + if (everything_hwnd) + { + COPYDATASTRUCT cds; + + cds.cbData = size; + cds.dwData = command; + cds.lpData = (void *)data; + + return SendMessage(everything_hwnd,WM_COPYDATA,0,(LPARAM)&cds); + } + else + { + // the everything window was not found. + // we can optionally RegisterWindowMessage("EVERYTHING_IPC_CREATED") and + // wait for Everything to post this message to all top level windows when its up and running. + _Everything_LastError = EVERYTHING_ERROR_IPC; + + return FALSE; + } +} + +DWORD EVERYTHINGAPI Everything_GetRunCountFromFileNameW(LPCWSTR lpFileName) +{ + return (DWORD)_Everything_SendCopyData(EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTW,lpFileName,(_Everything_StringLengthW(lpFileName) + 1) * sizeof(WCHAR)); +} + +DWORD EVERYTHINGAPI Everything_GetRunCountFromFileNameA(LPCSTR lpFileName) +{ + return (DWORD)_Everything_SendCopyData(EVERYTHING_IPC_COPYDATA_GET_RUN_COUNTA,lpFileName,_Everything_StringLengthA(lpFileName) + 1); +} + +BOOL EVERYTHINGAPI Everything_SetRunCountFromFileNameW(LPCWSTR lpFileName,DWORD dwRunCount) +{ + EVERYTHING_IPC_RUN_HISTORY *run_history; + DWORD len; + BOOL ret; + + len = _Everything_StringLengthW(lpFileName); + + run_history = _Everything_Alloc(sizeof(EVERYTHING_IPC_RUN_HISTORY) + ((len + 1) * sizeof(WCHAR))); + + if (run_history) + { + run_history->run_count = dwRunCount; + CopyMemory(run_history + 1,lpFileName,((len + 1) * sizeof(WCHAR))); + + if (_Everything_SendCopyData(EVERYTHING_IPC_COPYDATA_SET_RUN_COUNTW,run_history,sizeof(EVERYTHING_IPC_RUN_HISTORY) + ((len + 1) * sizeof(WCHAR)))) + { + ret = TRUE; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = FALSE; + } + + _Everything_Free(run_history); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + + ret = FALSE; + } + + return ret; +} + +BOOL EVERYTHINGAPI Everything_SetRunCountFromFileNameA(LPCSTR lpFileName,DWORD dwRunCount) +{ + EVERYTHING_IPC_RUN_HISTORY *run_history; + DWORD len; + BOOL ret; + + len = _Everything_StringLengthA(lpFileName); + + run_history = _Everything_Alloc(sizeof(EVERYTHING_IPC_RUN_HISTORY) + (len + 1)); + + if (run_history) + { + run_history->run_count = dwRunCount; + CopyMemory(run_history + 1,lpFileName,(len + 1)); + + if (_Everything_SendCopyData(EVERYTHING_IPC_COPYDATA_SET_RUN_COUNTA,run_history,sizeof(EVERYTHING_IPC_RUN_HISTORY) + (len + 1))) + { + ret = TRUE; + } + else + { + _Everything_LastError = EVERYTHING_ERROR_INVALIDCALL; + + ret = FALSE; + } + + _Everything_Free(run_history); + } + else + { + _Everything_LastError = EVERYTHING_ERROR_MEMORY; + + ret = FALSE; + } + + return ret; +} + +DWORD EVERYTHINGAPI Everything_IncRunCountFromFileNameW(LPCWSTR lpFileName) +{ + return (DWORD)_Everything_SendCopyData(EVERYTHING_IPC_COPYDATA_INC_RUN_COUNTW,lpFileName,(_Everything_StringLengthW(lpFileName) + 1) * sizeof(WCHAR)); +} + +DWORD EVERYTHINGAPI Everything_IncRunCountFromFileNameA(LPCSTR lpFileName) +{ + return (DWORD)_Everything_SendCopyData(EVERYTHING_IPC_COPYDATA_INC_RUN_COUNTA,lpFileName,_Everything_StringLengthA(lpFileName) + 1); +} diff --git a/Everything-SDK/src/Everything32.def b/Everything-SDK/src/Everything32.def new file mode 100644 index 0000000..393dd32 --- /dev/null +++ b/Everything-SDK/src/Everything32.def @@ -0,0 +1,102 @@ +LIBRARY Everything32 + +EXPORTS + + Everything_GetLastError + + Everything_SetSearchA + Everything_SetSearchW + Everything_SetMatchPath + Everything_SetMatchCase + Everything_SetMatchWholeWord + Everything_SetRegex + Everything_SetMax + Everything_SetOffset + Everything_SetReplyID + Everything_SetReplyWindow + + Everything_GetSearchA + Everything_GetSearchW + Everything_GetMatchPath + Everything_GetMatchCase + Everything_GetMatchWholeWord + Everything_GetRegex + Everything_GetMax + Everything_GetOffset + Everything_GetReplyID + Everything_GetReplyWindow + + Everything_QueryA + Everything_QueryW + + Everything_IsQueryReply + + Everything_SortResultsByPath + + Everything_GetNumFileResults + Everything_GetNumFolderResults + Everything_GetNumResults + Everything_GetTotFileResults + Everything_GetTotFolderResults + Everything_GetTotResults + + Everything_IsVolumeResult + Everything_IsFolderResult + Everything_IsFileResult + + Everything_GetResultFileNameA + Everything_GetResultFileNameW + Everything_GetResultPathA + Everything_GetResultPathW + Everything_GetResultFullPathNameA + Everything_GetResultFullPathNameW + + Everything_Reset + Everything_CleanUp + + Everything_SetSort + Everything_SetRequestFlags + Everything_GetSort + Everything_GetRequestFlags + Everything_GetResultListSort + Everything_GetResultListRequestFlags + Everything_GetResultExtensionW + Everything_GetResultExtensionA + Everything_GetResultSize + Everything_GetResultDateCreated + Everything_GetResultDateModified + Everything_GetResultDateAccessed + Everything_GetResultAttributes + Everything_GetResultFileListFileNameW + Everything_GetResultFileListFileNameA + Everything_GetResultRunCount + Everything_GetResultDateRun + Everything_GetResultDateRecentlyChanged + Everything_GetResultHighlightedFileNameW + Everything_GetResultHighlightedFileNameA + Everything_GetResultHighlightedPathW + Everything_GetResultHighlightedPathA + Everything_GetResultHighlightedFullPathAndFileNameW + Everything_GetResultHighlightedFullPathAndFileNameA + Everything_GetMajorVersion + Everything_GetMinorVersion + Everything_GetRevision + Everything_GetBuildNumber + Everything_Exit + Everything_IsDBLoaded + Everything_IsAdmin + Everything_IsAppData + Everything_RebuildDB + Everything_UpdateAllFolderIndexes + Everything_SaveDB + Everything_SaveRunHistory + Everything_DeleteRunHistory + Everything_GetTargetMachine + Everything_IsFastSort + Everything_IsFileInfoIndexed + Everything_GetRunCountFromFileNameW + Everything_GetRunCountFromFileNameA + Everything_SetRunCountFromFileNameW + Everything_SetRunCountFromFileNameA + Everything_IncRunCountFromFileNameW + Everything_IncRunCountFromFileNameA diff --git a/Everything-SDK/src/Everything64.def b/Everything-SDK/src/Everything64.def new file mode 100644 index 0000000..36d9f76 --- /dev/null +++ b/Everything-SDK/src/Everything64.def @@ -0,0 +1,103 @@ +LIBRARY Everything64 + +EXPORTS + + Everything_GetLastError + + Everything_SetSearchA + Everything_SetSearchW + Everything_SetMatchPath + Everything_SetMatchCase + Everything_SetMatchWholeWord + Everything_SetRegex + Everything_SetMax + Everything_SetOffset + Everything_SetReplyID + Everything_SetReplyWindow + + Everything_GetSearchA + Everything_GetSearchW + Everything_GetMatchPath + Everything_GetMatchCase + Everything_GetMatchWholeWord + Everything_GetRegex + Everything_GetMax + Everything_GetOffset + Everything_GetReplyID + Everything_GetReplyWindow + + Everything_QueryA + Everything_QueryW + + Everything_IsQueryReply + + Everything_SortResultsByPath + + Everything_GetNumFileResults + Everything_GetNumFolderResults + Everything_GetNumResults + Everything_GetTotFileResults + Everything_GetTotFolderResults + Everything_GetTotResults + + Everything_IsVolumeResult + Everything_IsFolderResult + Everything_IsFileResult + + Everything_GetResultFileNameA + Everything_GetResultFileNameW + Everything_GetResultPathA + Everything_GetResultPathW + Everything_GetResultFullPathNameA + Everything_GetResultFullPathNameW + + Everything_Reset + Everything_CleanUp + + Everything_SetSort + Everything_SetRequestFlags + Everything_GetSort + Everything_GetRequestFlags + Everything_GetResultListSort + Everything_GetResultListRequestFlags + Everything_GetResultExtensionW + Everything_GetResultExtensionA + Everything_GetResultSize + Everything_GetResultDateCreated + Everything_GetResultDateModified + Everything_GetResultDateAccessed + Everything_GetResultAttributes + Everything_GetResultFileListFileNameW + Everything_GetResultFileListFileNameA + Everything_GetResultRunCount + Everything_GetResultDateRun + Everything_GetResultDateRecentlyChanged + Everything_GetResultHighlightedFileNameW + Everything_GetResultHighlightedFileNameA + Everything_GetResultHighlightedPathW + Everything_GetResultHighlightedPathA + Everything_GetResultHighlightedFullPathAndFileNameW + Everything_GetResultHighlightedFullPathAndFileNameA + Everything_GetMajorVersion + Everything_GetMinorVersion + Everything_GetRevision + Everything_GetBuildNumber + Everything_Exit + Everything_IsDBLoaded + Everything_IsAdmin + Everything_IsAppData + Everything_RebuildDB + Everything_UpdateAllFolderIndexes + Everything_SaveDB + Everything_SaveRunHistory + Everything_DeleteRunHistory + Everything_GetTargetMachine + Everything_IsFastSort + Everything_IsFileInfoIndexed + Everything_GetRunCountFromFileNameW + Everything_GetRunCountFromFileNameA + Everything_SetRunCountFromFileNameW + Everything_SetRunCountFromFileNameA + Everything_IncRunCountFromFileNameW + Everything_IncRunCountFromFileNameA + \ No newline at end of file diff --git a/Everything-SDK/vs/sdk.dll.test.c.vcproj b/Everything-SDK/vs/sdk.dll.test.c.vcproj new file mode 100644 index 0000000..caa9e1f --- /dev/null +++ b/Everything-SDK/vs/sdk.dll.test.c.vcproj @@ -0,0 +1,793 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Everything-SDK/vs/sdk.dll.test.cpp.vcproj b/Everything-SDK/vs/sdk.dll.test.cpp.vcproj new file mode 100644 index 0000000..5c12043 --- /dev/null +++ b/Everything-SDK/vs/sdk.dll.test.cpp.vcproj @@ -0,0 +1,792 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Everything-SDK/vs/sdk.dll.vcproj b/Everything-SDK/vs/sdk.dll.vcproj new file mode 100644 index 0000000..6798109 --- /dev/null +++ b/Everything-SDK/vs/sdk.dll.vcproj @@ -0,0 +1,760 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 254f9b8..a48737d 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,17 @@ AutoBackups is a Python application designed to automate the backup of Simatic S ## Features - Monitors specified directories for Simatic S7 files (*.s7p) and other user-defined directories. -- Automatically compresses and backs up projects on a defined schedule (daily by default). +- Automatically compresses and backs up projects on a configurable schedule (daily, hourly, 3-hour, 7-hour intervals, startup, or manual). - Supports manual backup triggers. - Skips projects with files in use and retries after one hour. -- Maintains a hash of file timestamps to avoid unnecessary backups. -- User-friendly web interface built with Flask and React for configuration and status monitoring. +- Maintains a two-stage hash system: first checking *.s7p files, then all files to avoid unnecessary backups. +- User-friendly web interface built with Flask for configuration and status monitoring. +- Comprehensive logging system with timestamped log files. ## Project Structure ``` -autobackups + +├── .logs/ # Application logs with startup timestamps ├── src │ ├── app.py # Main entry point of the Flask application │ ├── models @@ -29,7 +31,8 @@ autobackups │ └── js # JavaScript files for client-side functionality ├── templates │ └── index.html # Main HTML template for the web interface -├── config.json # Configuration settings for the application +├── config.json # Global configuration settings for the application +├── projects.json # Per-project configuration, schedules, and hash storage ├── requirements.txt # Python dependencies └── README.md # Project documentation ``` diff --git a/SPECIFICATION.md b/SPECIFICATION.md new file mode 100644 index 0000000..74cb315 --- /dev/null +++ b/SPECIFICATION.md @@ -0,0 +1,245 @@ +# AutoBackups - Especificación Técnica Detallada + +## Resumen Ejecutivo +AutoBackups es una aplicación Python que automatiza el backup de proyectos Simatic S7 y directorios definidos por el usuario, utilizando la API de Everything para búsqueda eficiente de archivos y un sistema de hash inteligente para evitar backups innecesarios. + +## Arquitectura del Sistema + +### 1. Componentes Principales + +#### 1.1 Motor de Búsqueda (Everything API) +- **Librería**: `python-everything` o integración directa con Everything SDK +- **Función**: Localizar archivos *.s7p en directorios de observación +- **Ventaja**: Aprovecha el índice existente de Everything para búsquedas instantáneas + +#### 1.2 Sistema de Hash en Dos Etapas +**Etapa 1**: Hash rápido de archivos *.s7p +- Solo verifica timestamps de archivos .s7p +- Si no hay cambios → no se procede con backup +- Si hay cambios → procede a Etapa 2 + +**Etapa 2**: Hash completo del proyecto +- Calcula hash de todos los archivos del directorio del proyecto +- Compara con último hash almacenado +- Solo hace backup si hay diferencias + +#### 1.3 Scheduler Flexible +- **daily**: Una vez al día a hora configurada +- **hourly**: Cada hora +- **3-hour**: Cada 3 horas +- **7-hour**: Cada 7 horas +- **startup**: Al iniciar la aplicación +- **manual**: Solo bajo demanda del usuario + +### 2. Estructura de Datos + +#### 2.1 config.json (Configuración Global) +```json +{ + "observation_directories": [ + { + "path": "C:\\Projects\\Siemens", + "type": "siemens_s7", + "enabled": true + }, + { + "path": "D:\\Engineering\\Projects", + "type": "siemens_s7", + "enabled": true + }, + { + "path": "C:\\Important\\Docs", + "type": "manual", + "enabled": true + } + ], + "backup_destination": "D:\\Backups\\AutoBackups", + "default_schedule": "daily", + "default_schedule_time": "02:00", + "retry_delay_hours": 1, + "web_interface": { + "host": "127.0.0.1", + "port": 5000 + }, + "logging": { + "level": "INFO", + "max_log_files": 30 + } +} +``` + +#### 2.2 projects.json (Estado de Proyectos) +```json +{ + "projects": [ + { + "id": "project_001", + "name": "PLC_MainLine", + "path": "C:\\Projects\\Siemens\\PLC_MainLine", + "type": "siemens_s7", + "s7p_file": "C:\\Projects\\Siemens\\PLC_MainLine\\PLC_MainLine.s7p", + "schedule": "daily", + "schedule_time": "02:00", + "enabled": true, + "last_backup": "2025-09-01T02:15:30", + "last_s7p_hash": "abc123def456", + "last_full_hash": "def789ghi012", + "last_s7p_timestamp": "2025-08-31T14:30:00", + "status": "ready", + "retry_count": 0, + "next_retry": null, + "error_message": null + } + ] +} +``` + +### 3. Flujo de Operación + +#### 3.1 Inicio de Aplicación +1. Cargar configuración desde `config.json` +2. Cargar estado de proyectos desde `projects.json` +3. Inicializar logger con timestamp de inicio +4. Escanear directorios de observación usando Everything API +5. Actualizar lista de proyectos detectados +6. Iniciar scheduler +7. Iniciar interfaz web Flask + +#### 3.2 Proceso de Backup +1. **Verificación de Acceso**: Intentar abrir archivos en modo lectura +2. **Hash Etapa 1**: Verificar timestamp del archivo .s7p +3. **Hash Etapa 2**: Si Etapa 1 detecta cambios, verificar hash completo +4. **Compresión**: Crear archivo ZIP con estructura de directorios preservada +5. **Almacenamiento**: Guardar en `backup_destination/YYYY-MM-DD_HH-MM-SS/` +6. **Actualización**: Actualizar hashes y timestamps en `projects.json` + +#### 3.3 Gestión de Errores +- **Archivos en uso**: Marcar proyecto para reintento en 1 hora +- **Errores de permisos**: Log de error y notificación en interfaz +- **Errores de espacio**: Verificar espacio disponible antes de backup + +### 4. Interfaz Web + +#### 4.1 Dashboard Principal +- **Lista de Proyectos**: Tabla con estado, último backup, próximo backup +- **Controles Globales**: Backup manual global, pausar/reanudar scheduler +- **Estadísticas**: Total de proyectos, backups exitosos, errores + +#### 4.2 Configuración de Proyectos +- **Habilitación/Deshabilitación**: Toggle por proyecto +- **Configuración de Schedule**: Dropdown con opciones de frecuencia +- **Backup Manual**: Botón de backup inmediato por proyecto + +#### 4.3 Logs y Monitoreo +- **Log Viewer**: Mostrar logs recientes con filtros por nivel +- **Estado del Sistema**: Información de Everything API, espacio en disco + +### 5. Estructura de Backup + +#### 5.1 Nomenclatura de Archivos +``` +backup_destination/ +├── 2025-09-01_02-15-30/ +│ ├── Projects_Siemens_PLC_MainLine.zip +│ └── Important_Docs_Documentation.zip +└── 2025-09-02_02-15-45/ + └── Projects_Siemens_PLC_SecondaryLine.zip +``` + +#### 5.2 Contenido del ZIP +``` +PLC_MainLine.zip +└── Projects/ + └── Siemens/ + └── PLC_MainLine/ + ├── PLC_MainLine.s7p + ├── subfolder1/ + └── subfolder2/ +``` + +### 6. Tecnologías y Librerías + +#### 6.1 Python Core +- **Python**: 3.12 +- **Framework Web**: Flask +- **Scheduler**: APScheduler +- **Compresión**: zipfile (biblioteca estándar) + +#### 6.2 Librerías Específicas +- **Everything API**: `python-everything` o implementación custom +- **Hashing**: hashlib (biblioteca estándar) +- **Config**: json (biblioteca estándar) +- **Logging**: logging (biblioteca estándar) +- **File Access Check**: Implementación custom con try/except + +#### 6.3 Frontend +- **HTML/CSS/JavaScript**: Vanilla (sin React por simplicidad) +- **AJAX**: Para comunicación con Flask API +- **Bootstrap**: Para estilizado responsivo + +### 7. Consideraciones de Seguridad + +#### 7.1 Acceso a Archivos +- Verificación de permisos antes de backup +- Manejo seguro de rutas para evitar path traversal +- Logs de todos los accesos a archivos + +#### 7.2 Interfaz Web +- Solo acceso local (127.0.0.1) +- No autenticación requerida (uso local únicamente) +- Validación de inputs en formularios + +### 8. Logging y Monitoreo + +#### 8.1 Estructura de Logs +``` +.logs/ +├── autobackups_2025-09-01_08-30-15.log +├── autobackups_2025-09-02_08-30-22.log +└── ... +``` + +#### 8.2 Niveles de Log +- **INFO**: Inicio/fin de backups, descubrimiento de proyectos +- **WARNING**: Archivos en uso, reintentos +- **ERROR**: Fallos de backup, errores de configuración +- **DEBUG**: Detalles de hashes, operaciones de archivos + +### 9. Instalación y Despliegue + +#### 9.1 Entorno Miniconda +```bash +conda create --name autobackups python=3.12 +conda activate autobackups +pip install -r requirements.txt +``` + +#### 9.2 Ejecución +- **Desarrollo**: `python src/app.py` +- **Producción**: `pythonw.exe src/app.py` (sin consola) +- **Como servicio**: Futuro enhancement con `python-windows-service` + +### 10. Roadmap de Desarrollo + +#### Fase 1: Core Backend +- [ ] Integración con Everything API +- [ ] Sistema de hash en dos etapas +- [ ] Motor de backup básico +- [ ] Scheduler con APScheduler + +#### Fase 2: Interfaz Web +- [ ] Dashboard básico con Flask +- [ ] API REST para operaciones CRUD +- [ ] Frontend con HTML/JS/Bootstrap + +#### Fase 3: Características Avanzadas +- [ ] Logs web viewer +- [ ] Configuración avanzada de directorios +- [ ] Estadísticas y reportes + +#### Fase 4: Optimizaciones +- [ ] Ejecución como servicio Windows +- [ ] Notificaciones por email +- [ ] Backup incremental + +Este documento será la base para el desarrollo del proyecto AutoBackups. diff --git a/TECHNICAL_QUESTIONS.md b/TECHNICAL_QUESTIONS.md new file mode 100644 index 0000000..4ba2094 --- /dev/null +++ b/TECHNICAL_QUESTIONS.md @@ -0,0 +1,111 @@ +# AutoBackups - Decisiones Técnicas Finalizadas + +## Decisiones Técnicas Confirmadas + +### 1. Everything API - Integración ✅ +**Decisión**: Everything SDK está instalado bajo `Everything-SDK\dll\Everything64.dll` +**Implementación**: Usar PyEverything (Wrapper) sin fallback +**Ruta DLL**: `Everything-SDK\dll\Everything64.dll` + +### 2. Estructura de Backup - Clarificación de Rutas ✅ +**Decisión**: Estructura específica con formato de fecha personalizado +**Ejemplo**: +- Directorio base: `C:\Projects\Siemens` +- Proyecto: `C:\Projects\Siemens\LineA\Project1\project.s7p` +- Backup: `backup_destination/LineA/Project1/2025-09-01/14-30-15_projects.zip` +**Formato**: YYYY-MM-DD para fechas, HH-MM-SS formato 24 horas + +### 3. Configuración de Schedules - Granularidad ✅ +**Decisión**: Ambos niveles (global con override por proyecto) +**Implementación**: +- Configuración global por defecto +- Override individual por proyecto +- Interfaz web para modificar ambos niveles + +### 4. Hash de Archivos - Algoritmo y Almacenamiento ✅ +**Decisión**: Hash de timestamps + tamaño (NO contenido) +**Algoritmo**: MD5 para velocidad +**Incluye**: timestamp + tamaño de archivo +**Prioridad**: Velocidad sobre seguridad criptográfica + +### 5. Detección de Archivos en Uso - Método ✅ +**Decisión**: Detección por intento de compresión +**Método Primario**: Intentar comprimir y detectar errores de exclusividad +**Método Rápido**: Verificar archivo .s7p antes de comprimir proyecto completo +**Manejo de Errores**: Marcar como problema de exclusividad si falla + +### 6. Manejo de Proyectos Grandes - Performance ✅ +**Decisión**: Sin límites de tamaño, tiempo o archivos +**Implementación**: Sin throttling, procesar cualquier tamaño de proyecto +**Prioridad**: Baja prioridad de sistema para no interferir + +### 7. Configuración de Directorios - Recursividad ✅ +**Decisión**: Búsqueda recursiva con optimización para .s7p +**Implementación**: +- Búsqueda recursiva en toda la jerarquía +- Optimización: evitar último nivel para archivos .s7p +- Razón: archivos .s7p no pueden estar en el último nivel del árbol + +### 8. Backup Incremental vs Completo ✅ +**Decisión**: Siempre backup completo +**Implementación**: Todo el proyecto cada vez +**Razón**: Simplicidad y asegurar integridad completa + +### 9. Web Interface - Características Específicas ✅ +**Must-have**: +- Lista de proyectos con estado ✅ +- Trigger manual de backup ✅ +- Ver logs básicos ✅ +- Configurar schedules por proyecto ✅ +- **Modificar configuración general (config.json) ✅** + +**Nice-to-have**: +- Ver progreso de backup en tiempo real +- Estadísticas históricas +- Configurar nuevos directorios + +### 10. Error Handling - Estrategias de Recuperación ✅ +**Espacio Insuficiente**: +- Área de status en página web mostrando espacio libre +- Límite mínimo: 100MB libres para ejecutar backups +- Sin backups si espacio < 100MB + +**Otros Errores**: +- Marcar para reintento en 1 hora +- Log de errores para diagnóstico + +### 11. Startup Behavior - Inicialización ✅ +**Decisión**: Aplicación de background con timers específicos +**Comportamiento**: +- Escaneos programados: cada 1 hora +- Backups mínimo: cada 10 minutos +- Aplicación siempre en background +- Baja prioridad de sistema + +### 12. Multi-threading - Concurrencia ✅ +**Decisión**: Ejecución secuencial (uno por vez) +**Implementación**: +- Backups secuenciales para economizar recursos +- Baja prioridad de sistema +- Orientado a operación en background sin interferir + +## Especificación Técnica Finalizada ✅ + +### Resumen de Decisiones Clave: +1. **Everything SDK**: PyEverything wrapper con DLL local +2. **Estructura de Backup**: `backup_destination/ProjectPath/YYYY-MM-DD/HH-MM-SS_projects.zip` +3. **Hash**: MD5 de (timestamp + tamaño) para velocidad +4. **Detección de Uso**: Por intento de compresión + verificación .s7p +5. **Performance**: Sin límites, baja prioridad, secuencial +6. **Búsqueda**: Recursiva evitando último nivel para .s7p +7. **Backups**: Siempre completos +8. **Interfaz**: Flask con configuración de config.json +9. **Espacio**: Mínimo 100MB libres, status visible +10. **Background**: Escaneos 1h, backups min 10min +11. **Concurrencia**: Secuencial, baja prioridad + +### Próximos Pasos: +1. ✅ Finalizar diseño técnico basado en decisiones +2. ⏳ Actualizar `requirements.txt` con PyEverything +3. ⏳ Comenzar implementación por fases +4. ⏳ Crear estructura básica del proyecto diff --git a/autobackups/SPECIFICATION.md b/autobackups/SPECIFICATION.md new file mode 100644 index 0000000..c3e7a33 --- /dev/null +++ b/autobackups/SPECIFICATION.md @@ -0,0 +1,258 @@ +# AutoBackups - Especificación Técnica Detallada + +## Resumen Ejecutivo +AutoBackups es una aplicación Python que automatiza el backup de proyectos Simatic S7 y directorios definidos por el usuario, utilizando la API de Everything para búsqueda eficiente de archivos y un sistema de hash inteligente para evitar backups innecesarios. + +## Arquitectura del Sistema + +### 1. Componentes Principales + +#### 1.1 Motor de Búsqueda (Everything API) +- **Librería**: PyEverything wrapper +- **DLL Local**: `Everything-SDK\dll\Everything64.dll` +- **Función**: Localizar archivos *.s7p en directorios de observación +- **Optimización**: Evitar último nivel del árbol para archivos .s7p +- **Ventaja**: Aprovecha el índice existente de Everything para búsquedas instantáneas + +#### 1.2 Sistema de Hash en Dos Etapas +**Etapa 1**: Hash rápido de archivos *.s7p +- Solo verifica MD5 de (timestamp + tamaño) de archivos .s7p +- Si no hay cambios → no se procede con backup +- Si hay cambios → procede a Etapa 2 + +**Etapa 2**: Hash completo del proyecto +- Calcula MD5 de (timestamp + tamaño) de todos los archivos del directorio +- Compara con último hash almacenado +- Solo hace backup si hay diferencias + +#### 1.3 Scheduler de Background +- **daily**: Una vez al día a hora configurada +- **hourly**: Cada hora +- **3-hour**: Cada 3 horas +- **7-hour**: Cada 7 horas +- **startup**: Al iniciar la aplicación +- **manual**: Solo bajo demanda del usuario +- **Escaneos**: Automáticos cada 1 hora +- **Backups**: Mínimo cada 10 minutos +- **Prioridad**: Baja prioridad de sistema + +### 2. Estructura de Datos + +#### 2.1 config.json (Configuración Global) +```json +{ + "observation_directories": [ + { + "path": "C:\\Projects\\Siemens", + "type": "siemens_s7", + "enabled": true + }, + { + "path": "D:\\Engineering\\Projects", + "type": "siemens_s7", + "enabled": true + }, + { + "path": "C:\\Important\\Docs", + "type": "manual", + "enabled": true + } + ], + "backup_destination": "D:\\Backups\\AutoBackups", + "default_schedule": "daily", + "default_schedule_time": "02:00", + "retry_delay_hours": 1, + "web_interface": { + "host": "127.0.0.1", + "port": 5000 + }, + "logging": { + "level": "INFO", + "max_log_files": 30 + } +} +``` + +#### 2.2 projects.json (Estado de Proyectos) +```json +{ + "projects": [ + { + "id": "project_001", + "name": "PLC_MainLine", + "path": "C:\\Projects\\Siemens\\PLC_MainLine", + "type": "siemens_s7", + "s7p_file": "C:\\Projects\\Siemens\\PLC_MainLine\\PLC_MainLine.s7p", + "schedule": "daily", + "schedule_time": "02:00", + "enabled": true, + "last_backup": "2025-09-01T02:15:30", + "last_s7p_hash": "abc123def456", + "last_full_hash": "def789ghi012", + "last_s7p_timestamp": "2025-08-31T14:30:00", + "status": "ready", + "retry_count": 0, + "next_retry": null, + "error_message": null + } + ] +} +``` + +### 3. Flujo de Operación + +#### 3.1 Inicio de Aplicación +1. Cargar configuración desde `config.json` +2. Cargar estado de proyectos desde `projects.json` +3. Inicializar logger con timestamp de inicio +4. Escanear directorios de observación usando Everything API +5. Actualizar lista de proyectos detectados +6. Iniciar scheduler +7. Iniciar interfaz web Flask + +#### 4.2 Proceso de Backup +1. **Verificación de Espacio**: Verificar mínimo 100MB libres +2. **Verificación de Acceso .s7p**: Intentar comprimir solo archivo .s7p +3. **Hash Etapa 1**: Verificar MD5 de (timestamp + tamaño) del archivo .s7p +4. **Hash Etapa 2**: Si Etapa 1 detecta cambios, verificar hash completo +5. **Compresión**: Crear archivo ZIP con estructura específica preservada +6. **Almacenamiento**: Guardar en `backup_destination/ProjectPath/YYYY-MM-DD/HH-MM-SS_projects.zip` +7. **Actualización**: Actualizar hashes y timestamps en `projects.json` + +#### 3.3 Gestión de Errores +- **Archivos en uso**: Marcar proyecto para reintento en 1 hora +- **Errores de permisos**: Log de error y notificación en interfaz +- **Errores de espacio**: Verificar espacio disponible antes de backup + +### 4. Interfaz Web + +#### 4.1 Dashboard Principal +- **Lista de Proyectos**: Tabla con estado, último backup, próximo backup +- **Controles Globales**: Backup manual global, pausar/reanudar scheduler +- **Estadísticas**: Total de proyectos, backups exitosos, errores + +#### 4.2 Configuración de Proyectos +- **Habilitación/Deshabilitación**: Toggle por proyecto +- **Configuración de Schedule**: Dropdown con opciones de frecuencia +- **Backup Manual**: Botón de backup inmediato por proyecto + +#### 4.3 Logs y Monitoreo +- **Log Viewer**: Mostrar logs recientes con filtros por nivel +- **Estado del Sistema**: Información de Everything API, espacio en disco + +### 5. Estructura de Backup + +#### 5.1 Nomenclatura de Archivos (Estructura Específica) +``` +backup_destination/ +├── LineA/ +│ └── Project1/ +│ ├── 2025-09-01/ +│ │ ├── 02-15-30_projects.zip +│ │ └── 14-30-15_projects.zip +│ └── 2025-09-02/ +│ └── 02-15-45_projects.zip +└── LineB/ + └── Project2/ + └── 2025-09-01/ + └── 08-20-10_projects.zip +``` + +#### 5.2 Contenido del ZIP +``` +02-15-30_projects.zip +└── LineA/ + └── Project1/ + ├── project.s7p + ├── subfolder1/ + └── subfolder2/ +``` + +### 6. Tecnologías y Librerías + +#### 6.1 Python Core +- **Python**: 3.12 +- **Framework Web**: Flask +- **Scheduler**: APScheduler +- **Compresión**: zipfile (biblioteca estándar) + +#### 6.2 Librerías Específicas +- **Everything API**: PyEverything wrapper con DLL local +- **Hashing**: hashlib MD5 para (timestamp + tamaño) +- **Config**: json (biblioteca estándar) +- **Logging**: logging (biblioteca estándar) +- **File Access Check**: Intento de compresión + verificación .s7p +- **Process Priority**: pywin32 para baja prioridad +- **Disk Space**: psutil para monitoreo de espacio libre + +#### 6.3 Frontend +- **HTML/CSS/JavaScript**: Vanilla (sin React por simplicidad) +- **AJAX**: Para comunicación con Flask API +- **Bootstrap**: Para estilizado responsivo + +### 7. Consideraciones de Seguridad + +#### 7.1 Acceso a Archivos +- Verificación de permisos antes de backup +- Manejo seguro de rutas para evitar path traversal +- Logs de todos los accesos a archivos + +#### 7.2 Interfaz Web +- Solo acceso local (127.0.0.1) +- No autenticación requerida (uso local únicamente) +- Validación de inputs en formularios + +### 8. Logging y Monitoreo + +#### 8.1 Estructura de Logs +``` +.logs/ +├── autobackups_2025-09-01_08-30-15.log +├── autobackups_2025-09-02_08-30-22.log +└── ... +``` + +#### 8.2 Niveles de Log +- **INFO**: Inicio/fin de backups, descubrimiento de proyectos +- **WARNING**: Archivos en uso, reintentos +- **ERROR**: Fallos de backup, errores de configuración +- **DEBUG**: Detalles de hashes, operaciones de archivos + +### 9. Instalación y Despliegue + +#### 9.1 Entorno Miniconda +```bash +conda create --name autobackups python=3.12 +conda activate autobackups +pip install -r requirements.txt +``` + +#### 9.2 Ejecución +- **Desarrollo**: `python src/app.py` +- **Producción**: `pythonw.exe src/app.py` (sin consola) +- **Como servicio**: Futuro enhancement con `python-windows-service` + +### 10. Roadmap de Desarrollo + +#### Fase 1: Core Backend +- [ ] Integración con Everything API +- [ ] Sistema de hash en dos etapas +- [ ] Motor de backup básico +- [ ] Scheduler con APScheduler + +#### Fase 2: Interfaz Web +- [ ] Dashboard básico con Flask +- [ ] API REST para operaciones CRUD +- [ ] Frontend con HTML/JS/Bootstrap + +#### Fase 3: Características Avanzadas +- [ ] Logs web viewer +- [ ] Configuración avanzada de directorios +- [ ] Estadísticas y reportes + +#### Fase 4: Optimizaciones +- [ ] Ejecución como servicio Windows +- [ ] Notificaciones por email +- [ ] Backup incremental + +Este documento será la base para el desarrollo del proyecto AutoBackups. diff --git a/autobackups/config.json b/autobackups/config.json new file mode 100644 index 0000000..97748ef --- /dev/null +++ b/autobackups/config.json @@ -0,0 +1,60 @@ +{ + "observation_directories": [ + { + "path": "C:\\Projects\\Siemens", + "type": "siemens_s7", + "enabled": true, + "description": "Directorio principal de proyectos Siemens" + }, + { + "path": "D:\\Engineering\\Projects", + "type": "siemens_s7", + "enabled": true, + "description": "Proyectos de ingeniería adicionales" + }, + { + "path": "C:\\Important\\Documentation", + "type": "manual", + "enabled": true, + "description": "Documentación importante para backup manual" + } + ], + "backup_destination": "D:\\Backups\\AutoBackups", + "global_settings": { + "default_schedule": "daily", + "default_schedule_time": "02:00", + "retry_delay_hours": 1, + "backup_timeout_minutes": 0, + "min_free_space_mb": 100, + "scan_interval_minutes": 60, + "min_backup_interval_minutes": 10 + }, + "everything_api": { + "dll_path": "Everything-SDK\\dll\\Everything64.dll", + "enabled": true, + "search_depth": -1, + "skip_last_level_for_s7p": true + }, + "web_interface": { + "host": "127.0.0.1", + "port": 5000, + "debug": false + }, + "logging": { + "level": "INFO", + "max_log_files": 30, + "log_rotation_days": 30 + }, + "backup_options": { + "compression_level": 6, + "include_subdirectories": true, + "preserve_directory_structure": true, + "hash_algorithm": "md5", + "hash_includes": ["timestamp", "size"], + "backup_type": "complete", + "process_priority": "low", + "sequential_execution": true, + "filename_format": "HH-MM-SS_projects.zip", + "date_format": "YYYY-MM-DD" + } +} diff --git a/autobackups/projects.json b/autobackups/projects.json new file mode 100644 index 0000000..3c68e69 --- /dev/null +++ b/autobackups/projects.json @@ -0,0 +1,62 @@ +{ + "metadata": { + "version": "1.0", + "last_updated": "2025-09-01T08:30:15Z", + "total_projects": 0 + }, + "projects": [ + { + "id": "example_project_001", + "name": "PLC_MainLine_Example", + "path": "C:\\Projects\\Siemens\\LineA\\Project1", + "type": "siemens_s7", + "s7p_file": "C:\\Projects\\Siemens\\LineA\\Project1\\project.s7p", + "observation_directory": "C:\\Projects\\Siemens", + "relative_path": "LineA\\Project1", + "backup_path": "LineA\\Project1", + "schedule_config": { + "schedule": "daily", + "schedule_time": "02:00", + "enabled": true, + "next_scheduled_backup": "2025-09-02T02:00:00Z" + }, + "backup_history": { + "last_backup_date": "2025-09-01T02:15:30Z", + "last_backup_file": "D:\\Backups\\AutoBackups\\LineA\\Project1\\2025-09-01\\02-15-30_projects.zip", + "backup_count": 5, + "last_successful_backup": "2025-09-01T02:15:30Z" + }, + "hash_info": { + "last_s7p_hash": "abc123def456789", + "last_full_hash": "def789ghi012345", + "last_s7p_timestamp": "2025-08-31T14:30:00Z", + "last_s7p_size": 2048576, + "last_scan_timestamp": "2025-09-01T02:10:00Z", + "file_count": 1247, + "total_size_bytes": 125847296 + }, + "status": { + "current_status": "ready", + "last_error": null, + "retry_count": 0, + "next_retry": null, + "files_in_use": false, + "exclusivity_check_passed": true, + "last_status_update": "2025-09-01T02:15:35Z" + }, + "discovery_info": { + "discovered_date": "2025-09-01T08:30:15Z", + "discovery_method": "everything_api", + "auto_discovered": true + } + } + ], + "statistics": { + "total_backups_created": 15, + "total_backup_size_mb": 2450.5, + "average_backup_time_seconds": 45.2, + "last_global_scan": "2025-09-01T08:30:15Z", + "projects_with_errors": 0, + "projects_pending_retry": 0 + } +} diff --git a/autobackups/requirements.txt b/autobackups/requirements.txt new file mode 100644 index 0000000..c0139b7 --- /dev/null +++ b/autobackups/requirements.txt @@ -0,0 +1,32 @@ +# Core Framework +Flask==2.3.3 +Werkzeug==2.3.7 + +# Scheduling +APScheduler==3.10.4 + +# Everything API Integration +PyEverything==1.0.1 # Wrapper para Everything SDK + +# File Operations and Utilities +pathlib2==2.3.7.post1 # Enhanced pathlib for Python 3.12 +psutil==5.9.5 # System utilities (disk space monitoring) +filelock==3.12.4 # File locking for concurrent access + +# Web Interface +Jinja2==3.1.2 # Template engine for Flask + +# Configuration and Data +jsonschema==4.19.1 # JSON schema validation + +# Logging +colorlog==6.7.0 # Colored logging output + +# Windows-specific dependencies +pywin32==306; sys_platform == "win32" # Windows API access for low priority + +# Development and Testing (opcional, remove for production) +pytest==7.4.2 +pytest-flask==1.2.0 +black==23.9.1 # Code formatting +flake8==6.1.0 # Code linting diff --git a/config.json b/config.json index 57cffcd..26bcbd7 100644 --- a/config.json +++ b/config.json @@ -1,15 +1,51 @@ { - "directories_to_monitor": [ - "C:\\path\\to\\first\\directory", - "C:\\path\\to\\second\\directory" + "observation_directories": [ + { + "path": "C:\\Projects\\Siemens", + "type": "siemens_s7", + "enabled": true, + "description": "Directorio principal de proyectos Siemens" + }, + { + "path": "D:\\Engineering\\Projects", + "type": "siemens_s7", + "enabled": true, + "description": "Proyectos de ingeniería adicionales" + }, + { + "path": "C:\\Important\\Documentation", + "type": "manual", + "enabled": true, + "description": "Documentación importante para backup manual" + } ], - "backup_destination": "C:\\path\\to\\backup\\destination", - "default_backup_schedule": { - "frequency": "daily", - "time": "02:00" + "backup_destination": "D:\\Backups\\AutoBackups", + "global_settings": { + "default_schedule": "daily", + "default_schedule_time": "02:00", + "retry_delay_hours": 1, + "max_concurrent_backups": 2, + "backup_timeout_minutes": 60 }, - "manual_backup_directories": [], - "hashing_enabled": true, - "retry_interval": 3600, - "max_concurrent_backups": 1 -} \ No newline at end of file + "everything_api": { + "enabled": true, + "fallback_to_filesystem_search": true, + "search_depth": -1 + }, + "web_interface": { + "host": "127.0.0.1", + "port": 5000, + "debug": false + }, + "logging": { + "level": "INFO", + "max_log_files": 30, + "log_rotation_days": 30 + }, + "backup_options": { + "compression_level": 6, + "include_subdirectories": true, + "preserve_directory_structure": true, + "hash_algorithm": "md5" + } +} diff --git a/projects.json b/projects.json new file mode 100644 index 0000000..8820777 --- /dev/null +++ b/projects.json @@ -0,0 +1,58 @@ +{ + "metadata": { + "version": "1.0", + "last_updated": "2025-09-01T08:30:15Z", + "total_projects": 0 + }, + "projects": [ + { + "id": "example_project_001", + "name": "PLC_MainLine_Example", + "path": "C:\\Projects\\Siemens\\PLC_MainLine", + "type": "siemens_s7", + "s7p_file": "C:\\Projects\\Siemens\\PLC_MainLine\\PLC_MainLine.s7p", + "observation_directory": "C:\\Projects\\Siemens", + "relative_path": "PLC_MainLine", + "schedule_config": { + "schedule": "daily", + "schedule_time": "02:00", + "enabled": true, + "next_scheduled_backup": "2025-09-02T02:00:00Z" + }, + "backup_history": { + "last_backup_date": "2025-09-01T02:15:30Z", + "last_backup_file": "D:\\Backups\\AutoBackups\\2025-09-01_02-15-30\\Projects_Siemens_PLC_MainLine.zip", + "backup_count": 5, + "last_successful_backup": "2025-09-01T02:15:30Z" + }, + "hash_info": { + "last_s7p_hash": "abc123def456789", + "last_full_hash": "def789ghi012345", + "last_s7p_timestamp": "2025-08-31T14:30:00Z", + "last_scan_timestamp": "2025-09-01T02:10:00Z", + "file_count": 1247 + }, + "status": { + "current_status": "ready", + "last_error": null, + "retry_count": 0, + "next_retry": null, + "files_in_use": false, + "last_status_update": "2025-09-01T02:15:35Z" + }, + "discovery_info": { + "discovered_date": "2025-09-01T08:30:15Z", + "discovery_method": "everything_api", + "auto_discovered": true + } + } + ], + "statistics": { + "total_backups_created": 15, + "total_backup_size_mb": 2450.5, + "average_backup_time_seconds": 45.2, + "last_global_scan": "2025-09-01T08:30:15Z", + "projects_with_errors": 0, + "projects_pending_retry": 0 + } +} diff --git a/requirements.txt b/requirements.txt index ed8b71e..7c45843 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,32 @@ -Flask -Flask-Cors -Flask-RESTful -requests -watchdog -pyzipper -hashlib -pyeverthing \ No newline at end of file +# Core Framework +Flask==2.3.3 +Werkzeug==2.3.7 + +# Scheduling +APScheduler==3.10.4 + +# Everything API Integration (si está disponible) +# python-everything==1.0.1 # Descomenta si existe la librería + +# File Operations and Utilities +pathlib2==2.3.7.post1 # Enhanced pathlib for Python 3.12 +psutil==5.9.5 # System and process utilities +filelock==3.12.4 # File locking for concurrent access + +# Web Interface +Jinja2==3.1.2 # Template engine for Flask + +# Configuration and Data +jsonschema==4.19.1 # JSON schema validation + +# Logging +colorlog==6.7.0 # Colored logging output + +# Development and Testing (opcional, remove for production) +pytest==7.4.2 +pytest-flask==1.2.0 +black==23.9.1 # Code formatting +flake8==6.1.0 # Code linting + +# Windows-specific dependencies +pywin32==306; sys_platform == "win32" # Windows API access