在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → C# 小脚本控制其他程序 查找窗体句柄控制按钮

C# 小脚本控制其他程序 查找窗体句柄控制按钮

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.18M
  • 下载次数:7
  • 浏览次数:28
  • 发布时间:2021-07-28
  • 实例类别:一般编程问题
  • 发 布 人:mo1021899499
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 脚本 程序 控制 窗体 按钮

实例介绍

小脚本,控制其他程序  查找窗体句柄控制按钮


【核心代码】


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    static class WindowsApi
    {
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow);

        [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);

        [DllImport("user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true)]
        public static extern void SetForegroundWindow(IntPtr hwnd);

        [DllImport("user32.dll")]
        public static extern int EnumChildWindows(IntPtr hWndParent, CallBack lpfn, int lParam);

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

        public delegate bool CallBack(IntPtr hwnd, int lParam);

    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            const uint BM_CLICK = 0xF5;//鼠标点击的消息,对于各种消息的数值,大家还是得去API手册

            IntPtr mainHandle = WindowsApi.FindWindow(null, "TFT-ROI-WG"); //查找拍照程序的句柄【任务管理器中的应用程序名称】
            //IntPtr mainHandle = WindowsApi.FindWindow(null, "Test"); //查找拍照程序的句柄【任务管理器中的应用程序名称】
            if (mainHandle != IntPtr.Zero)
            {

                // 查找按钮句柄
                IntPtr iBt = FindWindowEx(mainHandle, "拍照分析", true);
                if (iBt != IntPtr.Zero)
                // 发送单击消息
                {
                    //WindowsApi.SetForegroundWindow(mainHandle);    //将UcDemo程序设为当前活动窗
                    System.Threading.Thread.Sleep(500);   //暂停500毫秒
                    WindowsApi.SendMessage(iBt, 0xF5, 0, 0);
                }
            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        /// <summary>
        /// 查找窗体上控件句柄
        /// </summary>
        /// <param name="hwnd">父窗体句柄</param>
        /// <param name="lpszWindow">控件标题(Text)</param>
        /// <param name="bChild">设定是否在子窗体中查找</param>
        /// <returns>控件句柄,没找到返回IntPtr.Zero</returns>
        private IntPtr FindWindowEx(IntPtr hwnd, string lpszWindow, bool bChild)
        {
            IntPtr iResult = IntPtr.Zero;
            // 首先在父窗体上查找控件
            iResult = WindowsApi.FindWindowEx(hwnd, 0, null, lpszWindow);
            // 如果找到直接返回控件句柄
            if (iResult != IntPtr.Zero) return iResult;

            // 如果设定了不在子窗体中查找
            if (!bChild) return iResult;

            // 枚举子窗体,查找控件句柄
            int i = WindowsApi.EnumChildWindows(
            hwnd,
            (h, l) =>
            {
                IntPtr f1 = WindowsApi.FindWindowEx(h, 0, null, lpszWindow);
                if (f1 == IntPtr.Zero)
                    return true;
                else
                {
                    iResult = f1;
                    return false;
                }
            },
            0);
            // 返回查找结果
            return iResult;
        }
    }
}


实例下载地址

C# 小脚本控制其他程序 查找窗体句柄控制按钮

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警