New project structure and tools

This commit is contained in:
DSR! 2022-02-13 23:44:29 -03:00
parent c9c4ea6b98
commit 8cbe73e4c9
116 changed files with 688 additions and 49 deletions

View File

@ -4,11 +4,12 @@
### Added
- Add SendTo+
- Add Updater auto-config-tools exe
- Add Updater Task Schedule example
- Add HashMyFiles
- Add Threadtear
- Add Hollows Hunter
- Add Hollows Hunter
### Changed
@ -19,6 +20,7 @@
- Fix w32Dasm uncompress structure
- Fix update via last commit regex
- Delete NFO-Tools sub folder
- Change project structure
### Removed

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
bin/loader/appicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
bin/loader/loader.exe Normal file

Binary file not shown.

73
bin/loader/loader.nsi Normal file
View File

@ -0,0 +1,73 @@
!include FileFunc.nsh
!include LogicLib.nsh
var RAW_PARAMS
var PACK_PARAM
var EXE_PARAM
var FOLDER_NAME
var OUTPUT_PATH
; general options
name "loader"
Icon "appicon.ico"
SilentInstall silent
OutFile "loader.exe"
RequestExecutionLevel user
SetCompressor /SOLID lzma
CRCCheck on
; exe info
VIProductVersion "1.0.0.0"
VIAddVersionKey /LANG=1033 "ProductName" "loader"
VIAddVersionKey /LANG=1033 "FileDescription" "7z file loader"
VIAddVersionKey /LANG=1033 "FileVersion" "1.0.0.0"
VIAddVersionKey /LANG=1033 "LegalCopyright" "2021"
Function .onInit
; read exe params
${GetParameters} $RAW_PARAMS
${GetOptions} $RAW_PARAMS "/PACK=" $PACK_PARAM
${GetOptions} $RAW_PARAMS "/EXE=" $EXE_PARAM
${GetOptions} $RAW_PARAMS "/OUTPUT=" $OUTPUT_PATH
; error control
${If} $PACK_PARAM == ""
MessageBox MB_ICONEXCLAMATION "Missing default params:$\r \
/PACK=7z_path.7z$\r \
/EXE=exe_to_run.exe$\r \
/OUTPUT=overwrite_default_path"
Abort
${EndIf}
; generate temp folder name
; install first https://nsis.sourceforge.io/Crypto_plug-in
${If} $OUTPUT_PATH == ""
Crypto::HashData "SHA1" $PACK_PARAM
Pop $FOLDER_NAME
StrCpy $OUTPUT_PATH "$TEMP\loader-$FOLDER_NAME"
${EndIf}
FunctionEnd
; script
Section ""
; create dir
SetOutPath "$OUTPUT_PATH"
SetOverwrite on
; debug
;MessageBox MB_OK "$PACK_PARAM"
;MessageBox MB_OK "$OUTPUT_PATH\$EXE_PARAM"
; unpack
; install first https://nsis.sourceforge.io/Nsis7z_plug-in
Nsis7z::Extract "$PACK_PARAM"
${If} $EXE_PARAM != ""
; exec...
Execwait "$OUTPUT_PATH\$EXE_PARAM"
; cleanup
SetOutPath "$TEMP"
RMDir /r "$OUTPUT_PATH"
${EndIf}
SectionEnd

21
bin/sendto/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 lifenjoiner
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.

16
bin/sendto/make-vc.bat Normal file
View File

@ -0,0 +1,16 @@
@echo off
setlocal ENABLEDELAYEDEXPANSION
pushd %~dp0
set appname=sendto+
set arch=
for /f "usebackq delims=" %%i in (`"cl.exe 2>&1"`) do (
if "!arch!"=="" (
set arch=%%i
set arch=!arch:~-2!
)
)
cl.exe /MD /Os /DUNICODE /D_UNICODE /Fe%appname%_x%arch%.exe %appname%.c Ole32.lib shell32.lib user32.lib Comdlg32.lib Shlwapi.lib gdi32.lib gdiplus.lib bufferoverflowU.lib
popd

52
bin/sendto/readme.md Normal file
View File

@ -0,0 +1,52 @@
# sendto+: Send what sent to me to my sendto
Windows XP 之后右键菜单“发送到”不再具有以文件夹实现分组的功能了。sendto+ 程序就是为你重新实现这个功能的。甚至,它也可以当作启动器来用。
After Windows XP, there is NO grouping shortcuts in directories feature anymore for context menu 'sendto'. sendto+ is a tool insists to get it back. And more, it can be used as a launcher.
sendto+ 不修改系统文件和进程。它需要的只是多一次点击。对我来说还是挺好的 ;p
sendto+ doesn't modify any file or process of the system. It just need your one more click. Acceptable to me ;p
## 用法/Usage:
1. 在程序目录下,创建"sendto"文件夹,并组织你的快捷方式。
Create a 'sendto' directory in the same directory as sendto+ program, and then organize the the shortcuts with sub-directories.
Grouping shortcuts
![](docs/SendTo_0.1.png)
2. 在系统的"sendto"文件夹,创建 sendto+ 的快捷方式。
Create a shortcut in the system sendto directory.
![](docs/SendTo_0.2.png)
3. 用右键菜单时,发送到 sendto+就会出现第1步中组织的菜单了。
When you want to use the sendto, send the selection to 'sendto+', then there will be the menu organized in groups of step 1.
![](docs/SendTo_1.1.png)
![](docs/SendTo_1.2.png)
4. 在桌面或者快速启动栏创建快捷方式,运行后可以当作启动器。
Create a shortcut of sendto+ onto the desktop or quick launch bar, then it can be run as a launcher.
![](docs/SendTo_2.png)
## 注意/Tips:
- 64位系统需要用64位版本的程序。
64 bit OS needs 64 bit version to work correctly.
## 其它/Others
Build: MSVC, run the bat file.
Download: [https://github.com/lifenjoiner/sendto-plus/releases](https://github.com/lifenjoiner/sendto-plus/releases)
Author: [https://github.com/lifenjoiner](https://github.com/lifenjoiner)
Licensing: See the license file.

475
bin/sendto/sendto+.c Normal file
View File

@ -0,0 +1,475 @@
/* cl.exe /MD /Os /DUNICODE /D_UNICODE sendto+.c Ole32.lib shell32.lib user32.lib Comdlg32.lib Shlwapi.lib
tcc sendto+.c -DUNICODE -D_UNICODE -DMINGW_HAS_SECURE_API -DINITGUID -lshell32 -lole32 -lshlwapi -lComdlg32 -lgdi32 -lgdiplus
https://msdn.microsoft.com/en-us/library/cc144093.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/bb776914.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/bb776885.aspx
GetCurrentDirectory()
64-bit
Wow64EnableWow64FsRedirection() only for system32;
lnk file with parameters need 64-bit version!
*/
#define STRICT
#ifndef UNICODE
#define T_MAX_PATH MAX_PATH
#else
#define T_MAX_PATH 32767
#endif
#include <tchar.h>
#include <windows.h>
#include <windowsx.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <commdlg.h>
// tcc, any other compiler support wWinMain() and '__argc/__targv'
// shlguid.h
DEFINE_GUID(IID_IDropTarget, 0x00000122, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
DEFINE_GUID(IID_IDataObject, 0x0000010e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#define WINGDIPAPI __stdcall
#define GDIPCONST const
typedef enum GpStatus {
Ok = 0,
GenericError = 1,
InvalidParameter = 2,
OutOfMemory = 3,
ObjectBusy = 4,
InsufficientBuffer = 5,
NotImplemented = 6,
Win32Error = 7,
WrongState = 8,
Aborted = 9,
FileNotFound = 10,
ValueOverflow = 11,
AccessDenied = 12,
UnknownImageFormat = 13,
FontFamilyNotFound = 14,
FontStyleNotFound = 15,
NotTrueTypeFont = 16,
UnsupportedGdiplusVersion = 17,
GdiplusNotInitialized = 18,
PropertyNotFound = 19,
PropertyNotSupported = 20,
ProfileNotFound = 21
} GpStatus;
typedef DWORD ARGB;
typedef void GpBitmap;
typedef void *DebugEventProc;
typedef GpStatus (WINGDIPAPI *NotificationHookProc)(ULONG_PTR *token);
typedef VOID (WINGDIPAPI *NotificationUnhookProc)(ULONG_PTR token);
typedef struct GdiplusStartupInput {
UINT32 GdiplusVersion;
DebugEventProc DebugEventCallback;
BOOL SuppressBackgroundThread;
BOOL SuppressExternalCodecs;
} GdiplusStartupInput;
typedef struct GdiplusStartupOutput {
NotificationHookProc NotificationHook;
NotificationUnhookProc NotificationUnhook;
} GdiplusStartupOutput;
GpStatus WINGDIPAPI GdiplusStartup(ULONG_PTR *, GDIPCONST GdiplusStartupInput *, GdiplusStartupOutput *);
VOID WINGDIPAPI GdiplusShutdown(ULONG_PTR);
GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON hicon, GpBitmap **bitmap);
GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap *bitmap, HBITMAP *hbmReturn, ARGB background);
VOID WINGDIPAPI GdipFree(VOID *);
#define IDM_SENDTOFIRST 0
TCHAR *g_FOLDER_SENDTO;
TCHAR **g_PSENDTO; /* Store the shourtcuts full path */
UINT g_idm = IDM_SENDTOFIRST;
HBITMAP *g_hBmpImageA; /* MenuItemBitmap */
HINSTANCE g_hinst; /* My hinstance */
HMENU g_hmenuSendTo; /* My SendTo popup */
LPSHELLFOLDER g_psfDesktop; /* The desktop folder */
UINT g_FORKING = 0; /* compatible with UAC focus changes */
LPSHELLFOLDER PIDL2PSF(LPITEMIDLIST pidl)
{
LPSHELLFOLDER psf = NULL;
if (pidl) {
g_psfDesktop->lpVtbl->BindToObject(g_psfDesktop, pidl, NULL, &IID_IShellFolder, (LPVOID *)&psf);
}
return psf;
}
LPITEMIDLIST PidlFromPath(HWND hwnd, LPCTSTR pszPath)
{
LPITEMIDLIST pidl;
ULONG ulEaten;
DWORD dwAttributes;
HRESULT hres;
WCHAR *wszName;
wszName = calloc(T_MAX_PATH + 1, sizeof(WCHAR));
#ifdef UNICODE
if (wcslen(pszPath) >= T_MAX_PATH) {return NULL;}
wcscpy(wszName, pszPath);
#else
if (!MultiByteToWideChar(CP_ACP, 0, pszPath, -1, wszName, T_MAX_PATH)) {
return NULL;
}
#endif
hres = g_psfDesktop->lpVtbl->ParseDisplayName(g_psfDesktop, hwnd, NULL, wszName, &ulEaten, &pidl, &dwAttributes);
free(wszName);
if (FAILED(hres)) {
return NULL;
}
return pidl;
}
LPSHELLFOLDER GetFolder(HWND hwnd, LPCTSTR pszPath)
{
LPITEMIDLIST pidl;
pidl = PidlFromPath(hwnd, pszPath);
return PIDL2PSF(pidl);
}
HRESULT GetUIObjectOfAbsPidls(HWND hwnd, LPITEMIDLIST *pidls, INT NumOfpidls, REFIID riid, LPVOID *ppvOut)
{
LPITEMIDLIST *pidlLasts;
LPSHELLFOLDER psf;
HRESULT hres;
INT i;
*ppvOut = NULL;
pidlLasts = malloc(sizeof(LPITEMIDLIST) * NumOfpidls);
if (pidlLasts == NULL) return E_FAIL;
for (i = 0; i < NumOfpidls; i++) {
hres = SHBindToParent(pidls[i], &IID_IShellFolder, (LPVOID *)&psf, (LPCITEMIDLIST *)&pidlLasts[i]);
if (FAILED(hres)) goto Fail;
if (i < NumOfpidls - 1) psf->lpVtbl->Release(psf);
}
hres = psf->lpVtbl->GetUIObjectOf(psf, hwnd, NumOfpidls, pidlLasts, riid, NULL, ppvOut);
Fail:
psf->lpVtbl->Release(psf);
return hres;
}
HRESULT GetUIObjectOfPaths(HWND hwnd, LPCTSTR *pszPaths, INT NumOfPaths, REFIID riid, LPVOID *ppvOut)
{
LPITEMIDLIST *pidls;
HRESULT hres;
INT i;
*ppvOut = NULL;
pidls = malloc(sizeof(LPITEMIDLIST) * NumOfPaths);
if (pidls == NULL) return E_FAIL;
for (i = 0; i < NumOfPaths; i++) {
pidls[i] = PidlFromPath(hwnd, pszPaths[i]);
if (pidls[i] == NULL) goto Fail;
}
hres = GetUIObjectOfAbsPidls(hwnd, pidls, NumOfPaths, riid, ppvOut);
Fail:
for (i = 0; i < NumOfPaths; i++) {
CoTaskMemFree(pidls[i]);
}
free(pidls);
return hres;
}
void DoDrop(LPDATAOBJECT pdto, LPDROPTARGET pdt)
{
POINTL pt = { 0, 0 };
DWORD dwEffect;
HRESULT hres;
dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE | DROPEFFECT_LINK;
hres = pdt->lpVtbl->DragEnter(pdt, pdto, MK_LBUTTON, pt, &dwEffect);
if (SUCCEEDED(hres) && dwEffect) {
hres = pdt->lpVtbl->Drop(pdt, pdto, MK_LBUTTON, pt, &dwEffect);
}
else {
hres = pdt->lpVtbl->DragLeave(pdt);
}
}
LPTSTR pidl_to_name(LPSHELLFOLDER psf, LPITEMIDLIST pidl, SHGDNF uFlags) {
HRESULT hres;
STRRET str;
LPTSTR pszName = NULL;
hres = psf->lpVtbl->GetDisplayNameOf(psf, pidl, uFlags, &str);
if (hres == S_OK) {
hres = StrRetToStr(&str, pidl, &pszName);
}
return pszName;
}
BOOL GethBitMapByPath(LPTSTR pszPath, HBITMAP *phbmp) {
SHFILEINFO ShFI = {0};
BOOL hasBmpImage = FALSE;
if (SUCCEEDED(SHGetFileInfo(pszPath, FILE_ATTRIBUTE_NORMAL, &ShFI, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES))) {
GpBitmap *bitmap = NULL;
if (GdipCreateBitmapFromHICON(ShFI.hIcon, &bitmap) == Ok) {
hasBmpImage = !(GdipCreateHBITMAPFromBitmap(bitmap, phbmp, 0));
GdipFree(bitmap);
}
DestroyIcon(ShFI.hIcon);
}
return hasBmpImage;
}
void FolderToMenu(HWND hwnd, HMENU hmenu, LPCTSTR pszFolder)
{
LPSHELLFOLDER psf;
HRESULT hres;
STRRET str;
/* OS_WOW6432 */
if ((PROC)(GetProcAddress(GetModuleHandle(_T("Shlwapi")), (LPCSTR)437))(30)) {
AppendMenu(hmenu, MF_GRAYED | MF_DISABLED | MF_STRING, g_idm, TEXT("64-bit OS needs 64-bit version :p"));
return;
}
psf = GetFolder(hwnd, pszFolder);
if (psf) {
LPENUMIDLIST peidl;
hres = psf->lpVtbl->EnumObjects(psf, hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &peidl);
if (SUCCEEDED(hres)) {
LPITEMIDLIST pidl;
MENUITEMINFO mii;
MENUINFO mi;
BOOL hasBmpImage;
while (peidl->lpVtbl->Next(peidl, 1, &pidl, NULL) == S_OK) {
LPTSTR pszPath, pszName;
//
pszPath = pidl_to_name(psf, pidl, SHGDN_FORPARSING);
pszName = pidl_to_name(psf, pidl, SHGDN_NORMAL);
//
// Path should be enough.
CoTaskMemFree(pidl);
if (pszPath == NULL || pszName == NULL) {continue;}
//
// Store the path to retrieve, as we check if it is a dir and launch it later.
g_PSENDTO = (TCHAR **)realloc(g_PSENDTO, sizeof(TCHAR *) * (g_idm - IDM_SENDTOFIRST + 1));
if (g_PSENDTO == NULL) {continue;}
g_PSENDTO[g_idm] = _tcsdup(pszPath);
//
// Icon
g_hBmpImageA = (HBITMAP *)realloc(g_hBmpImageA, sizeof(HBITMAP *) * (g_idm - IDM_SENDTOFIRST + 1));
hasBmpImage = GethBitMapByPath(pszPath, &g_hBmpImageA[g_idm]);
//
if (PathIsDirectory(pszPath)) {
HMENU hSubMenu = CreatePopupMenu();
if (AppendMenu(hmenu, MF_ENABLED | MF_POPUP | MF_STRING, (UINT)hSubMenu, pszName)) {
mi.cbSize = sizeof(mi);
mi.fMask = MIM_HELPID;
mi.dwContextHelpID = g_idm;
SetMenuInfo(hSubMenu, &mi);
g_idm++;
}
}
else {
if (AppendMenu(hmenu, MF_ENABLED | MF_STRING, g_idm, pszName)) {
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_DATA;
if (hasBmpImage) {
mii.fMask |= MIIM_BITMAP;
mii.hbmpItem = g_hBmpImageA[g_idm];
}
SetMenuItemInfo(hmenu, g_idm, FALSE, &mii);
g_idm++;
}
}
//
CoTaskMemFree(pszPath);
CoTaskMemFree(pszName);
}
peidl->lpVtbl->Release(peidl);
}
psf->lpVtbl->Release(psf);
}
if (g_idm == IDM_SENDTOFIRST) {
AppendMenu(hmenu, MF_GRAYED | MF_DISABLED | MF_STRING, g_idm, TEXT("Send what sent to me to my sendto ^_^"));
}
}
void SendTo_OnInitMenuPopup(HWND hwnd, HMENU hmenu, UINT item, BOOL fSystemMenu)
{
if (GetMenuItemCount(hmenu) > 0) {return;}
if (hmenu == g_hmenuSendTo) { /* :p only top level */
FolderToMenu(hwnd, hmenu, g_FOLDER_SENDTO);
}
else {
MENUINFO mi;
mi.cbSize = sizeof(mi);
mi.fMask = MIM_HELPID;
if (GetMenuInfo(hmenu, &mi)) {
FolderToMenu(hwnd, hmenu, g_PSENDTO[mi.dwContextHelpID]);
}
}
}
void SendTo_SendToItem(HWND hwnd, int idm)
{
HRESULT hres;
g_FORKING = 1;
if (__argc == 1) {
ShellExecute(NULL, NULL, g_PSENDTO[idm], NULL, NULL, SW_SHOWDEFAULT);
}
else {
LPDATAOBJECT pdto;
LPDROPTARGET pdt;
hres = GetUIObjectOfPaths(hwnd, &g_PSENDTO[idm], 1, &IID_IDropTarget, (LPVOID *)&pdt);
if (SUCCEEDED(hres)) {
/* First convert all filenames to a data object. */
hres = GetUIObjectOfPaths(hwnd, __targv + 1, __argc - 1, &IID_IDataObject, (LPVOID *)&pdto);
if (SUCCEEDED(hres)) {
/* Now drop the file on the drop target. */
DoDrop(pdto, pdt);
pdt->lpVtbl->Release(pdt);
}
}
pdto->lpVtbl->Release(pdto);
}
// Exit as done!
g_FORKING = 0;
PostQuitMessage(0);
}
void SendTo_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
SendTo_SendToItem(hwnd, id);
}
BOOL SendTo_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
{
g_hmenuSendTo = CreatePopupMenu();
return TRUE;
}
/* UAC focus changes!!! */
void SendTo_OnKillFocus(HWND hwnd, HWND hwndOldFocus)
{
if (g_FORKING == 0) PostQuitMessage(0);
}
LRESULT CALLBACK SendTo_WndProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
switch (uiMsg) {
HANDLE_MSG(hwnd, WM_CREATE, SendTo_OnCreate);
HANDLE_MSG(hwnd, WM_INITMENUPOPUP, SendTo_OnInitMenuPopup);
HANDLE_MSG(hwnd, WM_COMMAND, SendTo_OnCommand);
HANDLE_MSG(hwnd, WM_KILLFOCUS, SendTo_OnKillFocus);
}
return DefWindowProc(hwnd, uiMsg, wParam, lParam);
}
BOOL InitApp(void)
{
WNDCLASS wc;
HRESULT hr;
wc.style = 0;
wc.lpfnWndProc = SendTo_WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_hinst;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("SendTo+");
RegisterClass(&wc);
hr = SHGetDesktopFolder(&g_psfDesktop);
if (FAILED(hr)) {
return FALSE;
}
g_FOLDER_SENDTO = calloc(T_MAX_PATH + 1, sizeof(TCHAR));
if (g_FOLDER_SENDTO == NULL) {return FALSE;}
return TRUE;
}
void TermApp(void)
{
int i, n;
if (g_psfDesktop) {
g_psfDesktop->lpVtbl->Release(g_psfDesktop);
g_psfDesktop = NULL;
}
n = g_idm - IDM_SENDTOFIRST;
for (i = 0; i < n; i++) {
free(g_PSENDTO[i]);
DeleteObject(&g_hBmpImageA[i]);
}
free(g_PSENDTO);
free(g_FOLDER_SENDTO);
free((void **)g_hBmpImageA);
}
int WINAPI _tWinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPTSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HWND hwnd;
HRESULT hrInit;
POINT pt = {0, 0};
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput = {1, NULL, FALSE, TRUE}; // MUST!
g_hinst = hinst;
if (!InitApp()) return 1;
if (GetFullPathName(TEXT("sendto"), T_MAX_PATH, g_FOLDER_SENDTO, NULL) == 0) {return 2;}
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
hrInit = CoInitialize(NULL);
hwnd = CreateWindow(
TEXT("SendTo+"), /* Class Name */
TEXT("lifenjoiner"), /* Title */
WS_POPUP, /* Style */
CW_USEDEFAULT, CW_USEDEFAULT, /* Position */
0, 0, /* Size */
NULL, /* Parent */
NULL, /* No menu */
hinst, /* Instance */
0); /* No special parameters */
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
ShowWindow(hwnd, nCmdShow);
GetCursorPos(&pt);
TrackPopupMenu(g_hmenuSendTo, TPM_LEFTALIGN, pt.x, pt.y, 0, hwnd, NULL);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
TermApp();
GdiplusShutdown(gdiplusToken);
if (SUCCEEDED(hrInit)) {
CoUninitialize();
}
return 0;
}

BIN
bin/sendto/sendto_x64.exe Normal file

Binary file not shown.

BIN
bin/sendto/sendto_x86.exe Normal file

Binary file not shown.

BIN
bin/sendto/toolkit.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -1,12 +1,12 @@
[DIE]
folder = ..\Analysis\DIE
folder = ..\..\toolkit\Analysis\DIE
url = horsicq/DIE-engine
from = github
re_download = die_win32_portable_(?:\S+).zip
local_version = 3.04
[ExeinfoPe]
folder = ..\Analysis\ExeinfoPe
folder = ..\..\toolkit\Analysis\ExeinfoPe
url = https://github.com/ExeinfoASL/ASL
update_url = https://github.com/ExeinfoASL/ASL/raw/master/exeinfope.zip
from = web
@ -14,35 +14,35 @@ local_version = 0.0.6.7
re_version = Version : (.*?) -
[XELFViewer]
folder = ..\Analysis\XELFViewer
folder = ..\..\toolkit\Analysis\XELFViewer
url = horsicq/XELFViewer
from = github
local_version = 0.04
re_download = xelfviewer_win32_portable_(?:\S+).zip
[XPEViewer]
folder = ..\Analysis\XPEViewer
folder = ..\..\toolkit\Analysis\XPEViewer
url = horsicq/XPEViewer
from = github
local_version = 0.02
re_download = xpeviewer_win32_portable_(?:\S+).zip
[XAPKDetector]
folder = ..\Analysis\XAPKDetector
folder = ..\..\toolkit\Analysis\XAPKDetector
url = horsicq/XAPKDetector
from = github
local_version = 0.02
re_download = xapkdetector_win32_portable_(?:\S+).zip
[PE-Bear]
folder = ..\Analysis\PE-Bear
folder = ..\..\toolkit\Analysis\PE-Bear
url = hasherezade/pe-bear-releases
from = github
local_version = 0.5.5.3
re_download = PE-bear_(?:\S+)_x64_win_vs13.zip
[PEStudio]
folder = ..\Analysis\PEStudio
folder = ..\..\toolkit\Analysis\PEStudio
url = https://www.winitor.com/download
from = web
local_version = 9.28
@ -50,14 +50,14 @@ re_version = <h1>Download pestudio (.*?)</h1>
update_url = https://www.winitor.com/tools/pestudio/current/pestudio.zip
[CAPA]
folder = ..\Analysis\CAPA
folder = ..\..\toolkit\Analysis\CAPA
url = fireeye/capa
from = github
local_version = v3.1.0
re_download = capa-(?:\S+)-windows.zip
[JADX]
folder = ..\Decompilers\[ANDROID] JADX
folder = ..\..\toolkit\Decompilers\[ANDROID] JADX
url = skylot/jadx
from = github
local_version = v1.3.2
@ -65,28 +65,28 @@ re_download = jadx-gui-(?:\S+)-with-jre-win.zip
post_unpack = scripts\JADX.bat
[dnSpyEx]
folder = ..\Decompilers\[DOTNET] dnSpyEx
folder = ..\..\toolkit\Decompilers\[DOTNET] dnSpyEx
url = dnSpyEx/dnSpy
from = github
local_version = v6.1.9
re_download = dnSpy-net-win64.zip
[ILSpy]
folder = ..\Decompilers\[DOTNET] ILSpy
folder = ..\..\toolkit\Decompilers\[DOTNET] ILSpy
url = icsharpcode/ILSpy
from = github
local_version = v7.2-preview4
re_download = ILSpy_binaries_(?:\S+).zip
[JD-GUI]
folder = ..\Decompilers\[JAVA] JD-GUI
folder = ..\..\toolkit\Decompilers\[JAVA] JD-GUI
url = java-decompiler/jd-gui
from = github
local_version = v1.6.6
re_download = jd-gui-windows-(?:\S+).zip
[Recaf]
folder = ..\Decompilers\[JAVA] Recaf
folder = ..\..\toolkit\Decompilers\[JAVA] Recaf
url = Col-E/Recaf
from = github
local_version = 2.21.12
@ -94,7 +94,7 @@ re_download = recaf-(?:\S+)-jar-with-dependencies.jar
post_unpack = scripts\Recaf.bat
[PyInstxtractor]
folder = ..\Decompilers\[PYTHON] PyInstxtractor
folder = ..\..\toolkit\Decompilers\[PYTHON] PyInstxtractor
url = https://github.com/extremecoders-re/pyinstxtractor/commits/master
from = web
local_version = fcf93bfb452107c9b9178e28cace1267c4059156
@ -102,7 +102,7 @@ re_version = \/commit\/(.*?)" aria-label="
update_url = https://github.com/extremecoders-re/pyinstxtractor/archive/refs/heads/master.zip
[IDR]
folder = ..\Decompilers\[DELPHI] IDR
folder = ..\..\toolkit\Decompilers\[DELPHI] IDR
url = https://github.com/crypto2011/IDR/commits/master
from = web
local_version = 09e9f35ce753a0f7d865e5ebced6150cf8ee4240
@ -111,7 +111,7 @@ update_url = https://github.com/crypto2011/IDR/archive/refs/heads/master.zip
post_unpack = scripts\IDR.bat
[x64dbg]
folder = ..\Dissasembler\x64dbg
folder = ..\..\toolkit\Dissasembler\x64dbg
url = https://sourceforge.net/projects/x64dbg/files/
update_url = https://sourceforge.net/projects/x64dbg/files/latest/download.zip
from = web
@ -120,14 +120,14 @@ re_version = snapshot_(.*?).zip
post_unpack = scripts\x64dbg.bat
[Cutter]
folder = ..\Dissasembler\Cutter
folder = ..\..\toolkit\Dissasembler\Cutter
url = rizinorg/cutter
from = github
local_version = v2.0.5
re_download = cutter-(?:\S+)-x64.Windows.zip
[WinHex]
folder = ..\HEX Editor\WinHex
folder = ..\..\toolkit\HEX Editor\WinHex
url = https://x-ways.net/winhex/
from = web
local_version = 20.4
@ -135,7 +135,7 @@ re_version = <strong>WinHex (.*?)<br>
update_url = http://www.x-ways.net/winhex.zip
[HxD]
folder = ..\HEX Editor\HxD
folder = ..\..\toolkit\HEX Editor\HxD
url = https://mh-nexus.de/en/hxd/
from = web
local_version = 2.5.0.0 (February 11, 2021)
@ -144,21 +144,21 @@ update_url = https://mh-nexus.de/downloads/HxDPortableSetup.zip
post_unpack = scripts\HxD.bat
[REHex]
folder = ..\HEX Editor\REHex
folder = ..\..\toolkit\HEX Editor\REHex
url = solemnwarning/rehex
from = github
local_version = 0.4.1
re_download = rehex-(?:\S+)-win-x86_64.zip
[ImHex]
folder = ..\HEX Editor\ImHex
folder = ..\..\toolkit\HEX Editor\ImHex
url = WerWolv/ImHex
from = github
local_version = v1.14.0
re_download = Windows.Portable.ZIP.zip
[Autoruns]
folder = ..\Monitor\Autoruns
folder = ..\..\toolkit\Monitor\Autoruns
url = https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns
from = web
local_version = 14.08
@ -166,7 +166,7 @@ re_version = <h1 [^>]*>Autoruns for Windows v(.*?)</h1>
re_download = "(.*?/Autoruns.zip)"
[CurrPorts]
folder = ..\Monitor\CurrPorts
folder = ..\..\toolkit\Monitor\CurrPorts
url = https://www.nirsoft.net/utils/cports.html
update_url = https://www.nirsoft.net/utils/cports.zip
from = web
@ -174,7 +174,7 @@ local_version = 2.65
re_version = <td>CurrPorts v(.*?) - Monitoring Opened
[MultiMon]
folder = ..\Monitor\MultiMon
folder = ..\..\toolkit\Monitor\MultiMon
url = https://www.resplendence.com/multimon_whatsnew
update_url = https://www.resplendence.com/download/MultiMonHome.exe
from = web
@ -183,7 +183,7 @@ re_version = <hr>What's new in v (.*?)<hr>
post_unpack = scripts\MultiMon.bat
[Portmon]
folder = ..\Monitor\Portmon
folder = ..\..\toolkit\Monitor\Portmon
url = https://docs.microsoft.com/en-us/sysinternals/downloads/portmon
update_url = https://download.sysinternals.com/files/PortMon.zip
from = web
@ -191,7 +191,7 @@ local_version = 3.03
re_version = <h1 [^>]*>Portmon for Windows v(.*?)</h1>
[Process Explorer]
folder = ..\Monitor\Process Explorer
folder = ..\..\toolkit\Monitor\Process Explorer
url = https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
update_url = https://download.sysinternals.com/files/ProcessExplorer.zip
from = web
@ -199,7 +199,7 @@ local_version = 16.43
re_version = <h1 [^>]*>Process Explorer v(.*?)</h1>
[Process Hacker 3]
folder = ..\Monitor\Process Hacker 3
folder = ..\..\toolkit\Monitor\Process Hacker 3
url = https://processhacker.sourceforge.io/nightly.php
from = web
local_version = 3.0.4554
@ -207,7 +207,7 @@ re_version = Build: <span style="font-weight:bold">(.*?)</span>
re_download = href="(.*?releases/download/(?:\S+)/processhacker-(?:\S+)-bin.zip)
[Procmon]
folder = ..\Monitor\Procmon
folder = ..\..\toolkit\Monitor\Procmon
url = https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
update_url = https://download.sysinternals.com/files/ProcessMonitor.zip
from = web
@ -215,7 +215,7 @@ local_version = 3.88
re_version = <h1 [^>]*>Process Monitor v(.*?)</h1>
[TCPView]
folder = ..\Monitor\TCPView
folder = ..\..\toolkit\Monitor\TCPView
url = https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
update_url = https://download.sysinternals.com/files/TCPView.zip
from = web
@ -223,21 +223,21 @@ local_version = 4.17
re_version = <h1 [^>]*>TCPView v(.*?)</h1>
[PE-sieve]
folder = ..\Monitor\PE-sieve
folder = ..\..\toolkit\Monitor\PE-sieve
url = hasherezade/pe-sieve
from = github
local_version = v0.3.4
re_download = pe-sieve64.zip
[HollowsHunter]
folder = ..\Monitor\HollowsHunter
folder = ..\..\toolkit\Monitor\HollowsHunter
url = hasherezade/hollows_hunter
from = github
local_version = v0.3.4
re_download = hollows_hunter64.zip
[Strings]
folder = ..\Other\Strings
folder = ..\..\toolkit\Other\Strings
url = https://docs.microsoft.com/en-us/sysinternals/downloads/strings
update_url = https://download.sysinternals.com/files/Strings.zip
from = web
@ -245,14 +245,14 @@ local_version = 2.54
re_version = <h1 [^>]*>Strings v(.*?)</h1>
[XOpcodeCalc]
folder = ..\Other\XOpcodeCalc
folder = ..\..\toolkit\Other\XOpcodeCalc
url = horsicq/XOpcodeCalc
from = github
local_version = 0.04
re_download = xopcodecalc_win64_portable_(?:\S+).zip
[Resource Hacker]
folder = ..\Other\Resource Hacker
folder = ..\..\toolkit\Other\Resource Hacker
url = http://www.angusj.com/resourcehacker/
from = web
local_version = 5.1.8 (360)
@ -260,14 +260,14 @@ re_version = <strong>Version (.*?)</strong>
update_url = http://www.angusj.com/resourcehacker/resource_hacker.zip
[FLOSS]
folder = ..\Other\FLOSS
folder = ..\..\toolkit\Other\FLOSS
url = fireeye/flare-floss
from = github
local_version = v1.7.0
re_download = floss-(?:\S+)-windows.zip
[ProcDOT]
folder = ..\Other\ProcDOT
folder = ..\..\toolkit\Other\ProcDOT
url = https://www.procdot.com/downloadprocdotbinaries.htm
update_url = https://www.procdot.com/
update_file_pass = procdot
@ -277,14 +277,14 @@ re_version = <span class="xr_tl xr_s4" [^>]*>Latest stable build: (.*?)</span>
re_download = href="(.*?/procdot_(?:\S+)_windows.zip)
[ApkStudio]
folder = ..\Other\ApkStudio
folder = ..\..\toolkit\Other\ApkStudio
url = vaibhavpandeyvpz/apkstudio
from = github
local_version = 5.2.4
re_download = ApkStudio-(?:\S+)-x64.zip
[APKEasyTool]
folder = ..\Other\APKEasyTool
folder = ..\..\toolkit\Other\APKEasyTool
url = https://forum.xda-developers.com/t/tool-windows-apk-easy-tool-v1-59-2-2021-04-03.3333960/
update_url = https://evildog1.bitbucket.io/apkeasytool/APK Easy Tool portable.zip
from = web
@ -292,7 +292,7 @@ local_version = 1.59.2 (2021-04-03)
re_version = APK Easy Tool v(.*?) \| XDA Forums
[AstroGrep]
folder = ..\Other\AstroGrep
folder = ..\..\toolkit\Other\AstroGrep
url = https://sourceforge.net/projects/astrogrep/files/
update_url = https://sourceforge.net/projects/astrogrep/files/latest/download.zip
from = web
@ -300,7 +300,7 @@ local_version = 4.4.7
re_version = AstroGrep_v(.*?)_portable.zip
[Process-Dump]
folder = ..\Other\Process-Dump
folder = ..\..\toolkit\Other\Process-Dump
url = http://split-code.com/processdump.html
update_url = http://split-code.com/files/pd_latest.zip
from = web
@ -308,21 +308,21 @@ local_version = 2.1
re_version = <span class="link">Download: pd.exe v(.*?) for Windows 32 and 64 bit</span>
[Scylla]
folder = ..\Other\Scylla
folder = ..\..\toolkit\Other\Scylla
url = NtQuery/Scylla
from = github
local_version = v0.9.8
re_download = Scylla_v(?:\S+).rar
[VirusTotalUploader]
folder = ..\Other\VirusTotalUploader
folder = ..\..\toolkit\Other\VirusTotalUploader
url = SamuelTulach/VirusTotalUploader
from = github
local_version = 0.1.9
re_download = portable_anycpu_signed.zip
[HashMyFiles]
folder = ..\Other\HashMyFiles
folder = ..\..\toolkit\Other\HashMyFiles
url = https://www.nirsoft.net/utils/hash_my_files.html
update_url = https://www.nirsoft.net/utils/hashmyfiles.zip
from = web
@ -330,7 +330,7 @@ local_version = 2.43
re_version = <td>HashMyFiles v(.*?) - Calculate
[Threadtear]
folder = ..\Other\Threadtear
folder = ..\..\toolkit\Other\Threadtear
url = GraxCode/threadtear
from = github
local_version = 3.0.1
@ -338,7 +338,7 @@ re_download = threadtear-gui-(?:\S+)-all.jar
post_unpack = scripts\Threadtear.bat
[Windows Kernel Explorer]
folder = ..\Rootkits Detector\Windows Kernel Explorer
folder = ..\..\toolkit\Rootkits Detector\Windows Kernel Explorer
url = https://github.com/AxtMueller/Windows-Kernel-Explorer
update_url = https://github.com/AxtMueller/Windows-Kernel-Explorer/raw/master/binaries/WKE64.exe
from = web
@ -346,7 +346,7 @@ local_version = 20211111
re_version = >Current Version: (.*?)<
[SysInspector]
folder = ..\Rootkits Detector\SysInspector
folder = ..\..\toolkit\Rootkits Detector\SysInspector
url = https://www.eset.com/ar/soporte/diagnostico-de-pc-gratuito/?type=13554&tx_esetdownloads_ajax[product]=46&tx_esetdownloads_ajax[beta]=0&tx_esetdownloads_ajax[page_id]=17328&tx_esetdownloads_ajax[plugin_id]=571902&tx_esetdownloads_ajax[product]=46&tx_esetdownloads_ajax[beta]=0&tx_esetdownloads_ajax[page_id]=17328&tx_esetdownloads_ajax[plugin_id]=571902
update_url = https://download.eset.com/com/eset/tools/diagnosis/sysinspector/latest/sysinspector_nt64_esn.exe
from = web
@ -354,7 +354,7 @@ local_version = 1.4.2.0
re_version = "full_version":"(.*?)"
[GMER]
folder = ..\Rootkits Detector\GMER
folder = ..\..\toolkit\Rootkits Detector\GMER
url = http://www.gmer.net
update_url = http://www2.gmer.net/gmer.zip
from = web
@ -362,7 +362,7 @@ local_version = 2.2.19882
re_version = <STRONG>GMER (.*?)<\/STRONG>
[UniExtract]
folder = ..\UnPacking\UniExtract
folder = ..\..\toolkit\UnPacking\UniExtract
url = https://github.com/Bioruebe/UniExtract2/releases/latest
update_url = https://github.com
from = web

Some files were not shown because too many files have changed in this diff Show More