Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Cách lấy System Info trong lập trình Win32 API

  1. #1
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Talking Cách lấy System Info trong lập trình Win32 API

    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/library/ms725495(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/library/ms724220(VS.85).aspx
    Đọc định nghĩa của nó 1 chút nha:

    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é !

    C++ Code:
    1. // Coded by Xcross87
    2. #include <stdio.h>
    3. #include <windows.h>
    4.  
    5. int main(void)
    6. {
    7.     TCHAR lpBuffer[256];
    8.     DWORD lpnSize = sizeof(lpBuffer); // Lấy kích thuwocs của buffer trước.
    9.    
    10.     if(!GetComputerName(lpBuffer,&lpnSize)) {
    11.         // Nếu không lấy được thì thoát.
    12.         printf("Error getting computer name...\n");
    13.         exit(-1);
    14.     }
    15.    
    16.     // Nếu lấy được tên thì in ra
    17.     printf("Computer name is: %s \n", lpBuffer);
    18.    
    19.     // Giải phóng bộ nhớ
    20.     lpnSize = sizeof(lpBuffer);
    21.     ZeroMemory(lpBuffer, lpnSize); 
    22.  
    23.     // Trả về
    24.     return 0;
    25. }

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

    Đọc định nghĩa 1 chút:
    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:
    C++ Code:
    1. // Coded by Xcross87
    2.  
    3. #include <stdio.h>
    4. #include <windows.h>
    5.  
    6. int main(void)
    7. {
    8.     TCHAR lpBuffer[256];
    9.     DWORD lpnSize = sizeof(lpBuffer); // Lấy kích thước của buffer trước.
    10.    
    11.     if(!GetUserName(lpBuffer,&lpnSize)) {
    12.         // Nếu không lấy được thì thoát.
    13.         printf("Error getting user name of the current thread...\n");
    14.         exit(-1);
    15.     }
    16.    
    17.     // Nếu lấy được tên thì in ra
    18.     printf("Current-thread user name is: %s \n", lpBuffer);
    19.    
    20.     // Giải phóng bộ nhớ
    21.     lpnSize = sizeof(lpBuffer);
    22.     ZeroMemory(lpBuffer, lpnSize); 
    23.  
    24.     // Trả về
    25.     return 0;
    26. }

    Đó 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é.

    [Kết thúc phần 1]
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 05-06-2008 lúc 02:39 PM.
    None!

  2. #2
    Ngày gia nhập
    09 2010
    Bài viết
    3

    bạn ơi. có thể chỉ mình cách lấy icon hệ thống và thông tin từng ổ đĩa,folder đc không bạn?

  3. #3
    Ngày gia nhập
    06 2010
    Bài viết
    2

    bị mắc 1 lỗi cơ bản là: khi gọi GetComputerName, thì tham số thứ 2 là "specifies the size of the buffer, in TCHARs" nên sửa lại là: lpnSize = sizeof(lpBuffer)/sizeof(TCHAR), tương tự cho GetUserName.
    Best Regards.

Các đề tài tương tự

  1. Phân biệt System.out.print, System.out.println...trong Java
    Gửi bởi thaihoai trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 10-09-2012, 09:41 PM
  2. An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll
    Gửi bởi i4uandu4i trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 29-08-2012, 06:39 PM
  3. Database tìm ngày trong database lỗi: Cannot perform 'Like' operation on System.DateTime and System.String
    Gửi bởi vudat0987 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 26-06-2012, 02:16 PM
  4. Graphic Lỗi: An unhandled exception of type 'System.StackOverflowException' occurred in System.Drawing.dll, sửa thế nào vậy.
    Gửi bởi xuantruongT109 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 18-05-2012, 09:27 PM
  5. Method notfound: 'System.String[]' System.Windows.Forms.OpenFileDialog.get SafeFileName()
    Gửi bởi thuan199 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 08-03-2011, 09:57 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn