zoukankan      html  css  js  c++  java
  • AutoKey思想的應用(二)

    用戶希望我們做的應用程序不僅要控制另一個buy-in進來的系統,還要將這個buy-in進來的系統運行的結果(比如檢測畫面)自動截取并形成檢測報告存起來,以后想要就可以找到。

    這個要求合理,但挺過份。因為buy-in系統的檢測結果是不容易抓到的。好在以前有AutoKey的概念,最初的解決方案就是激好buy-in系統,然后發送CTRL+Print Scr組合鍵將當前應用系統作屏幕硬copy. 但是效果不好,用戶不接受,原因是用戶只想要檢測結果畫面,不想要什么tool bar和Tree view, 也就是說他們只想要這個系統畫面中的一部分。

    也行,那就是將整個系統畫面存入內存,在按坐標截取用戶想要的那部分不就得了。但這個方法也不好,因為他要隨屏幕分辨率的不同,要在安裝的機器上測試過才可以正常運行,一旦換一台機器或分辨率變了,就不能正確截取。

    好,看來只能用絕招了。就是獲得buy-in系統中承載這個檢測結果的control, 然后得到它在Parent中的坐標,經計算得出左上角的坐標,然后再用image copy的辦法截取

         

    計算沒有什么可說的,獲得子control的坐標也沒有什么,但是值得關注的是C#中的內存分配。可以有几種方法,用Marshal.AllocCoTaskMem也行,用unsafe也行,用GCHandle.Alloc也可。unsafe當然不好,因為內存管理不在framework中,但是速度最快。GCHandle.Alloc是比較標准的做法,由于C#的內存管理是動態的,所以必須用GCHandle一組函數才能完成操作,而且比較慢.Marshal.AllocCoTaskMem是用WinAPI的方式,速度也可,方法也值得借鑒

     代碼:SourceCode

  • 相关阅读:
    JS 实现鼠标移入移出透明度动画变化效果
    Undefined和null的本质区别
    网格布局知识点总结
    用CSS3搭建立方体
    缩放实例
    浮动与细线边框制作广告商标
    用伪元素制作列表菜单
    元素的分类与转换
    网易云导航栏
    CSS中内边距和宽度内减
  • 原文地址:https://www.cnblogs.com/sdikerdong/p/1374453.html
Copyright © 2011-2022 走看看