Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    15

    [VB] Come utilizzare WIMGAPI.dll correttamente?

    Salve a tutti!
    Sto cercando di realizzare un tool di ripristino di Windows in VB ma ho un problema: voglio aggiungere una progress bar che mi indica l'avanzamento del processo di ripristino, ovvero l'applicazione dell'immagine .WIM alla partizione C:\, tramite il tool ImageX ovviamente. Ho letto che l'unico modo per farlo è utilizzare le librerie WIMGAPI.dll, ma visto che le mie conoscenze in VB sono decisamente scarse non ho idea di come procedere. Ho trovato del codice su internet ma non ho idea di come impiegarlo. E' questo:


    1. Private Declare Auto Function WIMCreateFile _
    2. Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
    3. <MarshalAs(UnmanagedType.LPWStr)> ByVal WIMPath As String, _
    4. ByVal AccessType As Integer, ByVal Creation As UInt32, _
    5. ByVal Flags As UInt32, ByVal Compression As UInt32, _
    6. ByRef CreationResult As Integer) As IntPtr
    7. Private Declare Auto Function WIMCloseHandle _
    8. Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
    9. ByVal Handle As IntPtr) As Boolean
    10. Private Declare Auto Function WIMApplyImage _
    11. Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
    12. ByVal hWnd As IntPtr, _
    13. <MarshalAs(UnmanagedType.LPWStr)> ByVal DestinationPath As String, _
    14. ByVal ApplyFlags As UInt32) As Integer
    15. Private Declare Auto Function WIMLoadImage _
    16. Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
    17. ByVal hWnd As IntPtr, _
    18. ByVal ImageIndex As UInt32) As IntPtr
    19. Private Declare Auto Function WIMSetTemporaryPath _
    20. Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
    21. ByVal hWnd As IntPtr, _
    22. <MarshalAs(UnmanagedType.LPWStr)> ByVal TemporaryPath As String) As Integer
    23. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    24. Dim intResult As Integer
    25. Dim ptrWIMHandle As IntPtr
    26. Dim ptrImageHandle As IntPtr
    27. ptrWIMHandle = WIMCreateFile("C:\test.wim", 8, 3, 0, 0, Nothing)
    28. WIMSetTemporaryPath(ptrWIMHandle, "C:\Temp")
    29. ptrImageHandle = WIMLoadImage(ptrWIMHandle, 1)
    30. intResult = WIMApplyImage(ptrImageHandle, "C:\WIMTemp", 0)
    31. 'intResult = 0 and GetLastWin32Error() = 4390
    32. MsgBox("Just applied image. result = " & intResult & vbCrLf & "Last Win32 error = " & GetLastWin32Error())
    33. WIMCloseHandle(ptrImageHandle)
    34. WIMCloseHandle(ptrWIMHandle)
    35. End Sub



    A quanto ho capito per applicare l'immagine non posso utilizzare direttamente la funzione WIMApplyImage ma prima devo ottenere il percorso dell'immagine con WIMCreateFile, poi devo settare una cartella temporanea e infine utilizzare WIMApplyImage per applicare l'immagine.
    Il fatto è che buttando dentro il codice in un Form vuoto e aggiungendo un pulsante "Button1" , se lo premo non accade nulla. Ovviamente prima mi sono assicurato che "WIMGAPI.dll" si trovasse nella giusta directory e che il file "C:\test.wim" esistesse.

    Potete aiutarmi?

    NB: Attualmente sto realizzando il software con VB 2008 Express ma la versione finale sarà in VB6 per problemi di compatibilità con .NET Framework, quindi mi piacerebbe trovare una soluzione funzionante su entrambi gli IDE.

    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Farlo in VB6 è una pessima idea. Farlo copiando codice da internet senza comprenderlo è ancora peggio...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.