26 Mart 2015 Perşembe

Videoları Seri İşleme - Yazılım

Seçilen bir ayarı, tüm videolara seri olarak işleyen bir yazılımdır. Yazılım bulunduğu klasördeki her video için tek tek bir video işleme programını çağırarak işlemden geçirir. Örneğin videoları seri olarak sıkıştırma işleminden geçirebilir.

Public Class Form1

    'Nesneler
    'txtAyarAdı adlı TextBox
    'cmdBaşla adlı Button
    'cmdDur adlı Button
    'txtIşlenen adlı TextBox
    'DosyaListesi adlı ListBox
    'DenetlemeZamani adlı Timer
    'Uyut adlı CheckBox

    Const ProgExe As String = "C:\Program Files (x86)\Program\Program.exe"
    Const ProgAdı As String = "Program" 'İşlemin bittiği, çalışan programlar listesinden denetlenecek
    Const ProgDizini As String = "C:\Program Files (x86)\Program\"
    Dim AyarAdı As String
    Const AyarUzantı As String = ".vcf"
    Dim AyarSeç As String
    Dim IşlemDizini As String
    Const IşlemDiziniHedef As String = "Islenenler"
    Dim IşlemDosyası As String
    Dim IşlemDosyasıHedef As String
    Dim İşlemSırası As Integer
    Dim Durduruldu As Boolean
    Dim tnk As String 'Tırnak karakteri için

    Private Sub cmdBasla_Click(sender As Object, e As EventArgs) Handles cmdBasla.Click

        DosyaListesi.Items.Clear()
        İşlemSırası = 0
        Durduruldu = False

        'Çağrılacak programın hangi ayarıyla işlem yapacağı seçiliyor.
        If txtAyarAdı.Text = "" Then Exit Sub
        AyarSeç = ProgDizini & txtAyarAdı.Text & AyarUzantı

        'Yazılım bulunduğu klasörü tespit ediyor.
        IşlemDizini = Application.StartupPath

        'Hedef dizin oluşturuluyor.
        If IO.File.Exists(My.Computer.FileSystem.CombinePath(IşlemDizini, IşlemDiziniHedef)) Then
            MsgBox("Hedef dizin var, onu korumak gerekebilir")
            Exit Sub
        Else
            IO.Directory.CreateDirectory(My.Computer.FileSystem.CombinePath(IşlemDizini, IşlemDiziniHedef))
        End If

        'Yazılım bulunduğu klasördeki işlenecek dosyaları buluyor.
        DosyalarıBul(IşlemDizini)
        If DosyaListesi.Items.Count = 0 Then
            MsgBox("Klasörde dosya yok")
            Exit Sub
        End If
       
        SonrakiniIşle()
        DenetlemeZamani.Enabled = True

    End Sub

    Private Sub DosyalarıBul(dbDizin As String)
        Dim dirinfo As New System.IO.DirectoryInfo(dbDizin)
        Dim Dosyalar() As System.IO.FileInfo
        'Bulunduğu üst dizindeki belli türdeki dosyaları arıyor.
        Dosyalar = dirinfo.GetFiles("*.avi", IO.SearchOption.TopDirectoryOnly)
        Dim Dosya As System.IO.FileInfo

        'Dosya adları listeye alınıyor.
        For Each Dosya In Dosyalar
            DosyaListesi.Items.Add(Dosya)
        Next
    End Sub

    Private Sub DenetlemeZamani_Tick(sender As Object, e As EventArgs) Handles DenetlemeZamani.Tick
        'Çağrılmış programın işleminin bitmesi denetleniyor.
        If İşlemSürüyor() Then Exit Sub

        If Durduruldu Then
            DenetlemeZamani.Enabled = False
            Exit Sub
        End If

        Dim oTarihi As Date 'Oluşturma tarihi
        Dim dTarihi As Date 'Değiştirme tarihi

        'Dosya üzerinde işlem bittiğinde yaratılan dosyanın oluşturma ve değiştirilme tarihi özgün dosyadakine eşitleniyor.
        'Böylece tarihler de korunuyor.
        oTarihi = System.IO.File.GetCreationTime(IşlemDosyası)
        dTarihi = System.IO.File.GetLastWriteTime(IşlemDosyası)

        System.IO.File.SetCreationTime(IşlemDosyasıHedef, oTarihi)
        System.IO.File.SetLastWriteTime(IşlemDosyasıHedef, dTarihi)


        İşlemSırası = İşlemSırası + 1

        If DosyaListesi.Items.Count <= İşlemSırası Then
            DenetlemeZamani.Enabled = False
            If Uyut.Checked Then
                'Tüm dosyalar işlendiğinde işaretlenmişse bilgisayar uyutulur.
                System.Diagnostics.Process.Start("Shutdown", "-h")
            End If
            MsgBox("Tüm dosyalar işlendi")
            Exit Sub
        End If

        'Şimdi sonraki işlenebilir.
        SonrakiniIşle()

    End Sub

    Private Sub SonrakiniIşle()
        Dim KBaşarısı As Integer

        Dim Komut As String

        IşlemDosyası = IşlemDizini & "\" & DosyaListesi.Items.Item(İşlemSırası).ToString()
        IşlemDosyasıHedef = IşlemDizini & "\" & IşlemDiziniHedef & "\" & DosyaListesi.Items.Item(İşlemSırası).ToString()

        DosyaListesi.SelectedIndex = İşlemSırası
        DosyaListesi.TopIndex = DosyaListesi.SelectedIndex

        txtIşlenen.Text = CStr(İşlemSırası + 1) & "/" & DosyaListesi.Items.Count & " " _
        & DosyaListesi.Items.Item(İşlemSırası).ToString()

        'Çağrılacak program için işlenecek dosya komutu oluşturuluyor.
        Komut = tnk & ProgExe & tnk & " /s " & _
        tnk & AyarSeç & tnk & _
        " /p " & _
        tnk & IşlemDosyası & tnk & _
        " " & _
        tnk & IşlemDosyasıHedef & tnk & _
        " /r /x"

        'Program çağrılıyor.
        KBaşarısı = Shell(Komut)

        'İşlemSırası = İşlemSırası + 1

    End Sub

    Private Function İşlemSürüyor() As Boolean
        'Çağrılmış program, işlemi bitince kapanacak.
        'İşlemler listesinde görünüyorsa görevi bitmemiş demektir.
        Dim işlem As Process
        For Each işlem In Process.GetProcesses
            If Not InStr(işlem.ProcessName, ProgAdı) = 0 Then
                İşlemSürüyor = True
                Exit Function
            End If
        Next
    End Function

    Private Sub cmdDur_Click(sender As Object, e As EventArgs) Handles cmdDur.Click
        Durduruldu = True
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        tnk = Chr(34)

    End Sub
End Class

Yazılım son kullanıcıya yönelik değildir. Kişisel amaçlar için yazıldığından denetim kodları filan sade tutulmuştur. Elbette kodlarda -Const değişkenlerinde- ufak değişiklikler yapılarak başka programlar çağrılabilir. Sadece videolar değil farklı türdeki dosyalara da seri işlem uygulaması sağlanabilir.

Hiç yorum yok:

Yorum Gönder