Menú

Mostrar Mensajes

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ú

Mensajes - Eleкtro

#5351
Cita de: Mr. Tach en  9 Abril 2015, 03:05 AMEdit: estuve viendo el AutoUpdate+ esta bueno pero es de pago :/

Te lo paso por privado

saludos
#5352
No hay manera, he, luis?.

En el siguiente ejemplo, tengo una colección del 1 al 5, y relleno la colección con números aleatorios del 1 al 10 sin que estos se repitan entre ellos ni entre los números que ya hay en la colección, hasta incrementar la cantidad de elementos de la colección a 10.

Dicho de otra forma, tengo una lista del 1 al 5, genero una secuencia aleatoria del 1 al 10 y relleno la lista del 1 al 5 con los 5 números restantes del 5 al 10.

Puedes modificar los valores para tus necesidades...

Código (vbnet) [Seleccionar]

Dim col As IEnumerable(Of Integer) = {1, 2, 3, 4, 5}
Dim minColCount As Integer = 10
Dim minRandValue As Integer = 1
Dim maxRandValue As Integer = 10
Dim rand As Random = New Random

If col.Count < minColCount Then

   Dim randCol As IEnumerable(Of Integer) =
       From value As Integer In Enumerable.Range(minRandValue, maxRandValue)
       Order By rand.Next
       Where Not col.Contains(value)
       Take (minColCount - col.Count)

   col = Enumerable.Concat(col, randCol.ToArray)

End If

Debug.WriteLine(String.Join("; ", col))


Saludos
#5353
Cita de: owl-eyes en  9 Abril 2015, 08:50 AMme gustara saber como lo puedo hacer para ejecutar un Drag Drop al abrir un archivo

¿Puedes intentar ser más específico?, no entendí lo que pretendes decir con "ejecutar un drag drop al abrir un archivo".

¿Te refieres a añadir capacidad Drag&Drop (arrastrar y soltar) de archivos en un Form?...

...En ese caso primero debes activar la propiedad 'AllowDrop' del Form/Control y suscribirte a los eventos 'DragEnter' y 'DragDrop' de dicho Form/Control, el primer evento se dispara al arrastrar y el segundo evento al soltar.

Te muestro un ejemplo con un TextBox:

Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Handles the DragEnter event of the Textbox1 control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="System.Windows.Forms.DragEventArgs"/> instance containing the event data.</param>
   Private Sub Textbox1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) _
   Handles TextBox1.DragEnter

       If e.Data.GetDataPresent(DataFormats.FileDrop) AndAlso
          DirectCast(e.Data.GetData(DataFormats.FileDrop), IEnumerable(Of String)).
                     All(Function(path As String) IO.File.GetAttributes(path).HasFlag(IO.FileAttributes.Archive)) Then

           e.Effect = DragDropEffects.All

       Else
           e.Effect = DragDropEffects.None

       End If

   End Sub

   ''' <summary>
   ''' Handles the DragDrop event of the Textbox1 control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="DragEventArgs"/> instance containing the event data.</param>
   Private Sub Textbox1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _
   Handles TextBox1.DragDrop

       If e.Data.GetDataPresent(DataFormats.FileDrop) Then

           Dim paths As IEnumerable(Of String) =
              From path As String In DirectCast(e.Data.GetData(DataFormats.FileDrop), IEnumerable(Of String))
              Order By path Ascending

           Me.TextBox1.Text = String.Join("; ", paths)

       End If

   End Sub


Traducción online a C#:
Código (csharp) [Seleccionar]
/// <summary>
/// Handles the DragEnter event of the Textbox1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Forms.DragEventArgs"/> instance containing the event data.</param>
private void Textbox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop) && ((IEnumerable<string>)e.Data.GetData(DataFormats.FileDrop)).All((string path) => IO.File.GetAttributes(path).HasFlag(IO.FileAttributes.Archive))) {

e.Effect = DragDropEffects.All;

} else {
e.Effect = DragDropEffects.None;
}
}

/// <summary>
/// Handles the DragDrop event of the Textbox1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="DragEventArgs"/> instance containing the event data.</param>
private void Textbox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) {

IEnumerable<string> paths = from path in (IEnumerable<string>)e.Data.GetData(DataFormats.FileDrop) orderby path ascending;
this.TextBox1.Text = string.Join("; ", paths);
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


PD: No te rebajes a utilizar Batch pudiendo manejarte en un lenguaje de alto nivel.

Saludos
#5354
Dudas Generales / Re: ISO muy grande....
9 Abril 2015, 03:31 AM
Cita de: Lurker en  9 Abril 2015, 03:12 AMSupongo que conoces DRP 15, pues esta ISO de marras es SamDriver15, son parecidas realizadas por diferentes fuentes pero con el mismo motor.

La DRP15 me cabe en un DVD de doble capa perfectamente, la Sam es practicamente lo mismo pero con base de datos mayor.

No, no tenía ni idea hasta ahora, ¿"DriverPack Solution 2015" y "SAM Drivers"?, considero los packs de drivers una basurilla (quizás erroneamente por que yo no lo necesito, por que no soy técnico de PC's),
pero si me dices que el contenido es eso, ¿has considerado eliminar algunos drivers que creas "innecesarios" para reducirle el peso a la ISO?, sería la solución más sencilla, extraer borrar y crear la iso, no se, podrías listar los drivers para identificar los drivers más pesados y hacer algo de "limpieza" con drivers que sean muy antiguos o muy pesados cómo he dicho.

Desconozco el sistema de archivos de esos packs, quiero decir que no se si estarán separados por categorias o todos super-comprimidos en un archivo, no lo se, pero en el primer caso y en caso de que no estuviesen comprimidos pues... podrías comprimirlos.

PD: Aunque parezca lo contrario, no me gusta mucho tener la última palabra en "conversaciones" xD. ya he hablado bastante, le dejo a otro que aporte otras posibles soluciones.

Saludos!
#5355
Dudas Generales / Re: ISO muy grande....
9 Abril 2015, 02:49 AM
Cita de: Lurker en  9 Abril 2015, 02:01 AMLo preguntaba por si habia alguna manera de meter los 9.82 en DVD de 8.5.....yá que yó logro meter peliculas de más de 5Gb en DVD de 4.7, con el programa ClonDVD2.

Claro, esa aplicación trabaja un formato específico de consumo muy analizado/conocido/explotado (DVD-Video) el cual es facil "partirlo".

Para juegos/software hay otro tipo de soluciones, para audio otras, etc...

Si no comentas el contenido de dicha ISO solo te puedo dar soluciones bastante genéricas cómo un split.

Con PowerISO parece que puedes grabar una ISO de cualquier tipo en múltiples volúmenes, no lo he probado, pero me parece que es un simple split: https://www.youtube.com/watch?v=9b626S1K9m0

Saludos!
#5356
Cita de: Mr. Tach en  8 Abril 2015, 22:47 PM1.- Clickonce (la verdad que despues de leer bastante concluí que esta destinado a otro tipo de aplicaciones

Para nada, ¿por qué dices eso?, ClickOnce sirve de la misma manera tanto para aplicacioens de escritorio cómo para aplicaciones web (para cachear e iniciar las aplicaciones hospedadas), yo diría que se utiliza más o menos bastante en la web por su flexibilidad en ese aspecto, solo que es una característica apenas conocida y usada de forma local ...supongo que al existir tantas otras opciones de instaladores es dificil ganarse terreno en ese sentido, pero ClickOnce es una opción de instalación totalmente viable que te sirve para realizar las actualizaciones de tu instalación local:

How to: Manage Updates for a ClickOnce Application

Cita de: Mr. Tach en  8 Abril 2015, 22:47 PM2.- https://autoupdaterdotnet.codeplex.com/ , Descargar el archivo en una carpeta temporal pero no lo reemplaza, por lo que nunca se actualiza.

EDITO:
AutoUpdate.Net lo probé en su dia y es un proyecto muy verde, en su sección de soporte en CodePlex les dejé algún comentario en plan "consejos" por que es una librería muy mediocre.

Yo antes utilizaba AutoUpdate+ y siempre me fue bien, héchale un ojo: http://autoupdateplus.com/Download.html

Ten en cuenta que siempre puedes hacerlo de forma manual como te ha comentado KuBox (o con ClickOnce también).

Saludos!
#5357
Dudas Generales / Re: ISO muy grande....
9 Abril 2015, 01:40 AM
Si solo quieres almacenar el archivo por seguridad entonces puedes usar cualquier file-splitter o compresor multi archivo cómo WinRAR.

En cambio, si quieres quemar la ISO para poderla instalar desde 2 DVDS lo tienes un poco más complicado...

Puedes utilizar la aplicación UltraISO para comprimir la ISO a formato ISZ y si con suerte la imagen ISZ comprimida te cabe en un DVD entonces grabas ese archivo comprimido al DVD (no quemas la imagen) y luego, con Daemon Tools puedes montar la imagen ISZ y correrla. En resumen, grabar una imagen comprimida y luego montarla.

Otra opción y suponiendo que la ISO contenga algún tipo de software o datos que se expandan al PC, sería extraer todo el contenido de la ISO para crear tu propio installer que inicie el "setup.exe" original (el "setup.exe" del DVD, pero desde el "setup.exe" de tu installer personalizao) y partir tu "setup" en unidades de tamaño que quepan en 2 DVD (2 GB sería lo máximo recomendado por cada archivo). Espero que se haya entendido bien.

Saludos
#5358
Esto viendo queriendo decir que la NASA va a seguir con el cuento de ocultar información un par de décadas más, y cuando ya en el 2030 todo el mundo se haya olvidado de esta afirmación del 2015 pues volverán a "predecir" lo mismo para que el tiempo pase y pase y sigan tomándonos por tontos.
Ellos conocen de sobra la existencia de vida alienígena, quiero decir los jefes y empleados más privilegiados de NASA, no todos, claro está.




Cita de: @synthesize en  9 Abril 2015, 00:51 AM
Estamos con lo de siempre...

"LA NASA AFIRMA..."... y yo me busco una frase de la entrevista, y me encuentro con esto:

No hay páginas serias... Bueno, podría seguir, pero me he prometido a mi mismo intentar perder el menor tiempo posible con estas cosas  :silbar:

Normal, si buscas en castellano que esperas encontrar?. ahora has demostrado que siempre descalificas a las fuentes de El_Andaluz de mentirosas/mala reputación solo por que no sabes buscar debidamente otras fuentes compi.

Aparte de la url yankee que ya han compartido, esta también me parece una página seria:
http://www.space.com/29041-alien-life-evidence-by-2025-nasa.html

Saludos
#5359
Cita de: Yidu en  8 Abril 2015, 19:34 PM¿Pero como hacerlo 'fácil' si hemos de hacer la comprobación en una matriz?

Código (python) [Seleccionar]
num = 4
matriz = [[1,2,3],[4,5,6],[7,8,9]]
num in lista

Para determinar si un valor se encuentra en el interior de ese array dimensional hay varias maneras de hacerlo, una manera simple sería utilizando la función any:

Código (python) [Seleccionar]
value = 4
arr2D = [
          [1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]
       ]

print any(value in arr for arr in arr2D)


https://docs.python.org/2/library/functions.html#any

Saludos
#5360
Buenas

Cita de: owl-eyes en  8 Abril 2015, 09:07 AM¿hay alguna funciona para que no se pueda finalizar un proceso?

No, no es posible, por motivos obvios de seguridad un proceso no puede evitar su terminación incondicional, pero al menos puedes controlar el cierre voluntario por parte del usuario.

Aplicaciones cómo por ejemplo el Administrador de tareas (taskmgr) llaman a la función TerminateProcess para matar incondicionalmente un proceso, repito, incondicionalmente:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686714.aspx?f=255&MSPPError=-2147217396

Dicha función no "pregunta" al proceso si puede ser cerrado y no necesita el permiso del proceso para cerrarlo, por algo puedes matar procesos que no estén respondiendo.




Cita de: owl-eyes en  8 Abril 2015, 09:07 AMHe estado invesigando pero no se si es correcto:

e.CloseReason = CloseReason.TaskManagerClosing

La propiedad e.CloseReason que has mostrado se usa en la plataforma .Net, ¿debemos suponer que estás intentando hacerlo en VB.Net o C#?, especifica que lenguaje utilizas al menos.

CloseReason.TaskManagerClosing es simplemente un valor de una enumeración para determinar el motivo del cierre, nada más:
https://msdn.microsoft.com/en-us/library/system.windows.forms.closereason.aspx?f=255&MSPPError=-2147217396

La ventana recibe el mensaje de windows WM_CLOSE (0x10) para solictar la terminación de la aplicación:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms632617%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Te muestro un ejemplo escrito en Vb.Net de cómo puedes interceptar el mensaje recibido y cancelarlo:

Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Specifies A Windows Message Identifier.
   ''' </summary>
   Public Enum WindowsMessages As Integer

       WM_CLOSE = &H10

   End Enum

   ''' <summary>
   ''' Invokes the default window procedure associated with this window to process messages.
   ''' </summary>
   ''' <param name="m">
   ''' A <see cref="T:System.Windows.Forms.Message"/> that is associated with the current Windows message.
   ''' </param>
   Protected Overrides Sub WndProc(ByRef m As Message)

       If m.Msg = WindowsMessages.WM_CLOSE Then
          ' Do Nothing
       Else
           MyBase.WndProc(m)

       End If

   End Sub


Pero eso solo sirve cuando "el usuario cierra la aplicación",
el evento de cierre no se puede cancelar una vez que la terminación incondicional del proceso ha sido enviada,
puedes comprobarlo tu mismo con el código de arriba y también con el siguiente código, verás que el código del interior del bloque de la condicional jamás se llegará a procesar (ni el evento a cancelar, claro está) si matas la aplicación desde el administrador de tareas puesto que la ejecución termina de forma inminente:

Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Handles the FormClosing event of the Form1 control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="FormClosingEventArgs"/> instance containing the event data.</param>
   Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) _
   Handles Me.FormClosing

       If e.CloseReason <> CloseReason.UserClosing Then
           e.Cancel = True
           IO.File.Create("C:\Test.txt").Dispose()
       End If

   End Sub





Cita de: owl-eyes en  8 Abril 2015, 09:07 AMSi alguien me explica estaría muy agradecido.

Hay dos soluciones viables:

· Mantener dos procesos distintos en ejecución, el segundo proceso podría ser un servicio de windows que monitorizase el estado del primer proceso para detectar el cierre y volver a ejecutar una nueva instancia del proceso después de haber sido cerrado. Obviamente esto no evita que ambos procesos puedan ser matados incondicionalmente.

· Hookear la API TerminateProcess y opcionalmente ExitProcess para interceptar las llamadas a dicha función, y cancelarlas. Aparte de estar controlando adicionalmente el cierre voluntario en tu aplicación.

Te muestro un ejemplo de API hooking escrito en VB.Net, utilizo la librería Deviare (también puedes utilizar Microsoft Detours en C++), el hook se adjunta al proceso activo taskmgr.exe para evitar que éste pueda terminar ningún proceso, interceptando las llamadas que dicho proceso hace a la función TerminateProcess para cancelarlo (en la pre-llamada):

Código (vbnet) [Seleccionar]
Imports Nektra.Deviare2

Public NotInheritable Class Form1

   Public WithEvents SpyMgr As NktSpyMgr
   Public Hook As NktHook

   ' TerminateProcess API reference:
   ' https://msdn.microsoft.com/es-es/library/windows/desktop/ms686714%28v=vs.85%29.aspx
   ReadOnly libName As String = "kernel32.dll"
   ReadOnly funcName As String = "TerminateProcess"
   ReadOnly hookFlags As eNktHookFlags = eNktHookFlags.flgOnlyPreCall ' Or eNktHookFlags.flgAutoHookChildProcess

   ' Processes to attach the hook.
   ReadOnly processesToAttach As IEnumerable(Of Process) =
       Process.GetProcessesByName("taskmgr")

   Private Sub Test() Handles MyBase.Load

       If Me.processesToAttach.Count = 0 Then
           MsgBox("No se encontró ningún proceso al que adjuntar.")

       Else
           Me.SpyMgr = New NktSpyMgr()
           Me.SpyMgr.Initialize()

           Me.Hook = SpyMgr.CreateHook(String.Format("{0}!{1}", libName, funcName), hookFlags)
           Me.Hook.Hook(sync:=True)

           For Each proc As Process In processesToAttach
               Debug.WriteLine("Attaching to: " & proc.ProcessName)
               Me.Hook.Attach(procOrId:=proc.Id, sync:=True)
           Next proc

       End If

   End Sub

   <MTAThread>
   Private Sub OnTerminateProcess_Called(ByVal hook As NktHook,
                                         ByVal proc As NktProcess,
                                         ByVal callInfo As NktHookCallInfo) Handles SpyMgr.OnFunctionCalled

       ' Signature params.
       Dim hProcessParam As NktParam = DirectCast(callInfo.Params(0), NktParam)
       Dim uExitCodeParam As NktParam = DirectCast(callInfo.Params(1), NktParam)

       Dim hProcessValue As IntPtr = New IntPtr(CInt(hProcessParam.Value))
       Dim uExitCodeValue As UInteger = CUInt(uExitCodeParam.Value)

       Trace.WriteLine(String.Format("hProcess : '{0}'", hProcessValue))
       Trace.WriteLine(String.Format("uExitCode: '{0}'", uExitCodeValue))

       If callInfo.IsPreCall Then ' Skip precall. Avoid process termination.
           callInfo.Result.Value = 1
           callInfo.SkipCall()
       End If

   End Sub

End Class


PD: El primer parámetro de TerminateProcess especifica el handle del proceso que se va a matar, con eso puedes determinar que proceso es, pero lee bien la documentación de MSDN que te he dejado arriba por que me parece que es más complicado que una simple verificación de handles... quizás puedas necesitar la siguiente enumeración para la verificación:

Código (vbnet) [Seleccionar]
   Public Enum ProcessAccessFlags As UInteger
       All = &H1F0FFF
       Terminate = &H1
       CreateThread = &H2
       VirtualMemoryOperation = &H8
       VirtualMemoryRead = &H10
       VirtualMemoryWrite = &H20
       DuplicateHandle = &H40
       CreateProcess = &H80
       SetQuota = &H100
       SetInformation = &H200
       QueryInformation = &H400
       QueryLimitedInformation = &H1000
       Synchronize = &H100000
   End Enum


Saludos