BCB fehler??



  • hi!
    habe ein großes Problem.
    Ich möchte mir die EXE namen der WindowsTasks anzeigen lassen... dazu habe ich mir folgenden code der MSDN mal angesehn und versucht zu compilieren:

    #include <windows.h>
    #include <stdio.h>
    #include "psapi.h"
    
    void PrintProcessNameAndID( DWORD processID )
    {
        char szProcessName[MAX_PATH] = "unknown";
    
        // Get a handle to the process.
    
        HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                       PROCESS_VM_READ,
                                       FALSE, processID );
    
        // Get the process name.
    
        if (NULL != hProcess )
        {
            HMODULE hMod;
            DWORD cbNeeded;
    
            if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
                 &cbNeeded) )
            {
                GetModuleBaseName( hProcess, hMod, szProcessName, 
                                   sizeof(szProcessName) );
            }
            else return;
        }
        else return;
    
        // Print the process name and identifier.
    
        printf( "%s (Process ID: %u)\n", szProcessName, processID );
    
        CloseHandle( hProcess );
    }
    
    void main( )
    {
        // Get the list of process identifiers.
    
        DWORD aProcesses[1024], cbNeeded, cProcesses;
        unsigned int i;
    
        if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
            return;
    
        // Calculate how many process identifiers were returned.
    
        cProcesses = cbNeeded / sizeof(DWORD);
    
        // Print the name and process identifier for each process.
    
        for ( i = 0; i < cProcesses; i++ )
            PrintProcessNameAndID( aProcesses[i] );
    }
    

    Leider lässt sich der orginal MSDN code nicht im BCB 5 compilieren.
    Er meldet zu EnumProcesses, EnumProcessModules und GetModuleBaseNameA:
    Unresolved External. 😕

    Kann mir jemand helfen?

    MfG
    Matthias



  • du musst die funktionsadresse aus der zugehörigen bibliothek (psapi.dll) laden! hier ein kleiner ansatz...

    [cpp]
    bool InitPSApi()
    {
    HANDLE hPSApi = LoadLibrary("psapi.dll");

    if (hPSApi)
    {
    // mit **GetProcAddress die Adresse der Funktionen auslesen
    **
    return true;
    }

    return false;
    }[/cpp]

    aber dafür bist du eh im falschen forum, dass ist API!

    [ Dieser Beitrag wurde am 16.06.2003 um 15:38 Uhr von Sunday editiert. ]


Anmelden zum Antworten