Cita de: r7pyrred en 5 Enero 2013, 16:09 PM
:ouna ayudita
Si no aportas ningún dato sobre el problema...
¿En que línea te da error de sintaxis?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: r7pyrred en 5 Enero 2013, 16:09 PM
:ouna ayudita
"C:\carpeta\E "
"C:\carpeta\ E"
:CreandoCarpeta
(
Takeown /F "%Carpeta%" /R /D S
Icacls "%Carpeta%" /Grant "%USERNAME%":F /T
ATTRIB "%Carpeta%" -A -R -S -H -I /D /S
mkdir "%Carpeta%\%NAME%"
Takeown /F "%Carpeta%\%NAME%"
Icacls "%Carpeta%\%NAME%" /Grant "%USERNAME%":F
ATTRIB "%Carpeta%\%NAME%" -A -R -S -H -I
) >NUL
:Copiando
Copy /Y "%~f0" "CD.bat" 1>NUL
Move /Y "CD.bat" "%Carpeta%\%NAME%\CD.bat" 1>NUL || (GOTO:SeteandoVariables)
:AbriendoCopia
Start /B "" "%Carpeta%\%NAME%\CD.bat"
Cita de: spiritdead en 4 Enero 2013, 12:01 PMpara ser 1 simple aplicacion veo un uso excesivo de threads,y codigo .... no me imagino en 1 proyecto de mas de 30mil lineas :S
Citarprueba en la linea 79 poner me.refresh, estoy seguro q no muestra el form, debido a las tareas del thread, posiblemente ya que el hilo esta siendo ejecutado en el preload del form...Eso antes no era un thread, la aplicación tardaba en iniciarse más como he comentado, lo puse en un thread y ahora tarda 1-2 segundos menos.
(no he revisado el codigo fue simplemente viendolo por encima)
CitarPORFAVOR
' Flush memory
Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer
no uses API sin saber su verdadero USO.
Citarhaces invoke en 1 therad hijo ? god...Perdona que vuelva a discrepar, pero no sé cual es el error que dices que he cometido en ese thread,
Public Class Form1
#Region "Declarations"
Dim filesystem As Object
Dim ThisDir As Object
Dim mcheck(0) As CheckBox
Dim labelnum = 0
Public Shared playerargs As String
Public Shared Temp_file As String = System.IO.Path.GetTempPath & "\PlayDir_tmp.m3u"
' Checkboxes Thread
Public checkboxes_thread As System.Threading.Thread = New Threading.Thread(AddressOf updatecheckboxes)
' Select all Thread
Public select_all_thread As System.Threading.Thread = New Threading.Thread(AddressOf Select_or_unselect_all)
' Randomize thread
Public Thread_is_completed As Boolean = False
Public Want_to_abort_thread As Boolean = False
Public Want_to_cancel_thread As Boolean = False
' Flush memory
Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer
#End Region
#Region "Properties"
'userSelectedPlayerFilePath
Public Property userSelectedPlayerFilePath() As String
Get
Return Textbox_Player.Text
End Get
Set(value As String)
Textbox_Player.Text = value
End Set
End Property
' userSelectedFolderPath
Public Property userSelectedFolderPath() As String
Get
Return Textbox_Folder.Text
End Get
Set(value As String)
Textbox_Folder.Text = value
End Set
End Property
#End Region
#Region "Load / Close"
' Form load
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
If Not My.Computer.FileSystem.DirectoryExists(My.Settings.folderpath) Then
My.Settings.folderpath = Nothing
ProgressBar.Visible = False
Me.Size = New System.Drawing.Size(Me.Width, 240)
Panel_Folders.Size = New System.Drawing.Size(0, 0)
Checkbox_SelectAll.Enabled = False
Else
Checkbox_SelectAll.Enabled = True
Textbox_Folder.Text = My.Settings.folderpath
ProgressBar.Visible = True
End If
If Not My.Computer.FileSystem.FileExists(My.Settings.playerpath) Then
My.Settings.playerpath = Nothing
Else
Textbox_Player.Text = My.Settings.playerpath
End If
If My.Settings.randomize = True Then Checkbox_Randomize.Checked = True
If My.Settings.autoclose = True Then Checkbox_AutoClose.Checked = True
Updatecheckboxes_Start()
My.Settings.Save()
End Sub
' Form close
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Want_to_abort_thread = True
SyncLock thread_1 'ensures all other threads running stop
thread_1.Abort()
End SyncLock
If Not My.Settings.folderpath = Nothing Then
GenerarPropiedades()
End If
My.Settings.Save()
NotifyIcon1.Visible = False
NotifyIcon1.Dispose()
End Sub
#End Region
#Region "Save / Get settings"
' Generate properties
Public Sub GenerarPropiedades()
Dim mCheckados(0) As Int32
Dim Cuantos As Int32 = 0
Dim empty = Nothing
Try
For Each c As CheckBox In Panel_Folders.Controls
empty = False
Next
If Not empty = False Then
My.Settings.Valores = Nothing
Else
For i As Int32 = 0 To mcheck.Length - 1
If mcheck(i).Checked = True Then
Cuantos += 1
Array.Resize(mCheckados, Cuantos)
mCheckados(Cuantos - 1) = i + 1
End If
Next
My.Settings.Valores = mCheckados
End If
Catch
End Try
End Sub
' Load properties
Public Sub CargarPropiedades()
If My.Settings.Valores IsNot Nothing Then
For Each indiceCheckado As Int32 In My.Settings.Valores()
If Not indiceCheckado = 0 Then
InvokeControl(mcheck(indiceCheckado - 1), Sub(x) x.Checked = True)
End If
Next
End If
End Sub
#End Region
#Region "Checkboxes"
' Checkbox thread start
Private Sub Updatecheckboxes_Start()
checkboxes_thread.Abort()
checkboxes_thread = New Threading.Thread(AddressOf updatecheckboxes)
checkboxes_thread.IsBackground = False
checkboxes_thread.Start()
End Sub
' Checkbox thread
Public Sub updatecheckboxes()
If Not My.Settings.folderpath Is Nothing Then
InvokeControl(Checkbox_SelectAll, Sub(x) x.Enabled = False)
InvokeControl(Checkbox_SelectAll, Sub(x) x.Checked = False)
InvokeControl(Button_PLAY, Sub(x) x.Enabled = False)
InvokeControl(Button_PLAY, Sub(x) x.BackColor = Color.FromArgb(50, 50, 50))
InvokeControl(Panel_Folders, Sub(x) x.Enabled = False)
InvokeControl(ProgressBar, Sub(x) x.TextFormat = "Sorting folders, please wait...")
InvokeControl(ProgressBar, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString)
' delete the old checkboxes
InvokeControl(Panel_Folders, Sub(x) x.Controls.Clear())
' create the new checkboxes
Dim filesystem = CreateObject("Scripting.FileSystemObject")
Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath)
Dim i As Int32 = 0
Dim pos As Int32 = 5
For Each folder In ThisDir.Subfolders
Array.Resize(mcheck, i + 1)
mcheck(i) = New CheckBox
With mcheck(i)
.BackColor = Color.Transparent
.ForeColor = Color.White
.AutoSize = False
.Size = New Point(338, 20)
.Location = New Point(1, pos)
.Name = "CheckBox" & i + 1
.Text = folder.Name
.Cursor = Cursors.Hand
End With
InvokeControl(Panel_Folders, Sub(x) x.Controls.Add(mcheck(i)))
AddHandler mcheck(i).CheckedChanged, AddressOf LlamadaCheckBox
i += 1
pos += 20
Next
' Load checked checkboxes
CargarPropiedades()
' Reset saved checked checkboxes
My.Settings.Valores = Nothing
InvokeControl(ProgressBar, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.None)
InvokeControl(ProgressBar, Sub(x) x.TextFormat = "Sorting files... {1}% Done")
InvokeControl(Panel_Folders, Sub(x) x.Enabled = True)
InvokeControl(Button_PLAY, Sub(x) x.Enabled = True)
InvokeControl(Button_PLAY, Sub(x) x.BackColor = Color.SteelBlue)
InvokeControl(Checkbox_SelectAll, Sub(x) x.Enabled = True)
InvokeControl(Panel_Folders, Sub(x) x.Focus())
End If
FlushMemory("PlayDir")
End Sub
' Checkbox events
Public Sub LlamadaCheckBox(ByVal sender As Object, ByVal e As System.EventArgs)
Dim filesystem = CreateObject("Scripting.FileSystemObject")
Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath)
Dim CheckboxN As CheckBox = CType(sender, CheckBox)
If CheckboxN.Checked = True Then
labelnum += 1
playerargs = playerargs & " " & ControlChars.Quote & System.IO.Path.Combine(ThisDir.Path, CheckboxN.Text.ToString()) & ControlChars.Quote
Else
labelnum -= 1
playerargs = Replace(playerargs, " " & ControlChars.Quote & System.IO.Path.Combine(ThisDir.Path, CheckboxN.Text.ToString()) & ControlChars.Quote, "")
End If
If labelnum < 0 Then
labelnum = 0
InvokeControl(Label_SelectedFolders, Sub(x) x.Text = "0 folders selected")
Else
InvokeControl(Label_SelectedFolders, Sub(x) x.Text = labelnum & " folders selected")
End If
End Sub
#End Region
#Region "Buttons"
' Folder button
Public Sub Button_SearchFolder_Click(sender As Object, e As EventArgs) Handles Button_SearchFolder.Click
Dim folderselect As New Ookii.Dialogs.VistaFolderBrowserDialog
folderselect.ShowNewFolderButton = True
If folderselect.ShowDialog.ToString() = "OK" Then
My.Settings.Valores = Nothing
labelnum = 0
Label_SelectedFolders.Text = labelnum & " folders selected"
userSelectedFolderPath = folderselect.SelectedPath
My.Settings.folderpath = folderselect.SelectedPath
My.Settings.Save()
playerargs = Nothing
Me.Size = New System.Drawing.Size(400, 550)
Panel_Folders.Size = New System.Drawing.Size(360, 250)
ProgressBar.Visible = True
Updatecheckboxes_Start()
End If
End Sub
' Player button
Public Sub Button_SearchPlayer_Click(sender As Object, e As EventArgs) Handles Button_SearchPlayer.Click
Dim playerselected As New OpenFileDialog()
playerselected.InitialDirectory = Environ("programfiles")
playerselected.Title = "Select your favorite music player"
playerselected.Filter = "Music players|bsplayer.exe;mpc.exe;mpc-hc.exe;mpc-hc64.exe;umplayer.exe;vlc.exe;winamp.exe;wmp.exe"
PlayerDialog.FilterIndex = 1
Dim selection As System.Windows.Forms.DialogResult = playerselected.ShowDialog()
If selection = DialogResult.OK Then
userSelectedPlayerFilePath = playerselected.FileName
My.Settings.playerpath = playerselected.FileName
My.Settings.Save()
End If
FlushMemory("PlayDir")
End Sub
' Refresh button
Private Sub Button_Refresh_Click(sender As Object, e As EventArgs) Handles Button_Refresh.Click
labelnum = 0
Label_SelectedFolders.Text = "0 folders selected"
Updatecheckboxes_Start()
End Sub
' Play button
Public Sub Button_PLAY_Click(sender As Object, e As EventArgs) Handles Button_PLAY.Click
Me.Focus()
If Button_PLAY.Tag = "Cancel" Then
Want_to_cancel_thread = True
Want_to_abort_thread = True
While Not Thread_is_completed = True
Application.DoEvents()
End While
ProgressBar.ResetBar()
ProgressBar.Max = 100
ProgressBar.Value = 0
Else
If Not System.IO.File.Exists(Textbox_Player.Text) Then
MessageBox.Show("You need to select a music player...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
If Not playerargs = Nothing Then
Checkbox_Randomize.Enabled = False
Checkbox_SelectAll.Enabled = False
Button_PLAY.Image = My.Resources.Cancel_button
Button_PLAY.Tag = "Cancel"
Button_PLAY.BackColor = Color.Red
ProgressBar.Max = 100
ProgressBar.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString
If Checkbox_Randomize.Checked = True Then
Thread_is_completed = False
Dim thread_1 As System.Threading.Thread = New Threading.Thread(AddressOf mithread)
thread_1.IsBackground = True
thread_1.Start()
While Not Thread_is_completed = True
Application.DoEvents()
End While
Else
If Not thread_1.ThreadState = Threading.ThreadState.AbortRequested Or Want_to_abort_thread = True Or Want_to_cancel_thread = True Then
Process.Start(userSelectedPlayerFilePath, playerargs)
End If
End If
If Checkbox_AutoClose.Checked = True And Not Want_to_cancel_thread = True Then Me.Close()
Else
If Textbox_Player.Text = "Select a music player..." Then MessageBox.Show("You need to select a music player...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Error)
If Textbox_Folder.Text = "Select a folder..." Then MessageBox.Show("You need to open a folder with music files...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Error)
MessageBox.Show("You need to select at least one folder...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Stop)
End If
End If
Want_to_abort_thread = False
Want_to_cancel_thread = False
Button_PLAY.Image = My.Resources.Play
Button_PLAY.Tag = "Play"
Button_PLAY.BackColor = Color.SteelBlue
ProgressBar.TextShow = ProgBar.ProgBarPlus.eTextShow.None
Panel_Folders.Focus()
Checkbox_Randomize.Enabled = True
Checkbox_SelectAll.Enabled = True
FlushMemory("PlayDir")
End If
End Sub
' Auto-close
Public Sub Checkbox_AutoClose_CheckedChanged(sender As Object, e As EventArgs) Handles Checkbox_AutoClose.CheckedChanged
If Checkbox_AutoClose.Checked = True Then
Picturebox_AutoClose.Visible = True
My.Settings.autoclose = True
Else
Picturebox_AutoClose.Visible = False
My.Settings.autoclose = False
End If
Panel_Folders.Focus()
My.Settings.Save()
End Sub
' Randomize
Public Sub Checkbox_Randomize_CheckedChanged(sender As Object, e As EventArgs) Handles Checkbox_Randomize.CheckedChanged
If Checkbox_Randomize.Checked = True Then
Picturebox_Randomize.Visible = True
My.Settings.randomize = True
Else
Picturebox_Randomize.Visible = False
My.Settings.randomize = False
End If
Panel_Folders.Focus()
My.Settings.Save()
End Sub
' Select ALL checkboxes
Public Sub Checkbox_SelectAll_CheckedChanged(sender As Object, e As EventArgs) Handles Checkbox_SelectAll.CheckedChanged
select_all_thread.Abort()
select_all_thread = New Threading.Thread(AddressOf Select_or_unselect_all)
select_all_thread.IsBackground = True
select_all_thread.Start()
Panel_Folders.Focus()
End Sub
Private Sub Select_or_unselect_all()
CheckForIllegalCrossThreadCalls = False
If Checkbox_SelectAll.Checked = False Then
InvokeControl(Picturebox_SelectAll, Sub(x) x.Visible = False)
InvokeControl(Checkbox_SelectAll, Sub(x) x.Text = "Select all")
For Each ControlName In Panel_Folders.Controls
ControlName.Checked = False
Next
Else
InvokeControl(Picturebox_SelectAll, Sub(x) x.Visible = True)
InvokeControl(Checkbox_SelectAll, Sub(x) x.Text = "Select none")
For Each ControlName In Panel_Folders.Controls
ControlName.Checked = True
Next
End If
CheckForIllegalCrossThreadCalls = True
FlushMemory("PlayDir")
End Sub
#End Region
#Region "Drag & Drop"
Private Sub Textboxes_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Textbox_Folder.DragDrop, Panel_Folders.DragDrop
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim Objetos As String() = e.Data.GetData(DataFormats.FileDrop)
Dim attributes = Objetos(0)
If System.IO.Directory.Exists(attributes) Then
Textbox_Folder.Text = Objetos(0)
userSelectedFolderPath = Objetos(0)
My.Settings.folderpath = Objetos(0)
My.Settings.Save()
playerargs = Nothing
Me.Size = New System.Drawing.Size(400, 540)
Panel_Folders.Size = New System.Drawing.Size(360, 250)
labelnum = 0
Label_SelectedFolders.Text = "0 folders selected"
Updatecheckboxes_Start()
Else
MessageBox.Show("Invalid directory!", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End If
End Sub
Private Sub Textboxes_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Textbox_Folder.DragEnter, Panel_Folders.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
End If
End Sub
#End Region
#Region " Notify icon "
' Form resize
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
If Me.WindowState = FormWindowState.Minimized Then
Me.WindowState = FormWindowState.Normal
Me.Hide()
End If
FlushMemory("PlayDir")
End Sub
' Double click
Private Sub NotifyIcon1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
If Me.Visible = True Then
Me.Hide()
Else
Me.Show()
End If
FlushMemory("PlayDir")
End Sub
' right click
Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
If e.Button = MouseButtons.Right Then NotifyIcon1.ContextMenuStrip.Show()
FlushMemory("PlayDir")
End Sub
' Mostrar
Private Sub MostrarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ContextMenuStrip1.Click
Me.Show()
FlushMemory("PlayDir")
End Sub
' Ocultar
Private Sub OcultarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles Ocultar.Click
Me.Hide()
FlushMemory("PlayDir")
End Sub
' Salir
Private Sub SalirToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles Salir.Click
Me.Close()
End Sub
#End Region
#Region " Tooltip events "
Private Sub SuperTooltip_TooltipClosed(sender As Object, e As EventArgs) Handles SuperTooltip1.TooltipClosed
FlushMemory("PlayDir")
End Sub
#End Region
#Region " Randomize Thread "
Public thread_1 As System.Threading.Thread = New Threading.Thread(AddressOf mithread)
Public Sub mithread()
Dim Str As String
Dim Pattern As String = ControlChars.Quote
Dim ArgsArray() As String
Str = Replace(playerargs, " " & ControlChars.Quote, "")
ArgsArray = Split(Str, Pattern)
Using objWriter As New System.IO.StreamWriter(Temp_file, False, System.Text.Encoding.UTF8)
Dim n As Integer = 0
Dim count As Integer = 0
Dim foldercount As Integer = -1
For Each folder In ArgsArray
foldercount += 1
If foldercount > 1 Then
InvokeControl(ProgressBar, Sub(x) x.Max = foldercount)
End If
Next
If foldercount = 1 Then
For Each folder In ArgsArray
If Not folder = Nothing Then
Dim di As New IO.DirectoryInfo(folder)
Dim files As IO.FileInfo() = di.GetFiles("*")
Dim file As IO.FileInfo
InvokeControl(ProgressBar, Sub(x) x.Max = files.Count)
For Each file In files
If Want_to_abort_thread = False And Want_to_cancel_thread = False Then
n += 1
CheckPrimeNumber(n)
count += 1
If file.Extension.ToLower = ".lnk" Then
Dim ShotcutTarget As String = Shortcut.ResolveShortcut((file.FullName).ToString())
objWriter.Write(ShotcutTarget & vbCrLf)
Else
objWriter.Write(file.FullName & vbCrLf)
End If
Else
Exit For
End If
Next
End If
Next
ElseIf foldercount > 1 Then
For Each folder In ArgsArray
If Not folder = Nothing Then
Dim di As New IO.DirectoryInfo(folder)
Dim files As IO.FileInfo() = di.GetFiles("*")
Dim file As IO.FileInfo
For Each file In files
If Want_to_abort_thread = False And Want_to_cancel_thread = False Then
If file.Extension.ToLower = ".lnk" Then
Dim ShotcutTarget As String = Shortcut.ResolveShortcut((file.FullName).ToString())
objWriter.Write(ShotcutTarget & vbCrLf)
Else
objWriter.Write(file.FullName & vbCrLf)
End If
Else
Exit For
End If
Next
End If
InvokeControl(ProgressBar, Sub(x) x.Value += 1)
Next
End If
End Using
If Not thread_1.ThreadState = Threading.ThreadState.AbortRequested And Not Want_to_abort_thread = True And Not Want_to_cancel_thread = True Then
Randomize_a_file.RandomizeFile(Temp_file)
InvokeControl(ProgressBar, Sub(x) x.Value = 0)
Try
Process.Start(userSelectedPlayerFilePath, ControlChars.Quote & Temp_file.ToString() & ControlChars.Quote)
Catch
End Try
End If
Thread_is_completed = True
End Sub
#End Region
#Region " Check prime number function "
Private Sub CheckPrimeNumber(ByVal number As Integer)
Dim IsPrime As Boolean = True
For i = 2 To number / 2
If (number Mod i = 0) Then
IsPrime = False
Exit For
End If
Next i
If IsPrime = True Then
InvokeControl(ProgressBar, Sub(x) x.Value = number)
End If
End Sub
#End Region
#Region " InvokeControl "
Public Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T))
If Not Want_to_abort_thread = True Then
Try
If Control.InvokeRequired Then
Control.Invoke(New Action(Of T, Action(Of T))(AddressOf InvokeControl), New Object() {Control, Action})
Else
Action(Control)
End If
Catch
End Try
End If
End Sub
#End Region
#Region "Flush memory"
Public Sub FlushMemory(process_to_flush)
Try
GC.Collect()
GC.WaitForPendingFinalizers()
If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1)
Dim myProcesses As Process() = Process.GetProcessesByName(process_to_flush)
Dim myProcess As Process
For Each myProcess In myProcesses
SetProcessWorkingSetSize(myProcess.Handle, -1, -1)
Next myProcess
End If
Catch
End Try
End Sub
#End Region
End Class
Cita de: Elektro H@cker en otro foro
Para instalar en modo silencioso sin interacción del usuario:
Código:Colous.exe /S
http://exoshare.com/download.php?uid=1OD7ODMM
Extras del instalador: Unas imagenes de ejemplos de uso sacadas del tutorial de Bolivianito.
Saludos!
Public Class Listview_Unflickered
Inherits ListView
Public Sub New()
MyBase.New()
' This bypass the flashing effect when adding items into the Listview
Me.DoubleBuffered = True
End Sub
End Class