首页 > 编程语言 >C# 向当前活动文本框输入文字

C# 向当前活动文本框输入文字

时间:2023-10-13 17:26:13浏览次数:38  
标签:GUITHREADINFO IntPtr return C# hwnd 文本框 int public 输入

#region 向当前活动文本框输入文字
     /// <summary>
    /// 向当前活动文本框输入文字
    ///  new SendMsg().SendText("你要输入的字符串");
    /// </summary>
    public class SendMsg
    {
        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
        [DllImport("user32.dll")]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
        [DllImport("user32.dll")]
        static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);
        [StructLayout(LayoutKind.Sequential)]
        public struct GUITHREADINFO
        {
            public int cbSize;
            public int flags;
            public IntPtr hwndActive;
            public IntPtr hwndFocus;
            public IntPtr hwndCapture;
            public IntPtr hwndMenuOwner;
            public IntPtr hwndMoveSize;
            public IntPtr hwndCaret;
            public RECT rectCaret;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            int left;
            int top;
            int right;
            int bottom;
        }
        public GUITHREADINFO? GetGuiThreadInfo(IntPtr hwnd)
        {
            if (hwnd != IntPtr.Zero)
            {
                uint threadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero);
                GUITHREADINFO guiThreadInfo = new GUITHREADINFO();
                guiThreadInfo.cbSize = Marshal.SizeOf(guiThreadInfo);
                if (GetGUIThreadInfo(threadId, ref guiThreadInfo) == false)
                    return null; return guiThreadInfo;
            }
            return null;
        }
        public void SendText(string text)
        {
            IntPtr hwnd = GetForegroundWindow();
            if (String.IsNullOrEmpty(text))
                return;
            GUITHREADINFO? guiInfo = GetGuiThreadInfo(hwnd);
            if (guiInfo != null)
            {
                for (int i = 0; i < text.Length; i++)
                {
                    SendMessage(guiInfo.Value.hwndFocus, 0x0102, (IntPtr)(int)text[i], IntPtr.Zero);
                }
            }
        }

        private bool isTrigger()
        {
            IntPtr hwnd = GetForegroundWindow();
            GUITHREADINFO? guiInfo = GetGuiThreadInfo(hwnd);
            if (guiInfo != null)
            {
                return true;
            }
            return false;
        }
    }
    #endregion

 

标签:GUITHREADINFO,IntPtr,return,C#,hwnd,文本框,int,public,输入
From: https://www.cnblogs.com/handsomeziff/p/17762603.html

相关文章

  • Codeforces Round 684 (Div. 2) B. Sum of Medians
    定义\(median\)是一个非降序数组中第\(\lceil\frac{n}{2}\rceil\)的数。数组从\(1\)开始标号。给两个数\(n\)和\(k\),并给出一个长为\(nk\)的数组\(a\)。需要分出为\(k\)个大小为\(n\)的数组,每个元素需要被严格分入一个数组中。需要让\(k\)个数组的中位数......
  • GDCPC2023 L Classic Problem
    洛谷传送门CF传送门对于一个点\(x\),若\(\existsi,u_i=x\lorv_i=x\),则称\(x\)为特殊点,否则为一般点。首先发现,对于极长的一段\([l,r]\)满足\(l\simr\)均为一般点,那么可以连边\((l,l+1),(l+1,l+2),\ldots,(r-1,r)\),然后把\([l,r]\)缩成一......
  • GienTech动态|入选软件和信息技术服务竞争力百强;参展世界计算大会、网络安全博览会
    ​ ​————GienTech动态———— 中电金信参展广东省网络安全博览会、世界计算机大会​ ​近期,中电金信跟随中国电子参展2023年广东省网络安全博览会(下简称“博览会”)和2023世界计算大会。在两大峰会上,中电金信展出了金融级数字底座“源启”、云原生分布式......
  • Loadrunner12.5-录制http://www.gw.com.cn/网页时提示“SSL身份验证失败”错误
    问题:LR产品,录制http://www.gw.com.cn/网页时提示下图错误,这是为什么呢?请在如下recordingoptions中选择正确的SSL版本,再进行录制。注:如何确定那个SSL版本是正确的呢?答:需要与网站这边进行确认,问他们网站使用的SSL版本是多少? ......
  • 在Eclipse将Java代码打包为jar用于jmeter BeanShell
    Beanshell是java的轻量级脚本,可以直接引用java代码,有下面3种方式:1、直接输入java代码2、导入java文件(或者导入class文件)3、导入jar文件现在记录第三种方式,导入jar文件第一步是先在Eclipse将Java代码打包为jar1、先准备好需要打包的代码 2、首先在Eclipse中选中需要打包......
  • 文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题
    三、用go语言,用一个单链表L实现一个队列。要求操作ENQUEUE和DEQUEUE的运行时间仍为O(1)。文心一言:在Go语言中,使用单链表实现队列的操作,包括入队(ENQUEUE)和出队(DEQUEUE),并保持操作的时间复杂度为O(1),需要利用两个指针,一个指向队头,另一个指向队尾。以下是一个简单的实现:pac......
  • tcache_stashing_unlink_attack
    tcachestashingunlinkattack实现的效果和unsortedbinattack有点相似,可以向任意地址写一个较大的数如果构造合理,还可以实现任意地址分配chunkmalloc.c:line3635if(in_smallbin_range(nb)){idx=smallbin_index(nb);bin=bin_at(av,idx);......
  • 杀死包含指定SQL片段的Oracle进程
    杀死包含指定SQL片段的Oracle进程一、Linux窗口A#切换登录用户su-oracle#以sa身份登录DB!sql--查询当前的DBsessionIDselectuserenv('sid')fromdual;输出:4054--查询当前DBsession的processIDSELECTspidFROMv$sessions,v$processpWHEREs.sid=4054......
  • 2021 China Collegiate Programming Contest (CCPC) Guilin Site
    A.AHeroNamedMagnus#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingpii=pair<int,int>;usingvi=vector<int>;voidsolve(){intx;cin>>x;cout<<2ll*x-1<<"......
  • 在Eclipse将Java代码打包为jar用于jmeter BeanShell(HMAC_SHA1)加密
    Eclipse代码importjavax.crypto.Mac;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;importjava.nio.charset.StandardCharsets;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;publicclassHMAC_data......