diff --git a/Bin/SunnyUI.dll b/Bin/SunnyUI.dll index 50f49da1..b1798eed 100644 Binary files a/Bin/SunnyUI.dll and b/Bin/SunnyUI.dll differ diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs index 4776c318..b14ca070 100644 --- a/SunnyUI/Controls/UINavMenu.cs +++ b/SunnyUI/Controls/UINavMenu.cs @@ -741,7 +741,7 @@ namespace Sunny.UI { base.WndProc(ref m); if (IsDisposed || Disposing) return; - ScrollBarInfo.ShowScrollBar(Handle, 3, false); + Win32.User.ShowScrollBar(Handle, 3, false); } public TreeNode CreateNode(string text, int pageIndex) diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs index 029ef3dc..f86ded6f 100644 --- a/SunnyUI/Controls/UITabControl.cs +++ b/SunnyUI/Controls/UITabControl.cs @@ -27,7 +27,6 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; -using System.Runtime.InteropServices; using System.Windows.Forms; namespace Sunny.UI @@ -585,7 +584,7 @@ namespace Sunny.UI private IntPtr FindUpDownButton() { - return NativeMethods.FindWindowEx(Handle, IntPtr.Zero, UpDownButtonClassName, null); + return User.FindWindowEx(Handle, IntPtr.Zero, UpDownButtonClassName, null).IntPtr(); } public void OnPaintUpDownButton(UpDownButtonPaintEventArgs e) @@ -742,22 +741,19 @@ namespace Sunny.UI { if (SystemInformation.MouseButtonsSwapped) { - return (Win32.User.GetKeyState(Win32.User.VK_RBUTTON) < 0); - } - else - { - return (Win32.User.GetKeyState(Win32.User.VK_LBUTTON) < 0); + return (User.GetKeyState(User.VK_RBUTTON) < 0); } + + return (User.GetKeyState(User.VK_LBUTTON) < 0); } private void DrawUpDownButton() { - NativeMethods.RECT rect = new NativeMethods.RECT(); + RECT rect = new RECT(); bool mousePress = LeftKeyPressed(); - Point cursorPoint = new Point(); - NativeMethods.GetCursorPos(ref cursorPoint); - NativeMethods.GetWindowRect(Handle, ref rect); - var mouseOver = NativeMethods.PtInRect(ref rect, cursorPoint); + Point cursorPoint = SystemEx.GetCursorPos(); + User.GetWindowRect(Handle, ref rect); + var mouseOver = User.PtInRect(ref rect, cursorPoint); cursorPoint.X -= rect.Left; cursorPoint.Y -= rect.Top; var mouseInUpButton = cursorPoint.X < clipRect.Width / 2; @@ -772,21 +768,21 @@ namespace Sunny.UI { switch (m.Msg) { - case NativeMethods.WM_PAINT: + case User.WM_PAINT: if (!_bPainting) { Point UpDownButtonLocation = new Point(_owner.Size.Width - 52, 0); Size UpDownButtonSize = new Size(52, _owner.ItemSize.Height); clipRect = new Rectangle(UpDownButtonLocation, UpDownButtonSize); - NativeMethods.MoveWindow(Handle, UpDownButtonLocation.X, UpDownButtonLocation.Y, clipRect.Width, clipRect.Height); + User.MoveWindow(Handle, UpDownButtonLocation.X, UpDownButtonLocation.Y, clipRect.Width, clipRect.Height); PAINTSTRUCT ps = new PAINTSTRUCT(); _bPainting = true; - Win32.User.BeginPaint(m.HWnd, ref ps); + User.BeginPaint(m.HWnd, ref ps); DrawUpDownButton(); - Win32.User.EndPaint(m.HWnd, ref ps); + User.EndPaint(m.HWnd, ref ps); _bPainting = false; - m.Result = NativeMethods.TRUE; + m.Result = Win32Helper.TRUE; } else { @@ -811,54 +807,6 @@ namespace Sunny.UI #endregion IDisposable 成员 } - internal class NativeMethods - { - public const int WM_PAINT = 0xF; - - public static readonly IntPtr TRUE = new IntPtr(1); - - - [StructLayout(LayoutKind.Sequential)] - public struct RECT - { - internal RECT(int X, int Y, int Width, int Height) - { - this.Left = X; - this.Top = Y; - this.Right = Width; - this.Bottom = Height; - } - - internal int Left; - internal int Top; - internal int Right; - internal int Bottom; - } - - [DllImport("user32.dll")] - public static extern IntPtr FindWindowEx( - IntPtr hwndParent, - IntPtr hwndChildAfter, - string lpszClass, - string lpszWindow); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetCursorPos(ref Point lpPoint); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool PtInRect([In] ref RECT lprc, Point pt); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint = true); - } - public delegate void UpDownButtonPaintEventHandler(object sender, UpDownButtonPaintEventArgs e); public class UpDownButtonPaintEventArgs : PaintEventArgs diff --git a/SunnyUI/Static/UAudio.cs b/SunnyUI/Static/UAudio.cs index 251fd6fd..b81fb2e3 100644 --- a/SunnyUI/Static/UAudio.cs +++ b/SunnyUI/Static/UAudio.cs @@ -22,7 +22,6 @@ using System; using System.ComponentModel; using System.Media; -using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; @@ -169,9 +168,6 @@ namespace Sunny.UI /// public static class Mp3Player { - [DllImport("winmm.dll")] - private static extern long mciSendString(string strCommand, System.Text.StringBuilder strReturn, int iReturnLength, IntPtr callback); - /// /// 播放 /// @@ -179,8 +175,8 @@ namespace Sunny.UI /// 重复 public static void Play(string MP3_FileName, bool Repeat) { - mciSendString("open \"" + MP3_FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); - mciSendString("play MediaFile" + (Repeat ? " repeat" : string.Empty), null, 0, IntPtr.Zero); + Win32.WinMM.mciSendString("open \"" + MP3_FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); + Win32.WinMM.mciSendString("play MediaFile" + (Repeat ? " repeat" : string.Empty), null, 0, IntPtr.Zero); } /// @@ -188,7 +184,7 @@ namespace Sunny.UI /// public static void Pause() { - mciSendString("stop MediaFile", null, 0, IntPtr.Zero); + Win32.WinMM.mciSendString("stop MediaFile", null, 0, IntPtr.Zero); } /// @@ -196,7 +192,7 @@ namespace Sunny.UI /// public static void Stop() { - mciSendString("close MediaFile", null, 0, IntPtr.Zero); + Win32.WinMM.mciSendString("close MediaFile", null, 0, IntPtr.Zero); } } } \ No newline at end of file diff --git a/SunnyUI/Static/UFile.cs b/SunnyUI/Static/UFile.cs index 2f085370..8f7ccace 100644 --- a/SunnyUI/Static/UFile.cs +++ b/SunnyUI/Static/UFile.cs @@ -26,7 +26,6 @@ using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; -using System.Runtime.InteropServices; using System.Windows.Forms; namespace Sunny.UI @@ -168,12 +167,6 @@ namespace Sunny.UI return path; } - [DllImport("User32.dll")] - private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); - - [DllImport("User32.dll")] - private static extern bool SetForegroundWindow(IntPtr hWnd); - /// /// 运行文件,当文件已经运行时调至前台 /// @@ -196,8 +189,8 @@ namespace Sunny.UI } IntPtr hWnd = oth.MainWindowHandle; - ShowWindowAsync(hWnd, (int)ProcessWindowStyle.Maximized); - SetForegroundWindow(hWnd); + Win32.User.ShowWindowAsync(hWnd, (int)ProcessWindowStyle.Maximized); + Win32.User.SetForegroundWindow(hWnd); return oth; } } diff --git a/SunnyUI/Static/UScrollBarInfo.cs b/SunnyUI/Static/UScrollBarInfo.cs index 1eb2698e..6a4c5fc4 100644 --- a/SunnyUI/Static/UScrollBarInfo.cs +++ b/SunnyUI/Static/UScrollBarInfo.cs @@ -19,6 +19,7 @@ * 2020-01-01: V2.2.0 增加文件说明 ******************************************************************************/ +using Sunny.UI.Win32; using System; using System.Runtime.InteropServices; using System.Windows.Forms; @@ -27,59 +28,12 @@ namespace Sunny.UI { public static class ScrollBarInfo { - public struct ScrollInfo - { - public int cbSize; //ScrollInfo结构体本身的字节大小 - public int fMask; //fMask表示设置或获取哪些数据,如:SIF_ALL所有数据成员都有效、SIF_PAGE(nPage有效)、SIF_POS(nPos有效)、SIF_RANGE(nMin和nMax有效)、SIF_TRACKPOS(nTrackPos有效)。 - public int nMin; //最小滚动位置 - public int nMax; //最大滚动位置 - public int nPage; //页面尺寸 - public int nPos; //滚动块的位置 - public int nTrackPos; //滚动块当前被拖动的位置,不能在SetScrollInfo中指定 - - public int ScrollMax => (nMax + 1 - nPage); - } - - //API声明 - [DllImport("user32.dll")]//[return: MarshalAs(UnmanagedType.Bool)] - private static extern bool GetScrollInfo(IntPtr handle, int fnBar, ref ScrollInfo si); - - [DllImport("user32.dll")]//[return: MarshalAs(UnmanagedType.Bool)] - private static extern int SetScrollInfo(IntPtr handle, int fnBar, ref ScrollInfo si, bool fRedraw); - - [DllImport("user32.dll", EntryPoint = "PostMessage")] - private static extern bool PostMessage(IntPtr handle, int msg, uint wParam, uint lParam); - - [DllImport("User32.dll", EntryPoint = "SendMessage")] - private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); - - /// - /// ShowScrollBar - /// - /// hWnd - /// 0:horizontal,1:vertical,3:both - /// bShow - /// - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow); - - //常量声明 - public const int SB_HORZ = 0;//找回所指定窗体的标准水平滚动条参数 - - public const int SB_VERT = 1;//找回所指定窗体的标准垂直滚动条参数 - public const int SB_CTL = 2;//找回滚动条控制参数 - public const int SB_THUMBTRACK = 5; public const int SIF_RANGE = 1; public const int SIF_PAGE = 2; public const int SIF_POS = 4; public const int SIF_TRACKPOS = 16; public const int SIF_DISABLENOSCROLL = 8; public const int SIF_ALL = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS; - public const int EM_GETLINECOUNT = 0x00BA; - public const int WM_VSCROLL = 0x0115; - public const int SB_LINEUP = 0; - public const int SB_LINEDOWN = 1; //私有方法 private static uint MakeLong(short lowPart, short highPart) @@ -97,29 +51,17 @@ namespace Sunny.UI return SystemInformation.HorizontalScrollBarHeight; } - //共有方法 - /// - /// 获取TextBox行数 - /// - /// TextBox句柄 - /// 行数 - public static int GetTextBoxLineLength(IntPtr handle) - { - int cont = SendMessage(handle, EM_GETLINECOUNT, 0, 0); - return cont; - } - /// /// 获取控件滚动条信息 /// /// 控件句柄 /// 信息结构 - public static ScrollInfo GetInfo(IntPtr handle) + public static SCROLLINFO GetInfo(IntPtr handle) { - ScrollInfo si = new ScrollInfo(); + SCROLLINFO si = new SCROLLINFO(); si.cbSize = Marshal.SizeOf(si); si.fMask = SIF_DISABLENOSCROLL | SIF_ALL; - GetScrollInfo(handle, SB_VERT, ref si); + User.GetScrollInfo(handle, User.SB_VERT, ref si); return si; } @@ -130,10 +72,10 @@ namespace Sunny.UI /// 滚动值 public static void SetScrollValue(IntPtr handle, int value) { - ScrollInfo info = GetInfo(handle); + SCROLLINFO info = GetInfo(handle); info.nPos = value; - SetScrollInfo(handle, SB_VERT, ref info, true); - PostMessage(handle, WM_VSCROLL, MakeLong(SB_THUMBTRACK, highPart: (short)info.nPos), 0); + User.SetScrollInfo(handle, User.SB_VERT, ref info, true); + User.PostMessage(handle, User.WM_VSCROLL, MakeLong(User.SB_THUMBTRACK, highPart: (short)info.nPos), 0); } /// @@ -142,7 +84,7 @@ namespace Sunny.UI /// 控件句柄 public static void ScrollUp(IntPtr handle) { - SendMessage(handle, WM_VSCROLL, SB_LINEUP, 0); + User.SendMessage(handle, User.WM_VSCROLL, User.SB_LINEUP, 0); } /// @@ -151,7 +93,7 @@ namespace Sunny.UI /// 控件句柄 public static void ScrollDown(IntPtr handle) { - SendMessage(handle, WM_VSCROLL, SB_LINEDOWN, 0); + User.SendMessage(handle, User.WM_VSCROLL, User.SB_LINEDOWN, 0); } } } \ No newline at end of file diff --git a/SunnyUI/Static/USystem.cs b/SunnyUI/Static/USystem.cs index 99707612..3219c4ab 100644 --- a/SunnyUI/Static/USystem.cs +++ b/SunnyUI/Static/USystem.cs @@ -19,13 +19,13 @@ * 2020-01-01: V2.2.0 增加文件说明 ******************************************************************************/ +using Sunny.UI.Win32; using System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; -using System.Runtime.InteropServices; using System.Security.Permissions; using System.Windows.Forms; @@ -42,53 +42,22 @@ namespace Sunny.UI /// public static Rectangle GetForegroundWindowBounds() { - IntPtr awin = GetForegroundWindow(); //获取当前窗口句柄 + IntPtr handle = User.GetForegroundWindow().IntPtr(); //获取当前窗口句柄 RECT rect = new RECT(); - GetWindowRect(awin, ref rect); + User.GetWindowRect(handle, ref rect); return new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top); } - [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] - static extern IntPtr GetForegroundWindow(); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); - - [StructLayout(LayoutKind.Sequential)] - struct RECT - { - public int Left; //最左坐标 - public int Top; //最上坐标 - public int Right; //最右坐标 - public int Bottom; //最下坐标 - } - /// /// 获取鼠标位置 /// /// public static Point GetCursorPos() { - GetCursorPos(out POINT pos); + User.GetCursorPos(out POINT pos); return new Point(pos.X, pos.Y); } - [DllImport("user32.dll")] - static extern bool GetCursorPos(out POINT lpPoint); - - [StructLayout(LayoutKind.Sequential)] - struct POINT - { - public int X; - public int Y; - public POINT(int x, int y) - { - this.X = x; - this.Y = y; - } - } - public static void ConsoleWriteLine(this object obj, string preText = "") { if (preText != "") @@ -325,8 +294,8 @@ namespace Sunny.UI [EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)] private static void HandleRunningInstance(Process instance, int showStyle) { - ShowWindowAsync(instance.MainWindowHandle, showStyle); //调用api函数,正常显示窗口 - SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端。 + User.ShowWindowAsync(instance.MainWindowHandle, showStyle); //调用api函数,正常显示窗口 + User.SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端。 } /// @@ -359,12 +328,6 @@ namespace Sunny.UI frm.WindowState = showMax ? FormWindowState.Maximized : FormWindowState.Normal; } - [DllImport("User32.dll")] - private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); - - [DllImport("User32.dll")] - private static extern bool SetForegroundWindow(IntPtr hWnd); - /// /// 最小化显示 /// Hides the window and activates another window. diff --git a/SunnyUI/Units/UIniFile.cs b/SunnyUI/Units/UIniFile.cs index 8c51aad0..dd6b4a07 100644 --- a/SunnyUI/Units/UIniFile.cs +++ b/SunnyUI/Units/UIniFile.cs @@ -19,6 +19,7 @@ * 2020-01-01: V2.2.0 增加文件说明 ******************************************************************************/ +using Sunny.UI.Win32; using System; using System.Collections.Specialized; using System.ComponentModel; @@ -26,7 +27,6 @@ using System.Drawing; using System.Globalization; using System.IO; using System.Linq; -using System.Runtime.InteropServices; using System.Text; namespace Sunny.UI @@ -42,11 +42,6 @@ namespace Sunny.UI [Description("文件名")] public string FileName { get; set; } //INI文件名 - [DllImport("kernel32")] - private static extern bool WritePrivateProfileString(byte[] section, byte[] key, byte[] val, string filePath); - - [DllImport("kernel32")] - private static extern int GetPrivateProfileString(byte[] section, byte[] key, byte[] def, byte[] retVal, int size, string filePath); /// /// Ini文件编码格式 @@ -109,7 +104,7 @@ namespace Sunny.UI value = ""; } - return WritePrivateProfileString(IniEncoding.GetBytes(section), IniEncoding.GetBytes(key), IniEncoding.GetBytes(value), FileName); + return Kernel.WritePrivateProfileString(IniEncoding.GetBytes(section), IniEncoding.GetBytes(key), IniEncoding.GetBytes(value), FileName); } /// @@ -127,7 +122,7 @@ namespace Sunny.UI Default = ""; } - int bufLen = GetPrivateProfileString(IniEncoding.GetBytes(section), IniEncoding.GetBytes(key), IniEncoding.GetBytes(Default), buffer, 1024, FileName); + int bufLen = Kernel.GetPrivateProfileString(IniEncoding.GetBytes(section), IniEncoding.GetBytes(key), IniEncoding.GetBytes(Default), buffer, 1024, FileName); //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文 return IniEncoding.GetString(buffer, 0, bufLen).Trim(); } @@ -165,7 +160,7 @@ namespace Sunny.UI private void GetKeys(string section, StringCollection keys) { byte[] buffer = new byte[65535]; - int bufLen = GetPrivateProfileString(IniEncoding.GetBytes(section), null, null, buffer, 65535, FileName); + int bufLen = Kernel.GetPrivateProfileString(IniEncoding.GetBytes(section), null, null, buffer, 65535, FileName); //对Section进行解析 GetStringsFromBuffer(buffer, bufLen, keys); } @@ -198,7 +193,7 @@ namespace Sunny.UI { //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section byte[] buffer = new byte[65535]; - int bufLen = GetPrivateProfileString(null, null, null, buffer, buffer.GetUpperBound(0), FileName); + int bufLen = Kernel.GetPrivateProfileString(null, null, null, buffer, buffer.GetUpperBound(0), FileName); GetStringsFromBuffer(buffer, bufLen, sectionList); } @@ -224,7 +219,7 @@ namespace Sunny.UI /// section public void EraseSection(string section) { - if (!WritePrivateProfileString(IniEncoding.GetBytes(section), null, null, FileName)) + if (!Kernel.WritePrivateProfileString(IniEncoding.GetBytes(section), null, null, FileName)) { throw (new ApplicationException("无法清除Ini文件中的Section")); } @@ -237,7 +232,7 @@ namespace Sunny.UI /// key public void DeleteKey(string section, string key) { - WritePrivateProfileString(IniEncoding.GetBytes(section), IniEncoding.GetBytes(key), null, FileName); + Kernel.WritePrivateProfileString(IniEncoding.GetBytes(section), IniEncoding.GetBytes(key), null, FileName); } /// @@ -247,7 +242,7 @@ namespace Sunny.UI /// public void UpdateFile() { - WritePrivateProfileString(null, null, null, FileName); + Kernel.WritePrivateProfileString(null, null, null, FileName); } /// diff --git a/SunnyUI/Win32/Win32.Added.cs b/SunnyUI/Win32/Win32.Added.cs index 36b27f50..5b8e68dd 100644 --- a/SunnyUI/Win32/Win32.Added.cs +++ b/SunnyUI/Win32/Win32.Added.cs @@ -1,8 +1,19 @@ using System; +using System.Drawing; using System.Runtime.InteropServices; namespace Sunny.UI.Win32 { + public static class Win32Helper + { + public static readonly IntPtr TRUE = new IntPtr(1); + + public static IntPtr IntPtr(this int value) + { + return new IntPtr(value); + } + } + public partial class GDI { [DllImport("gdi32.dll", EntryPoint = "DeleteObject", CharSet = CharSet.Ansi)] @@ -15,13 +26,28 @@ namespace Sunny.UI.Win32 public partial class User { [DllImport("user32.dll")] - public static extern int SetWindowRgn(IntPtr wnd, int hRgn, Boolean bRedraw); + public static extern int SetWindowRgn(IntPtr wnd, int hRgn, bool bRedraw); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, string lParam); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint = true); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool PtInRect([In] ref RECT lprc, Point pt); + + [DllImport("user32.dll", EntryPoint = "PostMessage")] + public static extern bool PostMessage(IntPtr handle, int msg, uint wParam, uint lParam); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow); } public class Dwm @@ -43,4 +69,37 @@ namespace Sunny.UI.Win32 public int bottomHeight; } } + + public partial class AdvApi + { + [DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccesss, out IntPtr TokenHandle); + + + [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, + [MarshalAs(UnmanagedType.Struct)] ref LUID lpLuid); + + [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, + [MarshalAs(UnmanagedType.Bool)] bool DisableAllPrivileges, + [MarshalAs(UnmanagedType.Struct)] ref TOKEN_PRIVILEGES NewState, + uint BufferLength, IntPtr PreviousState, uint ReturnLength); + } + + public partial class Kernel + { + [DllImport("kernel32.dll")] + public static extern IntPtr OpenThread(int dwDesiredAccess, bool bInheritHandle, IntPtr dwThreadId); + + [DllImport("kernel32")] + public static extern bool WritePrivateProfileString(byte[] section, byte[] key, byte[] val, string filePath); + + [DllImport("kernel32")] + public static extern int GetPrivateProfileString(byte[] section, byte[] key, byte[] def, byte[] retVal, int size, string filePath); + + } } diff --git a/SunnyUI/Win32/Win32.Kernel.cs b/SunnyUI/Win32/Win32.Kernel.cs index 02ddf4dd..df3ea6da 100644 --- a/SunnyUI/Win32/Win32.Kernel.cs +++ b/SunnyUI/Win32/Win32.Kernel.cs @@ -695,7 +695,7 @@ namespace Sunny.UI.Win32 public int BatteryFullLifeTime; } - public abstract class AdvApi + public partial class AdvApi { [DllImport("AdvApi32")] public static extern int ImpersonateLoggedOnUser(HANDLE hToken); [DllImport("advapi32")] public static extern int IsTextUnicode(IntPtr lpBuffer, int cb, ref int lpi); @@ -847,7 +847,7 @@ namespace Sunny.UI.Win32 [DllImport("version")] public static extern int VerQueryValue(IntPtr pBlock, string lpSubBlock, ref int lplpBuffer, ref int puLen); } - public abstract class Kernel + public partial class Kernel { [DllImport("kernel32")] public static extern void OutputDebugString(string lpszOutputString); [DllImport("KERNEL32")] public static extern int ConvertDefaultLocale(int Locale); diff --git a/SunnyUI/Win32/Win32.User.cs b/SunnyUI/Win32/Win32.User.cs index 98569567..e471b348 100644 --- a/SunnyUI/Win32/Win32.User.cs +++ b/SunnyUI/Win32/Win32.User.cs @@ -426,13 +426,15 @@ namespace Sunny.UI.Win32 } public struct SCROLLINFO { - public int cbSize; - public int fMask; - public int nMin; - public int nMax; - public int nPage; - public int nPos; - public int nTrackPos; + public int cbSize; //ScrollInfo结构体本身的字节大小 + public int fMask; //fMask表示设置或获取哪些数据,如:SIF_ALL所有数据成员都有效、SIF_PAGE(nPage有效)、SIF_POS(nPos有效)、SIF_RANGE(nMin和nMax有效)、SIF_TRACKPOS(nTrackPos有效)。 + public int nMin; //最小滚动位置 + public int nMax; //最大滚动位置 + public int nPage; //页面尺寸 + public int nPos; //滚动块的位置 + public int nTrackPos; //滚动块当前被拖动的位置,不能在SetScrollInfo中指定 + + public int ScrollMax => (nMax + 1 - nPage); } public struct MSGBOXPARAMS {