![]() |
IShellLink-Problem
Hi,
ich versuche derzeit mit Hilfe des IShellLink-Interfaces eine Verknüpfung zu erstellen. Klappt auch ganz gut, nur kann ich das Objekt nicht erstellen... :mrgreen: Ich habe bereits die ActiveX-Unit eingebunden (siehe Thread [dp]Verknüpfung erstellen[/dp] [untester Thread]), hat aber nichts gebracht, auch eine SHObjidl-Unit (siehe PSDK) gibt es nicht, auch nicht bei den Jedi-Headers. Es ist einfach zum Haareraufen... In welcher Unit befindet sich den nun das Interface? Chris |
Re: IShellLink-Problem
:wall: wirklich dumm muss man sein... :cry:
In dem Thread steht ja auch noch die Antwort... :wall: Chris |
Re: IShellLink-Problem
Moin Chris,
wenn ich mich mal kurz aus diesem Thread zitieren darf: Zitat:
[EDIT] Mist, wieder zu spät [/EDIT] |
Re: IShellLink-Problem
Hi,
da wir gerade beim Thema sind gibt es jetzt wieder ein Problem: ich habe die Funktion von dir nur um die einige Parameter erweitert, die in folgendem Source deutlich werden sollen:
Delphi-Quellcode:
Allerdings gibt es beim Testen ein Problem. Wenn ich als Ausgabe C:\ wähle und ein beliebiges (es kann jedes sein) Modul auswähle, kommt folgender Fehler:
procedure TMainForm.btnDo1Click(Sender: TObject);
var sExecPath, sPath, sArg, sTemp: string; begin sPath := 'rundll32.exe'; sTemp := cbModules.Text; sTemp := copy(sTemp, pos(':: ', sTemp) + 3, length(sTemp)); sArg := 'shell32.dll,Control_RunDLL ' + sTemp + ',,0'; sExecPath := '%windir%'; if not CreateShortcut(sPath, sArg, edtOutput.Text, sExecPath) then begin MessageDlg('Die Verknüpfung konnte nicht erstellt werden:' + #13#10 + SysErrorMessage(GetLastError), mtError, [mbOK], 0); end; end; Zitat:
Hast du eine Idee, Christian? Chris |
Re: IShellLink-Problem
Moin Chris,
wie sieht den Deine Funktion CreateShortcut aus? |
Re: IShellLink-Problem
Nicht großartig verändert:
Delphi-Quellcode:
Chris
function CreateShortcut(const sTargetPath: string;
const sParams: string; const sOutput: string; const sExecPath: string): boolean; const IID_IPersistFile: TGUID = '{0000010b-0000-0000-C000-000000000046}'; var slShellLink : IShellLink; pfPersistFile : IPersistFile; wszShortCut : PWideChar; hRes : HResult; sShortCut : string; dwLen : DWORD; 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(sTargetPath)); slShellLink.SetArguments(PChar(sParams)); hRes := slShellLink.QueryInterface(IID_IPersistFile,pfPersistFile); if hRes <> S_OK then begin exit; end; dwLen := (MAX_PATH+1)*2; wszShortcut := AllocMem(dwLen); try sShortCut := sOutput; StringToWideChar(sShortCut,wszShortCut,dwLen); hRes := pfPersistFile.Save(wszShortCut, TRUE); finally FreeMem(wszShortCut,dwLen); end; Result := (hRes = S_OK); end; |
Re: IShellLink-Problem
Moin Chris,
hast Du mal kontrolliert, an welcher Stelle die Funktion aussteigt? Es gibt ja immerhin drei mögliche Stellen. |
Re: IShellLink-Problem
Nein... Brauche ich aber (leider) auch nicht mehr... :wall:
Bei der "Konvertierung" ist mir ein Fehler unterlaufen: in deinem Orignial hast du den Dateinamen automatisch drangehangen. Ich wiederrum habe dies nicht gemacht und müsste daher eigentlich den Dateinamen selber "richten". Habe ich gemacht und hat funktioniert... :D Danke für deine Hilfe...! Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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-2025 by Thomas Breitkreuz