Taskmanager auf Consolen Basis



  • Hallo!

    Ich weiß, dass es schon Thread über Taskmanager und das Bekommen der aktuellen Prozessliste gibt, aber ich bekomme es einfach nicht hin.

    Wenn jemand den Fehler einfach schnell behen könnte würde ich mich freuen, aber wenn jemand vllt. auch eine Alternative Funktion hätte wärs auch gut.

    #include "stdafx.h"
    #include "windows.h"
    #include "tlhelp32.h"
    #include "iostream"
    #include "string"
    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <psapi.h>
    
    using namespace System;
    
    void PrintProcessNameAndID( DWORD processID )
    {
        TCHAR szProcessName[MAX_PATH] = TEXT("<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)/sizeof(TCHAR) );
            }
        }
    
        // Print the process name and identifier.
    
        _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );
    
        CloseHandle( hProcess );
    }
    
    int main(array<System::String ^> ^args)
    {
    	  DWORD aProcesses[1024], cbNeeded, cProcesses;
        unsigned int i;
    	if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ){
    		Console::WriteLine("Error");
    	}
        cProcesses = cbNeeded / sizeof(DWORD);
        for ( i = 0; i < cProcesses; i++ )
            if( aProcesses[i] != 0 )
                PrintProcessNameAndID( aProcesses[i] );
        return 0;
    

    Und hier der Fehler:

    1>Taskmanager.obj : error LNK2028: Nicht aufgelöstes Token (0A000299) ""extern "C" int __stdcall EnumProcesses(unsigned long *,unsigned long,unsigned long *)" (?EnumProcesses@@$$J212YGHPAKK0@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>Taskmanager.obj : error LNK2028: Nicht aufgelöstes Token (0A00029D) ""extern "C" unsigned long __stdcall GetModuleBaseNameW(void *,struct HINSTANCE__ *,wchar_t *,unsigned long)" (?GetModuleBaseNameW@@$$J216YGKPAXPAUHINSTANCE__@@PA_WK@Z)", auf das in Funktion ""void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@$$FYAXK@Z)" verwiesen wird.
    1>Taskmanager.obj : error LNK2028: Nicht aufgelöstes Token (0A00029E) ""extern "C" int __stdcall EnumProcessModules(void *,struct HINSTANCE__ * *,unsigned long,unsigned long *)" (?EnumProcessModules@@$$J216YGHPAXPAPAUHINSTANCE__@@KPAK@Z)", auf das in Funktion ""void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@$$FYAXK@Z)" verwiesen wird.
    1>Taskmanager.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" unsigned long __stdcall GetModuleBaseNameW(void *,struct HINSTANCE__ *,wchar_t *,unsigned long)" (?GetModuleBaseNameW@@$$J216YGKPAXPAUHINSTANCE__@@PA_WK@Z)" in Funktion ""void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@$$FYAXK@Z)".
    1>Taskmanager.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall EnumProcessModules(void *,struct HINSTANCE__ * *,unsigned long,unsigned long *)" (?EnumProcessModules@@$$J216YGHPAXPAPAUHINSTANCE__@@KPAK@Z)" in Funktion ""void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@$$FYAXK@Z)".
    1>Taskmanager.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall EnumProcesses(unsigned long *,unsigned long,unsigned long *)" (?EnumProcesses@@$$J212YGHPAKK0@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    

    Ich würde ich dadrüber echt super freuen.

    Sorry wenn ich in der falschen Kategorie bin, fands nicht so leicht zu entscheiden 😶

    Also, Vielen Dank im Voraus

    lG, Lenny!



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Sieht so aus als ob dem Linker eine lib fehlt.

    http://msdn.microsoft.com/en-us/library/ms682629(VS.85).aspx
    Ganz unten unter "Requirements" steht welche du brauchst.



  • System.Diagnostics.Process.GetProcesses()



  • Hallo und schoneinmal danke für die Antwort!

    Fehlen die Psapi.lib und Psapi.dll ? Wo bekomme ich die her ?

    Ich weiß nicht, ich habe bei Google Psapi.dll download eingeben und bin dann so auf drittanbieter Seiten gelangt wo ich nicht wusste, ob ich einfach irgnedeine Psapi.dll nehmen kann.

    Vielen Dank im Voraus 🙂

    lG Lenny

    Edit: Ich denke 'System.Diagnostics.Process.GetProcesses()' ist für VB. Trotzdem vielen Dank 🙂



  • Ne, das System.Diagnostics.Process.GetProcesses() ist aus dem .NET Framework.

    Und da du ja C++/CLI verwendest wird das Framework doch eh benötigt oder nicht?


Anmelden zum Antworten