so dieses problem konnte ich nun lösen un hab sogar winamp wieder installieren können.
leider hören die probleme damit nicht auf, sondern scheinen erst richtig loszugehen.
also den parameter übergeb ich meinem prog mit diesem registrywert: "D:\Desktop\Desktop.exe""%1"
mein programmcode sieht so aus:
Delphi-Quellcode:
var
ExtendedStyle : Integer;
dwMutex : DWORD;
hWindow : DWORD;
cdWork : TcsCopyDataStruct;
begin
dwMessage := RegisterWindowMessage('{0F08433D-ADFB-4918-AE2D-8839BAC93392}');
dwMutex := CreateMutex(nil,true,'Desktop');
try
if GetLastError <> ERROR_ALREADY_EXISTS then
begin
Form16 := TForm16.Create(Application);
try
ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW
AND NOT WS_EX_APPWINDOW);
Form16.Show;
Form16.Refresh;
Application.Initialize;
Application.Title := 'Desktop';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
finally
Form16.InitializationDone := True;
end;
Application.Run;
end
else
begin
hWindow := FindWindow(nil,'Desktop');
if hWindow <> 0 then
begin
if (paramcount > 0) and FileExists(paramstr(1)) then
begin
cdWork.dwData := dwMessage;
cdWork.cbData := Length(paramstr(1))+1;
cdWork.lpData := AllocMem(cdWork.cbData);
try
CopyMemory(cdWork.lpData,@paramstr(1)[1],cdWork.cbData-1);
SendMessage(hWindow,WM_COPYDATA,0,lParam(@cdWork));
finally
FreeMem(cdWork.lpData,cdWork.cbData);
end;
end;
end;
end;
finally
if dwMutex <> 0 then
begin
CloseHandle(dwMutex);
end;
end;
end.
(habe noch einen splash screen eingebaut)
und der code in meiner main
unit sieht wie folgt aus:
Delphi-Quellcode:
procedure TForm1.WndProc(var msg : TMessage);
var
cdWork : PcsCopyDataStruct;
sec, min: Integer;
s1, s2, result: String;
begin
if msg.Msg = WM_COPYDATA then
begin
cdWork := PcsCopyDataStruct(msg.lParam);
if cdWork.dwData = dwMessage then
begin
ListBox2.Items.Add(PChar(cdWork.lpData));
ListBox5.Items.Add(ExtractFileName(PChar(cdWork.lpData)));
ListBox7.Items.Add(IntToStr(Form1.ListBox5.Count));
if MPEGaudio.ReadFromFile(PChar(cdWork.lpData)) then
if MPEGaudio.Valid then
begin
sec := round(MPEGaudio.Duration);
min := sec div 60;
sec := (sec - min * 60);
if min >9 then s1 := intToStr(min)
else s1 := intToStr(min);
if sec >9 then s2 := intToStr(sec)
else s2 := '0' + intToStr(sec);
result := S1 + ':' + S2;
ListBox8.Items.Add(''+result+'');
end;
Sort(ListBox5, ListBox8, ListBox2);
HorScrollBar(ListBox5, 68);
HorScrollBar(ListBox7, 18);
HorScrollBar(ListBox8, 29);
ShowScrollBar(ListBox5.Handle, SB_VERT, FALSE);
ShowScrollBar(ListBox7.Handle, SB_VERT, FALSE);
end;
end
else
begin
inherited WndProc(msg);
end;
end;
fehlermeldungen bringt er keine, aber in die listboxen wird auch nichts eingetragen.
danke für eure hilfe
Flo