Răsfoiți Sursa

全网最强缩略图工具-暴力多线程版-又不是不能用!

蘭雅sRGB 11 luni în urmă
părinte
comite
692c795324

+ 166 - 19
GuiApp/Everything.h

@@ -1,4 +1,29 @@
 
+//
+// Copyright (C) 2016 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.
+//
+
 #ifndef _EVERYTHING_DLL_
 #define _EVERYTHING_DLL_
 
@@ -10,14 +35,67 @@
 extern "C" {
 #endif
 
-#define EVERYTHING_OK						0
-#define EVERYTHING_ERROR_MEMORY				1
-#define EVERYTHING_ERROR_IPC				2
-#define EVERYTHING_ERROR_REGISTERCLASSEX	3
-#define EVERYTHING_ERROR_CREATEWINDOW		4
-#define EVERYTHING_ERROR_CREATETHREAD		5
-#define EVERYTHING_ERROR_INVALIDINDEX		6
-#define EVERYTHING_ERROR_INVALIDCALL		7
+// 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
@@ -37,7 +115,9 @@ 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 nId);
+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);
@@ -51,13 +131,15 @@ 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 nId);
+EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsQueryReply(UINT message,WPARAM wParam,LPARAM lParam,DWORD dwId);
 
 // write result state
 EVERYTHINGUSERAPI void EVERYTHINGAPI Everything_SortResultsByPath(void);
@@ -69,33 +151,98 @@ 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 nIndex);
-EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsFolderResult(DWORD nIndex);
-EVERYTHINGUSERAPI BOOL EVERYTHINGAPI Everything_IsFileResult(DWORD nIndex);
-EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultFileNameW(DWORD nIndex);
-EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultFileNameA(DWORD nIndex);
-EVERYTHINGUSERAPI LPCWSTR EVERYTHINGAPI Everything_GetResultPathW(DWORD nIndex);
-EVERYTHINGUSERAPI LPCSTR EVERYTHINGAPI Everything_GetResultPathA(DWORD nIndex);
-EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultFullPathNameA(DWORD nIndex,LPSTR buf,DWORD bufsize);
-EVERYTHINGUSERAPI DWORD EVERYTHINGAPI Everything_GetResultFullPathNameW(DWORD nIndex,LPWSTR wbuf,DWORD wbuf_size_in_wchars);
+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

BIN
GuiApp/Everything32.lib


+ 26 - 29
GuiApp/GuiMain.cpp

@@ -14,20 +14,18 @@ HWINDOW hWindow;
 HELE  keyEdit, pathEdit, hList, hStatic;
 HELE hPic1, hPic2, hPic3;
 
-
 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
 {
     Everything_Start();
     XInitXCGUI(); // 初始化
 
-
     extern char ConfigFile[MAX_PATH];
     GetAppDir(ConfigFile);
     strcat(ConfigFile, "/ACThumbs.ini");
     if (IsFileExist(ConfigFile))
         LoadConfigFile();
 
-    hWindow = XWnd_CreateWindow(0, 0, 950, 600, L"Adobe AI EPS INDD PDF和CorelDRAW 缩略图工具  版权所有 2013-2024 Hongwenjun (蘭雅)"); // 创建窗口
+    hWindow = XWnd_CreateWindow(0, 0, 960, 600, L"Adobe AI EPS INDD PDF和CorelDRAW 缩略图工具  版权所有 2013-2024 Hongwenjun (蘭雅)"); // 创建窗口
     if (hWindow) {
         // 设置图标
         HICON logo_hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);
@@ -40,7 +38,6 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL
     return 0;
 }
 
-
 // 读取和保存配置
 void LoadConfigFile()
 {
@@ -58,13 +55,11 @@ void SaveConfigFile()
     wFile.close();
 }
 
-
 // 文本框回写配置
 bool edit_text(void)
 {
     XEdit_GetText(keyEdit, keyFile, MAX_PATH);
     XEdit_GetText(pathEdit, savePath, MAX_PATH);
-
     return true;
 }
 
@@ -81,20 +76,19 @@ void InitXC_Window(HWINDOW& hWindow)
     XEdit_SetText(keyEdit, keyFile);
     XEdit_SetText(pathEdit, savePath);
 
-
     // 工具提示按钮
     HELE keyButton = XBtn_Create(306, 2, 98, 22,  L"关键字 --> 搜索", hWindow);
     XEle_EnableToolTips(keyButton, true);
     XEle_SetToolTips(keyButton, L"请输入关键字,用空格隔开");
 
-    HELE pathButton = XBtn_Create(656, 2, 80, 32, L"选择目录", hWindow);
+    HELE pathButton = XBtn_Create(656, 2, 90, 32, L"选择目录", hWindow);
     XEle_EnableToolTips(pathButton, true);
     XEle_SetToolTips(pathButton, L"选择缩略图保存的目录");
 
-    HELE runButton = XBtn_Create(656, 40, 80, 40, L"开始执行", hWindow);
+    HELE runButton = XBtn_Create(656, 40, 90, 40, L"开始执行", hWindow);
     XEle_EnableToolTips(runButton, true);
     XEle_SetToolTips(runButton, L"开始执行提取缩略图");
-    HELE closeButton = XBtn_Create(656, 88, 80, 32, L"保存关闭", hWindow);
+    HELE closeButton = XBtn_Create(656, 88, 90, 32, L"保存关闭", hWindow);
 
 //    // 注册文本框输入事件
 //    XEle_RegisterEvent(keyEdit, XE_EDIT_CHANGE, keyEditChange);
@@ -117,14 +111,14 @@ void InitXC_Window(HWINDOW& hWindow)
     // 创建静态文本
     hStatic = XStatic_Create(1, 545, 650, 22, L"Adobe AI EPS INDD PDF和CorelDRAW 缩略图工具  版权所有 2013-2024 Hongwenjun (蘭雅)", hWindow);
 
-    XStatic_Create(780, 195, 160, 18, L"微信扫一扫打赏作者", hWindow);
+    XStatic_Create(760, 165, 160, 18, L"兰雅VBA代码分享 lyvba.com", hWindow);
 
     //创建图片元素
-    hPic1 = XPic_Create(656, 250, 270, 256, hWindow);
+    hPic1 = XPic_Create(656, 225, 290, 315, hWindow);
     XPic_SetImage(hPic1, XImage_LoadFile(L"ACThumbs.png")); //设置显示图片
 
-    hPic2 = XPic_Create(740, 2, 190, 190, hWindow);
-    XPic_SetImage(hPic2, XImage_LoadFile(L"Thumbnail.dat")); //设置显示图片
+    hPic2 = XPic_Create(760, 5, 150, 150, hWindow);
+    XPic_SetImage(hPic2, XImage_LoadFile(L"logo.jpg")); //设置显示图片
 
 //    hPic3 = XPic_Create(654, 416, 128, 128, hWindow);
 //    XPic_SetImage(hPic3, XImage_LoadFile(L"Thumbnail.dat")); //设置显示图片
@@ -138,7 +132,6 @@ void InitXC_Window(HWINDOW& hWindow)
     XEle_SetFocus(keyEdit, true);
 }
 
-
 // 事件响应
 
 //bool CALLBACK keyEditChange(HELE hEle, HELE hEventEle)
@@ -259,7 +252,6 @@ BOOL CALLBACK MyEventList_MouseDBClick(HELE hEle, POINT* pPt)
 }
 
 
-
 // 选择一个目录
 int   GetPath(HWND hWnd, char* pBuffer)
 {
@@ -279,24 +271,29 @@ int   GetPath(HWND hWnd, char* pBuffer)
     return   lstrlen(pBuffer);
 }
 
-
 bool Everything_Start(void)
 {
     Everything_SetSearch(L"Everything.exe");
     bool EQRet =  Everything_Query(TRUE);
     if (EQRet == false) {
-
-        STARTUPINFO si;
-        PROCESS_INFORMATION pi;
-        ZeroMemory(&si, sizeof(si));
-        si.cb = sizeof(si);
-        // 后台隐藏
-        si.dwFlags   =   STARTF_USESHOWWINDOW;
-        si.wShowWindow   =   SW_HIDE;
-        ZeroMemory(&pi, sizeof(pi));
-        // Start the child process.
-        CreateProcess(NULL, "Everything.exe", NULL, NULL, FALSE, 0,
-                      NULL, NULL, &si, &pi);
+      MessageBoxA(NULL, "请先运行Everything软件!\n本软件全盘搜索功能需要Everything SDK.", "Everything SDK", MB_OK);
+      return EQRet;
     }
+
+//    if (EQRet == false) {
+//
+//        STARTUPINFO si;
+//        PROCESS_INFORMATION pi;
+//        ZeroMemory(&si, sizeof(si));
+//        si.cb = sizeof(si);
+//        // 后台隐藏
+//        si.dwFlags   =   STARTF_USESHOWWINDOW;
+//        si.wShowWindow   =   SW_HIDE;
+//        ZeroMemory(&pi, sizeof(pi));
+//        // Start the child process.
+//        CreateProcess(NULL, "Everything.exe", NULL, NULL, FALSE, 0,
+//                      NULL, NULL, &si, &pi);
+//    }
+
     return true;
 }

+ 307 - 0
GuiApp/GuiMain.cpp.orig

@@ -0,0 +1,307 @@
+#include "GuiThumbnail.h"
+#include "GuiMain.h"
+#include <wchar.h>
+#include <regex>
+#include "xcgui.h"
+
+// 全局变量
+char ConfigFile[MAX_PATH] = {0};
+WCHAR keyFile[MAX_PATH] =  L"";
+WCHAR savePath[MAX_PATH] = L"D:\\Thumbs缩略图";
+
+// 全局句柄
+HWINDOW hWindow;
+HELE  keyEdit, pathEdit, hList, hStatic;
+HELE hPic1, hPic2, hPic3;
+
+
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
+{
+    Everything_Start();
+    XInitXCGUI(); // 初始化
+
+
+    extern char ConfigFile[MAX_PATH];
+    GetAppDir(ConfigFile);
+    strcat(ConfigFile, "/ACThumbs.ini");
+    if (IsFileExist(ConfigFile))
+        LoadConfigFile();
+
+    hWindow = XWnd_CreateWindow(0, 0, 960, 600, L"Adobe AI EPS INDD PDF和CorelDRAW 缩略图工具  版权所有 2013-2024 Hongwenjun (蘭雅)"); // 创建窗口
+    if (hWindow) {
+        // 设置图标
+        HICON logo_hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);
+        XWnd_SetIcon(hWindow, logo_hIcon, false);
+        InitXC_Window(hWindow); // 窗口布局
+
+        XWnd_ShowWindow(hWindow, SW_SHOW); //显示窗口
+        XRunXCGUI(); //运行
+    }
+    return 0;
+}
+
+
+// 读取和保存配置
+void LoadConfigFile()
+{
+    wfstream wFile(ConfigFile, fstream::in);
+    wFile.imbue(locale("chs"));
+    wFile.getline(keyFile, MAX_PATH);
+    wFile.getline(savePath, MAX_PATH);
+    wFile.close();
+}
+void SaveConfigFile()
+{
+    wfstream wFile(ConfigFile, fstream::out);
+    wFile.imbue(locale("chs"));
+    wFile << keyFile << endl << savePath << endl;
+    wFile.close();
+}
+
+
+// 文本框回写配置
+bool edit_text(void)
+{
+    XEdit_GetText(keyEdit, keyFile, MAX_PATH);
+    XEdit_GetText(pathEdit, savePath, MAX_PATH);
+
+    return true;
+}
+
+// 窗口布局
+void InitXC_Window(HWINDOW& hWindow)
+{
+//   XWnd_SetImage(hWindow, XImage_LoadFile(L"GuiBG.dll")); // 设置窗口背景图片
+
+    // 创建编辑框
+    keyEdit = XEdit_Create(1, 2, 300, 22, hWindow);
+    pathEdit = XEdit_Create(410, 2, 241, 22, hWindow);
+
+    // 读取配置到文本框
+    XEdit_SetText(keyEdit, keyFile);
+    XEdit_SetText(pathEdit, savePath);
+
+
+    // 工具提示按钮
+    HELE keyButton = XBtn_Create(306, 2, 98, 22,  L"关键字 --> 搜索", hWindow);
+    XEle_EnableToolTips(keyButton, true);
+    XEle_SetToolTips(keyButton, L"请输入关键字,用空格隔开");
+
+    HELE pathButton = XBtn_Create(656, 2, 90, 32, L"选择目录", hWindow);
+    XEle_EnableToolTips(pathButton, true);
+    XEle_SetToolTips(pathButton, L"选择缩略图保存的目录");
+
+    HELE runButton = XBtn_Create(656, 40, 90, 40, L"开始执行", hWindow);
+    XEle_EnableToolTips(runButton, true);
+    XEle_SetToolTips(runButton, L"开始执行提取缩略图");
+    HELE closeButton = XBtn_Create(656, 88, 90, 32, L"保存关闭", hWindow);
+
+//    // 注册文本框输入事件
+//    XEle_RegisterEvent(keyEdit, XE_EDIT_CHANGE, keyEditChange);
+
+    // 注册按钮事件
+    XEle_RegisterEvent(keyButton, XE_BNCLICK, keyBtnClick);
+    XEle_RegisterEvent(pathButton, XE_BNCLICK, pathBtnClick);
+    XEle_RegisterEvent(runButton, XE_BNCLICK, runBtnClick);
+    XEle_RegisterEvent(closeButton, XE_BNCLICK, closeBtnClick);
+
+
+    //创建列表元素
+    hList = XList_Create(1, 25, 650, 518, hWindow);
+
+    //添加列表头
+    XList_AddColumn(hList, 260, L"名称", 2);
+    XList_AddColumn(hList, 260, L"路径", 2);
+    XList_AddColumn(hList, 100, L"文件版本", 2);
+
+    // 创建静态文本
+    hStatic = XStatic_Create(1, 545, 650, 22, L"Adobe AI EPS INDD PDF和CorelDRAW 缩略图工具  版权所有 2013-2024 Hongwenjun (蘭雅)", hWindow);
+
+    XStatic_Create(760, 165, 160, 18, L"兰雅VBA代码分享 lyvba.com", hWindow);
+
+    //创建图片元素
+    hPic1 = XPic_Create(656, 225, 290, 315, hWindow);
+    XPic_SetImage(hPic1, XImage_LoadFile(L"ACThumbs.png")); //设置显示图片
+
+    hPic2 = XPic_Create(760, 5, 150, 150, hWindow);
+    XPic_SetImage(hPic2, XImage_LoadFile(L"logo.jpg")); //设置显示图片
+
+//    hPic3 = XPic_Create(654, 416, 128, 128, hWindow);
+//    XPic_SetImage(hPic3, XImage_LoadFile(L"Thumbnail.dat")); //设置显示图片
+
+    //注册列表元素项选择事件
+    XEle_RegisterEvent(hList, XE_LIST_SELECT, MyEventListSelect);
+    XEle_RegisterMessage(hList, XM_MOUSEDBCLICK, MyEventList_MouseDBClick);
+    XEle_RegisterMessage(hList, XM_RBUTTONUP, MyEventList_RButtonUp);
+
+
+    XEle_SetFocus(keyEdit, true);
+}
+
+
+// 事件响应
+
+//bool CALLBACK keyEditChange(HELE hEle, HELE hEventEle)
+//{
+//    return true;
+//}
+
+bool CALLBACK keyBtnClick(HELE hEle, HELE hEventEle)
+{
+    wchar_t keyWord[MAX_PATH] = {0};
+    XEdit_GetText(keyEdit, keyWord, MAX_PATH);
+
+    Everything_SetSearch(keyWord);
+    bool EQRet =  Everything_Query(TRUE);
+    if (EQRet == false) {
+        return false;
+    }
+
+    // 删除所有项目
+    XList_DeleteAllItems(hList);
+
+    const wchar_t* rs = L"(.+)(\\.(?:ai|AI|indd|INDD|Indd|eps|EPS|Eps|pdf|PDF|cdr|CDR|Cdr))";  // 正则字符串,exp开始的单词
+    std::wregex expression(rs);                   // 字符串传递给构造函数,建立正则表达式
+
+    //添加列表项      // Display results.
+    int id = 0;
+    for (int i = 0 ; i < Everything_GetNumResults(); i++) {
+        bool ret = std::regex_match((wchar_t*)Everything_GetResultFileName(i), expression);
+        if (!ret) continue;
+        //添加项
+        XList_AddItem(hList, (wchar_t*)Everything_GetResultFileName(i), 0);
+        //设置子项内容
+        XList_SetItemText(hList, id++, 1, (wchar_t*)Everything_GetResultPath(i), 1);
+//        XList_SetItemText(hList, i, 2, keyWord, 2);
+
+    }
+
+    wchar_t pText[MAX_PATH] = {0};
+    wsprintfW(pText, L"匹配: %d 个文档(AI CDR EPS INDD PDF格式), 鼠标双击: 打开文件,右键: 打开路径", id);
+    XStatic_SetText(hStatic, pText);
+    XWnd_RedrawWnd(hWindow, true);
+    return true;
+
+}
+
+bool CALLBACK pathBtnClick(HELE hEle, HELE hEventEle)
+{
+    char buf[MAX_PATH];
+    if (GetPath(NULL, buf))
+        charToWCHAR(savePath, buf);
+    XEdit_SetText(pathEdit, savePath);
+    return true;
+}
+
+bool CALLBACK runBtnClick(HELE hEle, HELE hEventEle)
+{
+    // 从文本框获得参数
+    edit_text();
+    // // 执行提取缩略图 主功能
+    bool ret = GuiThumbnail(keyFile, savePath);
+    if (ret == false)
+        return ret;
+
+    // 打开文件夹
+    ShellExecuteW(NULL, L"open", savePath, NULL, NULL, SW_SHOW);
+    return ret;
+}
+
+bool CALLBACK closeBtnClick(HELE hEle, HELE hEventEle)
+{
+    // 文本框回写配置
+    edit_text();
+
+    SaveConfigFile();
+    ExitProcess(0); // 退出程序
+    return true;
+}
+
+
+// 选择的文件全名 和路径
+wstring select_filename, select_filepath;
+
+BOOL CALLBACK MyEventListSelect(HELE hEle, HELE hEventEle, int id)
+{
+    if (id < 0)
+        return false;
+    //hEle:列表元素句柄   //id:当前选择项索引
+    select_filename = wstring(XList_GetItemText(hEle,  id, 1)) + L"\\" + XList_GetItemText(hEle,  id, 0);
+    select_filepath = wstring(XList_GetItemText(hEle,  id, 1));
+
+
+    XPic_SetImage(hPic1, XImage_LoadFile(L"")); //设置图片为空,释放图片文件
+
+    wchar_t tmppng[MAX_PATH] = L"Thumbnail.png";
+    bool flag = Thumbnail_TempPng(select_filename.c_str(), tmppng); // 生成新的临时预览图
+
+    if (flag) {
+        XPic_SetImage(hPic1, XImage_LoadFile(tmppng, true)); //设置显示图片
+    }
+
+    XWnd_RedrawWnd(hWindow, true);
+
+    return true;
+}
+
+BOOL CALLBACK MyEventList_RButtonUp(HELE hEle, UINT flags, POINT* pPt)
+{
+    ShellExecuteW(NULL, L"open", select_filepath.c_str(), NULL, NULL, SW_SHOW);
+    return false;
+}
+
+
+BOOL CALLBACK MyEventList_MouseDBClick(HELE hEle, POINT* pPt)
+{
+
+    ShellExecuteW(NULL, L"open", select_filename.c_str(), NULL, NULL, SW_SHOW);
+    return false;
+}
+
+
+// 选择一个目录
+int   GetPath(HWND hWnd, char* pBuffer)
+{
+    BROWSEINFO   bf;
+    LPITEMIDLIST   lpitem;
+    memset(&bf, 0, sizeof(BROWSEINFO));
+    bf.hwndOwner = hWnd;
+    bf.lpszTitle = L"选择路径 ";
+    bf.ulFlags = BIF_RETURNONLYFSDIRS;   //属性你可自己选择
+    lpitem = SHBrowseForFolder(&bf);
+    if (lpitem == NULL)  //如果没有选择路径则返回   0
+        return  0;
+
+    //如果选择了路径则复制路径,返回路径长度
+
+    SHGetPathFromIDListA(lpitem, pBuffer);
+    return   lstrlen(pBuffer);
+}
+
+
+bool Everything_Start(void)
+{
+    Everything_SetSearch(L"Everything.exe");
+    bool EQRet =  Everything_Query(TRUE);
+    if (EQRet == false) {
+      MessageBoxA(NULL, "请先运行Everything软件!\n本软件全盘搜索功能需要Everything SDK.", "Everything SDK", MB_OK);
+      return EQRet;
+    }
+
+//    if (EQRet == false) {
+//
+//        STARTUPINFO si;
+//        PROCESS_INFORMATION pi;
+//        ZeroMemory(&si, sizeof(si));
+//        si.cb = sizeof(si);
+//        // 后台隐藏
+//        si.dwFlags   =   STARTF_USESHOWWINDOW;
+//        si.wShowWindow   =   SW_HIDE;
+//        ZeroMemory(&pi, sizeof(pi));
+//        // Start the child process.
+//        CreateProcess(NULL, "Everything.exe", NULL, NULL, FALSE, 0,
+//                      NULL, NULL, &si, &pi);
+//    }
+
+    return true;
+}

+ 1 - 3
GuiApp/GuiThumbnail.cpp

@@ -61,9 +61,7 @@ bool GuiThumbnail(const wchar_t* keyWord, const wchar_t* savePath)
         threads.emplace_back(std::thread(processFile, srcFilename, thumbFilename));
     }
     // 等待所有线程执行完毕
-    for (auto& thread : threads) {
-        thread.join();
-    }
+    for (auto& trd : threads) trd.join();
 
     return true;
 }

+ 0 - 1
bin/ACThumbs.ini

@@ -1,2 +1 @@
-
 R:\www

BIN
bin/ACThumbs.png


BIN
bin/Everything.dll


BIN
bin/Everything32.dll


BIN
bin/GuiAdobeThumbnail.exe


BIN
bin/LOGO.jpg


BIN
bin/Thumbnail.dat