online 1
gast (50)

/ Forum / Anwendungen(Java,C++...)

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon knog12 vom 05.05.2022, 21:10 Options

vb6 programm geht nicht mehr unter windows 7

Hallo zusammen,

ich habe vor längerem ein Programm geschrieben, dass mir Dateien automatisch kopiert. Das Programm hat die Kopierfunktion von Windows genutzt. Leider geht es nun bei Windows 7 nicht mehr.

Woran könnte das denn liegen?

Gruß knog


Antwort schreiben

Antwort 1 von Marie vom 05.05.2022, 21:35 Options

Ich denke das kann man so nicht sagen, ohne Deinen Code zu kennen und ohne die Stelle, an der es nicht mehr läuft und mit welcher Fehlermeldung es aussteigt. Ich habe mehrere VB6 Programme, die laufen einwandfrei unter Windows 7.

Gruß Marie

Antwort 2 von knog12 vom 06.05.2022, 18:49 Options

naja, das Programm geht auf, man drückt den kopieren knopf und nichts passiert. Der Ordner in den die Daten kopiert werden sollen wird noch erstellt aber dann passiert nix.
Bisher ist dann immer das kopieren Fenster vom XP aufgegangen und die Dateien wurden kopiert.
Es muss ja irgendwie damit zusammenhängen, dass das kopieren bei Win 7 anders funktioniert, oder?

Gruß Knog

Antwort 3 von son_quatsch vom 07.05.2022, 07:32 Options

Wenn du von der Win32-Funktion CopyFile() sprichst solltest du natürlich auch prüfen, ob deren Aufruf erfolgreich war. Falls nicht, gibt dir GetLastError() eine weiterführende Fehlernummer zurück. Wenn du hingegen weiter so detaillos bleibst und auch nicht den relevanten Code mal posten willst (der Fehlschläge zu ignorieren scheint) wird das auch weiterhin nichts werden...

Antwort 4 von Luke_Filewalker vom 07.05.2022, 10:01 Options

Ja, ohne weitere Details wird das nur ein rumstochern im Dunkeln. Ab Windows Vista hat sich einiges geändert und es müssen teilweise alternative APIs verwendet werden bzw. anders definiert sein.

Ich habe ebenfalls mehrere VB6 Programme (Freeware) die unter Vista & 7 problemlos laufen. Bei manchen Funktionen mussten allerdings auch erst Anpassungen vorgenommen werden. Mit diesen Anpassungen sind VB6 Programme dann auch unter Windows 7 kein Problem.

Antwort 5 von knog12 vom 10.05.2022, 20:52 Options

so ... jetzt hab ich den Code gefunden, den ich damals eingesetzt hatte:



Const Verschieben = &H1&
Const Kopieren = &H2&
Const Löschen = &H3&

Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    Quelle As String
    Ziel As String
    DateiFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (lpFileOp As Any) As Long
    
Public Function FileOperation(Mode, Source As String, Dest As String, Abfrage, Sichtbar) As Boolean
    Dim lenFileop As Long
    Dim foBuf() As Byte
    Dim fileop As SHFILEOPSTRUCT
    lenFileop = LenB(fileop)
    ReDim foBuf(1 To lenFileop)
    With fileop
        .hwnd = Me.hwnd
        .wFunc = Mode
        .Quelle = Source & vbNullChar & vbNullChar & vbNullChar
        .Ziel = Dest & vbNullChar & vbNullChar
        If Abfrage = False Then .DateiFlags = &H10&
        If Sichtbar = False Then .DateiFlags = .DateiFlags Or &H4&
        .DateiFlags = .DateiFlags Or &H40&
    End With
    Call CopyMemory(foBuf(1), fileop, lenFileop)
    Call CopyMemory(foBuf(19), foBuf(21), 12)
    FileOperation = SHFileOperation(foBuf(1)) = 0
End Function

Private Sub Command1_Click()
    FileOperation Kopieren, "c:\temp", "C:\neutemp", False, True
End Sub

Private Sub Command2_Click()
    FileOperation Verschieben, "c:\temp", "C:\neutemp", False, True
End Sub

Private Sub Command3_Click()
    FileOperation Löschen, "c:\temp", "", False, True
End Sub

Private Sub Form_Load()
    Command1.Caption = "c:\temp nach c:\neutemp kopieren"
    Command2.Caption = "c:\temp nach c:\neutemp verschieben"
    Command3.Caption = "c:\temp löschen"
End Sub



vielleicht hilft das ja...

Grüße knog

Antwort 6 von Luke_Filewalker vom 11.05.2022, 12:13 Options

Wegen GetLastError: Das ist unter VB keine gute Idee:

Zitat:
Um dieser unter Visual Basic oft fälschlich verwendeten Vorgehensweise gleich einen Riegel vorzuschieben: GetLastError liefert Ihnen unter Visual Basic vielleicht, vielleicht aber auch nicht die korrekte Fehlernummer zurück - diese Funktion ist für Visual Basic Programmierer absolut tabu!


Stattdessen sollte LastDllError eingesetzt werden. Zu diesem Thema gibts zahlreiche Infos im Netz warum das so ist. Unter anderem auch direkt von Microsoft. Von der Seite stammt übrigens das Zitat.

SHFileOperation
Ich habe mit dieser API noch nie gearbeitet, deswegen kann ich zumindest nicht aus dem Stand heraus beantworten warum es nicht geht. Mir fällt nur auf, Du ermittelst als ReturnCode lediglich einen booleschen Wert und damit nur ob es geklappt hat oder nicht. Stattdessen solltest mal den tatsächlichen RC als Long ausgeben lassen um herauszukriegen WARUM es nicht funktioniert.

Eventuell hilft Dir auch dieser vb@archiv Tipp weiter, der diese API verwendet. Entweder Du leitest die dortige Funktionsweise für Deine Routine ab, oder verwendest gleich die fertigen Routinen. Funktionieren sollen diese Funktionen u.a. auch unter Vista, und damit stehen die Chancen sehr gut, dass es auch unter 7 klappt.

Ähnliche Themen

VBA in VB6 umwandeln?
dersuchendeX09  28.11.2009 - 705 Hits - 2 Antworten

VB6 LPT Port auslesen
fantasaufer  28.11.2009 - 355 Hits - 1 Antwort

VB6 Text einer MSBox eines anderen Programmes.
HerrFragtSich  06.10.2009 - 219 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026