Lib in ein Projekt einfügen???



  • Hallo hab dieses Programm abgeschrieben aus dem netz in dem Thema wurde behauptet das für die EnumWindows() Funktion die user32.lib benötigt wird habe diese so eingebunden wie es im Bsp stand leider sagt mir mein Borland C++ Builder 5

    [Linker Fataler Fehler] Fatal: Unable to open file 'USER32.LIB'

    der Code für diese Fehlermeldung ist:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    #include <Psapi.h>
    #include "UWinApi2.h"
    #include <string.h>
    #pragma comment(lib, "user32.lib")
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    void GetPathFromHandle(HWND hWnd, LPTSTR szPathFromHandle);
    BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam);
    int _stricmp( const char *string1,const char *string2);
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Timer1->Enabled=true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
     EnumWindows((WNDENUMPROC)EnumProc, NULL);
    }
    //---------------------------------------------------------------------------
    
    BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
    {
        //
        // Jetzt haben wir ein HWND irgendeines Fensters
        // Also holen wir uns den Pfad zur zugehörigen EXE
        //
        char Buffer[MAX_PATH];
        char szPfadMitExe[]="c:\Windows\NotePad.exe";
        ZeroMemory(Buffer, sizeof(Buffer)); // Buffer leer machen...
        GetPathFromHandle(hwnd, Buffer);
        if (_stricmp(Buffer, szPfadMitExe)==NULL)
        {
            //
            // _stricmp vergleich 2 strings miteinander
            // wobei es GROSS- und kleinschreibung
            // komplett ignoriert!
            // Oha, es MUSS notepad.exe sein!
            // Also beenden wir es mal...
            //
            SendMessage(hwnd, WM_CLOSE, NULL, NULL);
            return FALSE; // FALSE = EnumWindows kann aufhören
        }
        else return TRUE; // TRUE = weitermachen, Notepad ja noch nicht drangewesen!
    }
    
    void GetPathFromHandle(HWND hWnd, LPTSTR szPathFromHandle)
    {
        //
        // benötigt psapi.lib und psapi.h!!!
        // läuft nur unter NT-basierenden Windows
        // Also WinNT, Win2000, WinXP!
        //
        DWORD lpdwProcessId;
        HANDLE hProcessHandle;
    
        GetWindowThreadProcessId(hWnd, &lpdwProcessId);
        hProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, TRUE, lpdwProcessId);
        GetModuleFileNameEx(hProcessHandle, NULL, szPathFromHandle, MAX_PATH);
        CloseHandle(hProcessHandle);
    }
    

    Was mach ich Falsch???

    Wenn ich die #pragma comment(lib, "user32.lib") entferne

    dann bekomme ich diesen Fehler:

    [Linker Fehler] Unresolved external 'GetModuleFileNameExA' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UWINAPI2.OBJ

    und

    [Linker Fehler] Unresolved external '_stricmp(const char *, const char *)' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UWINAPI2.OBJ

    natürlich habe ich mich durch die Hilfe durchgelesen bloß es gibt dort ein haufen möglichkeiten.

    Hat der Borland Builder denn nicht schon alle Libs??für solche zwecke??



  • Hi,

    editiere mal deinen Beitrag; setze den Code in cpp-Tags. 😉

    Du musst für die Funktion EnumWindows ( im OnTimer ) keine Lib explizit einbinden. Es reicht, wenn die winuser.h includiert wird.



  • Ich Probiers gleich mal.

    Was meinst du mit den CPP Tags??soll ich das Forum wechseln?



  • Gemeint sind die Code-Tags beim erstellen/Editieren der Nachrichten hier im Forum.


Anmelden zum Antworten