Trao đổi với tôi

http://www.buidao.com

12/3/09

[Programming] Cách lấy System Info

Version tiếng anh: http://my.opera.com/Xcross87/blog/co...em-information
Author: Xcross87

Xin chào các bạn !
Lâu lâu lại làm một cái hướng dẫn nho nhỏ gọi là góp vui với anh em Cviet ^^!

Bài này X hướng dẫn 1 chút xíu về các struct và API sử đụng để lấy thông tin hệ thống (System Information).
Thực ra cũng không có gì cả, rất đơn giản nếu bạn đã quen với Win32API, Windows Programming; nếu không
thì bạn sẽ gặp một chút khó khăn nhỏ khi bắt đầu đấy. ^^!

Đầu tiên bao giờ cũng cần tài liệu để tra cứu (Documentation), với Windows Programming thì MSDN là một
phần không thể thiếu và ai cũng cần phải biết sử dụng nó để tra cứu.

Với bài này các bạn truy vào mục sau:
http://msdn.microsoft.com/en-us/libr...95(VS.85).aspx

Sau đó chọn System Information và bạn sẽ thấy nhiều thành phần nhỏ được chia ra để tham khảo.

Cùng nhau thử 1 số nhé.

1) GetComputerName(); GetComputerNameEx();
Link: http://msdn.microsoft.com/en-us/libr...20(VS.85).aspx
Đọc định nghĩa của nó 1 chút nha:
Trích dẫn:
GetComputerName Function
Retrieves the NetBIOS name of the local computer. This name is established at system startup, when the system reads it from the registry.

BOOL WINAPI GetComputerName(
__out LPTSTR lpBuffer,
__inout LPDWORD lpnSize
);

If the function succeeds, the return value is a nonzero value.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
Vậy mình làm đoạn code nhỏ để thử lấy ComputerName nhé !

// Coded by Xcross87
#include
#include

int main(void)
{
TCHAR lpBuffer[256];
DWORD lpnSize = sizeof(lpBuffer); // Lấy kích thuwocs của buffer trước.

if(!GetComputerName(lpBuffer,&lpnSize)) {
// Nếu không lấy được thì thoát.
printf("Error getting computer name...\n");
exit(-1);
}

// Nếu lấy được tên thì in ra
printf("Computer name is: %s \n", lpBuffer);

// Giải phóng bộ nhớ
lpnSize = sizeof(lpBuffer);
ZeroMemory(lpBuffer, lpnSize);

// Trả về
return 0;
}

2) GetUserName(); GetUserNameEx();
Link: http://msdn.microsoft.com/en-us/libr...32(VS.85).aspx

Đọc định nghĩa 1 chút:
Trích dẫn:
GetUserName Function
Retrieves the name of the user associated with the current thread.

BOOL WINAPI GetUserName(
__out LPTSTR lpBuffer,
__inout LPDWORD lpnSize
);

If the function succeeds, the return value is a nonzero value, and the variable pointed to by lpnSize contains the number of TCHARs copied to the buffer specified by lpBuffer, including the terminating null character.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
Viêt một đoạn code nhỏ sử dụng cái này nha:

// Coded by Xcross87

#include
#include

int main(void)
{
TCHAR lpBuffer[256];
DWORD lpnSize = sizeof(lpBuffer); // Lấy kích thước của buffer trước.

if(!GetUserName(lpBuffer,&lpnSize)) {
// Nếu không lấy được thì thoát.
printf("Error getting user name of the current thread...\n");
exit(-1);
}

// Nếu lấy được tên thì in ra
printf("Current-thread user name is: %s \n", lpBuffer);

// Giải phóng bộ nhớ
lpnSize = sizeof(lpBuffer);
ZeroMemory(lpBuffer, lpnSize);

// Trả về
return 0;
}


Đó là 2 ví dụ cơ bản làm mẫu ^^!
Bên trong còn rất nhiều các API tra cứu thông tin tương tự, các bạn tự tìm hiểu nhé.

Các bạn có thể download source 2 files tại đây:
get_computer_name.cpp
get_user_name.cpp

[Kết thúc phần 1]
Link: http://forums.congdongcviet.com/showthread.php?t=8553