桌面自动化-FlaUI-自动安装软件

自动安装QQ音乐

QQ音乐和常规的windows软件不同,其内部只有一个Pane无法获取到内部按钮的自动化元素,此时应该如何解决?对!模拟用户鼠标移动点击。模拟点击又会遇到新的问题:不同缩放下,鼠标移动的位置不同,这个问题又该如何解决?本篇文章带你解决这些问题。

        static void Main(string[] args)
        {
            var qqMusic = FlaUI.Core.Application.Launch("QQMusic_Setup_Home.20.05 (1).exe");
            using (FlaUI.UIA3.UIA3Automation au = new UIA3Automation()) {
                Thread.Sleep(2000);

                var root = au.GetDesktop().FindFirstChild(t=>t.ByClassName("QQMusicinstallerClassName"));
                //点击安装
                var rootRectangle = root.BoundingRectangle;
                ClickMousePosition(rootRectangle.X + 444, rootRectangle.Y + 534);
                Thread.Sleep(30000);
                ClickMousePosition(rootRectangle.X + 444, rootRectangle.Y + 591);
                Thread.Sleep(5000);
                Process.GetProcessesByName("QQMusic")?[0].Kill();
            }
        }
   static void ClickMousePosition(int x,int y) {
       var factor = ScreenHelper.GetScalingFactor();

       if (factor == 1)
       {
           Mouse.MoveTo(Math.Round(x / factor).ToInt(), Math.Round( y / factor).ToInt());
       }
       else
       {
           Mouse.MoveTo(x, y);
       }
       Mouse.Click();
   }

    public static float GetScalingFactor()
    {
        IntPtr dC = GetDC(IntPtr.Zero);
        int nIndex = 88;
        int deviceCaps = GetDeviceCaps(dC, nIndex);
        ReleaseDC(IntPtr.Zero, dC);
        return (float)deviceCaps / 96f;
    }

    [DllImport("gdi32.dll")]
    private static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

    [DllImport("user32.dll")]
    private static extern IntPtr GetDC(IntPtr ptr);

    [DllImport("user32.dll")]
    private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

通过鼠标自动安装软件时,可能存在不同电脑分辨率不同的问题,需要调用win32API获取分辨率并计算。
除此外winform可感知DPI,需要新建app.manifest,并在里面添加如下配置

	<application xmlns="urn:schemas-microsoft-com:asm.v3">
		<windowsSettings>
			<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
			<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
		</windowsSettings>
	</application>
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

靓仔很忙i

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值