banner
 .::Windows::. Ứng dụng tự động hoá quá trình cài đặt phần mềm với các hàm API Go to original post Author: FaL - Translator:  - Entry Date: 16/04/2010 11:08:01
Vừa qua FaL có viết ứng dụng nhỏ này, bài viết này không hướng dẫn cụ thể từng bước phát triển chương trình, cũng không có code toàn bộ chương trình, chỉ xin trình bày một số ý chính và thao tác cần thiết tương ứng.

Trong hệ thống máy tính với nhiều máy con, việc cài đặt và update phần mềm là một công việc vất vả. Tự động hóa quá trình cài đặt phần mềm giúp quản trị viên tiết kiệm thời gian, công sức của mình.
Ý tưởng của ứng dụng:
  • 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
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Other posts in the same group:

Ứng dụng tự động hoá quá trình cài đặt phần mềm với các hàm API
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|