faketool???

xldn
wie könnte man in ein proggi coden, dass eine beliebige exe löscht, das symbol von der in der taskleiste fälscht und eine fehlermeldung ausgibt, wenn man daraufklickt?
wäre dankbar für beispiele, bin absoluter n00b Augenzwinkern
thx
xldn
ThiefMaster
Öhm, soll das ein Virus werden?
xldn
nein (ehrlich)

ähm....die sig is doch nich so gut Augen rollen
xldn
also?????
daHooligan
ähm.... du hast den thread vor 1:43 =103 Minuten=6180 sekunden erstellt...........

wenn du dir mal andere thread hier im forum anguckst wirst du herausfinden, dass stellenweise die ersten Antworten erst nach mehreren Tagen kommen.


deswegen:
tee kochen und kaffee trinken

[EDIT]
doppelposts sind unerwünscht und sinnlos weil es eine "edit"-funktion gibt
[/EDIT]
xldn
jaja (das war ja kein doppelpost!)
trotzdem, thiefmaster antwortete auch gleich, da könnte er auch ja gleich weiter posten ;-)
Mauer
perle
zuerstmal muss ich sagen, dass mir deine Signatur ganz und garnicht gefällt aber naja

Wie du programme löscht sollte bekannt sein oder?

falls nich :

code:
1:
2:
3:
DeleteFile();


Vorher musst du dir das Icon noch holen und sichern. Das machst du mit

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  gros, klein : HICON
  Icon : TIcon;
begin
  Icon := TIcon.Create;
  ExtractIconEx('C:\Datei.exe',0,gros,klein,1);
  test.Handle := klein;
  test.SaveToFile('C:\Icon.ico')
  FreeAndNil(Icon);;
end;


das icon hast du dann auf C:\Icon.ico. Kannste natürlich auch sonstwo speichern.
Das lädst du dann wieder in ein TIcon mit

code:
1:
2:
3:
4:
5:
...
Icon.LoadFromFile('C:\Icon.ico');
...


Als nächstes musst du das Trayicon erzeugen ....

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
const
   WM_TNAEVENT = WM_USER + $1337;
...
var
  TrayIcon : NOTIFYICONDATA;
begin
  with TrayIcon do
   begin
     cbSize := SizeOf(TrayIcon);
     Wnd    := Form1.Handle;                                 // Handle, an das Nachrichten geschickt werden
     uID    := 0;
     uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
     uCallbackMessage := WM_TNAEVENT;          // Callback Message
     hIcon  := Icon.Handle;                                      // Das Icon von oben
     szTip  := 'Programmname';                             // Der Hinttext vom Icon
   end;
   Shell_NotifyIcon(NIM_ADD,@TrayIcon);
end;


Jetzt , da das Icon da ist, musst du auf Mausereignisse reagieren....dazu deklarierst du eine MessageHandler Funktion im Private Abschnitt der Form

code:
1:
2:
3:
  procedure TNAMessageHandler(var Message : TMessage); message WM_TNAEVENT;


und die procedur selber sieht dann so aus :

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
begin
  if Message.msg = WM_LBUTTONDBLClICK then          // wenn links doppelgeklcitk wird dann
   begin
       // Hier halt rein, was dann passieren soll z.b. Showmessage oder so
   end;
end;



im Formdestroy solltest du das Icon natürlich wieder entfernen mit Shell_NotifyIcon(NIM_DELETE,@TrayIcon);
perle
Ich hatte mal langeweile und hab mal probiert, sowas schnell hinzuschmieren.

Wer interesse hat, kann ja mal reingucken.

Alles was mit (* *) auskommentiert ist, benötigt das madBasics package von www.madshi.de

das bietet zusätzlich die Möglichkeit, vorher den Hinttext des original TrayIcons auszulesen und seinem eigenen Icon zuzuweisen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
unit Utest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellApi;

const
  WM_TNAEVENT = WM_USER + $1337;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure TrayMsgHandler(var Message:TMessage);message WM_TNAEVENT;
  public
    { Public-Deklarationen }
  end;

var
  Form1      : TForm1;
  str        : TMemoryStream;
  tray_hint  : String = '';
  tray : NOTIFYICONDATA;

implementation

{$R *.dfm}

(*
uses
  madkernel;
*)

procedure TForm1.Button1Click(Sender: TObject);
var
  gros, klein : HICON;
(*i    : Integer;*)
begin
  if OpenDialog1.Execute then
    ExtractIconEx(PCHAR(OpenDialog1.FileName),0,gros,klein,1);

(*
  for i := 0 to TrayIcons.ItemCount - 1 do
    if lowercase(ExtractFilename(TrayIcons[i].Window.OwnerProcess.ExeFile)) = lowercase(ExtractFileName(OpenDialog1.FileName))
     then tray_hint := TrayIcons[i].Hint;
*)

  with TIcon.Create do
   begin
     Handle := klein;
     SaveToStream(str);
     Free;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  icon : TICON;
begin
  icon := TICON.Create;
  str.Seek(0,soFromBeginning);
  icon.LoadFromStream(str);
  with tray do
   begin
     cbSize := SizeOf(tray);
     Wnd    := Handle;
     uID    := 0;
     uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
     uCallbackMessage := WM_TNAEVENT;
     if tray_hint <> '' then
       StrPLCopy(szTip,tray_hint,255)
     else StrPLCopy(szTip,OpenDialog1.FileName,255);
     hIcon := icon.Handle;
   end;
  Shell_NotifyIcon(NIM_ADD,@tray);
  icon.Free;
end;

procedure TForm1.TrayMsgHandler(var Message: TMessage);
begin
  if Message.LParam = WM_LBUTTONDOWN then
    MessageDlg('Ein Fehler ist aufgetreten', mtError, [mbOK], 0);
end;

INITIALIZATION
  str := TMemoryStream.Create;

FINALIZATION
  FreeAndNil(str);
  Shell_NotifyIcon(NIM_DELETE,@tray);

end.
daHooligan
@perle:
ich bin immer wieder erstaunt, wie du "mal kurz" solche sachen hinschreibst, die dann auch noch funktionieren.........


wollte ich nur "mal kurz" gesagt haben
perle
hehe, danke ich nehme das mal als kompliment.
xldn
großes thx @perle
Respekt Respekt Respekt Invasion Springende Smilies Springende Smilies Springende Smilies
jaja smilies sind lustig