![]() |
Re: Unsichtbares Programm
tja, vorallem Forms und SysUtils bringen schön viel Overhead mit
(SysUtils vorallem wegen der Exceptions und den Formatvariablen wie LongDateFormat, CurrencyFormat und Co.) und wenn er alle Units (abgesehn der Unit Windows) entfernt, ist es am Kleinsten, aber das CopyToClipboard muß er sich dann wohl selber basteln und über die WinAPI gehn > ![]() |
Re: Unsichtbares Programm
ich würde eine konsole anwendung vorschlagen, dann machst du von allen uses die du brauchst backups zB. sysutils_meins und löscht alle funktionen raus die du nicht brauchst...oder du legst dir eine uses an und kopierst dir dort alles rein was du brauchst ...so hab ich früher trojaner winzig gehalten ...zudem kannst du noch nen exepacker wie upx verwenden...
|
Re: Unsichtbares Programm
@Mackhack
Der erste Dank geht an dich! Dein Code hat mir den entscheidenen Tipp in die richtige Richtung gegeben! Hast ihn ja auch "mundgerecht" geliefert. Ich hab ihn nur entsprechend angepasst und siehe da, es funktioniert! (Ich poste ihn unten als eigene Antwort, um die Übersichtlichkeit zu erhalten.) Zitat:
Zitat:
@Alle Es wurde ja oben schon ausreichend darüber diskutiert, ob Units einbinden = einkompilieren usw. Deshalb von mir nur noch, dass ich folgendes bestätigen kann: Mit Units eingebungen -> ab knapp 400 KB, ohne Units eingebunden -> 20 KB! An alle vielen Dank! Guido. |
Re: Unsichtbares Programm
Den Tipp mit der eigenen Implementation einer Clipboard-Routine habe ich umgesetzt und dadurch die "Clipbrd"-Unit eingespart.
Quelle: ![]() Hier meine Lösung: Zur Veranschaulichung (gibts das Wort?) habe ich die Compiler Direktive für den Konsolen-AppTyp nur auskommentiert und ein ShowMessage eingebaut. Eine Frage zum Befehl "OpenClipboard(0);": Im Original-Tipp (siehe Quelle oben) wurde davon ausgegangen, dass dort das Handle der eigenen Form angegeben wird. Da mein unsichtbares Programm aber keine Form hat, habe ich 0 eingetragen. Ist das so in Ordnung, oder gibt das Querschläger, die im ersten Moment nicht sichtbar sind? Soll ich besser ein Handle verwenden? Z. B. per "GetDesktopWindow()"?
Delphi-Quellcode:
program Project1;
//{$APPTYPE CONSOLE} uses Windows; // Routine zum Speichern eines Textes in die Zwischenablage procedure SetClipboardText(aText: PChar); procedure SetBuffer(Format: Word; var Buffer; Size: Integer); var Data: THandle; DataPtr: Pointer; begin OpenClipboard(0); //Clipboard wird für die Anwendung geöffnet (hWnd muss das Fensterhandle sein) try EmptyClipboard; // !Wichtig! Nur so kann das oben angegebene Fenster der "Besitzer" des Clipboards werden Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size); try DataPtr := GlobalLock(Data); try Move(Buffer, DataPtr^, Size); SetClipboardData(Format, Data); finally GlobalUnlock(Data); end; except GlobalFree(Data); raise; end; finally CloseClipboard; //und wieder den Clipboard freigeben end; end; begin SetBuffer(CF_TEXT, aText^, Length(aText) + 1); end; // Main-Routine begin { TODO -oUser -cConsole Main : Insert code here } if (ParamCount() > 0) then begin SetClipboardText(PChar(ParamStr(1))); // ShowMessage('ParamCount(): ' + PChar(IntToStr(ParamCount()) + #13#10 + // 'ParamStr(0): ' + ParamStr(0) + #13#10 + // 'ParamStr(1): ' + ParamStr(1))); end; end. |
Re: Unsichtbares Programm
HI,
du dürftest das Programm, so wie ich das sehe schon ein bisschen getestet haben. Wenn dort kein Fehler auftrat und der Text danach auch wirklich in der Zwischenablage angekommen ist, würde ich mal ganz einfach sagen, dass du den Handle auf 0 lassen kannst. Ansonsten probierts mal mit einem Handle oder mit INVALID_HANDLE(_VALUE ??) rollstuhlfahrer |
Re: Unsichtbares Programm
![]() Zitat:
![]() |
Re: Unsichtbares Programm
![]() |
Re: Unsichtbares Programm
Hallo rollstuhlfahrer,
nachdem was ich bisher gefunden habe, ist INVALID_HANDLE(_VALUE) für Rückgaben gedacht. Dennoch vielen Dank! Ansonsten dürfte die Frage mit dem 0-Handle geklärt sein. :oops: Getreu dem Motto "Wer lesen kann, ist besser dran!" oder "Warum in die Ferne schweifen, ..." Denn ein Blick in die Hilfe (Platform SDK) bringt folgende Erkenntnis zu Tage: Zitat:
Guido. |
Re: Unsichtbares Programm
hmmm, und mein MSDN-Auszug interessierte keinen *schnüff*
Zitat:
![]() INVALID_HANDLE_VALUE ist nur eine Konstante, welche festlegt, daß kein ObjectHandle vorliegt. Zitat:
0 für Handle nil nur bei Pointern |
Re: Unsichtbares Programm
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 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