| Autor |
Beitrag |
The-FoX
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Do 24.07.03 21:45
Hi. Wie kann ich den Klassennamen eines Programms herausfinden, bzw. kann man den sich irgendwo in Windows anzeigen lassen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.07.03 00:33
Programme haben keinen Klassennamen, nur Fenster. Und rausfinden kann man es mit meinem Programm WindowInfo: www.luckie-online.de/index.shtml#programme
Einfach die Zielscheibe nehmen und auf das Fenster ziehen.
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: Fr 25.07.03 00:37
die funktion, die du suchst, heißt GetClassName. Weitere Infos findest du hier:
msdn.microsoft.com/l...ons/getclassname.asp
_________________ Viele Grüße
Jakob
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 02:43
Jo nochwas. Im Faq steht ja wie man ein Programm beendet. Das Problem ist das man durch einfaches umbennen des Programms das ganze schonwieder umgehen kann. Welchen namen muss ich dort angeben damit immer diese Program beendet wird? Reicht der Klassenname?
thx im vorraus.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.07.03 02:48
Nein. Es können mehrer Programme mit dem gleichen Klassennamen laufen. Ein eKombination aus Klassennamen und Fenstertitel sollte aber etwas eindeutiges ergeben.
Was hast du denn vor?
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 03:07
Ich habe vor mit dem Program den Maphack (soll eine Art Cheating Death für Warcraft 3 werden) permanent zu schließen. Das Problem ist aber das man ihn einfach umbenennen kann. Gibt es einen Befehl der den Windowname des Klassennamens zeigt? Der Maphack hatte als ich ihn getestet habe den name "celtic" <- Name des Programmierers.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.07.03 03:10
Was verstehst du unter "WindowName"? Den Fenstertitel? Heiß die Exe denn imm ergleich? dann kuck doch, ob die Läuft und beende den Prozess mit TerminateProcess.
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 03:24
Da haben wir das Problem. Die exe kann doch jeder umbenennen wie er will. Der name im Taskmanager richtet sich nach dem exe namen. Wenn der Maphack als von Hans in Hans.exe umbenannt wird heißt er auch im Taskmanager Hans.exe und muss von terminateexe auch mit hans.exe beendet werden. So wie ich das verstanden habe kann man den Klassennamen nicht umbenennen. Also muss ich da ich nur den Klassennamen habe durch den den Windowname rausfinden.
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 03:47
Ich muss mich korrigieren. Die lösung muss von der ProcessID zum Windowname oder eben gleich close führen, weil der Klassenname sich ja sogar innerhalb des Programs ändert, die id nicht.
btw vielen dank für deine Hilfe!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.07.03 04:00
Was? Legt dich erstmal schlafen, du redest wirrs Zeug. Seit wann kann sich der Klassennamen eines Programmes ändern, es sei denn ich ändere im im Code und kompiliere neu.
Und könnetst du mal versuchen die Wahl deiner Begriffe etwas fachlicher zu gestalten?
Oder was soll das hier heißen:
| Zitat: |
Die lösung muss von der ProcessID zum Windowname oder eben gleich close führen
|
Man kann vom Fenstertitel zur ProzessID gelangen. Da gibt es eine Funktion (deren Namen ich immer wieder vergesse). Und dann kannst du mit OpenProcess und TerminateProcess das Programm beenden.
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 18:50
hmmm. Ok gibt es auch eine Funktion mit der ich gleich das Programm von dem ich nur die ProcessID habe schließen kann oder muss man das immer über diese Ecken machen? TerminateProcess vielleicht? Muss ich dann die ProcessId angeben?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.07.03 18:53
Wenn du die PrizessID hast: OpenProcess, um ein Porzess-Handle zu bekommen und dann TermianteProcess.
Irgendwie drehen wir uns im Kreis, ich erkläre dir immer wieder das selbe. 
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 18:57
Aber der Eingabetyp von TerminateProcess muss doch Cardinal sein nicht
handle. Korrigier mich bitte wenn ich unsinn rede. Kannst bitte ein kleines Codebeispiel geben?
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Fr 25.07.03 23:15
Titel: hmm,
mal davon abgesehen dass ich nicht weiss von was ihr quatscht ist es eh sinnlos. Was du tun willst ist quasi einen heuristischen Scanner basteln der das Cheatprog. erkennt. An sowas beissen sich schon seit ewigen Zeiten die besten Antivirenschmieden die Zähne aus, also wie willst du es mit deinen bescheidenen Mitteln stoppen ?
_________________ mfg. Joel
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Fr 25.07.03 23:45
ich weiß das es keine ultimative waffe ist, es ist nur so das mindestens 50 % der mhacker irgendwann mal bei google wc3 maphack eingegeben haben und das sie den dann eben benutzen. Es ist ein Schritt in die richtige Richtung. Da kannst du sagen was du willst.
|
|
specialwork
      
Beiträge: 52
Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
|
Verfasst: Sa 26.07.03 00:15
Hallo Luckie,
| Zitat: | | Seit wann kann sich der Klassennamen eines Programmes ändern, es sei denn ich ändere im im Code und kompiliere neu. |
Wenn ich falsch liege, dann gibs mir.
- Ein Programm ist keine Klasse und kann somit auch keinen Klassennamen haben, sondern nur eine Main-Funktion, die wiederrum Klassen erzeugen und aufrufen kann.
- Wenn der Klassenname von TApplication gemeint war, so ist es möglich, den zur Laufzeit zu ändern, ohne zuvor neu compilieren zu müssen. Dies macht allerdings keinen Sinn, da mann sie mit keiner mir bekannten Funktion ausmachen kann.
Gruß, Tom
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Sa 26.07.03 00:26
Titel: hmm,
es gibt dies aber alles nimmer wenn du mal ein fertig kompiliertes Proggie hast !
_________________ mfg. Joel
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 26.07.03 00:50
| specialwork hat folgendes geschrieben: | Hallo Luckie,
| Zitat: | | Seit wann kann sich der Klassennamen eines Programmes ändern, es sei denn ich ändere im im Code und kompiliere neu. |
Wenn ich falsch liege, dann gibs mir.
|
Schon dabei.
| Zitat: | - Ein Programm ist keine Klasse und kann somit auch keinen Klassennamen haben, sondern nur eine Main-Funktion, die wiederrum Klassen erzeugen und aufrufen kann.
- Wenn der Klassenname von TApplication gemeint war, so ist es möglich, den zur Laufzeit zu ändern, ohne zuvor neu compilieren zu müssen. Dies macht allerdings keinen Sinn, da mann sie mit keiner mir bekannten Funktion ausmachen kann.
|
Wir reden hier nicht von OOP Klassen, sondern von Fensterklassen unter Windows. Hier muß man unter Klasse eine Gruppe von etwas Gleichem verstehen. Diese Pflanze gehört zur Gruppe / Klasse der Nachtschattengewächse. In diesem Sinne. Konkret: Eine Schaltfläche hat die Windowsklasse button, ein Eingabefeld EDIT usw. Das hat nicht mit den VCL-Klassen TButton oder TEdit zu tun. Das sind OOP-Klassen. Siehe dazu:
msdn.microsoft.com/l...ons/createwindow.asp (Die graue Tabelle) oder
msdn.microsoft.com/l...ons/getclassname.asp
Jetzt klar, von was wir hier reden?
|
|
The-FoX 
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Sa 26.07.03 02:10
Ja ich denke ich sollte mal wieder ein bisschen Ordnung reinbringen
Also ich suche den Code um eine Anwendung schließen zu können. TerminateExe hilft nicht, da man die Anwendung einfach umbenennen kann und TerminateExe sie dann nicht mehr erkennt. Also brauch ich irgendeinen Namen der bei dem Programm abc gleich bleibt. Also *mist*egal ob es hans oder schorsch heißt. Die ProcessID schien mir ein guter Anfang, aber ich weiß nicht in welchen "format" ich sie angeben muss. Also es muss Cardinal sein aber ich kann sie nur in String angeben. Kann mir jmd helfen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 26.07.03 04:39
Die ProzessID bekommst du auch nur über den Namen der Exe. Bei deinem Problem wäre, denke ich, der Weg über FindWindow und den Klassennamen angebracht. Dann entwerder ein WM_CLOSE oder ein WM_DESTROY schicken. Sollte das nicht klappen mußt du über das Fensterhandle (GetWindowThreadProcessId) dir die ProzessID holen und wie es weitergeht, habe ich mittlerweile schon dreimal gesagt.
|
|