// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc.
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
namespace Kbg.NppPluginNET.PluginInfrastructure
{
public class Win32
{
///
/// Get the scroll information of a scroll bar or window with scroll bar
/// @see https://msdn.microsoft.com/en-us/library/windows/desktop/bb787537(v=vs.85).aspx
///
[StructLayout(LayoutKind.Sequential)]
public struct ScrollInfo
{
///
/// Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO).
///
public uint cbSize;
///
/// Specifies the scroll bar parameters to set or retrieve.
/// @see ScrollInfoMask
///
public uint fMask;
///
/// Specifies the minimum scrolling position.
///
public int nMin;
///
/// Specifies the maximum scrolling position.
///
public int nMax;
///
/// Specifies the page size, in device units. A scroll bar uses this value to determine the appropriate size of the proportional scroll box.
///
public uint nPage;
///
/// Specifies the position of the scroll box.
///
public int nPos;
///
/// Specifies the immediate position of a scroll box that the user is dragging.
/// An application can retrieve this value while processing the SB_THUMBTRACK request code.
/// An application cannot set the immediate scroll position; the SetScrollInfo function ignores this member.
///
public int nTrackPos;
}
///
/// Used for the ScrollInfo fMask
/// SIF_ALL => Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS.
/// SIF_DISABLENOSCROLL => This value is used only when setting a scroll bar's parameters. If the scroll bar's new parameters make the scroll bar unnecessary, disable the scroll bar instead of removing it.
/// SIF_PAGE => The nPage member contains the page size for a proportional scroll bar.
/// SIF_POS => The nPos member contains the scroll box position, which is not updated while the user drags the scroll box.
/// SIF_RANGE => The nMin and nMax members contain the minimum and maximum values for the scrolling range.
/// SIF_TRACKPOS => The nTrackPos member contains the current position of the scroll box while the user is dragging it.
///
public enum ScrollInfoMask
{
SIF_RANGE = 0x1,
SIF_PAGE = 0x2,
SIF_POS = 0x4,
SIF_DISABLENOSCROLL = 0x8,
SIF_TRACKPOS = 0x10,
SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS
}
///
/// Used for the GetScrollInfo() nBar parameter
///
public enum ScrollInfoBar
{
SB_HORZ = 0,
SB_VERT = 1,
SB_CTL = 2,
SB_BOTH = 3
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
[DllImport("user32")]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
[DllImport("user32")]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lParam);
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
[DllImport("user32")]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
[DllImport("user32")]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, out IntPtr lParam);
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, NppMenuCmd lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr((uint)lParam));
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr(lParam));
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, out int lParam)
{
IntPtr outVal;
IntPtr retval = SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), out outVal);
lParam = outVal.ToInt32();
return retval;
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, int lParam)
{
return SendMessage(hWnd, (UInt32)Msg, wParam, new IntPtr(lParam));
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, IntPtr wParam, int lParam)
{
return SendMessage(hWnd, (UInt32)Msg, wParam, new IntPtr(lParam));
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, IntPtr lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, string lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, int lParam)
{
return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr(lParam));
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, IntPtr wParam, IntPtr lParam)
{
return SendMessage(hWnd, (UInt32)Msg, wParam, lParam);
}
///
/// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as
/// or .
/// If gateways are missing or incomplete, please help extend them and send your code to the project
/// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net
///
public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, ref LangType lParam)
{
IntPtr outVal;
IntPtr retval = SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), out outVal);
lParam = (LangType)outVal;
return retval;
}
public const int MAX_PATH = 260;
[DllImport("kernel32")]
public static extern int GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName);
[DllImport("kernel32")]
public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName);
[DllImport("kernel32")]
public static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);
public const int MF_BYCOMMAND = 0;
public const int MF_CHECKED = 8;
public const int MF_UNCHECKED = 0;
[DllImport("user32")]
public static extern IntPtr GetMenu(IntPtr hWnd);
[DllImport("user32")]
public static extern int CheckMenuItem(IntPtr hmenu, int uIDCheckItem, int uCheck);
public const int WM_CREATE = 1;
[DllImport("user32")]
public static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint);
[DllImport("kernel32")]
public static extern void OutputDebugString(string lpOutputString);
///
/// @see https://msdn.microsoft.com/en-us/library/windows/desktop/bb787583(v=vs.85).aspx
///
///
///
///
///
[DllImport("user32")]
public static extern int GetScrollInfo(IntPtr hwnd, int nBar, ref ScrollInfo scrollInfo);
}
}