Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi IShellLink-Problem (https://www.delphipraxis.net/6609-ishelllink-problem.html)

CalganX 16. Jul 2003 16:51


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

CalganX 16. Jul 2003 16:55

Re: IShellLink-Problem
 
:wall: wirklich dumm muss man sein... :cry:

In dem Thread steht ja auch noch die Antwort... :wall:

Chris

Christian Seehase 16. Jul 2003 16:57

Re: IShellLink-Problem
 
Moin Chris,

wenn ich mich mal kurz aus diesem Thread zitieren darf:

Zitat:

Zitat von Christian Seehase
In Uses musst Du natürlich ActiveX und ShlObj aufnehmen.

Wenn ich mich nicht verzählt habe, 5. Posting von unten.

[EDIT]
Mist, wieder zu spät
[/EDIT]

CalganX 16. Jul 2003 17:36

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:
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;
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:
Zitat:

---------------------------
Error
---------------------------
Die Verknüpfung konnte nicht erstellt werden:
Das System kann den angegebenen Pfad nicht finden
---------------------------
OK
---------------------------
Erklären kann ich mir das nur, dass er ein Problem mit dem einfachem rundll32.exe.

Hast du eine Idee, Christian?

Chris

Christian Seehase 16. Jul 2003 18:17

Re: IShellLink-Problem
 
Moin Chris,

wie sieht den Deine Funktion CreateShortcut aus?

CalganX 16. Jul 2003 18:27

Re: IShellLink-Problem
 
Nicht großartig verändert:
Delphi-Quellcode:
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;
Chris

Christian Seehase 16. Jul 2003 18:40

Re: IShellLink-Problem
 
Moin Chris,

hast Du mal kontrolliert, an welcher Stelle die Funktion aussteigt?
Es gibt ja immerhin drei mögliche Stellen.

CalganX 16. Jul 2003 19:16

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 18:37 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