Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Spezielles

Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26915, Antworten: 4218
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3326, Antworten: 122
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 312, Antworten: 19
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7643, Antworten: 185
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 20, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 23, Antworten: 0
Gehe zum ersten neuen Beitrag Acer Aspire 8745ZG fährt...
Aufrufe: 58, Antworten: 6
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 146, Antworten: 9
Gehe zum ersten neuen Beitrag avs4you_com Lizenz oder Abo?
Aufrufe: 71, Antworten: 4
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50944, Antworten: 1395
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12.05.2011, 11:34   #1 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard 64Bit Verknüpfungen auslesen

Ich benutze in etwa folgenden Code, um die Dateien auszulesen, auf die Verknüpfungen verweisen.
Code:
'Definitionen
 DEF MultiByteToWideChar(6) ! "Kernel32","MultiByteToWideChar"
 DEF CoInitialize(1)        ! "OLE32","CoInitialize"
 DEF CoUnInitialize(0)      ! "OLE32","CoUninitialize"
 DEF CoCreateInstance(5)    ! "OLE32","CoCreateInstance"
 Def Shgetpathfromidlist(2) !"SHELL32","SHGetPathFromIDListA"
 Def Shgetspecialfolderlocation(3) !"SHELL32","SHGetSpecialFolderLocation"
 
 
 'Konstanten
 DEF &PShell_Release     8
 DEF &PShell_GetPath 12
 DEF &PShell_Resolve 76
 DEF &PFile_Release 8
 DEF &PFile_Save 24
 DEF &PFile_Load 20
 DEF &Papierkorb $A
 DEF &Control_Panel $3
 DEF &DESKTOP $0
 DEF &DESKTOPDIRECTORY $10
 DEF &My_Computer $11
 DEF &FONTS $14
 DEF &Netzwerkumgebung $13
 DEF &NETZWERK $12
 DEF &EIGENE_DATEIEN $5
 DEF &Drucker $4
 DEF &Startmenü_Programme $2
 DEF &Letzte_Dokumente $8
 DEF &SENDTO $9
 DEF &STARTMENU $B
 DEF &Autostart $7
 DEF &TEMPLATES $15
 
 
 'globale Variablen
 Declare CLSID_IShellLink#
 Declare IID_IShellLink#
 Declare IID_IPersistFile#
 Declare FindData#
 Declare Counter&
 Declare SL$, SSS$, DesktopPath$, Verkn$, Autostart$
 
 
Proc GetLinkPath
 Parameters LNK$
 Declare Command&,Buffer$,PFile&
 Declare Pshell&
 Declare WideFile$
 Dim FindData#,320
 Dim CLSID_IShellLink#,16
 Long CLSID_IShellLink#,0 = $00021401
 Word CLSID_IShellLink#,4 = $0000
 Word CLSID_IShellLink#,6 = $0000
 Byte CLSID_IShellLink#,8 = $C0
 Byte CLSID_IShellLink#,9 = $00
 Byte CLSID_IShellLink#,10 = $00
 Byte CLSID_IShellLink#,11 = $00
 Byte CLSID_IShellLink#,12 = $00
 Byte CLSID_IShellLink#,13 = $00
 Byte CLSID_IShellLink#,14 = $00
 Byte CLSID_IShellLink#,15 = $46
 '
 Dim IID_IShellLink#,16
 Long IID_IShellLink#,0 = $000214EE
 Word IID_IShellLink#,4 = $0000
 Word IID_IShellLink#,6 = $0000
 Byte IID_IShellLink#,8 = $C0
 Byte IID_IShellLink#,9 = $00
 Byte IID_IShellLink#,10 = $00
 Byte IID_IShellLink#,11 = $00
 Byte IID_IShellLink#,12 = $00
 Byte IID_IShellLink#,13 = $00
 Byte IID_IShellLink#,14 = $00
 Byte IID_IShellLink#,15 = $46
 '
 Dim IID_IPersistFile#,16
 Long IID_IPersistFile#,0 = $0000010b
 Word IID_IPersistFile#,4 = $0000
 Word IID_IPersistFile#,6 = $0000
 Byte IID_IPersistFile#,8 = $C0
 Byte IID_IPersistFile#,9 = $00
 Byte IID_IPersistFile#,10 = $00
 Byte IID_IPersistFile#,11 = $00
 Byte IID_IPersistFile#,12 = $00
 Byte IID_IPersistFile#,13 = $00
 Byte IID_IPersistFile#,14 = $00
 Byte IID_IPersistFile#,15 = $46
 '
 CoInitialize(0)
 CoCreateInstance(CLSID_IShellLink#,0,1,IID_IShellLink#,Addr(PShell&))
 Command& = Long(Pshell&,0)
 CALL(LONG(COMMAND&,0),PShell&,IID_IPersistFile#,Addr(PFile&))'Interface ermitteln
 WideFile$ = Space$(Len(LNK$)*2)
 MultiByteToWideChar(0,1,addr(LNK$),-1,addr(WideFile$),Len(WideFile$))'LNK-File umwandeln
 Command& = Long(PFile&,0)
 CALL(LONG(COMMAND&,&PFile_Load),PFile&,Addr(WideFile$),1)'LinkFile laden
 Command& = Long(Pshell&,0)
 CALL(LONG(COMMAND&,&PShell_Resolve),PShell&,%hwnd,$3)
 Buffer$ = Space$(260)
 CALL(LONG(COMMAND&,&PShell_GetPath),PShell&,ADDR(Buffer$),260,FindData#,$1)'(Shortname)Pfad in Buffer$
 CALL(LONG(COMMAND&,&PShell_Release),PShell&)
 Command& = Long(PFile&,0)
 CALL(LONG(COMMAND&,&PFile_Release),PFile&)
 CoUnInitialize()
 Dispose CLSID_IShellLink#
 Dispose IID_IShellLink#
 Dispose IID_IPersistFile#
 Dispose FindData#
 Return LongName$(Buffer$)
EndProc
 
 
Proc GetShellFolder
   Parameters PRINT%,Folder&
   Declare Itemid&, Result#, Retstr$,ERR&
   Dim Result#, 261
   Clear Result#
   LET ERR&=Shgetspecialfolderlocation(%HWND,Folder&,@Addr(Itemid&))
   CASE PRINT%=1 : PRINT "RUCKGABE von Shgetspecialfolderlocation="+@STR$(ERR&)
   CASE ERR&=0 : LET Retstr$="Identifier wurde ermittelt, kein Pfad zu ermitteln..."
   LET ERR&=Shgetpathfromidlist(Itemid&,Result#)
   CASE PRINT%=1 : PRINT "RUCKGABE von Shgetpathfromidlist="+@STR$(ERR&)
   IF String$(Result#,0)<>""
    Retstr$ = String$(Result#,0)
   endif
   Dispose Result#
   Return Retstr$
Endproc
 
 
Counter& = 1
ClearList
DesktopPath$ = GetShellFolder(0,&Desktop)
Autostart$ = GetShellFolder(0,&Autostart)
AddFiles DesktopPath$+"\"+"*.LNK"
SL$ = MoveListToStr$(";")
SSS$ = " "
ClearList
Whilenot SSS$ = ""
 SSS$ = SUBSTR$(SL$,Counter&,";")
 IF SSS$<>""
  Verkn$ = GetLinkPath(DesktopPath$+"\"+SSS$)
  Addstring DesktopPath$+"\"+SSS$+": "+Verkn$
  Counter& = Counter& + 1
 endif
Wend
 
 
ClearList
AddFiles Autostart$+"\"+"*.LNK"
SL$ = MoveListToStr$(";")
SSS$ = " "
ClearList
Whilenot SSS$ = ""
 SSS$ = SUBSTR$(SL$,Counter&,";")
 IF SSS$<>""
  Verkn$ = GetLinkPath(Autostart$+"\"+SSS$)
  Addstring Autostart$+"\"+SSS$+": "+Verkn$
  Counter& = Counter& + 1
 endif
Wend
Editbox("Verknüpfungen in "+DesktopPath$,1)
Unter 32Bit klappt das alles ganz wunderbar. Verweist aber unter 64Bit eine Verknüfung in C:\Program Files, wird als Ziel aber C:\Program Files (x86) ausgeben (Umleitung des WOW64 Emulators). Gibt es eine Möglichkeit, auch mit einem 32Bit Programm an den richtigen Pfad zu kommen?
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 12.05.2011, 12:38   #2 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Auf die Art kannste mit CSIDL_PROGRAM_FILESX86 den 32-bit Ordner
unabhängig Deiner Exe ermitteln, oder mit CSIDL_PROGRAM_FILES den Ordner, abhängig von Deiner Exe.

Für Dein Vorhaben kannst Du nur mit "KNOWNFOLDERID" arbeiten:
KNOWNFOLDERID (Windows)
FOLDERID_ProgramFilesX64 bzw.GUID{6D809377-6AF0-444b-8957-A3773F02200E} entspricht Deinem Wunsch.

Der Rest ist dann hier: Known Folders (Windows) nachzulesen.

PS: Es macht recht wenig Sinn die Konstanten falsch zu benennen!
__________________
Gruß Thomas

Wenn mir früher jemand gesagt hätte, ich würde
freiwillig eine Wanze mit mir herum tragen und sie
auch noch selbst aufladen, hätte ich laut gelacht.

Heute habe ich ein Smartphone.


http://realsource.de
ts-soft ist offline   Mit Zitat antworten
Alt 12.05.2011, 12:52   #3 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Und was mach ich mit dem "Knownfolder" dann genau, wenn ich den habe?
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 12.05.2011, 12:59   #4 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Problem ist, das mir Resolve beide Pfade, C:\Program Files (x86) und C:\Program Files auf den selben Pfad mappt, nämlich C:\Program Files (x86).
Wie und wo bekomme ich die CSIDL des Pfades?
Resolve und GetPath springe ich da im Augenblick wohl an (wenn ich es richtig verstanden habe). Wie komme ich an was, das ich umwandeln kann?
Bin da im Augenblick Blind.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 12.05.2011, 13:27   #5 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Es gibt keine CSIDL für 64-Bit für 32-Bit Anwendungen. Du sollst dafür
SHGetKnownFolderPath nutzen. PS: Unicode! Dient nur der korrekten
Pfadermittlung. Die hab ich als das Problem verstanden. Ansonsten weiß ich
nicht, was Dein Code warum macht, hab ich nicht getestet und sehe ich
keinen nutzen für mich. Auf der MSDN Seite wirste wohl alleine weiterlesen
müssen.
__________________
Gruß Thomas

Wenn mir früher jemand gesagt hätte, ich würde
freiwillig eine Wanze mit mir herum tragen und sie
auch noch selbst aufladen, hätte ich laut gelacht.

Heute habe ich ein Smartphone.


http://realsource.de
ts-soft ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 12.05.2011, 13:43   #6 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Na ja - den korrekten Program Files Pfad zu ermitteln, ist auf jeden Fall nicht das Problem. Das Problem ist, dass mir dieses COM Objekt den falschen Pfad zur Datei liefert, mit dem die Verlinkung verknüpft ist. Der müsste eigentlich C:\Program Files sein, zurückgeliefert wird aber C:\Program Files (X86) - das wird aber auch zurückgeliefert, wenn der korrekte Pfad C:\Program Files (X86) ist.
Meine Frage ist also, ob das COM Objekt (das Problem taucht bei anderen COM Objekten in ähnlicher Weise auch auf) unter X64 mit einem 32Bit Programm gar nicht korrekt funktionieren kann, oder ob ich was übersehen habe.

PS: Wenn ich was übersehen habe, bitte so erklären, dass ein dummer Mensch wie ich das auch versteht.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 12.05.2011, 13:55   #7 (Direktlink)
Unregistriert
Gast
 
Beiträge: n/a
Standard

Schau mal hier, vielleicht hilft dir das weiter.

CSIDL (Windows)

Du könntest auch die Environment Variablen auslesen
  Mit Zitat antworten
Alt 12.05.2011, 14:25   #8 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Wie gesagt - das ist nicht das Problem.

Bitte testet das mal selbst...
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 12.05.2011, 16:15   #9 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Ich vermute mal, bzw. glaube fest, das ist nicht vorgesehen.
__________________
Gruß Thomas

Wenn mir früher jemand gesagt hätte, ich würde
freiwillig eine Wanze mit mir herum tragen und sie
auch noch selbst aufladen, hätte ich laut gelacht.

Heute habe ich ein Smartphone.


http://realsource.de
ts-soft ist offline   Mit Zitat antworten
Alt 14.05.2011, 09:57   #10 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Davon gehe ich auch aus. Ich werde das noch mit dem SYTEM32 / SYSWOW64 Ordner testen.
Kann eine böse Falle sein...
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan > Spezielles

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verknüpfungen - xyz.exe.lnk Thomas2010 Windows 7 0 29.10.2010 17:08
Kontrollkästchen-Verknüpfungen vistaneuling Office-Anwendungen 0 23.01.2010 11:51
Verknüpfungen uncled Windows XP 1 16.02.2007 15:10
Probleme mit Ink-VErknüpfungen Junior Windows XP 33 19.09.2004 11:17
Verknüpfungen Windows XP aiping Windows XP 2 11.06.2004 00:26



Alle Zeitangaben in WEZ +2. Es ist jetzt 06:10 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2