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

#1671
Cita de: ivancea96 en 12 Octubre 2017, 14:28 PM
Es imposible discutir cualquier tema cuando te adhieres a explicaciones extravagantes sin rigor científico ni lógico. ¿Por qué no dar explicaciones basadas en las certezas que tienes? Poco a poco, "bottom-up", basado en conceptos claros. Si haces un "top-down", al menos, que esté enlazado con conceptos claros y probables.

Eso es facil decirlo, ahora bien, ¿qué me propones para intentar demostrar algo que solo sigue existiendo en la mente / memoria de las personas?. Algunos casos conocidos y genuinos del efecto mandela apuntan a que, aparte de los recuerdos también pueden existir evidencias de "residuos" que no han cambiado (ej.: en el caso de la escultura del pensador podemos ver fotos de turistas que imitan la pose del pensador... y se ponen la mano en la frente, como yo lo recuerdo y como sé que fue), pero no son pruebas irrefutables para demostrar que la realidad ha cambiado para algunas personas.

Para mi tampoco es lógico, pero así es la realidad (nunca mejor dicho) e intento limitarme a asimilar tal realidad, por que si le intentase buscar alguna explicación "lógica" a estos cambios... me acabaría volviendo loco de verdad. Pero eso no significa que no exista un rigor científico que defiende la teoría de universos paralelos, como bien ya sabes, pero sinceramente intentar atribuirle estos fenómenos inexplicables en la realidad a ¿un choque entre universos paralelos? o ¿las consecuencias del mal uso de una tecnología de viajes en el tiempo al pasado? no serían el tipo de explicación que me acabaría tranquilizando, más bien todo lo contrario, me daría bastante miedo que estos cambios en la realidad tuviesen una explicación científica por así decirlo...

Yo no sé que creer, me refiero a lo que puede haber provocado estos cambios, pero si tengo que elegir entonces prefiero pensar que se debe a temas de física cuántica o cosas así, es decir, que los cambios producidos en el pasado y que afectan al presente son efectos "naturales" que no se pueden controlar por el ser humano, por que si esto se pudiera controlar por el arrogante ser humano en el futuro...adiós al mundo que conocemos.

Tampoco descarto que los experimentos del CERN puedan haber producido y/o magnificado de forma involuntaria algunos o todos estos fenómenos del efecto mandela que estamos sufriendo. Será un complejo subterrano con altos controles de seguridad para evitar accidentes de cualquier tipo y todo lo que quieras, pero están jugando a ser Dios, y eso podría tener consecuencias desconocidas e indetectables para todo el que se atreva a llegar más lejos...

Saludos
#1672
1.
No estás liberando la instancia de una clase que implementa la interfaz IDisposable...
Citar
Código (csharp) [Seleccionar]
OpenFileDialog ofd = new OpenFileDialog();

2.
Estás usando una colección genérica de tipo List para almacenar las rutas absolutas de unos archivos, y luego otra lista adicional para almacenar los nombres de archivo. Tener dos colecciones distintas para practicamente la misma finalidad (puesto que los nombres de archivo son parte de la ruta absoluta del archivo) es algo completamente innecesario con lo que solo conseguirás escribir un código espagueti (confuso y destructurado) más si les asignas nombres como "list1", "list2" y "list3"...

Hay que mejorar las nomenclaturas de los miembros.

3.
Debido a que estás representando una colección de elementos (nombres de archivos), en lugar de utilizar el método ListBox.Add() deberías utilizar el método ListBox.AddRange() para mejorar el rendimiento de la aplicación y la respuesta de la UI. Con cada llamada individual que haces a ListBox.Add() el control envia mensajes de ventana para redibujarse, y eso para añadir 20 canciones no pasa nada, pero si fuesen muchas más pues...acabarías bloqueando la UI por momentos.

4.
Estás reasignando el mismo valor a la propiedad ListBox.Sorted en el controlador button1_Click, esto son instrucciones de más, algo innecesario. Con asignarle el valor a la propiedad una única vez al cargar el control es suficiente.

5..
No estás comprobando el resultado del diálogo cuando seleccionas archivos... ¿qué ocurre si el usuario cancela la selección?. debes comprobarlo...

6..
Cita de: TickTack en 12 Octubre 2017, 09:51 AMcuando termina la cancion no se reproduce la siguiente.

Prueba a invocar la funcionalidad de reproducir...
Código (csharp) [Seleccionar]
this.axWindowsMediaPlayer1.Ctlcontrols.play();


7..
Citar
Código (csharp) [Seleccionar]
int index = 0;
...
void ... {
   index = index + 1;
   if (index - 1 < listBox1.Items.Count) {
       axWindowsMediaPlayer1.URL = list2[list1.IndexOf(listBox1.Items[index].ToString())];
   }
}

En lugar de la necesidad de declarar un contador y comprobar el estado del reproductor e ir reasignando a cada rato el valor de la propiedad URL para reproducir la siguiente canción, en lugar de todo eso algo más simple sería que añadieses los elementos del ListBox (las rutas completas de los archivos a reproducir) en una lista de reproducción ( playlist.m3u ) para que el WMP las vaya reproduciendo una tras otra y no tengas que hacer más...

Tienes dos opciones para ello, puedes escribir un archivo de lista de reproducción m3u (no es complicado, es un formato muy sencillo):

O bien puedes puedes crear una lista de manera guiada para usarlo en la instancia actual del WMP mediante la interfáz IWMPPlaylist

8..  
Citarif (e.newState == 8)

¿Has verificado que el valor de la propiedad NewState sea realmente 8 al terminar de reproducir la canción?. La documentación oficial en la MSDN no recomienda que un algoritmo se base en la "predicción" de los estados del reproductor debido a que al parecer son un poco...impredecibles.

Cita de: MSDNRemarks

Windows Media Player states are not guaranteed to occur in any particular order. Furthermore, not every state necessarily occurs during a sequence of events. You should not write code that relies upon state order.


Nota: En la página de la MSDN tienes un ejemplo extendido para depurar/testear el estado actual del reproductor.




En general todo el código que tienes ahora mismo lo puedes mejorar y simplificar / refactorizar a algo parecido a esto:

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;

public sealed class Form1 : Form {

   const int WMP_MediaEnded = 0x8;
   private readonly SortedList<string, string> files; // { Key=file_name, Value=full_path }

   private void Form_Load(object sender, EventArgs e) {
       this.files = new SortedList<string, string>(StringComparer.Ordinal);
       this.listBox1.ValueMember = "key"; // file names
   }

   private void Button1_Click(object sender, EventArgs e) {
       using (OpenFileDialog ofd = new OpenFileDialog { Multiselect = true }) {
           ofd.ShowDialog();

           DialogResult result = ofd.ShowDialog();
           if (result == DialogResult.OK) {
               foreach (string filepath in ofd.FileNames) {
                   this.files.Add(Path.GetFileName(filepath), filepath);
               }
               this.listBox1.BeginUpdate();
               this.listBox1.DataSource = this.files.ToList();
               this.listBox1.EndUpdate();
           } // if
       } // using
   }

   private void ListBox1_DoubleClick(object sender, EventArgs e) {
       this.PlaySongFile(((ListBox)sender).SelectedIndex);
   }

   private void PlaySongFile(int fileIndex) {
       ListBox lb = this.listBox1;
       lb.SetSelected(fileIndex, true); // Select the item/song name that is being played.

       KeyValuePair<string, string> file = (KeyValuePair<string, string>)lb.SelectedItem;
       this.axWindowsMediaPlayer1.URL = file.Value; // full file path
       this.axWindowsMediaPlayer1.Ctlcontrols.play();
   }

   private void AxWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) {

       if (e.newState == WMP_MediaEnded) {
           int selectedIndex = this.listBox1.SelectedIndex;
           if (this.files.Count < (selectedIndex - 1)) {
               this.PlaySongFile(selectedIndex + 1); // Play next item/song file.
           }
       }
   }

}


Nota: Es solo un código de ejemplo para que lo adaptes a tus necesidades, falta que asocies los controladores de evento en el código, no he comprobado que funcione lo de reproducir canciones en el WMP, y tampoco he implementado la funcionalidad de la lista de reproducción ya que lo he propuesto como una mejora opcional y bueno... no voy a hacer yo todo el trabajo, jeje.

Saludos.
#1673
Cita de: Orubatosu en 12 Octubre 2017, 10:14 AM
¿Sabes?... es mucho mas sencillo y obvio asumir que viste una versión diferente de la original y creiste en ese momento que "era así". Las realidades no cambian, la memoria de las personas es muy fragil y poco fiable

hmmm... ya. Me gustaría ver si seguirías opinando lo mismo si en lugar de cuestionarme a mi, estuviesemos cuestionandote a ti, y lo que se estuviese cuestionando en concreto fuese el color del cielo, donde tu dirías que para ti es (o era) azul, pero para los demás es de otro color, y claro, tu parecerías un "loco" diciendo que el cielo siempre ha sido de otro color al que tu sabes y recuerdas. Ya veriamos como te quedarías si alguien te responde tan pancho diciendo "Las realidades no cambian, la memoria de las personas es muy fragil y poco fiable" cuestionándote algo que sabes a la perfección que no se le puede atribuir a un fallo de la mente ni nada por el estilo... pero claro, a esa persona no se lo pdorías demostrar, tendrías que tragarte sus palabras y dejar que él siga en su incredulidad.

Como ya dije al principio, de nada sirve intentar debatir este tema para intentar demostrar nada, sencillamente es imposible, una vez que la realidad ha cambiado... la única prueba que permanece está en la memoria del que recuerda.

Cita de: Orubatosu en 12 Octubre 2017, 10:14 AM
Seguro que conoces el cuadro "La Gioconda". Lo conoce TODO el mundo. Ahora quiero saber cuantos pueden decir sin mirar el cuadro en internet, "de memoria" cuantos arcos tiene el puente que se ve a su derecha.

¿Como... que... puente?.... pues si, hay un puente pequeño en el fondo ¿Era invisible y nadie lo había visto? No, muchos estudiantes de arte te dirán que "siempre ha estado ahí" pero los que solo "miran" el cuadro no se centran en esos detalles

Sé por donde vas, y no me puedes pretender tener el descaro de comparar un diminuto puente que hace de "bulto" en el cuadro (puesto que es un retrato, los detalles del paisaje son algo en lo que las personas por lo general no van a fijar toda su atención, a menos que estudien arte como tú has dicho) con la capacidad que tiene el ser humano por naturaleza para grabar en su cerebro y recordar el aspecto facial de una persona y/o caricatura, como "animales" sociales que somos, está en nuestros genes quedarnos con las caras y los gestos de la gente... es lo primero que hacemos al conocer a alguien.

No voy a hablar sobre ese efecto mandele relacionado con la sonrisa de la mona lisa, por que sinceramente es algo que yo no sabría decir, no lo recuerdo perfectamente, pero quien sabe.

saludos
#1674
Cita de: Orubatosu en 12 Octubre 2017, 00:31 AMTu dices que "todos sabemos que"... pues oye, yo la he visto varias veces expuesta (por ejemplo en el museo de arte contemporaneo de Tokyo) y está con la mano en la barbilla

De hecho lo "dificil" es encontrar una imagen donde esté con la mano como un puño en la frente, lo que me hace pensar que debe de tratarse de alguna otra obra

Que tu la hayas visto con la mano en la barbilla solo significa que esa es tu realidad. Es imposible discutir este tema para llegar a una "prueba convincente" que valga para ti, puesto que en tu realidad la mano siempre ha estado en la barbilla. Seguirás diciendo que la excultura siempre ha sido así, que la has visto, que no existen imágenes de la escultura con la mano en la frente, etc, cosa que es verdad (en esta realidad), pero también es verdad que la escultura tenía la mano puesta en la frente, y eso una persona incapaz de asimilar que la realidad pueda haber cambiado pues... eso, no lo puede asimilar. A mi me cuesta mucho asimilarlo.

Saludos
#1675
Cita de: BloodSharp en 11 Octubre 2017, 06:05 AMsolo hace falta encontrar algún enlace de iptv/rtsp correcto de tu país

Ejemplo: canal 26 de argentina rtsp://live-edge01.telecentro.net.ar:80/live/26hd-720

Gracias pero la idea es apoyarme en un programa que controle ese tipo de cosas y proporcione ya los canales para no tener que preocuparme yo de investigar y encontrar direcciones de streaming iptv/rtsp e ir renovándolas con el tiempo por que supongo que irán muriendo o cambiando...

La idea que me propones si no he entendido mal consiste en ir construyendo tu propia lista de canales, uno a uno. No es lo que yo tenía pensado, jeje.

gracias igualmente.

saludos!
#1676
Bueno, he vuelto a ver la primera parte de la película Matrix, y no puedo expresar la sensación de querer convencerme a mi mismo que debo estar teniendo un mal sueño, que esto no puede ser real...al comprobar con mis propios ojos que efectivamente la frase del diálogo de Morfeo ha dejado de existir en la película, o al menos en esta realidad.

Aunque algo mucho más desconcertante es saber que la pose de la escultura del pensador ("The Thinker") ha cambiado de forma y de posición en esta realidad:



Así es, NO ES NINGUNA BROMA, la imagen de la parte derecha no es ningún fake, así es la postura actual de la mano en esta realidad. Esa escultura tan filosófica, una imagen que a algunos nos ha acompañado y guiado durante toda la vida y la hemos grabado a la perfección en la mente y... sabemos que en otra realidad la mano estaba colocada a la altura de la frente y cerrada pareciendo un puño.
Para aquél que tenga "residuos" y recuerde a la perfección la pose de la mano y crea que todo esto del Efecto Mandela es una broma de mal gusto, esa persona puede buscar fotografias de la escultura del pensador en Google, y puede informarse sobre el Efecto Mandela en general, se va a llevar una sorpresa muy abrumadora...

Yo no tengo palabras para describir el total surrealismo de los cambios que he notado en algunos pequeños detalles de esta realidad, los cuales he descubierto gracias a que he fijado mi atención en investigar sobre casos genuinos del Efecto Mandela (de los cuales obviamente no puedo confirmar que todos sean verdad y no una simple confusión colectiva de la gente, pero los casos que he expuesto en este tema son genuinos, reales, por que yo lo sé, no es que lo recuerde, es que lo sé, lo he vivido en mi persona, cosas que tengo grabadas y sé a la perfección como los números, los nombres de los meses, o mi nombre y apellidos, aunque eso no le vaya a servir como argumento a ningún escéptico, cosa que comprendo y respeto).
Soy consciente de que hablar de esto parece una locura, pero ahí tienen la prueba, aquellos que todavía recuerden la pose de la escultura, miren la maldita foto, ahi tienen una prueba de que esta realidad ha cambiado para ustedes y para millones de personas, y seguirá cambiando en el futuro, es evidente que las cosas seguirán cambiando, la prueba es la realidad que vivimos ahora y que compartimos con gente que recuerda cosas diferentes a la realidad del pasado que nosotros recordamos, que digo, ¿recordamos?, no, ¡sabemos! que era  una realidad distinta con la misma nitidez como sabemos cual es nuestro nombre y apellidos y con la misma cordura como cuando hacemos uso del pensamiento humano para razonar.

Simplemente increible, este fenónemo (¿natural?) es algo increible, no se puede explicar el por qué, ni el como, pero ahí está... sucediendo sin más, sin saber hasta donde llegará, o si algún dia se detendrá y los cambios se acabarán. No hay debate posible sobre si todo esto es un fallo del cerebro o de verdad la realidad actual ha cambiado. Sucede sin más, y jamás nadie que se de cuenta lo podrá demostrar a aquellas personas escépticas que recuerdan o mejor dicho saben como son las cosas en esta realidad de forma distinta a la que nosotros sabemos como fueron en otra realidad distinta. Es bastante confuso dicho así, lo sé.




Dentro de la perplejidad que nos puede causar en la mente y el cuerpo por causa de ser "víctimas" de este fenómeno del Efecto Mandela, quiero compartir el video de un hombre que intenta expresar su opinión con la mayor seriedad posible sin dejarse caer en el más profundo pozo de locura... (lo sé, a veces me pongo demasiado dramático)

[youtube=640,360]https://www.youtube.com/watch?v=uMufUfQBqMk[/youtube]

PD: por cierto el tio tambien habla sobre el efecto mandela que concierne a la escultura del pensador.

Gracias por leer.
#1677
Scripting / Re: [Batch] Duda con instrucción
11 Octubre 2017, 05:42 AM
Esta linea la has cambiado en el último código que has mostrado:
Citarmove "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\%nombre%?.cas" "L:\Juegos 2\%nombre%\%fecha%" - "%nombre%\MSX MSX\CAS"

Si eso lo tienes así en tu script actual, entonces le estás pasando tres argumentos de más al comando Move y probablemente por eso no te funcione:
"L:\Juegos 2\%nombre%\%fecha%" - "%nombre%\MSX MSX\CAS"

1. "L:\Juegos 2\%nombre%\%fecha%"
2. "-"
3. "%nombre%\MSX MSX\CAS"

Debes encerrar todo el argumento entre comillas dobles como mostraste en tu primer script:
"L:\Juegos 2\%nombre%\%fecha% - %nombre%\MSX MSX\CAS"




De todas formas en ese código que has msotrado estás realizando bastante cantidad de pasos innecesarios que puedes reducir a simplemente esto:

Código (dos) [Seleccionar]
@Echo OFF & Title Mover Archivo

SET /P "name=Introduzca nombre:"
SET /P "year=Introduzca fecha:"

Set "dirPath=L:\Juegos 2\%name%\%year% - %name%\MSX MSX\CAS\"
MKDIR "%dirPath%"

MOVE "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\%name%.cas" "%dirPath%"

Pause
Exit /B 0


Ese código debería funcionarte...siempre que la ruta de origen exista ( "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\%name%.cas" ). Pruébalo.

PD: Por cierto, seguro que el nombre de la carpeta de destino debe ser "MSX MSX", y no "MSX\MSX? (dos carpetas), lo pregunto por que en la ruta de origen tienes dos carpetas llamadas "MSX", no una carpeta "MSX MSX". Yo creo que a lo mejor por ahí has tenido otro fallo al escribir la ruta XD...




Cita de: lsfer010 en 11 Octubre 2017, 04:02 AMposteriormente espero que además pueda ubicarse en la carpeta de las rooms sin organizar y tome en automático el nombre y fecha del primer elemento y así en un ciclo

¿Y has pensado que ocurriría si el nombre de la ROM/carpeta contiene un guión?, por ejemplo: "metal-gear - 1987", seguro que tienes alguna ROM con guión en el nombre.

Sería muy tedioso intentar parsear correctamente nombres así para prevenir falsos positivos en un "lenguaje" tan limitado como Batch, para eso te conviene más usar expresiones regulares...en cualquier otro lenguaje (mi recomendación personal: PowerShell).

Saludos
#1678
Cita de: **Aincrad** en 11 Octubre 2017, 04:40 AM
si , pero si por lo menos quiero guardar ese bat con codificación ANSI .
seria algo como esto?

Código (vbnet) [Seleccionar]
Dim ruta As String = dirPath & "usb.bat"
           Dim escritor As StreamWriter
           escritor = (File.AppendText(ruta, True, System.Text.ASCIIEncoding.ASCII.GetEncoding))
           escritor.Write(TextBox1.Text)
           escritor.Flush()
           escritor.Close()


aun así me marca error. no logro guardarlo en ansi.  :-(

tampoco lo logro con :  Encoding.GetEncoding(1252) creo que lo estoy escribiendo mal-

Ese código te tiene que dar varios errores de sintaxis ya que la función File.AppendText() solo acepta 1 argumento, y además la descripción de la función especifica de forma muy clara y concisa que el texto adjuntado en el archivo será en codificación UTF-8 (o dicho de otra forma, la función devolverá una instancia de la clase StreamWriter que escribirá el output en codificación UTF-8). ¿por qué no lo lees?, pasa el puntero del ratón por encima del nombre de la función, y lee la descripción...

Lo repito de nuevo a modo de consejo: mírate las sobrecargas del constructor de la clase StreamWriter, verás que hay un parámetro para poder especificar la codificación de texto...

De todas formas me da la sensación de que estás mezclando cosas intentando hacer más pasos de los que realmente son necesarios para lograr el objetivo de escribir un archivo de texto/bat, te debería ser suficiente con reemplazar todo ese código que tienes y en su lugar utilizar el método File.AppendAllText() de la siguiente manera:
Código (vbnet) [Seleccionar]
File.AppendAllText("C:\Archivo.bat", "contenido del bat", Encoding.Default)

Nota: la propiedad Encoding.Default devuelve la codificación de texto ANSI actual que tengas activada en tu sistema operativo, es decir, Windows-1252, pero si lo prefieres puedes especificar de forma manual el código de páginas ANSI (o el nombre) exacto:
Código (vbnet) [Seleccionar]
File.AppendAllText("C:\Archivo.bat", "contenido del bat", Encoding.GetEncoding(1252))

Si realmente necesitases utilizar la clase StreamWriter, te muestro un ejemplo de como lo puedes hacer:
Código (vbnet) [Seleccionar]
Using sw As New StreamWriter("C:\Archivo.bat", append:=False, encoding:=Encoding.Default, bufferSize:=8192)
   sw.AutoFlush = True
   sw.Write("Contenido del bat")
End Using

( "Contenido del bat" = TextBox1.Text )

Saludos.
#1679
Cita de: **Aincrad** en 11 Octubre 2017, 04:22 AM
otra preguntilla.

Código (vbnet) [Seleccionar]
...
Dim escritor As StreamWriter
escritor = File.AppendText(ruta)
...


bueno el problema es que al crear el batch lo crea con codificación UTF-8 y lo que quiero es que lo cree con codificación ANSI , Como le hago?

Tómate 1 minuto de tiempo para revisar la parametización de las sobrecargas del constructor de la clase StreamWriter y te prometo que hallarás la respuesta a tu pregunta por tus propios méritos y en muy poco tiempo...

( Ni siquiera tienes que hacer el esfuerzo de buscar en Google ni en MSDN, basta con que uses las funcionalidades de IntelliSense en la ventana del editor de código de Visual Studio para ir analizando las sobrecargas y leer la descripción/propósito de cada parámetro... )

PD: Si no lo consigues averiguar o no me has entendido bien entonces dímelo y te diré la solución, pero esto deberías aprenderlo por ti solo por que es una pregunta que no debería hacer falta preguntar si te hubieras esmerado en leer por 1 minuto las sobrecargas...




Cita de: **Aincrad** en 11 Octubre 2017, 02:33 AMmeter un .exe dentro de un formulario y ejecutar ese .exe incrustado

Imagino que a lo que realmente estás intentando referirte es que quieres embedir o simplemente agregar un executable a tu executable compilado, bien, en ese caso sencillamente puedes agregar el executable deseado a la tabla de recursos de tu proyecto, puedes hacerlo desde la pestaña "Recursos" en las propiedades del proyecto:


Una vez hayas agregado el executable, se serializarán los bytes dentro del archivo resources.resx (este archivo representa el contenido de la tabla de recursos .NET de tu programa).

Tienes dos modos de ejecutar en tiempo de ejecución el executable agregado como recurso:

--- EL SIGUIENTE CÓDIGO HA SIDO EXTRAIDO Y OFRECIDO DE FORMA GRATUITA A PARTIR DE MI FRAMEWORK COMERCIAL ELEKTROKIT FRAMEWORK , EL CUAL CONTIENE UNA INFINIDAD DE UTILIDADES ENFOCADAS A UNA AMPLIA VARIEDAD DE TEMÁTICAS Y ESCENARIOS EN LA PROGRAMACIÓN .NET, COMO ÉSTE. SI QUIEREN CONOCER MÁS ACERCA DEL PRODUCTO, MIREN MI FIRMA DE USUARIO EN EL FORO. ---

1. Extrayendo los datos raw (bytes) del recurso/executable y escribirlos en un archivo local en el disco:

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.IO

#End Region

#Region " Resource Util "

Namespace ElektroKit.Core.Application.Resources.Tools

   Partial Public NotInheritable Class ResourceUtil

#Region " Public Methods "

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Extracts a resource to disk.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' ExtractResourceToDisk(My.Resources.MyTextfile, "C:\File.txt")
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="resource">
       ''' The resource to extract.
       ''' </param>
       '''
       ''' <param name="filepath">
       ''' The target filepath where to save the resource data.
       ''' </param>
       '''
       ''' <param name="overwrite">
       ''' If set to <see langword="True"/>, overwites any existing file,
       ''' otherwise, and if the file already exists, a <see cref="IOException"/> exception is thrown.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub ExtractResourceToDisk(ByVal resource As Byte(),
                                               ByVal filepath As String,
                                               ByVal overwrite As Boolean)

           Dim fileMode As FileMode
           If (overwrite) Then
               fileMode = FileMode.Create
           Else
               fileMode = FileMode.CreateNew
           End If

           Dim bufferSize As Integer = 8192 ' 8 kb.
           Using fs As New FileStream(filepath, fileMode, FileAccess.Write, FileShare.Read, bufferSize)
               fs.Write(resource, 0, resource.Length)
           End Using

       End Sub

#End Region

   End Class

End Namespace

#End Region


Modo de empleo:
Código (vbnet) [Seleccionar]
ResourceUtil.ExtractResourceToDisk(My.Resources.Program1, "C:\Program1.exe", overwrite:=True)
Process.Start("C:\Program1.exe", arguments:="")


2. Siempre y cuando el executable sea un ensamblado .NET, entonces puedes utilizar la tecnología Reflection para cargar el ensamblado en la memoria (es decir, sin la necesidad de crear un archivo local) y ejecutar el punto de entrada o invocación (entry point) del programa:

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions

#End Region

#Region " Resource Util "

Namespace ElektroKit.Core.Application.Resources.Tools

   Partial Public NotInheritable Class ResourceUtil

#Region " Public Methods "

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Loads a resource in memory and executes its main entrypoint.
       ''' <para></para>
       ''' The resource must be a .NET assembly.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Execute(My.Resources.MyProgram)
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="resource">
       ''' The resource to execute.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="EntryPointNotFoundException">
       ''' Entrypoint not found in the specified resource. Are you sure it is a .NET assembly?
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub Execute(ByVal resource As Byte())
           ResourceUtil.Execute(resource, Nothing)
       End Sub

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Loads a resource in memory and executes its main entrypoint.
       ''' <para></para>
       ''' The resource must be a .NET assembly.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Execute(My.Resources.MyProgram, {"Parameter 1", "Parameter 2", "etc..."})
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="resource">
       ''' The resource to execute.
       ''' </param>
       '''
       ''' <param name="parameters">
       ''' The parameters to pass to the method executed.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="EntryPointNotFoundException">
       ''' Entrypoint not found in the specified resource. Are you sure it is a .NET assembly?
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub Execute(ByVal resource As Byte(), ByVal parameters As Object())
           Dim helper As New ExecuteHelper()
           helper.LoadAssembly(resource, parameters)
       End Sub

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Loads a resource in memory and executes its main entrypoint.
       ''' <para></para>
       ''' The resource must be a .NET assembly.
       ''' <para></para>
       ''' If the loaded assembly attempts to force an application termination
       ''' by for example internaly calling <see cref="Environment.Exit"/>, then the call is catched and ignored.
       ''' <para></para>
       ''' The downside is that the loaded assembly will not be able to call (P/Invoke) unmanaged code. You are advised.
       ''' <para></para>
       ''' *** Note that this is a experimental methodology. ***
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' ExecuteSafe(My.Resources.MyProgram)
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="resource">
       ''' The resource to execute.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="EntryPointNotFoundException">
       ''' Entrypoint not found in the specified resource. Are you sure it is a .NET assembly?
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub ExecuteSafe(ByVal resource As Byte())
           ResourceUtil.ExecuteSafe(resource, Nothing)
       End Sub

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Loads a resource in memory and executes its main entry point.
       ''' <para></para>
       ''' The resource must be a .NET assembly.
       ''' <para></para>
       ''' If the loaded assembly attempts to force an application termination
       ''' by for example internaly calling <see cref="Environment.Exit"/>, then the call is catched and ignored.
       ''' <para></para>
       ''' The downside is that the loaded assembly will not be able to call (P/Invoke) unmanaged code. You are advised.
       ''' <para></para>
       ''' *** Note that this is a experimental methodology. ***
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' ExecuteSafe(My.Resources.MyProgram, {"Parameter 1", "Parameter 2", "etc..."})
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="resource">
       ''' The resource to execute.
       ''' </param>
       '''
       ''' <param name="parameters">
       ''' The parameters to pass to the method executed.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="EntryPointNotFoundException">
       ''' Entrypoint not found in the specified resource. Are you sure it is a .NET assembly?
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub ExecuteSafe(ByVal resource As Byte(), ByVal parameters As Object())

           ' This is where the main executable resides. For more info on this, see the "Remarks" section at:
           ' http://msdn.microsoft.com/en-us/library/system.appdomainsetup.applicationbase(v=vs.110).aspx#Anchor_1
           Dim adSetup As New AppDomainSetup()
           adSetup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory

           ' Permissions of the AppDomain/what it can do.
           Dim permission As New PermissionSet(PermissionState.None)
           With permission
               ' All SecurityPermission flags EXCEPT UnmanagedCode, which is required by Environment.Exit() method.
               .AddPermission(New SecurityPermission(SecurityPermissionFlag.AllFlags And Not SecurityPermissionFlag.UnmanagedCode))
               .AddPermission(New EnvironmentPermission(PermissionState.Unrestricted))
               .AddPermission(New EventLogPermission(PermissionState.Unrestricted))
               .AddPermission(New FileDialogPermission(PermissionState.Unrestricted))
               .AddPermission(New FileIOPermission(PermissionState.Unrestricted))
               .AddPermission(New GacIdentityPermission(PermissionState.Unrestricted))
               .AddPermission(New IsolatedStorageFilePermission(PermissionState.Unrestricted))
               .AddPermission(New KeyContainerPermission(PermissionState.Unrestricted))
               .AddPermission(New PerformanceCounterPermission(PermissionState.Unrestricted))
               .AddPermission(New PrincipalPermission(PermissionState.Unrestricted))
               .AddPermission(New ReflectionPermission(PermissionState.Unrestricted))
               .AddPermission(New RegistryPermission(PermissionState.Unrestricted))
               .AddPermission(New SiteIdentityPermission(PermissionState.Unrestricted))
               .AddPermission(New StorePermission(PermissionState.Unrestricted))
               .AddPermission(New TypeDescriptorPermission(PermissionState.Unrestricted))
               .AddPermission(New UIPermission(PermissionState.Unrestricted))
               .AddPermission(New UrlIdentityPermission(PermissionState.Unrestricted))
               .AddPermission(New ZoneIdentityPermission(PermissionState.Unrestricted))
           End With

           ' Our sandboxed AppDomain.
           Dim domain As AppDomain = AppDomain.CreateDomain("SomeGenericName", Nothing, adSetup, permission, Nothing)

           Try
               ' Create an instance of Helper in the sandboxed AppDomain.
               Dim helper As ExecuteHelper = DirectCast(domain.CreateInstanceAndUnwrap(GetType(ExecuteHelper).Assembly.FullName, GetType(ExecuteHelper).FullName), ExecuteHelper)
               helper.LoadAssembly(resource, parameters)

           Catch ex As TargetInvocationException When (ex.InnerException.GetType() = GetType(SecurityException))
               ' Some kind of permissions issue occured here, possibly an attempt to call Environment.Exit() or call (P/Invoke) unmanaged code.
               ' Do Nothing.

           Catch ex As Exception
               Throw

           End Try

       End Sub

#End Region

   End Class

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' A class that serves to execute assemblies that are stored as application resource (eg. My.Resources.MyProgram1 )
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Friend NotInheritable Class ExecuteHelper : Inherits MarshalByRefObject

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Loads the assembly.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="bytes">
       ''' The bytes of the assembly/resource to execute.
       ''' </param>
       '''
       ''' <param name="parameters">
       ''' The parameters to pass to the method executed.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="EntryPointNotFoundException">
       ''' Entrypoint not found in the specified resource. Are you sure it is a .NET assembly?
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       Public Sub LoadAssembly(ByVal bytes As Byte(), ByVal parameters As Object())
           Dim ass As Assembly = Assembly.Load(bytes)
           Dim method As MethodInfo = ass.EntryPoint

           If (method IsNot Nothing) Then
               Dim instance As Object = ass.CreateInstance(method.Name)
               method.Invoke(instance, parameters)
               If (instance IsNot Nothing) AndAlso (instance.GetType().GetInterfaces.Contains(GetType(IDisposable))) Then
                   DirectCast(instance, IDisposable).Dispose()
               End If
               instance = Nothing
               method = Nothing
               ass = Nothing

           Else
               Throw New EntryPointNotFoundException("Entrypoint not found in the specified resource. Are you sure it is a .NET assembly?")

           End If
       End Sub

   End Class

End Namespace

#End Region


Modo de empleo:
Código (vbnet) [Seleccionar]
ResourceUtil.Execute(My.Resources.Program1, parameters:=Nothing)
o bien:
Código (vbnet) [Seleccionar]
ResourceUtil.ExecuteSafe(My.Resources.Program1, parameters:=Nothing)
#1680
Scripting / Re: [Batch] Duda con instrucción
11 Octubre 2017, 03:48 AM
Cita de: lsfer010 en 11 Octubre 2017, 01:14 AM¿Qué me estará faltando para que detecte el contenido de la variable?

La sintaxis del código que has mostrado es correcta, que no te funcione depende de otros factores. Muestra el resto del código relevante.

¿Qué ocurre si ejecutas el siguiente comando?, ¿se muestra correctamente el valor de las variables?:
Echo "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\%nombre%?.cas" "L:\Juegos 2\%nombre%\%fecha% - %nombre%\MSX MSX\CAS"

En caso negativo entonces solo puede haber dos posibles explicaciones: 1. no has asignado un valor a las variables, o 2. estás reasignando el valor de las variables dentro de un bloque FOR o de una subrutina/label y entonces debes habilitar la expansión de variables en tiempo de ejecución, lo que se resolvería de la siguiente manera:

Código (dos) [Seleccionar]
@Echo OFF
SetLocal EnableDelayedExpansion
Set "nombre=valor"
Set "fecha=valor"
...
Move "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\!nombre!?.cas" "L:\Juegos 2\!nombre!\!fecha! - !nombre!\MSX MSX\CAS"


Información más detallada y ejemplos de uso:

Nota: ¿te has dado cuenta de que el nombre del directorio "J Pednitentes" está mal escrito?, asegúrate bien de que el directorio existe y no sea ese el error...




Cita de: lsfer010 en 11 Octubre 2017, 01:14 AM¿Existe algún modificador para que mueva todos los archivos que tengan el mismo nombre? (Hasta cierto carácter)

Si, puedes usar el símbolo del asterisco * y también el símbolo de interrogante ? para definir reglas básicas de coincidencias en el patrón de búsqueda por nombre...

Imagínate que tienes los siguientes archivos en el directorio C:\
Archivo_1.txt
Archivo_22.txt
Archivo_333.txt
Archivo000.txt
Pedro.txt

...y solo quieres mover los archivos cuyo nombre de archivo acaben con guión bajo seguido de una enumeración ("Archivo_1.txt", "Archivo_22.txt", y Archivo_333.txt), entonces utilizarías la siguiente sintaxis:
Código (DOS) [Seleccionar]
Move "C:\Archivo_*.txt" "C:\Destino\"

Información más detallada y ejemplos de uso:

Saludos.