Aktuelle Zeit: 25.10.2020 16:26

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Verknüpfungen auslesen
BeitragVerfasst: 28.07.2005 12:52 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
Hallo,

hab euch mal wieder was gebastelt. Wenn ihr den unteren Code ausführt, achtet darauf, dass ihr den Dateinamen in
Code:
GetShellLinkInfo("C:\Dokumente und Einstellungen\Daniel\Desktop\Trillian.lnk", @SLI.ShellLinkInfo)

angepasst und den Debugger eingeschaltet habt.

Code:
Structure ShellLinkInfo
  ;Longs
  IconIndex.l
  ShowCmd.l
  Hotkey_VK.l
  Hotkey_MOD.l
 
  ;Strings
  Target.s
  Description.s
  WorkingDirectory.s
  Arguments.s
  IconLocation.s
EndStructure

Procedure.l LowByte(Word.w)
  ProcedureReturn PeekB(@Word  )
EndProcedure

Procedure.l HighByte(Word.w)
  ProcedureReturn PeekB(@Word+1)
EndProcedure

Procedure GetShellLinkInfo(ShellLink.s, *p.ShellLinkInfo)
   Dim LinkFile.w(Len(ShellLink))
   MultiByteToWideChar_(#CP_ACP, 0, ShellLink, -1, LinkFile(), Len(ShellLink)) ;We need a WideChar version of the ShellLink.s
   
   *Buf = AllocateMemory(1024)
   Hotkey.w = 0
   
   Result = 0
   If *Buf <> 0
   CoInitialize_(0)
   If CoCreateInstance_(?CLSID_ShellLink,0,1,?IID_IShellLink,@psl.IShellLinkA) >= 0
     If psl\QueryInterface(?IID_IPersistFile, @ppf.IPersistFile) >= 0
       If ppf\Load(@LinkFile(), 1) >= 0 ;Icon loaded?
         
         ;Get the target
         psl\GetPath(*Buf, 1024, 0, 0)
         *p\Target = PeekS(*Buf)
         RtlFillMemory_(*Buf, 1024, 0)
         
         ;Get the description
         psl\GetDescription(*Buf, 1024)
         *p\Description = PeekS(*Buf)
         RtlFillMemory_(*Buf, 1024, 0)
         
         ;Get the working directory
         psl\GetWorkingDirectory(*Buf, 1024)
         *p\WorkingDirectory = PeekS(*Buf)
         RtlFillMemory_(*Buf, 1024, 0)
         
         ;Get the arguments
         psl\GetArguments(*Buf, 1024)
         *p\Arguments = PeekS(*Buf)
         RtlFillMemory_(*Buf, 1024, 0)
         
         ;Get the hotkey
         psl\GetHotkey(@Hotkey)
         *p\Hotkey_VK  = LowByte (Hotkey)
         *p\Hotkey_MOD = HighByte(Hotkey)
         
         ;Get the showcommand
         addr = *p
         psl\GetShowCmd(addr+4)
         
         ;Get the icon file and the icon index
         psl\GetIconLocation(*Buf, 1024, *p)
         *p\IconLocation = PeekS(*Buf)
         ;RtlFillMemory_(*Buf, 1024, 0) ;<- We don't need this here
         
         
         ;Result will be 1 because we have finished the processing
         Result = 1
       EndIf
       ppf\Release()
     EndIf
     psl\Release()
   EndIf
   CoUninitialize_()
   
   FreeMemory(*Buf)
   EndIf
   
   ProcedureReturn Result
   
   
   
   DataSection
     CLSID_ShellLink:
       ; 00021401-0000-0000-C000-000000000046
       Data.l $00021401
       Data.w $0000,$0000
       Data.b $C0,$00,$00,$00,$00,$00,$00,$46
     IID_IShellLink:
       ; DEFINE_SHLGUID(IID_IShellLinkA,         0x000214EEL, 0, 0)
       ; C000-000000000046
       Data.l $000214EE
       Data.w $0000,$0000
       Data.b $C0,$00,$00,$00,$00,$00,$00,$46
     IID_IPersistFile:
       ; 0000010b-0000-0000-C000-000000000046
       Data.l $0000010b
       Data.w $0000,$0000
       Data.b $C0,$00,$00,$00,$00,$00,$00,$46
   EndDataSection
   
EndProcedure

GetShellLinkInfo("C:\Dokumente und Einstellungen\Daniel\Desktop\Trillian.lnk", @SLI.ShellLinkInfo)
Debug SLI\Target
Debug SLI\Description
Debug SLI\WorkingDirectory
Debug SLI\Arguments
Debug SLI\IconLocation
Debug SLI\IconIndex

_________________
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.07.2005 16:12 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright: Interessante Sache, vor allem bei diesen speziellen Verknüpfungen die mit einer GUID arbeiten und immer irgendwie auf Installer verweisen :freak: Die mag ich nicht. Entweder installieren sie sich neu nach verschieben oder geben Fehlermeldungen raus.

Ist auf jedenfall was für's CodeArchiv, denke ich

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye