title image


Smiley Re: Vor Öffnen feststellen, ob Passwortschutz aktiv (VB)
Hi,



falls Du die DOkumentenverschlüsselung (Passwortschutz zum Lesen) meinst, zwei Möglichkeiten:



1. Nicht elegant, aber einfach: Die Trial and Error-Methode



Probier das Dokument mit falschen Passwort zu öffnen. Ist es nicht verschlüsselt, kannst Du es öffnen, andernfalls den Laufzeitfehler abfangen.



Set myDoc = .Documents.Open(FName,,,,"Mr.#@~Murphy") ' mit falschem PW testen

If Err Then

If Err = 5408 Then

Msgbox FName & " ist passwortgeschützt"

Else

Msgbox FName & " konnte nicht geöffnet werden, Fehler: " & Err

End If

Else

Msgbox FName & " wurde geöffnet"

End if



2. Direktes Feststellen, ob das Dok verschlüsselt ist. Da Du in VBS keine Windows APIs, Interfaces etc. verwenden kannst, müßtest Du vorher eine geeignete ActiveX-DLL registieren, welche Dir in VBS ein COM-Objekt (CreateObject...) zur Abfrage nach der Verschlüsselung bereitstellt. Möglich ist dies z.B. über die DsOleFile.dll, aber auch mit eigenem Code.



In VB/VBA z.B.

Function CheckProt(ByVal FName As String) As Long

' returns 0 - ok, not protected

' 1 - error: no storage file

' 2 - error: storage file could not be opened

' 3 - error: no winword file

' 4 - error: protected winword file



Dim oStorage As IStorage, oStream As Istream

ReDim Fib(11) As Integer



If StgIsStorageFile(FName) Then CheckProt = 1: Exit Function

On Error Resume Next

Set oStorage = olelib.StgOpenStorage(FName, Nothing, STGM_READWRITE Or STGM_SHARE_EXCLUSIVE, vbNullString)

If Err Then CheckProt = 2: Exit Function

Set oStream = oStorage.OpenStream("WordDocument", 0, STGM_READWRITE Or STGM_SHARE_EXCLUSIVE)

If Err Then CheckProt = 3: Exit Function

oStream.Read Fib(0), 24

Set oStream = Nothing: Set oStorage = Nothing

' If (Fib(1) > 104) Then msgbox "hat Format WD97" else msgbox "hat Format WD6.0/95"

' Check Encryption

If (Fib(5) And &H100) Then CheckProt = 4 Else CheckProt = 0



End Function



Sub TestProt()



MsgBox CheckProt("C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\doc\bmptest.doc")



End SubIn VB/VBA bis einschl. Version 6 sind die für Windows-Programmierung so wichtigen Interfaces (deutsch "Schnittstellen") leider nicht verfügbar, weshalb Du zum Kompilieren für obigen Code eine TypeLibrary brauchst, welche diese "Lücken" ergänzt.

Eduardo Morcillo hat dankenswerterweise schon vor längerer Zeit eine solche TypeLib (OLELIB.TLB) für alle VB-"Geschädigten" bereitgestellt. Erst in VB.net ist die Verwendung von Interfaces endlich ohne Zusätze möglich.



Grüße

Wolfram

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: