You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
6.8 KiB
184 lines
6.8 KiB
using IOTContainer.Model;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace IOTContainer.Common
|
|
|
|
{
|
|
public class WinApi
|
|
{
|
|
private const uint WM_SYSCOMMAND = 0x112; //系统消息
|
|
private const int SC_MONITORPOWER = 0xF020; //关闭显示器的系统命令
|
|
private const int SC_SCREENSAVE = 0xf140;
|
|
private const int MonitorPowerOff = 2; //2为PowerOff, 1为省电状态,-1为开机
|
|
private const int MonitorPowerOn = -1; //2为PowerOff, 1为省电状态,-1为开机
|
|
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);//广播消息,所有顶级窗体都会接收
|
|
|
|
enum MouseEventFlag : uint
|
|
{
|
|
Move = 0x0001,
|
|
LeftDown = 0x0002,
|
|
LeftUp = 0x0004,
|
|
RightDown = 0x0008,
|
|
RightUp = 0x0010,
|
|
MiddleDown = 0x0020,
|
|
MiddleUp = 0x0040,
|
|
XDown = 0x0080,
|
|
XUp = 0x0100,
|
|
Wheel = 0x0800,
|
|
VirtualDesk = 0x4000,
|
|
Absolute = 0x8000
|
|
}
|
|
|
|
public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); //窗体置顶
|
|
public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); //取消窗体置顶
|
|
public static readonly IntPtr HWND_BOTTOM = new IntPtr(1); //取消窗体置顶
|
|
public const uint SWP_NOMOVE = 0x0002; //不调整窗体位置
|
|
public const uint SWP_NOSIZE = 0x0001; //不调整窗体大小
|
|
public const int WM_CLOSE = 0x0010;//关闭窗体
|
|
|
|
public enum ShowWindowCommands : int
|
|
{
|
|
|
|
SW_HIDE = 0,
|
|
SW_SHOWNORMAL = 1,
|
|
SW_NORMAL = 1,
|
|
SW_SHOWMINIMIZED = 2,
|
|
SW_SHOWMAXIMIZED = 3,
|
|
SW_MAXIMIZE = 3,
|
|
SW_SHOWNOACTIVATE = 4,
|
|
SW_SHOW = 5,
|
|
SW_MINIMIZE = 6,
|
|
SW_SHOWMINNOACTIVE = 7,
|
|
SW_SHOWNA = 8,
|
|
SW_RESTORE = 9,
|
|
SW_SHOWDEFAULT = 10,
|
|
SW_MAX = 10
|
|
}
|
|
|
|
//定义结构体
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct LASTINPUTINFO
|
|
{
|
|
// 设置结构体块容量
|
|
[MarshalAs(UnmanagedType.U4)]
|
|
public int cbSize;
|
|
// 捕获的时间
|
|
[MarshalAs(UnmanagedType.U4)]
|
|
public uint dwTime;
|
|
}
|
|
|
|
private LASTINPUTINFO mLastInputInfo;
|
|
[DllImport("user32.dll")]
|
|
public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
|
|
|
|
[DllImport("user32.dll")]
|
|
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, int data, UIntPtr extraInfo);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern IntPtr FindWindow(string IpClassName, string IpWindowName);
|
|
|
|
[DllImport("Kernel32.dll", SetLastError = true)]
|
|
public static extern bool CloseHandle(IntPtr hObject);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern IntPtr SetParent(IntPtr ChildWin, IntPtr FatherWin);
|
|
|
|
[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", SetLastError = true)]
|
|
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWindth, int nheight, bool brepaint);
|
|
|
|
[DllImport("User32.dll", EntryPoint = "SendMessage")]
|
|
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
|
|
|
//关屏
|
|
[DllImport("user32.dll")]
|
|
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
|
|
|
|
[DllImport("shell32.dll")]
|
|
public extern static IntPtr ShellExecute(IntPtr hwnd,
|
|
string lpOperation,
|
|
string lpFile,
|
|
string lpParameters,
|
|
string lpDirectory,
|
|
int nShowCmd
|
|
);
|
|
|
|
//锁屏
|
|
[DllImport("user32.dll")]
|
|
public static extern bool LockWorkStation();
|
|
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
|
|
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
|
|
|
|
public static void FindSetTop(string clasName, string winName)
|
|
{
|
|
IntPtr Win1 = FindWindow(clasName, winName);//设置置顶
|
|
|
|
if (Win1 != null && Win1 != IntPtr.Zero)
|
|
{
|
|
SetWindowPos(Win1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
}
|
|
}
|
|
public static void Windows_Minimize(string winName)
|
|
{
|
|
IntPtr Win1 = FindWindow(null, winName);
|
|
if (Win1 != null && Win1 != IntPtr.Zero)
|
|
{
|
|
ShowWindow(Win1, (int)ShowWindowCommands.SW_MINIMIZE );
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取鼠标位置
|
|
/// </summary>
|
|
/// <param name="point"></param>
|
|
/// <returns></returns>
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
|
public static extern bool GetCursorPos(out MyPoint point);
|
|
|
|
/// <summary>
|
|
/// 获取置顶窗口名
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[DllImport("user32.dll")]
|
|
private static extern IntPtr GetForegroundWindow();
|
|
|
|
public static string GetTopWindowName()
|
|
{
|
|
try
|
|
{
|
|
IntPtr hwnd = GetForegroundWindow();
|
|
|
|
Process[] pro = Process.GetProcesses();
|
|
foreach (var item in pro)
|
|
{
|
|
if (item.MainWindowHandle.ToInt32() == hwnd.ToInt32())
|
|
{
|
|
return item.ProcessName.ToLower();
|
|
}
|
|
}
|
|
|
|
return string.Empty;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile(ex.ToString(), "WinApi");
|
|
return string.Empty;
|
|
}
|
|
}
|
|
[DllImport("user32.dll", EntryPoint = "ShowCursor", CharSet = CharSet.Auto)]
|
|
public static extern void ShowCursor(int status);
|
|
[DllImport("kernel32.dll")]
|
|
public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, IntPtr lpTimerName);
|
|
|
|
|
|
[DllImport("Kernel32.dll")]
|
|
public static extern UInt32 WaitForSingleObject(IntPtr pHandles, int dwMilliseconds);
|
|
}
|
|
}
|
|
|