Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Verknüpfung auf dem Desktop erstellen
woully - Mo 24.08.09 14:09
Titel: Verknüpfung auf dem Desktop erstellen
Hi,
folgendes problem :
Wie kann ich eine Verknüpfung von einem Button aus einer Form auf den Desktop per drag/drop erstellen ?
Danke
thepaine91 - Mo 24.08.09 14:14
Hi,
Ich versteh deine Frage gerade nicht wirklich. Willst du einen Button auf dem Desktop verknüpfen?
Oder eine Datei?
Nersgatt - Mo 24.08.09 14:14
Sorry, ich hab den Satz jetzt 3x gelesen. Ich verstehe trotdem nicht, was Du willst. :gruebel:
Gruß,
Jens
woully - Mo 24.08.09 14:18
Hi,
ja sorry, stimmt ist ein bischen unverständlich...
Ich will einfach ein Button auf den Desktop verknüpfen..
thepaine91 - Mo 24.08.09 14:22
Wie willst du einen Button aus einer Anwendung auf den Desktop verknüpfen? XD
Kannst einen Screenshot machen ihn ausdrucken dann ausschneiden und anschließend auf deinen Bildschirm ver(knüpfen).
woully - Mo 24.08.09 14:27
hummm
schon versucht...
Der Onclick event wird aber nicht ausgeführt....;-)
Dude566 - Mo 24.08.09 14:27
So wie ich ihn verstanden habe, will er eine Verknüpfung haben die dann in seinem Programm einen Button drückt ohne das Programm auszuführen. :shock: :D :roll:
Was willst du???
Narses - Mo 24.08.09 14:30
Moin!
woully hat folgendes geschrieben : |
Ich will einfach ein Button auf den Desktop verknüpfen.. |
Einen Button kannst du ganz sicher nicht als Verknüpfung auf den Desktop legen. :nixweiss:
Workaround: mach eine Verknüpfung zu einer Anwendung und gib ihr spezielle Parameter mit, die du in der laufenden Instanz als Indiz für den Buttonklick heranziehen könntest. :idea:
Aber, ehrlich gesagt, das hört sich nach einem ziemlich kaputten Konzept an... :? Was soll denn das werden, wenn´s fertig ist? :gruebel:
cu
Narses
thepaine91 - Mo 24.08.09 14:34
Oder verknüpf eine Anwendung die lediglich eine wm_user... Message an deine Hauptanwendung schickt.
In der Hauptanwendung führst du beim empfangen dieser Message einfach den btnclick aus.
Aber auch ich verstehe den Sinn nicht. Und selbst wenn du es über diesen Umweg machst bleibt es ein
Narses hat folgendes geschrieben: |
kaputtes Konzept |
woully - Mo 24.08.09 14:48
ok,
hatte mir schon gedacht das es nicht einfach wird...
Ich versuche euch mal das ganze zu erklären, damit ihr sieht was es geben soll.
Meine Anwendung ist unsichtbar, erstellt aber einen Trayicon in der Taskbar.
Bei einem Klick auf das Icon wird ein Popup menü Erzeugt mit mehreren Buttons.
Beim Onclick Event von den Buttons, wird :
1. Eine webservice Anfrage gestartet.
2. Eine Datei (.exe) heruntergeladen und auf die Festplatte kopiert.
3. Diese exe Datei wird gestartet.
So, und nun soll der Benutzer die möglichkeit haben, sich eine Verknüpfung von diesen Buttons aus dem popupmenü, auf den Desktop zu legen (per Drag and Drop.)
Andreas L. - Mo 24.08.09 15:14
Verknüpfung erstellen:
Delphi-Quelltext
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:
| function CreateLink(const AFilename, ALNKFilename, ADescription, AArgument: string) : Boolean; var psl : IShellLink; ppf : IPersistFile; wsz : PWideChar; begin result:=false; if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_inPROC_SERVER, IID_IShellLinkA, psl)) then begin psl.SetPath(PChar(AFilename)); psl.SetDescription(PChar(ADescription)); psl.SetWorkingDirectory(PChar(ExtractFilePath(AFilename))); psl.SetArguments(PChar(AArgument)); if SUCCEEDED(psl.QueryInterface(IPersistFile, ppf)) then begin GetMem(wsz, MAX_PATH*2); try MultiByteToWideChar(CP_ACP, 0, PChar(ALNKFilename), -1, wsz, MAX_PATH); ppf.Save(wsz, true); result:=true; finally FreeMem(wsz, MAX_PATH*2); end; end; end; end; |
Den Pfad vom Desktop kannst du mit
GETSHELLFOLDER ermitteln. Dann musst du nur noch die Parameter auswerten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.OnCreate(Sender: TObject); var i: Integer; begin for i := 0 to ParamCount -1 do begin if ParamStr(i) = '-deinParameter' then Button.Click; end; end; |
thepaine91 - Mo 24.08.09 15:23
Hmm also auf den Ersten blick sehe ich das sich das ganze im Oncreate befindet.
Aber die Anwendung läuft doch bereits. In dem Fall würde man sie dann extra Starten.
Naja wenn das so gewollt ist wurde der Quelltext ja schon 1A mitgeliefert. ;)
Andreas L. - Mo 24.08.09 15:49
thepaine91 hat folgendes geschrieben : |
Hmm also auf den Ersten blick sehe ich das sich das ganze im Oncreate befindet.
Aber die Anwendung läuft doch bereits. In dem Fall würde man sie dann extra Starten.
Naja wenn das so gewollt ist wurde der Quelltext ja schon 1A mitgeliefert. ;) |
Naja, wenn die Anwendung noch nicht läuft kann man meinen Code verwenden, falls doch muss man halt die Parameter an die erste Instanz weiterleiten. Z. B. mit einem mutex (siehe Anhang)
Dude566 - Mo 24.08.09 16:55
woully hat folgendes geschrieben : |
So, und nun soll der Benutzer die möglichkeit haben, sich eine Verknüpfung von diesen Buttons aus dem popupmenü, auf den Desktop zu legen (per Drag and Drop.) |
Warum denn das? Also ich möchte mir als Benutzer nicht den ganzen Desktop mit Verknüpfungen zu verschiedenen Programmfunktionen zumüllen. Ist doch mit dem PopUp Menu viel besser gelöst.
thepaine91 - Mo 24.08.09 17:32
Tja nur lässt es sich schwer realisieren da wenn das alle Anwendungen machen eben i-wann kein Platz mehr da wäre.
Andreas L. - Mo 24.08.09 17:44
thepaine91 hat folgendes geschrieben : |
Tja nur lässt es sich schwer realisieren da wenn das alle Anwendungen machen eben i-wann kein Platz mehr da wäre. |
Ich denke er wird die Verknüpfung auf Wunsch vom User (also als Option) erstellen lassen. Wenn ich der Meinung bin das so ein Icon meinen Desktop vollmüllt klicke ich einfach nicht auf den "Verknüpfung erstellen"-Button in der jeweiligen Anwendung, oder?
woully - Do 10.09.09 16:36
Hi,
So, Problem ist gelöst.
Klar waren es sonderwünsche von Kunden. Warum auch immer.
also, ich habe folgende function verwendet :
Delphi-Quelltext
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:
| function TMPopup.CreateDesktopLink(strArgument : String;strName : String) : Boolean;
const IID_IPersistFile: TGUID = '{0000010b-0000-0000-C000-000000000046}';
var slShellLink : IShellLink; pfPersistFile : IPersistFile; wszShortCut : PWideChar; hRes : HResult; sShortCut : string; dwLen : DWORD; strIconPath : Widestring; pszIcon : PChar;
begin Result := false; hRes := CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, slShellLink); if hRes <> S_OK then begin exit; end; slShellLink.SetPath(PChar(Paramstr(0))); slShellLink.SetArguments(Pchar(strArgument)); strIconPath := ExtractFilePath(Paramstr(0))+'fluid-bit.ico';
if fileExists(striconPath) then Begin pszIcon := strAlloc(MAX_PATH); try strpCopy(pszIcon,strIconPath); slShellLink.SetIconLocation(pszIcon,0); finally strDispose(PszIcon); end; end; hRes := slShellLink.QueryInterface(IID_IPersistFile,pfPersistFile); if hRes <> S_OK then begin exit; end; dwLen := (MAX_PATH+1)*2; wszShortcut := AllocMem(dwLen); try sShortCut := ChangeFileExt(strName,'.LNK'); sShortCut := szDesktopFolder + '\' + ExtractFileName(sShortCut); StringToWideChar(sShortCut,wszShortCut,dwLen); hRes := pfPersistFile.Save(wszShortCut, TRUE); finally FreeMem(wszShortCut,dwLen); end; Result := (hRes = S_OK); end; |
Ich erzeuge einen Shortcut auf die eigene Software.
Dem Schortcut verpasse ich ein Argument.
Beim aufruf von dem shortcut weiss die Software dann was für Funktionnalitäten auszuführen sind.
Vielleicht eine unschöne Lösung, aber laufenden auf jeden Fall.
Moderiert von
Narses: Delphi-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!