Problem mit 2 fehlermeldungen unter Borland C++ Builder 5



  • Hallo ich habs jetzt so zum Laufen bekommen leider erkennt das Programm mein zu löschendes exe nicht.Es passiert nichts.
    So siehts aus:

    #include <vcl.h>
    #pragma hdrstop
    #include <psapi.h>
    #include <vcl.h>
    #include "UWinApi.h"
    #include <windows.h>
    #include <string.h>
    //---------------------------------------------------------------------------
    #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 *Buffer,const char *szPfadMitExe);
    int __fastcall AnsiCompareIC(const AnsiString& rhs);

    //---------------------------------------------------------------------------

    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }

    //---------------------------------------------------------------------------

    //---------------------------------------------------------------------------

    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:\Programme\Winamp\Winamp.exe";
    ZeroMemory(Buffer, sizeof(Buffer)); // Buffer leer machen...
    GetPathFromHandle(hwnd, Buffer);
    //String a = Buffer;
    AnsiString b = szPfadMitExe;
    if (b.AnsiCompareIC(Buffer)==NULL)
    {

    //ComboBox1->Items->Strings[i].AnsiCompareIC("x")==0
    //_stricmp(Buffer,szPfadMitExe)
    //_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);
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Timer1->Enabled=true;

    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    EnumWindows((WNDENUMPROC)EnumProc, NULL);
    }



  • "C:\Programme\Winamp\Winamp.exe"

    erkundige dich mal nach Escape-Sequenzen...



  • Oder verwende gleich '/'. Spielt hier zwar wahrscheinlich keine Rolle, aber grundsätzlich bist du damit plattformunabhängig.



  • und nimm das hier wieder raus.

    int __fastcall AnsiCompareIC(const AnsiString& rhs);
    

    Warum willst du die Funktion nochmal deklarieren? Das ist sie doch schon in irgendeiner VCL-Headerdatei die du über #include <vcl.h> mit einbindest.



  • Th69: Ich guck mal was du damit meinst.

    Nexus: Was meinst du wo soll ich das verwenden??bei der EXE suche??

    Braunstein: Hab die jetzt rausgenommen, die Funktionsdeklaration.Habs der Grundlage nach reingenommen.Aber wie du schon sagtest es läuft auch ohne 🙂

    aber trotzdem schaltet sich z.B. Winamp nich ab hab die Timer zeit auf 0,7 sec gestellt hatte diese auch auf 200ms weiß nicht was da falsch ist vielelicht ist die Timer zeit zu schnell der Aufruf oder denke ich da falsch mit dem timer??er soll ja die EnumWindows aktivieren oh man 😞



  • TH69 mach ich was falsch mit den Stteuerzeichen???Soll ich das hexadezimal eingeben?das ist das einzige was ich ausergewönlich gefunden habe.



  • Lies dir mal das hier durch.http://de.wikipedia.org/wiki/Escape-Sequenz



  • genau das habe ich durchgelesen. habe es auch mit 'C:\Programme\Winamp\Winamp.exe' ausprobiert ohne Erfolg Compiler meckert Zeichen ... nicht für geeignet.



  • habs auch mit \\ ausprobiert ohne Erfolg 😞



  • Sorry tut mir leid es Funktioniert doch mit \!! 🙂 danke!!!Ihr seid die besten!!!besonders du Braunstein :-)!!!Ich weiß nicht warum er Winamp.exe nicht erkannt hat vielleicht muss ich ja so angeben wies im Ordner steht mit Versionsnummer??

    Aber ich habs jetzt mit nem anderen exe nähmlich mit vncviewer ausprobiert er schließt den sofort 🙂 Klasse!!!

    Muss jetzt gucken obs mit den Tray Icons unten rechts in der Leiste klappt das ist ja eigentlich mein großes Ziel.Drückt mir die Daumen.
    Denn ich kenn den Pfad mit den TrayIcons nicht das ist das Problem nur den Namen was mach ich jetzt?shit aber ich Probiers mal zuerst.So für heute ist gut kann wieder normal schlafen zumindest für heute 🙂

    Danke nochmal.



  • Leute ich hab gestern doch noch probiert eine Exe zu schließen die unten rechts in der leiste angezeigt wird z.B DynDNS Tray Icon gebe die EXE exakt mit dem Namen ein wie es im Ordner steht schließt sich aber nicht verstehe das nicht.

    Habt ih eine Idee??


Anmelden zum Antworten