2023年5月5日 星期五

C# use windows API for Auto testing mehtod

 最近自動測試案子遇到廠商沒有sample code可用, 只得用最原始的暗黑技術來做:

1. 執行廠商可用的執行程式

2. 利用C#呼叫API模擬類似"按鍵精靈"的作法去點擊廠商的程式

以上做法可以解決沒有sample code可以包進自己的測試程式裡.

下面介紹所利用到的windows API

先將廠商程式開啟

hyper = new Process();

hyper.StartInfo.FileName = "c:\\ISP Programmer_V1.5.10\\ISPProgrammer.exe";

hyper.Start();

if (hyper != null){

    hyper.WaitForExit(2000);

    HyperWindow = FindWindow(null, "ISP Programmer_V1.5.10");

    if (HyperWindow != IntPtr.Zero) {

       EnumChildWindows(HyperWindow, new CallBack(delegate (IntPtr hwnd, int lParam) {

             listWnd.Add(hwnd);

             GetWindowText(hwnd, title, title.Capacity);

             GetClassName(hwnd, className, className.Capacity);

              return true;

              }), 0);

       SendMessage(listWnd1[8], BM_CLICK, 0, 0);     //發送點擊按鈕的消息

       }

}

在利用FindWinsow找到開啟的程式

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]

public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

在用EnumChildWindows去找程式上component的handle依據各個handle用Sendmessage去做觸發或讀取的功能

[DllImport("user32.dll", EntryPoint = "SendMessage")]

 public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

public const int BM_CLICK = 0xF5;





沒有留言:

張貼留言