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
{