Преобразование жесткого диска Последовательный код # VB6 в код VB.NET

Поскольку вы уже предварительно выбираете ProductImage объекты, вы можете использовать предварительно выбранные объекты: {% with product.image.all|first as image %}{{ image.image_thumbnail_index.url }}(% endwith %}. (При вызове first() делает дополнительный запрос, используя LIMIT 1 в конце.)

5
задан Joel Coehoorn 10 November 2008 в 15:35
поделиться

6 ответов

Я нашел его! Вот эквивалентный код VB.NET. Это не точно преобразованная версия кода VB6, но делает то же самое.Приятного отдыха!

Public Class HDDInfo
#Region " Declatrations "
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByVal lpSecurityAttributes As Integer, ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As Integer
<System.Runtime.InteropServices.DllImport("kernel32.dll")> _
Private Shared Function CloseHandle(ByVal hObject As Integer) As Integer
End Function
<System.Runtime.InteropServices.DllImport("kernel32.dll")> _
Private Shared Function DeviceIoControl(ByVal hDevice As Integer, ByVal dwIoControlCode As Integer, <[In](), Out()> ByVal lpInBuffer As SENDCMDINPARAMS, ByVal lpInBufferSize As Integer, <[In](), Out()> ByVal lpOutBuffer As SENDCMDOUTPARAMS, ByVal lpOutBufferSize As Integer, _
 ByRef lpBytesReturned As Integer, ByVal lpOverlapped As Integer) As Integer
End Function
Private Const FILE_SHARE_READ As Short = &H1
Private Const FILE_SHARE_WRITE As Short = &H2
Private Const GENERIC_READ As Integer = &H80000000
Private Const GENERIC_WRITE As Integer = &H40000000
Private Const OPEN_EXISTING As Short = 3
Private Const CREATE_NEW As Short = 1
Private Const VER_PLATFORM_WIN32_NT As Integer = 2
Private Const DFP_RECEIVE_DRIVE_DATA As Integer = &H7C088
Private Const INVALID_HANDLE_VALUE As Integer = -1
#End Region
#Region " Classes "
<StructLayout(LayoutKind.Sequential, Size:=8)> _
Private Class IDEREGS
    Public Features As Byte
    Public SectorCount As Byte
    Public SectorNumber As Byte
    Public CylinderLow As Byte
    Public CylinderHigh As Byte
    Public DriveHead As Byte
    Public Command As Byte
    Public Reserved As Byte
End Class
<StructLayout(LayoutKind.Sequential, Size:=32)> _
Private Class SENDCMDINPARAMS
    Public BufferSize As Integer
    Public DriveRegs As IDEREGS
    Public DriveNumber As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> _
    Public Reserved As Byte()
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
    Public Reserved2 As Integer()
    Public Sub New()
        DriveRegs = New IDEREGS()
        Reserved = New Byte(2) {}
        Reserved2 = New Integer(3) {}
    End Sub
End Class
<StructLayout(LayoutKind.Sequential, Size:=12)> _
Private Class DRIVERSTATUS
    Public DriveError As Byte
    Public IDEStatus As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
    Public Reserved As Byte()
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
    Public Reserved2 As Integer()
    Public Sub New()
        Reserved = New Byte(1) {}
        Reserved2 = New Integer(1) {}
    End Sub
End Class
<StructLayout(LayoutKind.Sequential)> _
Private Class IDSECTOR
    Public GenConfig As Short
    Public NumberCylinders As Short
    Public Reserved As Short
    Public NumberHeads As Short
    Public BytesPerTrack As Short
    Public BytesPerSector As Short
    Public SectorsPerTrack As Short
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> _
    Public VendorUnique As Short()
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=20)> _
    Public SerialNumber As Char()
    Public BufferClass As Short
    Public BufferSize As Short
    Public ECCSize As Short
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> _
    Public FirmwareRevision As Char()
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=40)> _
    Public ModelNumber As Char()
    Public MoreVendorUnique As Short
    Public DoubleWordIO As Short
    Public Capabilities As Short
    Public Reserved1 As Short
    Public PIOTiming As Short
    Public DMATiming As Short
    Public BS As Short
    Public NumberCurrentCyls As Short
    Public NumberCurrentHeads As Short
    Public NumberCurrentSectorsPerTrack As Short
    Public CurrentSectorCapacity As Integer
    Public MultipleSectorCapacity As Short
    Public MultipleSectorStuff As Short
    Public TotalAddressableSectors As Integer
    Public SingleWordDMA As Short
    Public MultiWordDMA As Short
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=382)> _
    Public Reserved2 As Byte()
End Class
<StructLayout(LayoutKind.Sequential)> _
Private Class SENDCMDOUTPARAMS
    Public BufferSize As Integer
    Public Status As DRIVERSTATUS
    Public IDS As IDSECTOR
    Public Sub New()
        Status = New DRIVERSTATUS()
        IDS = New IDSECTOR()
    End Sub
End Class
#End Region
#Region " Methods and Functions "
Private Shared Function SwapChars(ByVal chars As Char()) As String
    For i As Integer = 0 To chars.Length - 2 Step 2
        Dim t As Char
        t = chars(i)
        chars(i) = chars(i + 1)
        chars(i + 1) = t
    Next
    Dim s As New String(chars)
    Return s
End Function
Public Shared Function GetHDDInfoString() As String
    Dim serialNumber As String = " ", model As String = " ", firmware As String = " "
    Dim handle As Integer, returnSize As Integer = 0
    Dim driveNumber As Integer = 0
    Dim sci As New SENDCMDINPARAMS()
    Dim sco As New SENDCMDOUTPARAMS()

    If Environment.OSVersion.Platform = PlatformID.Win32NT Then
        handle = CreateFile("\\.\PhysicalDrive" & "0", GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
    Else
        handle = CreateFile("\\.\Smartvsd", 0, 0, 0, CREATE_NEW, 0, 0)
    End If
    If handle <> INVALID_HANDLE_VALUE Then
        sci.DriveNumber = CByte(driveNumber)
        sci.BufferSize = Marshal.SizeOf(sco)
        sci.DriveRegs.DriveHead = CByte((&HA0 Or driveNumber << 4))
        sci.DriveRegs.Command = &HEC
        sci.DriveRegs.SectorCount = 1
        sci.DriveRegs.SectorNumber = 1
        If DeviceIoControl(handle, DFP_RECEIVE_DRIVE_DATA, sci, Marshal.SizeOf(sci), sco, Marshal.SizeOf(sco), _
         returnSize, 0) <> 0 Then
            serialNumber = SwapChars(sco.IDS.SerialNumber)
            model = SwapChars(sco.IDS.ModelNumber)
            firmware = SwapChars(sco.IDS.FirmwareRevision)
        End If
        CloseHandle(handle)
    End If
    Return model.Trim & " " & serialNumber.Trim
End Function
#End Region
End Class
5
ответ дан 14 December 2019 в 13:50
поделиться
Try
Dim Searcher_P As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PhysicalMedia")
For Each queryObj As ManagementObject In Searcher_P.Get()
If queryObj("SerialNumber").ToString.Trim = "Y2S0RKFE" Then
Me.Cursor = Cursors.Default
Return True
End If
Next
Catch ex As Exception
MessageBox.Show("An error occurred while querying for WMI data: Win32_PhysicalMedia " & ex.Message)
End Try

Try
Dim Searcher_L As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_LogicalDisk WHERE DeviceID = 'C:'")
For Each queryObj As ManagementObject In Searcher_L.Get()
If queryObj("VolumeSerialNumber").ToString.Trim = "226C1A0B" Then
Me.Cursor = Cursors.Default
Return True
End If
Next
Catch ex As Exception
MessageBox.Show("An error occurred while querying for WMI data: VolumeSerialNumber " & ex.Message)
Return False
End Try
1
ответ дан 14 December 2019 в 13:50
поделиться

Извините у меня нет времени для преобразования его для Вас, но если никто больше не придумывает код, Вы могли бы сделать хуже, чем смотрят на http://www.pinvoke.net. Ваш код VB6 имеет к API-функциям окон вызова, чтобы сделать работу, и код VB.NET должен сделать то же. Это назовет те же API-функции.

Например, вот страница для DeviceIoControl.

Но если Вы достаточно долго ждете, у кого-то еще мог бы просто быть код для вручения :-)

1
ответ дан 14 December 2019 в 13:50
поделиться

Да, я знаю VB6, но проблема с объявлениями API-функции и атрибутами, требуемыми передать те структуры (типы) им. Это - то, где у меня нет времени для расходов! Если у Вас есть автоматизированный VB6 к инструменту VB.NET и сам VB6, сохраните код как проект VB6 и действительно преобразуйте код. У меня нет своего VB6 вокруг.

0
ответ дан 14 December 2019 в 13:50
поделиться

Это - много кода для прохождения через для кого-то, кто не понимает разговорный язык, используемый в комментариях.

Я буду говорить это: Где угодно в том коде Вы видите Type ключевое слово Вы, вероятно, хотите использовать Structure вместо этого, синтаксис, используемый для Свойств в .NET, немного отличается, вызовы функции требуют круглых скобок, и VB.Net не имеет 'Никакого' типа (возможно, System.IntPtr вместо этого? не уверенный).

Большая часть остальной части синтаксиса в VB.Net является тем же, и таким образом, у Вас могла бы быть лучшая удача при создании мер, я уже упомянул и затем исправляющий каждую ошибку (или тип ошибки), Вы добираетесь при создании получающегося кода индивидуально.

0
ответ дан 14 December 2019 в 13:50
поделиться

Можно получить эти данные WMI. Позвольте мне получить Вас пример

-1
ответ дан 14 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: