Problem mit 2 fehlermeldungen unter Borland C++ Builder 5
-
So eine Fehlermeldung ist mir jetzt übergeblieben hat mit dieser _stricmp zu tun ich guck mal gleich also die tipps haben mich schon weiter gebracht ich meld mich wenn wenn gleich klappen sollte.
Habe dem Projekt wie du sagtest die psai.lib beigefügt somit ist eine Fehlemeldung weg jetzt habe ich die Funktionsfehlermeldung noch.User32.Lib auch eingefügt ok aber user32.h erkennt der nicht
ich guck mal
[Linker Fehler] Unresolved external '_stricmp(const char *, const char *)' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UWINAPI2.OBJ
-
Du hast oben in deiner cpp eine Deklaration der _strcimp stehen. Ich sehe aber nirgens eine Definition. Kommentiere diese Zeile mal aus.
-
Definition?warte mal
ich guck mal durch.ich deklariere eine Funktion mit Ihren verwendeten Variablen Typen oben und dann verwende ich diese oder net??
Hole mal mein buch das kann doch net sein
-
Falls der BCB5 _stricmp nicht kennt schau dir das mal an.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=stricmp#Answ
-
Also stimmt mit dem Funktionsaufruf alles?
ich habs jetzt oben den Prototypen so (int _stricmp(const char *Buffer,const char *szPfadMitExe);) erstellt ohne den klammern natürlich weiter der gleiche Fehler.
Zu dem Link du meinst ich soll die _strcmp gar nicht nutzen sondern den vergleich anders durchführen??
-
Jetzt weiß ich was du meinst mit der definition ich kann mir die namen nicht merken lange her mit Progen und schule
aber ja hast recht eigenlich fehlt der Funktionskörper doch da es sich ja um eine Funktion von Windows handelt weiß ich nicht was ich da reinschreiben soll vielleicht brauch ich echt noch eine lib und header datei??hab gelesen das mit User32.h und lib die lib hab ich gefunden aber die "h" nicht. Hab gelesen das das ich die linken soll weis jetzt echt nicht wie ich das beim bcb5 machen soll ansonsten die andre idee von dir falls ichs richtig verstanden habe eine eigene Vergleichs funktion zu machen.???
Ist das richtig??
-
Nimm die Deklaration einfach raus. Wenn der Builder stricmp dann nicht kennt nimm eine eigene Version.
Da du den Builder verwendest könntest du auch eine Funktion aus der VCL nehmen. Z. Bsp. AnsiCompareIC (siehe Hilfe).
Du musst dann nur noch deine Strings in AnsiString umwandeln. Wenn du darüber mehr wissen willst frag nochmal im Builder-Forum nach.
PS:
Versuch mal ein paar mehr Satzzeichen etc. zu verwenden. Dein letzter Post war schwer zu entziffern.
-
int __fastcall AnsiCompareIC(const AnsiString& rhs) const;
ok verstehe aber soll ich die so ehnlich einbinden wie die _str...?
das macht mich unsicher.
-
Die sollst du nur verwenden. Wenn du vcl.h bei den Include mit drin hast reicht das schon.
-
Ich guck mir auf jedenfall die Funktion an ich hab noch kein schimmer wie ich das als ersatz für die _strcmp() machen soll aber Vielleicht klappts.
int __fastcall AnsiCompareIC(const AnsiString& rhs) const;
Das (AnsiStrings& rhs) macht mir sorgen verstehe das er ein String mit dem rhs vergleicht kommt da mein Buffer rein??oder kannst du mir sagen was dieses & dort bedeutet??
-
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 heuteDanke nochmal.