<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function SendDlgItemMessage(ByVal hDlg As IntPtr, ByVal nIDDlgItem As Integer, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _ Private Shared Function SendDlgItemMessageA(ByVal hDlg As IntPtr, ByVal nIDDlgItem As Integer, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As System.Text.StringBuilder) As IntPtr End Function
Option Strict On Imports System.Runtime.InteropServices Imports System.Threading Imports System.Text Public Class Form1 <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr End Function <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean End Function <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function GetDlgItem(ByVal hDlg As IntPtr, nIDDlgItem As Integer) As IntPtr End Function <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function SendDlgItemMessage(ByVal hDlg As IntPtr, ByVal nIDDlgItem As Integer, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr End Function <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _ Private Shared Function SendDlgItemMessageA(ByVal hDlg As IntPtr, ByVal nIDDlgItem As Integer, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As System.Text.StringBuilder) As IntPtr End Function <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr End Function Private Const BM_CLICK As Integer = &HF5 Private Const WM_SETTEXT As Integer = &HC Private Const WM_GETTEXT As Integer = &HD Private Const WM_LBUTTONDOWN As Integer = &H201 Private Const WM_LBUTTONUP As Integer = &H202 Dim x As Integer = 0 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim lThread As New Thread(Sub() Process.Start("x:\VSRW.exe") End Sub) lThread.IsBackground = True lThread.Start() VobSub_AutoPilot() x += 1 Me.Text = x.ToString End Sub Private Sub VobSub_AutoPilot() 'Get Window Dim VobSubHandle As IntPtr Dim Found As Boolean = True Do VobSubHandle = FindWindow(vbNullString, "VobSub Ripper Wizard") If VobSubHandle.ToString <> "0" Then SetWindowText(VobSubHandle, "DVD2MKV-VobSub Ripper Wizard") Found = False Else Thread.Sleep(50) End If Loop Until Not Found Dim VobSubChildHandle As IntPtr = GetDlgItem(VobSubHandle, 0) 'Load IFO... Dim lThread As New Thread(Sub() SendDlgItemMessage(VobSubChildHandle, 1000, BM_CLICK, CType(0, IntPtr), CType(0, IntPtr)) End Sub) lThread.IsBackground = True lThread.Start() Dim WinOpen As IntPtr Found = True Do WinOpen = FindWindow(vbNullString, "Ouvrir") If WinOpen.ToString <> "0" Then Found = False Else Thread.Sleep(500) End If Loop Until Not Found Dim File As String = "x:\VIDEO_TS\VTS_01_0.IFO" SendDlgItemMessage(WinOpen, 1148, WM_SETTEXT, CType(Len(File), IntPtr), Marshal.StringToHGlobalUni(File)) SendDlgItemMessage(WinOpen, 1, BM_CLICK, CType(0, IntPtr), CType(0, IntPtr)) 'Get End Loaded Dim ValidLoad As String ValidLoad = "Opening ifo OK" & vbCrLf ValidLoad &= "Parsing ifo OK" & vbCrLf ValidLoad &= "Searching vobs..." & vbCrLf Dim Fl As New IO.DirectoryInfo("x:\VIDEO_TS") Dim arFi As IO.FileInfo() = Fl.GetFiles("*.vob") Dim gFi As IO.FileInfo For Each gFi In arFi ValidLoad &= "Found " & "x:\VIDEO_TS" & gFi.Name & vbCrLf Next ValidLoad &= vbCrLf Dim Count As Integer Dim VobLoad As New StringBuilder(Len(ValidLoad)) Found = True Do Count = 0 SendDlgItemMessageA(VobSubChildHandle, 1017, WM_GETTEXT, New IntPtr(VobLoad.Capacity), VobLoad) For i As Integer = 0 To VobLoad.ToString.Split(CChar(vbCrLf)).Count - 1 If VobLoad.ToString.Split(CChar(vbCrLf))(i).ToLower = ValidLoad.Split(CChar(vbCrLf))(i).ToLower Then Count += 1 Next If Count = ValidLoad.Split(CChar(vbCrLf)).Count - 1 Then Found = False Else Thread.Sleep(500) End If Loop Until Not Found 'Save as... Dim sThread As New Thread(Sub() SendDlgItemMessage(VobSubChildHandle, 1001, BM_CLICK, CType(0, IntPtr), CType(0, IntPtr)) End Sub) sThread.IsBackground = True sThread.Start() Dim WinSave As IntPtr Found = True Do WinSave = FindWindow(vbNullString, "Enregistrer sous") If WinSave.ToString <> "0" Then Found = False Else Thread.Sleep(500) End If Loop Until Not Found SendDlgItemMessage(WinSave, 1, BM_CLICK, CType(0, IntPtr), CType(0, IntPtr)) 'Next Thread.Sleep(500) SendDlgItemMessage(VobSubHandle, 1001, BM_CLICK, CType(0, IntPtr), CType(0, IntPtr)) 'Get Indexing Dim ValidIndexing As String = "Indexing..." & vbCrLf Dim IndexingLoad As New StringBuilder(Len(ValidIndexing)) VobSubChildHandle = VobSubHandle For i As Integer = 0 To 3 Step 1 VobSubChildHandle = FindWindowEx(VobSubHandle, VobSubChildHandle, "#32770", vbNullString) Next Found = True Do Count = 0 SendDlgItemMessageA(VobSubChildHandle, 1005, WM_GETTEXT, New IntPtr(IndexingLoad.Capacity), IndexingLoad) If IndexingLoad.ToString.Split(CChar(vbCrLf))(0).ToLower = ValidIndexing.Split(CChar(vbCrLf))(0).ToLower Then Found = False Else Thread.Sleep(1000) End If Loop Until Not Found 'Close Dialog SendDlgItemMessage(VobSubChildHandle, 1004, WM_LBUTTONDOWN, CType(0, IntPtr), CType(0, IntPtr)) SendDlgItemMessage(VobSubChildHandle, 1004, WM_LBUTTONUP, CType(0, IntPtr), CType(0, IntPtr)) End Sub End Class
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question