当前位置:   article > 正文

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

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

通过鼠标自动安装软件时,可能存在不同电脑分辨率不同的问题,需要调用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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/376527?site
推荐阅读
相关标签
  

闽ICP备14008679号