<![CDATA[Latest posts for the topic "Ứng dụng tự động hoá quá trình cài đặt phần mềm với các hàm API"]]> /hvaonline/posts/list/23.html JForum - http://www.jforum.net Ứng dụng tự động hoá quá trình cài đặt phần mềm với các hàm API
  • Phần 1: Ghi lại quá trình cài đặt bộ phần mềm cần thiết trên máy mẫu. Phần 2: Tự động cài đặt bộ phần mềm mẫu lên các máy con khác.
  • Phần 1: Có nhiều cách để ghi lại quá trình làm việc của máy tính, trong ứng dụng này người quản trị sẽ chủ động chọn lựa những thao tác cần ghi lại. Những thao tác này trên Windows sẽ là: Nhấp chuột, chọn/bỏ chọn checkbox/radiobuton, nhập Text vào TextBox… Phần 1 của ứng dụng sẽ cho phép người quản trị gửi “thông điệp” của mình tới trình cài đặt tương ứng. Để làm được điều này, trước hết từ ứng dụng cần xác định cửa sổ của trình cài đặt. Ở đây ta có thể liệt kê tất cả các cửa sổ trên Desktop với sự trợ giúp của hàm GetDesktopWindow() và GetWindow(): Code:
    hwnd = GetDesktopWindow();
    hwnd = GetWindow(hwnd, GW_CHILD);
    while(hwnd!=0){
    	 GetWindowTextW(hwnd, Title, MAX_LENGTH);
    	//ở đây chứa thao tác liệt kê tương ứng của bạn
    	 hwnd = GetWindow(hwnd, GW_HWNDNEXT);
    }
    Sau khi người quản trị lựa chọn cửa sổ của trình cài đặt, ta sẽ liệt kê tất cả control của ứng dụng để thao tác. Các control cũng sẽ là các “cửa sổ” con của trình cài đặt, một hàm recursive sẽ giúp ta thực hiện điều này: Code:
    void GetChildHwnd(HWND hInstaller){
    			 HWND hwnd = GetWindow(hInstaller, GW_CHILD);
    			 if(hwnd == NULL)return;			 
    			 wchar_t WindowTitle[MAX_LENGTH];
    			 GetWindowTextW(hwnd, WindowTitle, MAX_LENGTH);
    			 //ở đây chứa thao tác liệt kê tương ứng của bạn	
    			 GetChildHwnd(hwnd);
    			 while(hwnd!=0)
    			 {
    				 hwnd = GetWindow(hwnd, GW_HWNDNEXT);			 
    				 if(hwnd)
    				 {						 
    					 wchar_t wtmp[256];
    					 GetWindowTextW(hwnd, wtmp, 255);
    					 //ở đây chứa thao tác liệt kê tương ứng của bạn 
    				 }
    				 GetChildHwnd(hwnd);
    			 }
    			 return; 
    		 }
    Sau khi xác định được các control, những thao tác tương ứng sẽ được thực hiện với các hàm API của Windows, ở đây là SendMessage() và PostMessage(). Tôi không liệt kê tất cả các thao tác có thể, mà chỉ là các thao tác thường thấy: Nhấp chuột: Code:
    PostMessageW(hwnd, WM_LBUTTONDOWN, 0, 0);	
    PostMessageW(hwnd, WM_LBUTTONUP, 0, 0);
    Check box: Code:
    SendDlgItemMessageW(GetParent(hwnd), GetDlgCtrlID(hwnd),BM_SETCHECK, BST_CHECKED,0);
    Uncheck box: Code:
    SendDlgItemMessageW(GetParent(hwnd), GetDlgCtrlID(hwnd), BM_SETCHECK, BST_UNCHECKED, 0);
    Check radiobutton Code:
    SendMessageW(hwnd, BM_CLICK, 0, 0);
    Nhập Text vào TextBox: Code:
    SendMessageW(hwnd, WM_SETTEXT, 10, (LPARAM)text);
    Ở đây hwnd là handle của control nhận thông điệp. Quá trình thao tác này sẽ được ghi lại vào file hoặc CSDL phù hợp với bạn. Ở đây tôi sử dụng INI file vì sự tiện dụng và portale của nó. Một bộ phần mềm sẽ được ghi lại bằng 1 project file chứa thông tin chung: Số lượng phần mềm cần cài đặt, file cấu hình cài đặt của từng phần mềm,… File cấu hình cài đặt của từng phần mềm sẽ bao gồm các thao tác: Làm việc với control nào, thao tác gì, thông số phụ… Làm việc với file INI có 2 hàm cơ bản: WritePrivateProfileString() và GetPrivateProfileString(). Phần 2: Thật ra phần 2 chỉ là lặp lại quá trình ở phần 1 một cách tự động mà không cần sự tác động của quản trị viên. Ứng dụng sẽ tự động chạy các bộ cài đặt, gửi các thông điệp tương ứng đến các cửa sổ cần thiết. Ghi chú:
    • Tham khảo msdn để có thông tin cụ thể hơn về các hàm sử dụng
    ]]>
    /hvaonline/posts/list/34037.html#209171 /hvaonline/posts/list/34037.html#209171 GMT