API常用函数封装

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; } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值