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

Đề tài: Kiểu dữ liệu PROCESSENTRY32 trong VS2008 có tác dụng gì?

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    328

    Mặc định Kiểu dữ liệu PROCESSENTRY32 trong VS2008 có tác dụng gì?

    mình có làm bài tập về liệt kê process lấy code trên MSDN 2008 thì phát hiện ra được kiểu dữ liệu PROCESSENTRY32 mà không biết nó là gì,dùng như thế nao,ai có thể chỉ giáo không

    đây là code

    Visual C++ Code:
    1. #include <windows.h>
    2. #include <tlhelp32.h>
    3. #include <tchar.h>
    4. #include <stdio.h>
    5.  
    6. //  Forward declarations:
    7. BOOL GetProcessList( );
    8. BOOL ListProcessModules( DWORD dwPID );
    9. BOOL ListProcessThreads( DWORD dwOwnerPID );
    10. void printError( TCHAR* msg );
    11.  
    12. void main( )
    13. {
    14.   GetProcessList( );
    15. }
    16.  
    17. BOOL GetProcessList( )
    18. {
    19.   HANDLE hProcessSnap;
    20.   HANDLE hProcess;
    21.   PROCESSENTRY32 pe32;
    22.   DWORD dwPriorityClass;
    23.  
    24.   // Take a snapshot of all processes in the system.
    25.   hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
    26.   if( hProcessSnap == INVALID_HANDLE_VALUE )
    27.   {
    28.     printError( TEXT("CreateToolhelp32Snapshot (of processes)") );
    29.     return( FALSE );
    30.   }
    31.  
    32.   // Set the size of the structure before using it.
    33.   pe32.dwSize = sizeof( PROCESSENTRY32 );
    34.  
    35.   // Retrieve information about the first process,
    36.   // and exit if unsuccessful
    37.   if( !Process32First( hProcessSnap, &pe32 ) )
    38.   {
    39.     printError( TEXT("Process32First") ); // show cause of failure
    40.     CloseHandle( hProcessSnap );          // clean the snapshot object
    41.     return( FALSE );
    42.   }
    43.  
    44.   // Now walk the snapshot of processes, and
    45.   // display information about each process in turn
    46.   do
    47.   {
    48.     printf( "\n\n=====================================================" );
    49.     _tprintf( TEXT("\nPROCESS NAME:  %s"), pe32.szExeFile );
    50.     printf( "\n-----------------------------------------------------" );
    51.  
    52.     // Retrieve the priority class.
    53.     dwPriorityClass = 0;
    54.     hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
    55.     if( hProcess == NULL )
    56.       printError( TEXT("OpenProcess") );
    57.     else
    58.     {
    59.       dwPriorityClass = GetPriorityClass( hProcess );
    60.       if( !dwPriorityClass )
    61.         printError( TEXT("GetPriorityClass") );
    62.       CloseHandle( hProcess );
    63.     }
    64.  
    65.     printf( "\n  Process ID        = 0x%08X", pe32.th32ProcessID );
    66.     printf( "\n  Thread count      = %d",   pe32.cntThreads );
    67.     printf( "\n  Parent process ID = 0x%08X", pe32.th32ParentProcessID );
    68.     printf( "\n  Priority base     = %d", pe32.pcPriClassBase );
    69.     if( dwPriorityClass )
    70.       printf( "\n  Priority class    = %d", dwPriorityClass );
    71.  
    72.     // List the modules and threads associated with this process
    73.     ListProcessModules( pe32.th32ProcessID );
    74.     ListProcessThreads( pe32.th32ProcessID );
    75.  
    76.   } while( Process32Next( hProcessSnap, &pe32 ) );
    77.  
    78.   CloseHandle( hProcessSnap );
    79.   return( TRUE );
    80. }
    81.  
    82.  
    83. BOOL ListProcessModules( DWORD dwPID )
    84. {
    85.   HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
    86.   MODULEENTRY32 me32;
    87.  
    88.   // Take a snapshot of all modules in the specified process.
    89.   hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );
    90.   if( hModuleSnap == INVALID_HANDLE_VALUE )
    91.   {
    92.     printError( TEXT("CreateToolhelp32Snapshot (of modules)") );
    93.     return( FALSE );
    94.   }
    95.  
    96.   // Set the size of the structure before using it.
    97.   me32.dwSize = sizeof( MODULEENTRY32 );
    98.  
    99.   // Retrieve information about the first module,
    100.   // and exit if unsuccessful
    101.   if( !Module32First( hModuleSnap, &me32 ) )
    102.   {
    103.     printError( TEXT("Module32First") );  // show cause of failure
    104.     CloseHandle( hModuleSnap );           // clean the snapshot object
    105.     return( FALSE );
    106.   }
    107.  
    108.   // Now walk the module list of the process,
    109.   // and display information about each module
    110.   do
    111.   {
    112.     _tprintf( TEXT("\n\n     MODULE NAME:     %s"),   me32.szModule );
    113.     _tprintf( TEXT("\n     Executable     = %s"),     me32.szExePath );
    114.     printf( "\n     Process ID     = 0x%08X",         me32.th32ProcessID );
    115.     printf( "\n     Ref count (g)  = 0x%04X",     me32.GlblcntUsage );
    116.     printf( "\n     Ref count (p)  = 0x%04X",     me32.ProccntUsage );
    117.     printf( "\n     Base address   = 0x%08X", (DWORD) me32.modBaseAddr );
    118.     printf( "\n     Base size      = %d",             me32.modBaseSize );
    119.  
    120.   } while( Module32Next( hModuleSnap, &me32 ) );
    121.  
    122.   CloseHandle( hModuleSnap );
    123.   return( TRUE );
    124. }
    125.  
    126. BOOL ListProcessThreads( DWORD dwOwnerPID )
    127. {
    128.   HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
    129.   THREADENTRY32 te32;
    130.  
    131.   // Take a snapshot of all running threads  
    132.   hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );
    133.   if( hThreadSnap == INVALID_HANDLE_VALUE )
    134.     return( FALSE );
    135.  
    136.   // Fill in the size of the structure before using it.
    137.   te32.dwSize = sizeof(THREADENTRY32 );
    138.  
    139.   // Retrieve information about the first thread,
    140.   // and exit if unsuccessful
    141.   if( !Thread32First( hThreadSnap, &te32 ) )
    142.   {
    143.     printError( TEXT("Thread32First") ); // show cause of failure
    144.     CloseHandle( hThreadSnap );          // clean the snapshot object
    145.     return( FALSE );
    146.   }
    147.  
    148.   // Now walk the thread list of the system,
    149.   // and display information about each thread
    150.   // associated with the specified process
    151.   do
    152.   {
    153.     if( te32.th32OwnerProcessID == dwOwnerPID )
    154.     {
    155.       printf( "\n\n     THREAD ID      = 0x%08X", te32.th32ThreadID );
    156.       printf( "\n     Base priority  = %d", te32.tpBasePri );
    157.       printf( "\n     Delta priority = %d", te32.tpDeltaPri );
    158.     }
    159.   } while( Thread32Next(hThreadSnap, &te32 ) );
    160.  
    161.   CloseHandle( hThreadSnap );
    162.   return( TRUE );
    163. }
    164.  
    165. void printError( TCHAR* msg )
    166. {
    167.   DWORD eNum;
    168.   TCHAR sysMsg[256];
    169.   TCHAR* p;
    170.  
    171.   eNum = GetLastError( );
    172.   FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    173.          NULL, eNum,
    174.          MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    175.          sysMsg, 256, NULL );
    176.  
    177.   // Trim the end of the line and terminate it with a null
    178.   p = sysMsg;
    179.   while( ( *p > 31 ) || ( *p == 9 ) )
    180.     ++p;
    181.   do { *p-- = 0; } while( ( p >= sysMsg ) &&
    182.                           ( ( *p == '.' ) || ( *p < 33 ) ) );
    183.  
    184.   // Display the message
    185.   _tprintf( TEXT("\n  WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );
    186. }

    còn đây là link trong MSDN
    ms-help://MS.MSDNQTR.v90.en/dllproc/base/taking_a_snapshot_and_viewing_processes.htm

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Nó là cấu trúc lưu trữ về thông tin của process.
    C++ Code:
    1. typedef struct tagPROCESSENTRY32 {
    2.   DWORD dwSize;
    3.   DWORD cntUsage;
    4.   DWORD th32ProcessID;
    5.   DWORD th32DefaultHeapID;
    6.   DWORD th32ModuleID;
    7.   DWORD cntThreads;
    8.   DWORD th32ParentProcessID;
    9.   LONG  pcPriClassBase;
    10.   DWORD dwFlags;
    11.   TCHAR szExeFile[MAX_PATH];
    12.   DWORD th32MemoryBase;
    13.   DWORD th32AccessKey;
    14.   } PROCESSENTRY32;
    15.   typedef PROCESSENTRY32* PPROCESSENTRY32;
    16. typedef PROCESSENTRY32* LPPROCESSENTRY32;
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

    mình dùng VC++6 bị lỗi,không rõ có thể dịch được nó trên VC++6 không
    -> OK như vậy từ đoạn code trên làm sao để tôi lấy được chỉ số nào là không thay đổi khi sang máy tính khác,
    VD nhé,tôi có 1 ứng dụng là meo.exe,h tôi sang máy khác muốn kiểm tra xem cái file meo.exe có đang được chạy hay không thì phải dựa vào chỉ số nào ( chỉ số không đổi nhé )
    Đã được chỉnh sửa lần cuối bởi trần trân : 03-11-2008 lúc 10:32 PM.

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Một số API mới trên VS2k8 chỉ dùng cho Windows Vista.
    What you see is never what you get...

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi trần trân Xem bài viết
    mình dùng VC++6 bị lỗi,không rõ có thể dịch được nó trên VC++6 không
    -> OK như vậy từ đoạn code trên làm sao để tôi lấy được chỉ số nào là không thay đổi khi sang máy tính khác,
    VD nhé,tôi có 1 ứng dụng là meo.exe,h tôi sang máy khác muốn kiểm tra xem cái file meo.exe có đang được chạy hay không thì phải dựa vào chỉ số nào ( chỉ số không đổi nhé )
    szExeFile sẽ lưu tên file thực thi đó bạn.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    09 2008
    Bài viết
    328

    Mặc định Kiểu dữ liệu PROCESSENTRY32 trong VS2008 có tác dụng gì?

    szExeFile sẽ lưu tên file thực thi đó bạn.
    thế tại sao khi mình dịch bằng VC++2008 thì nó chạy ra toàn những thứ gì ấy,hay những tiến trình trên taskmanager không có tên????,có mỗi 2 cái tên file thôi
    @void main
    mình thấy là VC++2008 vẫn dịch được và mình chạy trên XP2
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi trần trân : 04-11-2008 lúc 08:56 AM.

  7. #7
    Ngày gia nhập
    06 2009
    Nơi ở
    tp ho chi minh
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi trần trân Xem bài viết
    thế tại sao khi mình dịch bằng VC++2008 thì nó chạy ra toàn những thứ gì ấy,hay những tiến trình trên taskmanager không có tên????,có mỗi 2 cái tên file thôi
    @void main
    mình thấy là VC++2008 vẫn dịch được và mình chạy trên XP2
    không phải ko có tên, mà code trên liệt kê process + modul + cả threat nên nó nhiều quá, debug sẽ thấy rõ

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

  1. Build exe trong vs2008, sử dụng ở máy khác?
    Gửi bởi Socket trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 14
    Bài viết cuối: 10-10-2011, 09:00 AM
  2. không sử dụng fopen trong VS2008 được?
    Gửi bởi rukawa1184 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 05-08-2010, 05:36 PM
  3. Debug ngược trong VS2008?
    Gửi bởi nthung trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 28-05-2010, 01:26 PM
  4. Hỏi về sự khác nhau giữa giá trị GetPriorityClass()và PROCESSENTRY32::pcPriClassBase
    Gửi bởi jempi trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 1
    Bài viết cuối: 01-05-2010, 11:54 AM
  5. Vì sao VC++ trong VS2008 lại không đầy đủ?
    Gửi bởi mu9991 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 15-10-2008, 09:18 PM

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