Laufendes Programm beenden
-
hast Du Dir die Funktion mal in der MSDN Library angekuckt? Dort steht u.a. in welcher Library die Funktion enthalten ist, nämlich in der Kernel32.lib.
Zusätzlich steht da:
Client: Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 4.0
Wenn Du also "nur" Win98 oder WinME hast, wird es schwierig. Dann gibts nur die GetModuleFileName Funktion.... Warum Du das aber brauchst, weiß ich nicht. Vielleicht würde es ja auch genügen, dem entsprechenden Window einfach eine WM_QUIT Message schicken würdest!?
-
Original erstellt von Gen.d.Pz.Tr.Seb:
Ich hab die lib ja schon eingebunden mit
#pragma comment(lib, "User32.lib")Das ist eine Präprozessor-Direktive von MS Visual Studio.... das ist LOGISCH, das das nicht mit Borland funktioniert...
-
@Gen.d.Pz.Tr.Seb
vielleicht solltest du dir erst einmal die grundlagen aneignen, bevor du dich hier auf problematiken stürzt, deren komplexitäten dein wissen scheinbar bei weitem übersteigen! hier fortwährend nachzufragen, soboald es irgendwo in deinen programmen klemmt, anstatt sich selber mal nen kopf zu machen und sich mit der thematik auseinander zu setzen, ist ne schwache leistung, ganz egal ob anfänger oder nicht!
-
Ich setze mich mit der Thematik schon seit längerem auseinander. Allerdings ist die Winapi für mich recht neu. (und ich weis auch keine tutorials oder gute hilfen dafür).
Und Libraries hab ich auch noch nie gebraucht.
Jetzt hab ich aber die lib includiert trotzdem sagt er mir das er GetModuleFileNameEx() nicht kennt.Und noch ein Problem mit hepi's code;
EnumWindows(EnumProc, NULL);
Cannot convert 'int (___stdcall * (closure )(void *,long)' to 'int(___stdcall *)()'
Ach, wenn jemand wirklich empfehlenswerte hilfen, anleitungen oder tutorials weis, die nicht zu kompliziert sind sagt sie mir bitte. (Zu groß sollten sie bitte nicht sein, mit einem 56k Modem hat man da gewisse Begrenzungen)
[ Dieser Beitrag wurde am 22.06.2003 um 21:04 Uhr von Gen.d.Pz.Tr.Seb editiert. ]
-
EnumWindows(EnumProc, NULL); // benötigt User32.lib GetModuleFileNameEx(); // benötigt Kernel32.lib UND WinNT/2K/XP
-
Poste doch mal deinen kompletten Code... also wirklich ALLES... nix weglassen!!!
Aber bitte diesmal richtig in die Code-TAGS eingebunden....
[ Dieser Beitrag wurde am 22.06.2003 um 22:03 Uhr von Hepi editiert. ]
-
Original erstellt von Gen.d.Pz.Tr.Seb:
**Tut mir leid aber....MITTLERWEILE IST ES MIR VÖLLIG WURSCHT WIE ICH DAS PROGRAMM SCHLIEßE
es soll wenn geht nicht zu kompliziert sein, und einfach nur funktionieren.**
Na schön: Klick auf das X oben rechts, oder drücke Alt+F4, wenn das nicht geht, öffne den Tast-Manager und geh auf Prozesse, dann suchst du die Anwendung und drückst auf Prozess beenden. So müsste es gehen! *ggg*
-
Wie war das mit den blöden Kommentaren? Nimm dich mal selber an der Nase, nico!
-junix
-
// #include "windows.h"
HWND hwnd;
hwnd = FindWindow( "notepad", NULL );
SendMessage( hwnd, WM_CLOSE, 0, 0 );Verstanden??
-
Böser Junix, sagst hier meinen Vornamen *g* Also ich verklag dich gleich -rofl-
Aber nur mal so, du bist hier derjenige, der zur Zeit am wenigsten über "blödsinnige Kommentare" zu labern hat, denn von dir kommen sie ja in meinen themen, nicht wahr?
.......Ueli!?
-
In deiner Sig. ist immernoch ne menge falsch. was deinen Vornamen betrifft... so kann ja jeder bei nic.de seine Whois-abfrage starten... (so wie du bei switch... wobei.. ne steht ja auch auf meiner Page...) meine Kommentare sind nicht blöd sonder teils als Rat gemeint und teils in meiner Pflicht als Mod entstanden.
So aber nu ist auch hier Schluss mit OT.
-junix
-
Original erstellt von <SlashXP++>:
**// #include "windows.h"
HWND hwnd;
hwnd = FindWindow( "notepad", NULL );
SendMessage( hwnd, WM_CLOSE, 0, 0 );Verstanden?? ;)**
Ja, aber an der Frage vorbei (und auch noch ohne Code-Tags... Pfui!)!
Frage war:
"Ich würde gerne eine laufende .exe Datei beenden. Kann man dies direkt tun oder muss man die thread id herausfinden und diesen dann beenden? (Wie findet man eine thread id heraus?)"[ Dieser Beitrag wurde am 23.06.2003 um 15:52 Uhr von Hepi editiert. ]
-
Also mein Code; (entspricht eigentlich fast ganz dem Code von Hepi)
//lib's sind includiert und funkionsdefinitionen stehen auch alle da, //brauch ich nicht zu erwähnen //Aufruf für Funktion, bei mir wenn ein button gedrückt wird EnumWindows(EnumProc, NULL); //Funktionen 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 } 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); }
Fehler sind gleich wie zuletzt geblieben (Lib's SIND eingebunden!)
-
Ist das dein kompletter Quellcode???
-
Was meinst du genau mit kompleter Quellcode? Das gesamte Programm? Ich hab das genommen was du mir gesagt hast. Ich hab ja gesagt das ich diesbezüglich fast nichts kann!
-
Du sollst Dein _komplettes_ Programm hier zeigen...
Also, angefangen bei der ersten Zeile (vermutlich #include <windows.h> )
bis hinunter zur letzten schließenden Klammer }
-
Das geht nicht. Ist extrem umfangreich, es handelt sich ja schließlich nicht nur um ein Programm das Programme schließt.
-
Das ist der Moment, wo ich mich ausklinke....
1.) Ohne Deinen kompletten Quellcode zu kennen vermag ich Deine Fehler nicht zu beheben
2.) Deine Aussagen "Ich mußte den Quellcode anpassen, damit der BCB ihn schluckt" stimmen mich nachdenklich: Als ich zuletzt mit dem BCB Berührung hatte war es ein Standard-C++ Compiler/Linker, der mit JEDEM Code OHNE ANPASSUNG funktioniert! Das Du dort etwas "anpassen" mußt stimmt mich wirklich nachdenklich!
Viel Erfolg weiterhin...
-
In dem Fall war die 'Anpassung' das weglassen eines Underscore-Zeichens.
Vielen Danke für deine bisherige Hilfe, immerhin kann ich jetzt zwar keine Prozesse, aber doch immerhin manche windows schließen