using System.Text; using System; using System.Runtime.InteropServices; using System.Collections; using System.Collections.Generic; namespace Win32API { public class WinAPI { #region "API函数定义 " [DllImport("user32.dll ", CharSet = CharSet.Unicode)] private static extern int SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lparam); [DllImport("user32.dll ", CharSet = CharSet.Unicode)] private static extern int SendMessage(int hWnd, int msg, IntPtr wParam, TVITEM lparam); [DllImport("user32.dll ", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam); [DllImport("user32.dll ", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, string lParam); //此处用于将窗口设置在最前 [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags ); //此处用于向窗口发送消息 [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImport("User32.dll", EntryPoint = "SendMessage")] public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam); [DllImport("user32.dll")] public static extern int EnumChildWindows(int hWndParent, EnumChildWndProc lpfn, int lParam); [DllImport("user32.dll ")] public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount); [DllImport("user32.dll ")] public static extern int GetClassName(int hwnd, StringBuilder lpClassName, int nMaxCount); [DllImport("kernel32 ", CharSet = CharSet.Unicode)] public static extern int CopyMemory(StringBuilder Destination, IntPtr Source, int Length); [DllImport("kernel32 ", CharSet = CharSet.Unicode)] public static extern int GlobalAlloc(int wFlags, int dwBytes); [DllImport("kernel32 ", CharSet = CharSet.Unicode)] public static extern int GlobalFree(IntPtr hMem); #endregion #region 委托定义 ///
/// 回调函数代理 /// public delegate bool EnumChildWndProc(int hwnd, int lParam); ///
/// 子窗口回调函数代理 /// public static EnumChildWndProc childWindowProcess = new EnumChildWndProc(ChildWindowProcess); #endregion #region "常量定义 " private const int TVGN_CARET = 0x00000009; private const int TVM_SELECTITEM = 0x0000110b; private const int TVGN_ROOT = 0x00000000; private const int TVM_GETNEXTITEM = 0x0000110a; private const int TVIF_TEXT = 0x0001; private const int TVGN_NEXT = 0x00000001; private const int TVM_GETITEM = 0x0000110c; private const int TVGN_CHILD = 0x00000004; private const int GMEM_FIXED = 0x0000; private const int GMEM_Expand = 0x1102; private const int WM_SYSCOMMAND = 0x0112; private const int SC_MAXIMIZE = 0xF030; private const int SC_MINIMIZE = 0xf020; private const int SC_RESTORE = 0xF120; private const int SC_CLOSE = 0xF060; private const int WM_SETTEXT = 0x000C; private const int WM_CLICK = 0x00F5; private const int CB_SELECTSTRING = 0x014D; private const int LB_ADDSTRING = 0x0180; private const int wm_syskeydown = 0x0104, vk_down = 0x28; private const int LB_DELETESTRING = 0x0182; private const int LB_SETCURSEL = 0x0186; private const int BM_CLICK = 0x00F5; const int CB_SHOWDROPDOWN = 0x014F; #endregion #region TreeView操作 ///
/// 选取TreeView指定项 /// ///
树对象句柄 ///
节点对象句柄 ///
成功选中返回true 没找到返回false
public static bool SelectNode(IntPtr TreeViewHwnd, IntPtr ItemHwnd) { int result = SendMessage(TreeViewHwnd.ToInt32(), TVM_SELECTITEM, new IntPtr(TVGN_CARET), ItemHwnd); if (result == 0) { return false; } else { return true; } } ///
/// 获取TreeView根节点 /// ///
树对象句柄 ///
成功返回根节点句柄 否则返回 0
public static IntPtr GetRoot(IntPtr TreeViewHwnd) { TVITEM tv = new TVITEM(); IntPtr hStr = Marshal.AllocHGlobal(1024); tv.hItem = TreeViewHwnd; tv.mask = TVIF_TEXT; tv.pszText = hStr; tv.cchTextMax = 1024; int result = SendMessage(TreeViewHwnd.ToInt32(), TVM_GETNEXTITEM, new IntPtr(TVGN_ROOT), tv); Marshal.FreeHGlobal(hStr); return new IntPtr(result); } ///
/// 获取同级下一节点句柄 /// ///
树对象句柄 ///
上一项节点句柄 ///
成功返回下一项节点句柄 否则返回 0
public static IntPtr GetNextItem(IntPtr TreeViewHwnd, IntPtr PrevHwnd) { int mbHwnd = 0; mbHwnd = SendMessage(TreeViewHwnd.ToInt32(), TVM_GETNEXTITEM, new IntPtr(TVGN_NEXT), PrevHwnd); return new IntPtr(mbHwnd); } ///
/// 获取第一个子节点句柄 /// ///
树对象句柄 ///
父节点句柄 ///
成功返回第一个子节点句柄 否则返回 0
public static IntPtr GetFirstChildItem(IntPtr TreeViewHwnd, IntPtr ParentHwnd) { int result = SendMessage(TreeViewHwnd.ToInt32(), TVM_GETNEXTITEM, new IntPtr(TVGN_CHILD), ParentHwnd); return new IntPtr(result); } ///
/// 获取指定项文本 /// ///
树对象句柄 ///
节点句柄 ///
public static string GetItemText(IntPtr TreeViewHwnd, IntPtr ItemHwnd) { StringBuilder sb = new StringBuilder(1024); int hStr = GlobalAlloc(GMEM_FIXED, 1024); if (hStr > 0) { TVITEM tv = new TVITEM(); tv.mask = TVIF_TEXT; tv.HTreeItem = ItemHwnd.ToInt32(); tv.pszText = new IntPtr(hStr); tv.cchTextMax = 1023; int i = SendMessage(TreeViewHwnd.ToInt32(), TVM_GETITEM, IntPtr.Zero, tv); int iCopy = CopyMemory(sb, new IntPtr(hStr), 1024); GlobalFree(new IntPtr(hStr)); } return sb.ToString(); } ///
/// 获取指定项文本 /// ///
树对象句柄 ///
节点句柄 ///
public static string GetItemText2(IntPtr TreeViewHwnd, IntPtr ItemHwnd) { IntPtr hStr = Marshal.AllocHGlobal(1024); TVITEM tv = new TVITEM(); tv.hItem = ItemHwnd; tv.mask = TVIF_TEXT; tv.pszText = hStr; tv.cchTextMax = 1024; StringBuilder sb = new StringBuilder(1024); int result = SendMessage(TreeViewHwnd.ToInt32(), TVM_GETITEM, new IntPtr(0), tv); int iCopy = CopyMemory(sb, hStr, 1024); Marshal.FreeHGlobal(hStr); return sb.ToString(); } ///
/// 展开节点 /// ///
树对象句柄 ///
节点句柄 ///
要展开的节点索引 public static IntPtr ExpandNode(IntPtr TreeViewHwnd, IntPtr ItemHwnd, int index) { return SendMessage(TreeViewHwnd, GMEM_Expand, index, ItemHwnd); } #endregion #region 窗体操作 ///
/// 关闭窗体 /// ///
public static void SetWindowClose(IntPtr hWnd) { SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); } ///
/// 窗体恢复原来的大小 /// ///
public static void SetWindowRestore(IntPtr hWnd) { SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); } ///
/// 窗口最小化 /// ///
public static void SetWindowMin(IntPtr hWnd) { SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); } ///
/// 窗口最大化 /// ///
public static void SetWindowMax(IntPtr hWnd) { SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0); } ///
/// 窗口置前 /// ///
public static void SetWindowPos(IntPtr hWnd) { SendMessage(hWnd, -1, 0, 0, 0, 0, 3); } #endregion #region 列表框操作 ///
/// 查询ListBox中的文本 /// ///
///
///
索引,没找到返回-1
public static int QueryListBoxItem(IntPtr listboxHwnd, string queryText) { return SendMessage(listboxHwnd, 0x018F, -1, queryText); } ///
/// 向列表添加项 /// ///
///
///
public static int AddItem(IntPtr hwnd, string text) { return SendMessage(hwnd, LB_ADDSTRING, (IntPtr)0, text); } ///
/// 删除列表项 /// ///
///
项的索引(以0为基数) ///
删除后列表项数;如果nIndex比总数大时,则返回LB_ERR. (int)
public static int DeleteItem(IntPtr hwnd, int itemIndex) { return SendMessage((IntPtr)hwnd, LB_DELETESTRING, itemIndex, 0); } ///
/// 设置列表框的当前选择项 /// 只能对单选列表框调用此函数,否则返回LB_ERR /// ///
///
项索引(以0为基数),若为-1,则设列表框为无选则壮态 ///
返回值:成功,原本的选择项索引.若失败,则返回LB_ERR. (int)
public static int SelectItem(IntPtr hwnd, int itemIndex) { return SendMessage(hwnd, LB_SETCURSEL, itemIndex, 0); } #endregion ///
/// 单击RadioButton,CheckBox实现选中或反选 /// ///
///
public static int ClickCheckCon(IntPtr hwnd) { return SendMessage(hwnd, BM_CLICK, 0, 0); } ///
/// 为可输入控件赋值 /// ///
///
///
public static int SetText(IntPtr hwnd, string text) { return SendMessage(hwnd, WM_SETTEXT, (IntPtr)0, text); } ///
/// 模拟单击 /// ///
///
public static int ClickCon(IntPtr hwnd) { return SendMessage(hwnd, WM_CLICK, (IntPtr)0, "0"); } ///
/// 设置下拉控件选中值 /// ///
///
///
public static int SelectCommBoxText(IntPtr hwnd, string text) { return SendMessage(hwnd, CB_SELECTSTRING, (IntPtr)0, text); } ///
/// 强制ComboBox弹出下拉框 /// ///
///
public static int SelectCommBoxText(IntPtr hwnd) { return SendMessage((IntPtr)hwnd, CB_SHOWDROPDOWN, 1, 0); } ///
/// 展开日期下拉 /// ///
///
IntPtr
public static int DownDateTimePicker(IntPtr hwnd) { return SendMessage(hwnd, wm_syskeydown, vk_down, 0); } static int m_iChildFor = 0; public static Dictionary
m_AlChildConHwnd = new Dictionary
(); ///
/// 子窗口回调处理函数 /// ///
///
///
public static bool ChildWindowProcess(int hwnd, int lParam) { StringBuilder _sbClassName = new StringBuilder(255); WinAPI.GetClassName(hwnd, _sbClassName, 255); m_AlChildConHwnd.Add((IntPtr)hwnd, _sbClassName.ToString()); //if (_sbClassName.ToString().Contains("EDIT")) //{ // m_AlChildConHwnd.Add((IntPtr)hwnd, m_iChildFor.ToString()); // m_iChildFor++; //} //else if (_sbClassName.ToString().Contains("BUTTON")) //{ // m_AlChildConHwnd.Add((IntPtr)hwnd, m_iChildFor.ToString()); // m_iChildFor++; //} //else if (_sbClassName.ToString().Contains("COMBOBOX")) //{ // m_AlChildConHwnd.Add((IntPtr)hwnd, m_iChildFor.ToString()); // m_iChildFor++; //} return true; } } ///
/// TV_ITEM结构 /// [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class TVITEM { public int mask; public IntPtr hItem; public int state; public int stateMask; public IntPtr pszText; public int cchTextMax; public int iImage; public int iSelectedImage; public int cChildren; public IntPtr lParam; public int HTreeItem; } }
API常用函数封装
最新推荐文章于 2023-01-03 10:32:41 发布