![]() |
Eigene Window-klasse ändern
hey DP,
Ich hab schon überall gesucht, aber nix gefunden. Wie kann ich meine eigene Fenster-klasse ändern die bei delphi immer TApplication ist ? Also ich will es nicht ändern während das programm läuft, sondern allgemein. Aber ich kann nirgens finden wie das gehen könnte, Application.ClassName kann man nicht ändern. Danke im vorraus :) |
Re: Eigene Window-klasse ändern
-Implemtiere deine eigen Forms.pas
-Class-Helper |
Re: Eigene Window-klasse ändern
Was willst du eigentlich ändern? Nebenbei: TApplication ist keine Windows-Klasse, sondern TForm.
|
Re: Eigene Window-klasse ändern
Zitat:
Alternative "nonVCL", d.h das Fenster selber erstellen ohne VCL. |
Re: Eigene Window-klasse ändern
non-vcl!
Delphi-Quellcode:
CreateWindowEx(Null, 'fenster-klasse'(hier ändern), 'fenstertitel', WS_VISIBLE(eigenschaften), ....);
|
Re: Eigene Window-klasse ändern
Zitat:
|
Re: Eigene Window-klasse ändern
Zitat:
Ich nahm an, das k4ni unter Fenster-Klasse eher eine Klasse versteht, die wie ein Fenster aussieht. Und ich nebenbei auch. |
Re: Eigene Window-klasse ändern
Nimm die VCL nicht als Fensterklassennamen den Name der TForm-Klasse?
|
Re: Eigene Window-klasse ändern
Mir erschließt sich noch nicht der Sinn (und auch nicht der Unsinn), aber
mal wieder ein lustig Stück Code:
Delphi-Quellcode:
Wenn du diese Unit als erste (oder nach MemoryManager) in deine Projektdatei übernimmst, dann solltest du aus deinem MainWindow.ClassName etwas anderes machen können (Hier: Hallo). Der Name (NewName) darf nicht mehr als 63 Zeichen enthalten.
interface
implementation uses windows; const NewName='Hallo'#0; //Neuer ClassName des MainWindow type PJmp=^TJmp; TJmp=packed record JmpFar:word; adr:longint; end; type PJmpnew=^TJmpNew; TJmpNew=packed record Jmp:byte; adr:longInt; nop:byte; end; var oldAdr:LongInt; procedure change(ret:pointer;instance:cardinal;Name:PChar;WndClass:PWndclass);cdecl; var mbi:memory_basic_information; temp,old:cardinal; oldJmp:PJmp; Jmp:PJmpNew; begin if Name='TApplication' then begin //TApplication nach [NewName] ändern assert(not virtualquery(name,mbi,sizeof(mbi))<>sizeof(mbi),'VirtualQuery'); assert(virtualprotect(mbi.BaseAddress,mbi.RegionSize,Page_Execute_ReadWrite,old),'VirtualProtect'); move(NewName,name^,length(newname)); assert(virtualprotect(mbi.BaseAddress,mbi.RegionSize,old,temp),'VirtualProtect'); //Sprung von GetClassInfo(A) zurücksetzen oldJmp:=@getclassinfo; Jmp:=pointer(oldJmp); assert((jmp^.Jmp=$E9)and(jmp^.nop=$90),'GetclassInfo'); assert(not virtualquery(jmp,mbi,sizeof(mbi))<>sizeof(mbi),'VirtualQuery'); assert(virtualprotect(mbi.BaseAddress,mbi.RegionSize,Page_Execute_ReadWrite,old),'VirtualProtect'); OldJmp^.JMPFar:=$25FF; oldJmp^.adr:=oldAdr; assert(virtualprotect(mbi.BaseAddress,mbi.RegionSize,old,temp),'VirtualProtect'); end; end; procedure NewClassInfo; //change aufrufen und dann zur ursprünglichen getClassInfo(A) springen asm call change mov eax,oldAdr jmp [eax] end; procedure changeWindowclass; //Sprung von GetClassInfo(A) auf NewClassInfo ändern var jmp:PJmp; jmpNew:PJmpNew; temp,old:cardinal; mbi:Memory_Basic_Information; begin jmp:=@getclassinfo; assert(jmp^.JMPFar=$25FF,'GetClassInfo'); oldAdr:=jmp^.adr; JmpNew:=pointer(jmp); assert(not virtualquery(jmp,mbi,sizeof(mbi))<>sizeof(mbi),'VirtualQuery'); assert(virtualprotect(mbi.BaseAddress,mbi.RegionSize,Page_Execute_ReadWrite,old),'VirtualProtect'); JmpNew^.Jmp:=$E9; JmpNew^.Adr:=integer(@newClassInfo)-integer(jmp)-5; JmpNew^.nop:=$90; assert(virtualprotect(mbi.BaseAddress,mbi.RegionSize,old,temp),'VirtualProtect'); end; initialization changeWindowClass; end. Sauber ist das, wie du siehst, bei weitem nicht und ob es dadurch irgendwo noch zu Problemen kommen kann weis ich nicht (ich sehe erstmal keine unter D7). Das gleiche erreichst du (wie weiter oben geschrieben) auch, wenn du direkt in der Unit Forms die Konstante "WindowClass" entsprechend änderst. Mehr macht der Code oben auch nicht. Nur dass du eben die Unit Forms nicht ändern musst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz