ZIP Datei entpacken

Hallo,

ich möchte mit Visual Basic 6 ein Programm erstellen, dass automatisch Daten aus mehreren ZIP’s in ein bestimmtes, Verzeichnis zu entpacken. Am besten einfach das komplette ZIP-Archiv ohne jede Datei einzeln aufzählen zu müssen.

Gibt es da irgendeine Möglichkeit, dass das Programm auch auf einem Rechner ohne VB benutzt werden kann, ohne das eine DLL installiert werden muss?
Wenn man doch eine DLL benötigt, kann man die auf aus dem Programmverzeichnis aufrufen?

Eine Kleinigkeit währe da noch, gibt es eine Möglichkeit, den einzelnen Fortschritt jeweiles eines ZIP Archives und dann noch den gesammten Fortschritt aller ZIP Daten in so einer Leiste darzustellen?

MfG, DarkblaDe2308

Moin, DarkblaDe2308,

warum den Umweg über VB fahren? Such Dir einen Unpacker, der sich über die Commandline aufrufen lässt.

Wenn Du was verschicken möchtest, muss der Empfänger erstmal Deinen Unpacker installieren. Da liegt der Gedanke nahe, die Quasi-Standards zu benutzen.

Falls Programmieren Dein Hobby sein sollte: Ein Fortschrittsbalkem, auch progress bar genannt, tut so, als wüsste er, wie weit ein Programm vorangekommen ist. Du übergibst ihm in bestimmten Zeitabständen eine Prozentzahl.

Gruß Ralf

Hallo,

ohne DLL oder ActiveX gehts auch aber dann muesstest du den kompletten Algorithmus selber programmieren, und das gesammte drumherum. Wuerde wahrscheinlich etwas zu lange dauern.

Aber unter http://www.info-zip.org/ findest du ein OpenSource-Modul das du in VB einbinden kannst. Die entsprechende DLL kannst du dann in dein Programmverzeichnis ablegen.

Fortschrittsbalken gibt es doch als fertiges ActiveX in VB und edlos viele Varinaten findet man im Netz zum Download.

Tschau
Peter

Hallo,

PERFEKT! Das ist genau das was ich gesucht habe.

MfG, DarkblaDe2308

Hallo,

ich habe noch ein kleines Problem entdeckt,
ich Versuche die unzip.exe jetzt mit VB zu starten um das Archiv zu entpacken.

Shell App.Path + "\bin\unzip.exe -o -qq main.zip -d " + """" + setup + """", vbMinimizedNoFocus

Wenn ich diese Funktion ausführe, passiert einfach nichts.
Wenn ich mir den Pfad mit einer MsgBox ausgeben lasse, kommt folgendes raus:

D:\Daten\...\unzip.exe -o -qq main.zip -d "C:\....\Verzeichnis"

Wenn ich das bei cmd eingebe, entpackt er alles wie er soll.

Ich bin Ratlos.

MfG, DarkblaDe2308

ich habe noch ein kleines Problem entdeckt,
ich Versuche die unzip.exe jetzt mit VB zu starten um das
Archiv zu entpacken.

Shell App.Path + „\bin\unzip.exe -o -qq main.zip -d " + „““" +
setup + „“"", vbMinimizedNoFocus

Wenn ich diese Funktion ausführe, passiert einfach nichts.
Wenn ich mir den Pfad mit einer MsgBox ausgeben lasse, kommt
folgendes raus:

D:\Daten…\unzip.exe -o -qq main.zip -d
„C:…\Verzeichnis“

Wenn ich das bei cmd eingebe, entpackt er alles wie er soll.

Hi Dark,

ich glaub nicht daß ich dir weiterhelfen kann, aber ich probiere es.

Was mir spontan ins Auge sticht, du verbindest da Strings mit dem „+“ Zeichen, fiel mir letztens schon bei Rainer auf (aber kann mich auch irren, also daß er Cdbl-Werte mit „+“ verbunden hat und dann CStr drumgelgt hat), ich meine Strings sollten mit „&“ verbunden werden und Zahlen mit „+“.

Daß Excel-Vba oder VB von sich aus Umwandlungen vornehmen ist so, aber da hat man keine 100%-Garantie daß dies immer genauso passiert wie man es wünscht.

Ich kenne die Syntax/Parameter von unzip nicht, aber mich irritieren die mehrfachen „“"".
Was soll das sein?
Hintergrund ist uraltes Doswissen, d.h. zwischen dem was du bei Cmd eingibst und zwischen dem was du mit Shell aufrufst ist ggfs. ein Unterschied in der Schreibweise, grad mit den Anführungszeichen, daran hakt es oft.

Und grundsätzlich, „“"" ist nicht zu empfehlen, benutze bei sowas chr(34), das macht alles übersichtlicher als irgenwelche 2fach,3fach,4fach usw. Ansammlungen von AnführungszeichenGänsefüßchen.

Bohr an dieser Problematik, bin fast sicher daß es daran liegt daß der cmd-Aufruf klappt und der Shell-Aufruf nicht.

War jetzt nur Brainstorming, obs dir hilft weiß ich nicht.
Naja, dann vergess meinen Beitrag halt :smile:

Gruß
Reinhard

Hallo,

habe alles Mögliche ausprobiert, funktioniert nicht.

MfG, DarkblaDe2308

Hallo Reinhard,

Was mir spontan ins Auge sticht, du verbindest da Strings mit
dem „+“ Zeichen, fiel mir letztens schon bei Rainer auf (aber
kann mich auch irren, also daß er Cdbl-Werte mit „+“ verbunden
hat und dann CStr drumgelgt hat), ich meine Strings sollten
mit „&“ verbunden werden und Zahlen mit „+“.

richtig, das war Dir bei mir aufgefallen, ‚+‘ tippt sich bequemer als ‚&‘ und macht das Selbe. Nein, das ist nicht falsch.
Im Programm macht es keinen Unterschied, nur beim Tippen.
Tipp mal in der IDE …
1.) txt=txt+txt
2.) txt=txt&txt
… im ersten fall wird erkannt, was Du meinst, es werden an den richtigen stellen Leerzeichen eingefügt, im zweiten Fall nicht.
Deshalb verwende ich das ‚&‘ nicht, das ist eine mögliche Fehlerquelle beim schnell Tippen … Ich vertippe mich oft, weil ich nicht ‚richtig‘ tippen kann.

Daß Excel-Vba oder VB von sich aus Umwandlungen vornehmen ist
so, aber da hat man keine 100%-Garantie daß dies immer genauso
passiert wie man es wünscht.

Ich kenne die Syntax/Parameter von unzip nicht, aber mich
irritieren die mehrfachen „“"".

*gg* Das ist auch korrekt. :smile:

Versuch mal mit Replace die Anführungszeichen aus einem String zu entfernen.

Vermutlich erwartest Du daß es so geht:
Text = Replace (Text, Chr(37), „“)

Das habe ich auch gedacht, geht aber nicht. Aber so geht es:

Text = Replace (Text, „“"", „“)

Gruß Rainer

Hallo Darkblade,

ich habe noch ein kleines Problem entdeckt,
ich Versuche die unzip.exe jetzt mit VB zu starten um das
Archiv zu entpacken.

Ok

Shell App.Path + „\bin\unzip.exe -o -qq main.zip -d " + „““" +
setup + „“"", vbMinimizedNoFocus

Und da stecken schon viele Tuecken drinnen!
Erstens kann je nachdem ob du dich im Root Directory des Laufwerkes befindest, dir die Eigenschaft App.Path einen Backslash am Ende mitgeliefern oder auch nicht!(Gruss an Rainer, in diesem Sinne :smile: )
Auch sehe ich hier das du einfach Setup übergibst. Wo ist denn die Variable declariert und welchen Wert beinhaltet sie denn ?

Desweiteren verknuepft man Strings immer mit & und nicht mit einem + Zeichen :wink:
Desweiteren faellt mir auch auf das du einfach so Main.Zip angibst. Ist denn gewaehrleistet das die Main.zip genau im dem Directory liegt, wo du dich derzeit befindest? Auch dies würde ich überprüfen und ggfls. den Pfad dazu mit angeben!

An Deiner Stelle würde ich erst einmal den Pfad zusammenbasteln.
Dann prüfen ob die File’s existieren. Wenn die Vorraussetzungen gegeben sind, erst dann würde ich das Teil starten :wink:

Desweiteren würde ich auch von Shell abraten, denn da weisst du nie, was für Fehler aufgetreten sind :confused:
In dem Falle würde ich zur API ShellExecute raten :wink:
Wenn das alles immernoch nicht funktionieren sollte, versuche einfach mal das von der Console aus zu starten! Wenn das geht würde ich dann die Daten einfach in ein Batch File schreiben, dieses dann starten und im Anschluss daran wieder löschen :wink:

Aber lange Rede kurzer Sinn. Versuch die Variante mal.

Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( \_
 ByVal hwnd As Long, \_
 ByVal lpOperation As String, \_
 ByVal lpFile As String, \_
 ByVal lpParameters As String, \_
 ByVal lpDirectory As String, \_
 ByVal nShowCmd As Long) As Long

Private Const SW\_HIDE = 0
Private Const SW\_MAXIMIZE = 3
Private Const SW\_MINIMIZE = 6
Private Const SW\_NORMAL = 1
Private Const SW\_SHOW = 5
Private Const SW\_RESTORE = 9
Private Const SW\_SHOWMAXIMIZED = 3
Private Const SW\_SHOWMINIMIZED = 2
Private Const SW\_SHOWMINNOACTIVE = 7
Private Const SW\_SHOWNA = 8
Private Const SW\_SHOWNOACTIVATE = 4
Private Const SW\_SHOWNORMAL = 1

Private Const ERROR\_BAD\_FORMAT = 11&
Private Const SE\_ERR\_ACCESSDENIED = 5
Private Const SE\_ERR\_ASSOCINCOMPLETE = 27
Private Const SE\_ERR\_DDEBUSY = 30
Private Const SE\_ERR\_DDEFAIL = 29
Private Const SE\_ERR\_DDETIMEOUT = 28
Private Const SE\_ERR\_DLLNOTFOUND = 32
Private Const SE\_ERR\_FNF = 2
Private Const SE\_ERR\_NOASSOC = 31
Private Const SE\_ERR\_OOM = 8
Private Const SE\_ERR\_PNF = 3
Private Const SE\_ERR\_SHARE = 26

Public Function RunFile(Handle As Long, sFile As String, Parameter As String, Optional ShowError As Boolean = True) As Boolean
Dim Retval As Long
 Dim sFolder As String
 Dim sDrive As String
 Dim sFilename As String
 Call SplitPath(sFile, sDrive, sFolder, sFilename)
 Retval = ShellExecute(Handle, "open", sFile, Parameter, sFolder, SW\_SHOWMINIMIZED)
 Select Case Retval
 'Hier kannst du alle Fehler abfragen ...
 Case SE\_ERR\_NOASSOC
 If ShowError Then MsgBox "Datei ist nicht Assizoiert", vbInformation, "Fehler"
 Exit Function
 Case SE\_ERR\_PNF
 If ShowError Then MsgBox "Pfad wurde nicht gefunden", vbInformation, "Fehler"
 Exit Function
 Case SE\_ERR\_FNF
 If ShowError Then MsgBox "Datei wurde nicht gefunden", vbInformation, "Fehler"
 Exit Function
 Case 8, 26, 32, 28, 29, 30, 27, 5, 11 ' alle anderen Fehler
 Exit Function
 End Select
RunFile = True
End Function

Public Function FileExists(Path As String) As Boolean
On Error Resume Next
 Const NotFile = vbDirectory Or vbVolume
 FileExists = (GetAttr(Path) And NotFile) = 0
On Error GoTo 0
End Function

Private Sub DeineSubDieDuAufrufst()
Dim sFile As String
 sFile = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\") & "bin\unzip.exe"
 If Not FileExists(sFile) Then
 MsgBox "File unzip.exe not Found!", 16
 Exit Sub
 End If
 If Not FileExists("main.zip") Then
 MsgBox "File Main.zip not Found!", 16
 Exit Sub
 End If
 If RunFile(Me.hwnd, sFile, "-o -qq main.zip -d " & """" & setup & """", True) Then MsgBox "Dateien erfolgreich entpackt :smile:"
End Sub

Public Sub SplitPath(ByVal sFullPath As String, \_
 sDrive As String, sFolder As String, sFilename As String)
 Dim nPos As Long
 Dim sCurDir As String
 If Mid$(sFullPath, 2, 1) = ":" Then
 sDrive = Left$(sFullPath, 2)
 sFullPath = Mid$(sFullPath, 3)
 End If
 nPos = InStrRev(sFullPath, "\")
 If nPos \> 0 Then
 sFolder = Left$(sFullPath, nPos - 1)
 If sFolder = "" Then sFolder = "\"
 sFilename = Mid$(sFullPath, nPos + 1)
 Else
 sFilename = sFullPath
 sCurDir = CurDir$
 If sDrive = "" Then
 sDrive = Left$(sCurDir, 2)
 sFolder = Mid$(sCurDir, 3)
 Else
 ChDrive sDrive
 sFolder = Mid$(CurDir$, 3)
 ChDrive Left$(sCurDir, 2)
 End If
 End If
End Sub

Ist ungetestet, aber sollte funktionieren :smile:

Wenn ich diese Funktion ausführe, passiert einfach nichts.
Wenn ich mir den Pfad mit einer MsgBox ausgeben lasse, kommt
folgendes raus:

D:\Daten…\unzip.exe -o -qq main.zip -d
„C:…\Verzeichnis“

und die Main.Zip liegt in dem Directory wo du dich derzeit befindest?

Wenn ich das bei cmd eingebe, entpackt er alles wie er soll.

Ok, das kann daran liegen das du dich im Directory befunden hast, wo die Main,.zip liegt :wink:

Ich bin Ratlos.

Ich habe dir genuegend Hinweise gegeben. Befolge diese mal alle und schaue mal ob es dann geht. Wenn nicht, welchen Wert gibt dir denn ShellExecute wieder ?

MfG, DarkblaDe2308

MfG Alex

2 Like

Hi,

ich hatte mal ein ähnliches Problem, mit VBA unter Excel, hoffe dass sich das im Bezug auf Shell genau so verhält wie bei dir!

  1. Läuft den dein Programm, wenn du es mit Einzelschritten ausführst?
    Das ging bei mir nämlich problemlos, nur im normalen Durchlauf ging es nicht.
    Ich vermute, dass Shell nicht mehrfach gleichzeitig aufgerufen werden kann, und immer der ältere Befehl abgebrochen wird, deshalb muß mal eine „Warteschleife“ einfügen, bei mir sah das dann so aus.

    s= shell …
    wait(s)

    Function Wait(ByRef lPid)
    Dim SYNCHRONIZE As Long
    Dim INFINITE As Integer ’ Wait forever
    SYNCHRONIZE = &H100000
    INFINITE = &HFFFF
    Dim lHnd As Long
    Dim lRet As Long
    If lPid 0 Then
    lHnd = OpenProcess(SYNCHRONIZE, 0, lPid) 'Get a handle to the shelled process.
    If lHnd 0 Then 'If successful, wait for the application to end and close the handle.
    lRet = WaitForSingleObject(lHnd, INFINITE)
    CloseHandle (lHnd)
    End If
    End If
    End Function

    Declare Function OpenProcess Lib „kernel32“ ( _
    ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

    Declare Function WaitForSingleObject Lib „kernel32“ ( _
    ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

    Declare Function CloseHandle Lib „kernel32“ ( _
    ByVal hObject As Long) As Long

  2. Schau mal in deinem „Standardausgabeverzeichniss“ (bei mir war´s „c:\benutzer…\documente“) nach, da hat mir mein shell nämlich alles hingeschrieben!
    SetCurrentDirectory (pfad)
    hat mir da sehr geholfen!

Hoffe etwas geholfen zu haben

Gruß Zondan

Hallo,

mit der ShellExecute-Funktion macht er jetzt fast alles, wie er soll.
Allerdings funktioniert die Reihenfolge nicht wie sie soll.
Wenn ich 10 mal die unzip aufrufe, mit jeweils verschiedenen Parametern damit entpackt wird, führt er diese Funktionen nicht hintereinander aus, sondern alle gleichzeitig.

Kann man es machen, dass ShellExecute an VB zurückgibt, wenn die EXE wieder geschlossen ist? Oder kann man überprüfen, wann sie nicht mehr gestartet ist?

MfG, DarkblaDe2308

Hallo Darkblade,

hast du auch die anderen Bugs entfernt, die ich dir genannt habe und ging der Source so, weil er net getestet war!
Du muesstest die prozess ID ermitteln, dann koennte man sowas realisieren. Das wiederrum macht sich mittels der API ShellExecuteEx am besten. Aber da kommt es darauf, auf welchen OS es laufen soll!

Ist es denn unbedingt nötig? Dann mache ich mir mal einen Kopf :wink:
Gibt sicher noch die ein oder andere API die das auch kann. Also das warten auf Prozess Ende :smile:

MfG Alex

1 Like

Hallo,

der Source hat einwandfrei funktioniert. Nachdem ich den kompletten Pfad zu zip angegeben hatte. Da die ZIP allerdings im gleichen Verzeichnis wie die unzip EXE liegt, ist eine komplette Pfadangabe nicht nötig.

Ich kenne mich noch nicht so gut mit Visual Basic aus, habe bei Google auch schon nach einer Möglichkeit gesucht, ich weiß jetzt zwar in etwa, was ShellExecuteEx macht, allerdings nicht, wie ich das in das Projekt einfüge damit es einen Wert zurückgibt, ob der Prozess geöffnet oder geschlossen ist.

MfG, DarkblaDe2308

Hallo Darkblade,

der Source hat einwandfrei funktioniert. Nachdem ich den
kompletten Pfad zu zip angegeben hatte. Da die ZIP allerdings
im gleichen Verzeichnis wie die unzip EXE liegt, ist eine
komplette Pfadangabe nicht nötig.

Erstmal ist es schoen das es Funktioniert :smile:
Aber du hast einen Denkfehler!

Gehen wir mal von folgender Situation aus
Du befindest dich im Verzeichnis „c:\Windows“
Deine Unzip.exe liegt aber in "c:\MeineDaten\Unzip.exe!
Dein Zip File liegt dann ergo in „c:\MeineDaten\Main.zip“

Nun startest du Unzip.exe. Du uebergibst den Pfad. Also

c:\MeineDaten\Unzip.exe DeineParameter Main.zip DeineParameter.
Das bedeutet das nach der Main.Zip nicht in „c:\MeineDaten“ geschaut wird, sondern in dem Verzeichnis wo du dich befindest. Sprich es wird in „c:\Windows“ geschaut. Dort wird sie natuerlich nicht gefunden!
Von daher immer überprüfen und ggfls. den Pfad vorher wechseln oder diesen mit angeben!

Ich kenne mich noch nicht so gut mit Visual Basic aus, habe
bei Google auch schon nach einer Möglichkeit gesucht, ich weiß
jetzt zwar in etwa, was ShellExecuteEx macht, allerdings
nicht, wie ich das in das Projekt einfüge damit es einen Wert
zurückgibt, ob der Prozess geöffnet oder geschlossen ist.

Also, dazu musst du das alles nen bissl umbasteln :smile:
ShellExecuteEx macht eigentlich das selbe wie ShellExectute. Nur mit dem Unterschied, das wir mehr Infos bekommen. Unter anderem auch das Handle von Unzip.exe.

Ich poste dir mal ein Simples Bsp. wie es ausschauen könnte. Anpassen musst du es dann noch :smile:

Option Explicit

Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (lpExecInfo As SHELLEXECUTEINFO) As Long
Private Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Type SHELLEXECUTEINFO
 cbSize As Long
 fMask As Long
 hwnd As Long
 lpVerb As String
 lpFile As String
 lpParameters As String
 lpDirectory As String
 nShow As Long
 hInstApp As Long
 lpIDList As Long
 lpClass As String
 hkeyClass As Long
 dwHotKey As Long
 hIcon As Long
 hProcess As Long
End Type

Private Sub Command1\_Click()
Dim Info As SHELLEXECUTEINFO
Dim vRet As Long
 With Info
 .cbSize = Len(Info)
 .fMask = SEE\_MASK\_NOCLOSEPROCESS'Deine Flags
 .hwnd = Me.hwnd
 .lpVerb = "open"
 .lpFile = Dein File
 .lpParameters = DeineParameter
 .lpIDList = 0
 .nShow = 1 'Wie soll es angezeigt werden
 .dwHotKey =DeinHotkey wenn du magst
 .hIcon =Dein Icon wenn du magst
 End With
 vRet = ShellExecuteEx(Info)
 If vRet = 0 Then
 'Fehler bei Ausführung, hier kannst du alle Fehler abfangen!
 Select Case Info.hInstApp
 Case 3
 'Pfad nicht gefunden
 End Select
 Else
 Do
 DoEvents
 Loop Until WaitForSingleObject(Info.hProcess, 0) 

Wie du siehst ist es recht einfach :smile:
Wenn du gewisse Sachen nicht brauchst, wie zum Bsp. Das Icon oder den Hotkey dann lasse das einfach weg :smile:

So nun noch die gewissen Konstanten die du einsetzen kannst
Wenn du mehrere Flags verwenden möchtest so kannst du sie mit dem OR Operator verbinden.
Sprich 

SEE\_MASK\_FLAG\_NO\_UI OR SEE\_MASK\_NOCLOSEPROCESS 



    
    fMask:
    
    Private Const SEE\_MASK\_CLASSKEY = &H3 ' Struktur wird mit dem Handle des Registry -
    ' Schlüssels für die Klasse gefüllt
    Private Const SEE\_MASK\_CLASSNAME = &H1 ' Struktur wird mit dem Klassennamen oder GUID 
    ' gefüllt der die Datei beschreibt
    Private Const SEE\_MASK\_CONNECTNETDRV = &H80 ' Struktur verbindet den PC mit einem 
    ' Netzlaufwerk falls nötig, lpFile muss der UNC-Pfadname in dem Netzwerk sein
    Private Const SEE\_MASK\_DOENVSUBST = &H200 ' Struktur wird mit Umgebungsvariablen des 
    ' Programms gefüllt, diese werden in lpDirectory oder lpFile gepackt
    Private Const SEE\_MASK\_FLAG\_DDEWAIT = &H100 ' die Funktion wartet, dass die DDE ihre 
    ' Vorgänge abgeschlossen hat und kehrt dann erst zurück
    Private Const SEE\_MASK\_FLAG\_NO\_UI = &H400 ' die Funktion zeigt keine 
    ' Fehler-Dialogboxen an
    Private Const SEE\_MASK\_HOTKEY = &H20 ' dwHotkey wird gefüllt
    Private Const SEE\_MASK\_ICON = &H10 ' hIcon wird gefüllt mit dem Icon-Handle des 
    ' Standard-Icons der Anwendung
    Private Const SEE\_MASK\_IDLIST = &H4 ' benutzt die lpIDLIST-Option um das Programm zu 
    ' starten, das in ihr beschrieben ist
    Private Const SEE\_MASK\_INVOKEIDLIST = &HC ' benutzt die lpIDLIST-Option um das 
    ' Programm zu starten, das in ihr beschrieben ist
    Private Const SEE\_MASK\_NOCLOSEPROCESS = &H40 ' füllt die Struktur-Option hProcess 
    ' mit dem Process-Handle der gestarteten Anwendung
    
    'nShow-Konstanten
    Private Const SW\_HIDE = 0 ' versteckt das Fenster
    Private Const SW\_MAXIMIZE = 3 ' maximiert das Fenster
    Private Const SW\_MINIMIZE = 6 ' minimiert das Fenster
    Private Const SW\_RESTORE = 9 ' stellt das Fenster wieder her
    Private Const SW\_SHOW = 5 ' zeigt das Fenster an
    Private Const SW\_SHOWMAXIMIZED = 3 ' zeigt das Fenster maximiert an
    Private Const SW\_SHOWMINIMIZED = 2 ' zeigt das Fenster minimiert an
    Private Const SW\_SHOWMINNOACTIVE = 7 ' zeigt das Fenster minimiert an, aber aktiviert 
    ' es nicht
    Private Const SW\_SHOWNA = 8 ' zeigt das Fenster an, aber aktiviert es nicht
    Private Const SW\_SHOWNOACTIVATE = 4 ' zeigt das Fenster in der besten Größe und 
    ' Position an, aber aktiviert es nicht
    Private Const SW\_SHOWNORMAL = 1 ' zeigt das Fenster ganz normal an
    
    ' hInstApp Rückgabe-Konstanten
    Private Const SE\_ERR\_ACCESSDENIED = 5 ' Zugriff verweigert
    Private Const SE\_ERR\_ASSOCINCOMPLETE = 27 ' Dateityp ist nicht ausreichend assoziiert
    Private Const SE\_ERR\_DDEBUSY = 30 ' DDE konnte nicht gestartet werden
    Private Const SE\_ERR\_DDEFAIL = 29 ' DDE ist gescheitert
    Private Const SE\_ERR\_DDETIMEOUT = 28 ' DDE-Zeitlimit wurde ereicht
    Private Const SE\_ERR\_DLLNOTFOUND = 32 ' eine benötigte Dll wurde nicht gefunden
    Private Const SE\_ERR\_FNF = 2 ' Datei wurde nicht gefunden
    Private Const SE\_ERR\_NOASSOC = 31 ' Dateityp ist nicht assoziiert
    Private Const SE\_ERR\_OOM = 8 ' nicht genügend Speicher verfügbar
    Private Const SE\_ERR\_PNF = 3 ' Pfad wurde nicht gefunden
    Private Const SE\_ERR\_SHARE = 26 ' Datei konnte nicht geöffnet werden, da sie bereits 
    ' verwendet wird
     
    'dwHotKey-Konstanten
    Private Const HOTKEYF\_ALT = &H4 ' benutzt ALT für den Hotkey
    Private Const HOTKEYF\_CONTROL = &H2 ' benutzt STRG für den Hotkey
    Private Const HOTKEYF\_EXT = &H8 ' benutzt den Extendend-Key für den Hotkey
    Private Const HOTKEYF\_SHIFT = &H1 ' benutzt Shift für den Hotkey
     
    ' WaitForSingleObject dwMillisekond-Konstante
    Private Const INFINITE = &HFFFF ' unendlich warten
     
    ' WaitForSingleObject Rückgabe-Konstanten
    Private Const WAIT\_ABANDONED = &H80 ' der Mutex, der in hHanlde angegeben ist wird 
    ' nicht freigegeben, so lange der Eltern-Thread zerstört ist. Der Mutex ist nun 
    ' Bestandteil des aufrufenden Threads und ist nicht mehr im signalisierenden Status
    Private Const WAIT\_FAILED = &HFFFFFFFF ' die Funktion ist gescheitert
    Private Const WAIT\_OBJECT\_0 = &H0 ' das Objekt. das in hHandle spezifiziert ist, 
    ' ist in einem signalisierendem Status
    Private Const WAIT\_TIMEOUT = &H102 ' das Zeitlimit für eine Änderung des 
    ' Thread-Statuses ist abgelaufen




MfG Alex
1 Like