C#利用API给其它线程的各种控件赋值

29 篇文章 0 订阅
29 篇文章 0 订阅

 [DllImport("User32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

        [DllImport("user32.dll")]
        public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam,
        int lParam);

            //为可输入控件赋值
            const int WM_SETTEXT = 0x000C;
            //SendMessage((IntPtr)hwnd, WM_SETTEXT, (IntPtr)0, "123");

            //模拟单击
            const int WM_CLICK = 0x00F5;
            //SendMessage((IntPtr)hwnd, WM_CLICK, (IntPtr)0, "0");

            //为下拉控件赋值
            const int WM_CLICK2 = 0x014D;
            //SendMessage((IntPtr)hwnd, WM_CLICK2, (IntPtr)0, "123");

            //向下拉控件添加值
            const int WM_CLICK3 = 0x0180;
            //SendMessage((IntPtr)hwnd, WM_CLICK3, (IntPtr)0, "123");

            //展开日期下拉
            const int wm_syskeydown = 0x0104, vk_down = 0x28;
            //SendMessage((IntPtr)hwnd, wm_syskeydown, vk_down, 0);

 

//为下拉列表和TreeView赋值

  public class TreeApi
    {
        #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 ")]
        public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount);
        [DllImport("user32.dll ")]
        
        public static extern int GetClassNameA(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   "常量定义 "
        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 TV_FIRST = 0x1100;// TreeView messages
        private const int TVM_DELETEITEM = (TV_FIRST + 1);
        private const int WM_CLICK = 0x00F5;
        private const int TVM_GETITEMRECT = (TV_FIRST + 4);
        #endregion
 
///   <summary> 
    ///   选取TreeView指定项 
    ///   </summary> 
    ///   <param   name= "TreeViewHwnd "> 树对象句柄 </param> 
    ///   <param   name= "ItemHwnd "> 节点对象句柄 </param> 
    ///   <returns> 成功选中返回true   没找到返回false </returns> 
    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;
        }
    }
    ///   <summary> 
    ///   获取TreeView根节点 
    ///   </summary> 
    ///   <param   name= "TreeViewHwnd "> 树对象句柄 </param> 
    ///   <returns> 成功返回根节点句柄   否则返回   0 </returns> 
    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);
    }
    ///   <summary> 
    ///   获取同级下一节点句柄 
    ///   </summary> 
    ///   <param   name= "TreeViewHwnd "> 树对象句柄 </param> 
    ///   <param   name= "PrevHwnd "> 上一项节点句柄 </param> 
    ///   <returns> 成功返回下一项节点句柄   否则返回   0 </returns> 
    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);
    }
    ///   <summary> 
    ///   获取第一个子节点句柄 
    ///   </summary> 
    ///   <param   name= "TreeViewHwnd "> 树对象句柄 </param> 
    ///   <param   name= "ParentHwnd "> 父节点句柄 </param> 
    ///   <returns> 成功返回第一个子节点句柄   否则返回   0 </returns> 
    public static IntPtr GetFirstChildItem(IntPtr TreeViewHwnd, IntPtr ParentHwnd)
    {
        int result = SendMessage(TreeViewHwnd.ToInt32(), TVM_GETNEXTITEM, new IntPtr(TVGN_CHILD), ParentHwnd);
        return new IntPtr(result);
    }
    ///   <summary> 
    ///   获取指定项文本 
    ///   </summary> 
    ///   <param   name= "TreeViewHwnd "> 树对象句柄 </param> 
    ///   <param   name= "ItemHwnd "> 节点句柄 </param> 
    ///   <returns> </returns> 
    public static string GetItemText(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();
    }
    ///   <summary> 
    ///   TV_ITEM结构 
    ///   </summary> 
    [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;
    }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bingo_BIG

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值