AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unsichtbares Programm

Ein Thema von Guido Eisenbeis · begonnen am 6. Mai 2008 · letzter Beitrag vom 18. Mai 2008
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#11

Re: Unsichtbares Programm

  Alt 6. Mai 2008, 08:15
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 > MSDN-Library durchsuchenClipboard
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Unsichtbares Programm

  Alt 6. Mai 2008, 09:03
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...
euer Peter Porka
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#13

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 00:20
@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 von cruiser:
Konsole und dann die Compiler Direktive auskommentieren/löschen
Zitat von toms_:
zustätzlich noch die Units "SysUtils, Forms" entfernen, damit die Exe schön klein wird.
Mann seid ihr flott! *ernst-gemeint* Zu dem Zeitpunkt hatte ich das zwar auch schon per TrialAndError herausgefunden, aber dass das (von euch) bestätigt wird, ist natürlich viel besser! Vielen Dank!


@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.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 00:37
Den Tipp mit der eigenen Implementation einer Clipboard-Routine habe ich umgesetzt und dadurch die "Clipbrd"-Unit eingespart.
Quelle: "mittels API Text in die Zwischenablage schreiben". (Danke an OrallY!)

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.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#15

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 13:39
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#16

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 13:47
MSDN-Library durchsuchenOpenClipboard
Zitat:
[in] Handle to the window to be associated with the open clipboard. If this parameter is NULL, the open clipboard is associated with the current task.
Wenn unbedingt ein Handle nötig wäre, dann hätt ich in solch einem Fall ein MSDN-Library durchsuchenMessageWindow (MessageOnlyWindow) vorschlagen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 13:53
SetClipboardData sollte fehlschlagen, wenn man EmptyClipboard aufruft nachdem man kein Handle bei OpenClipboard angibt.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#18

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 16:41
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.
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:
The OpenClipboard function opens the clipboard for examination and
prevents other applications from modifying the clipboard content.

Syntax

BOOL OpenClipboard(HWND hWndNewOwner);

Parameters

hWndNewOwner
[in] Handle to the window to be associated with the open clipboard.
If this parameter is NULL, the open clipboard is associated with the current task.

. . .
Jetzt könnte man höchstens noch eine Grundsatzdiskussion führen, ob 0 = NULL ist. Normalerweise wird in Delphi Nil für das NULL aus C++ verwendet. "OpenClipboard(nil);" wird jedoch vom Compiler nicht akzeptiert.

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#19

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 16:48
hmmm, und mein MSDN-Auszug interessierte keinen *schnüff*

Zitat von Guido Eisenbeis:
nachdem was ich bisher gefunden habe, ist INVALID_HANDLE(_VALUE) für Rückgaben gedacht. Dennoch vielen Dank!
z.B.: MSDN-Library durchsuchenCreateFileMapping siehe 1. Parameter (hFile)
INVALID_HANDLE_VALUE ist nur eine Konstante, welche festlegt, daß kein ObjectHandle vorliegt.


Zitat von Guido Eisenbeis:
ob 0 = NULL ist. Normalerweise wird in Delphi Nil für das NULL aus C++ verwendet. "OpenClipboard(nil);" wird jedoch vom Compiler nicht akzeptiert.
Delphi:
0 für Handle
nil nur bei Pointern
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#20

Re: Unsichtbares Programm

  Alt 7. Mai 2008, 16:49
Zitat von himitsu:
Delphi:
0 für Handle
nil nur bei Pointern
Das muesste man in jedem Subforum als Sticky haben. Ich glaube naemlich dass viele mit diesen 2 Werten staendig im Konflikt sind 8)
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz