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

#5021
Cita de: sadajuyar0 en 10 Junio 2015, 18:13 PMPosiblemente Off topic (No le encuentro relación directa)
Durante mi experimentación con el script, encontré algo que me ha dejado desconcertado. A modo de ensayo ejecuté directamente el método :RebuildIconCache (yo se que no funciona así) pero la salida en la consola fue de lo más extraña. Se referencia un archivo llamado @OpenWithToastLogo.png en "C:\Windows\WinSxS\wow64_microsoft-windows-openwith_31....alphanumeric...." del cual no consigo ninguna información en internet. Y no entiendo por qué se llama así WTF!?

Es extraño lo que comentas.

El nombre "xxxOpenWithxxx" ya explica por si mismo o da una pista de a que característica de Windows pertenece, adentro de esa carpeta encontrarás una aplicación llamada "openwith.exe", la cual puedes iniciar por linea de comandos para pasarle el argumento de un archivo, es el menú "Abrir Con..." de Windows:



El archivo '@OpenWithToastLogo.png' intuyo que puede ser el recurso de imagen que se usa de fondo cuando haces click en la siguiente casilla, ya que parece ocupar 32x32:



Eso no lo he comprobado, solo es una suposición, a donde quiero llegar es que de todas formas ese archivo no es "importante" o "sospechoso", se trata de un archivo de Windows, y el nombre "xxxLogo.png" también explica por si mismo que no hay que preocuparse por ese archivo.

Respecto al resto de tus dudas, el directorio 'WinSXS' es donde Windows almacena los archivos de instalación, los archivos originales para que en "X" momento puedan ser restaurados si es necesario, también almacena actualizaciones y las versiones anteriores de archivos, es practicamente una copia de seguridad que NO se debe eliminar (aunque puedes eliminar bastantes archivos de forma parcial para reducir el tamaño del directorio en gran medida, si sabes lo que haces);
la cadena de texto alfanumérica a la que te refieres es un número único de identificación (pues de algún modo Windows ha de poder identificar versiones distinstas de los mismos archivos), que consiste en dos hashes, la build de Windows, y la cultura de los archivos (la región del país).

Saludos!
#5022
Cita de: Meta en 10 Junio 2015, 14:13 PM
Lo dejaré así mismo, me gusta.

Código (csharp) [Seleccionar]
textBox_Layout.Text = string.Format("0x{0}", VARIABLE.Layout);

Pero eso que haces no tiene ningún sentido aunque te guste; "0x" es el prefijo estándar para un valor hexadecimal, pero la propiedad "Layout" devuelve un valor decimal entre 0 y 255, es decir, un Byte.

Si haces eso solo conseguirás mostrar resultados confusos en la UI.

Saludos!
#5023
El formato que le das al string es incorrecto, lee el ejemplo que he añadido en mi última respuesta.

Saludos!
#5024
Cita de: Meta en 10 Junio 2015, 12:56 PM
Auí hay una Web perfecta para convertir códigos.
https://www.easycalculation.com/hex-converter.php

O verlo directamenta la tabla ASCII.
http://www.elcodigoascii.com.ar/codigo-americano-estandar-intercambio-informacion/codigo-ascii.gif

El 12 que presenta es decimal, quiero se se vea hexadecimal, que es 0C. (En C# se presenta así 0x0C).

No necesitas recurrir a ningún servicio online ni tabla de caracteres, la librería de clases de .Net Framework tiene varias funciones built-in para llevar a cabo ese tipo de conversiones.

Convert.ToInt32 Method - MSDN
Convert.ToString Method - MSDN
Convert.ToChar Method - MSDN
y:
String.Format Method - MSDN

PD: Fíjate en el parámetro 'fromBase' de los overloads de la función Convert.ToInt32, y el parámetro 'toBase' de los overloads de la función Convert.ToString.

Ejemplo:
Código (vbnet) [Seleccionar]
String.Format("0x{0}", Convert.ToString(255, toBase:=16))

Saludos!
#5025
Windows / Re: problemas de rendimiento
10 Junio 2015, 12:50 PM
Los problemas de ralentización del navegador suelen ser motivo de tener demasiadas extensiones instaladas las cuales una o varías de ellas puedan causar conflictos de ese tipo;
Ten en cuenta que las extensiones son desarrolladas por terceros programadores, en muchas ocasiones lo suficientemente inexpertos cómo para que sepan realizar una buena administración del uso de la memoria asignada, la recolección de basura, cache/datos temporales, etc.

Empieza por indicar que navegador usas, y también que versión de Windows, eso cómo mínimo, después, indica que extensiones tienes instaladas, y cuantos programas y servicios tienes actualmente ejecutandose en segundo plano bajo Windows.

Realmente no se cómo esperas recibir ayuda cualificada si no das ningún detalle más que "he usado avast y ccleaner". No te dejes ningún detalle en el aire, muestra imagenes o listas de texto de todo lo que he comentado.

De todas formas, para empezar, lo que puedes intentar es desactivar TODAS las extensiones que tengas instaladas, para determinar si notas una estabilización en la velocidad de procesamiento de dicho navegador, en caso de ser así, ya sabes que el problema es alguna de las extensiones que tengas instaladas, y en ese caso puedes ir activándolas una a una con un posterior reinicio del navegador, para determinar que extensión en particular es la que causa el conflicto.

Saludos!
#5026
Meta, fíjate bien en lo que estás haciendo ...leches xD.

La Class "RomDump" la estás declarando e instanciando en el bloque del event-handler "button1_Click", ahí es donde empieza y donde también termina la vida de ese objeto;
luego, tú estás haciendo un (mal) intento de leer esa instancia en otro método distinto, en el bloque del método "Mostar_Datos", no puedes leer una referencia que no existe.

1. Declara una variable 'snesRom' hacia una referencia vacía de la Class 'RomDump', fuera de cualquier método.
Código (csharp) [Seleccionar]
SnesKit.RomDump snesRom

2. Crea una instancia la Class 'RomDump' a la variable 'snesRom', dentro del handler "button1_Click" o dentro del método que prefieras.
Código (csharp) [Seleccionar]
this.snesRom = new SnesKit.RomDump(bytes);

3. Ya puedes leer la referencia de la propiedad 'snesRom.Name' donde quieras:
Código (csharp) [Seleccionar]
MessageBox.Show(snesRom.Name);

Saludos
#5027
Si estás utilizando el método DataGridView.Rows.Add que toma cómo argumento el número de filas a crear, entonces el thread de la UI no se podrá actualizar hasta que finalice dicha operación de inserción de filas, por ende, la UI se congelará.

Habría que ver el código para poder comprobar el qué y cómo lo estás haciendo, ya que quizás haya otros problemas que estén derivando en esa congelación del thread, así que si no das más datos no se te puede ayudar a buscar la solución más eficiente para el problema que sea en cuestión.

De todas formas, puedes añadir las filas de manera asíncrona para solventar el problema de congelación, pero esto tomará bastante más tiempo en añadir todas las filas:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private WithEvents bgw As New BackgroundWorker

   Private Sub Button1_Click(sender As Object, e As EventArgs) _
   Handles Button1.Click

       DataGridView1.ColumnCount = 1
       bgw.RunWorkerAsync()

   End Sub

   Sub DoRowAdd(ByVal dgv As DataGridView, ByVal row As DataGridViewRow)

       If dgv.InvokeRequired Then
           dgv.Invoke(Sub() dgv.Rows.Add(row))

       Else
           dgv.Rows.Add(row)

       End If

   End Sub

   Sub Work(ByVal sender As Object, ByVal e As EventArgs) _
   Handles bgw.DoWork

       For rowIndex As Integer = 0 To Short.MaxValue

           Dim row As New DataGridViewRow
           row.Cells.Add(New DataGridViewTextBoxCell With {.Value = rowIndex})
           Me.DoRowAdd(Me.DataGridView1, row)

       Next rowIndex

   End Sub

End Class


Otra alternativa sería añadir las filas una a una cómo en el ejemplo anterior, pero utilizando el método Application.DoEvents para que tras cada inserción se procese el resto de mensajes (eventos) en cola para actualizar la UI;
el tiempo que se toma en crear las filas es practicamente el mismo que en el ejemplo de arriba.

Código (vbnet) [Seleccionar]
       DataGridView1.Columns.Add(String.Empty, String.Empty)

       For rowIndex As Integer = 0 To Short.MaxValue

           DataGridView1.Rows.Add({rowIndex})
           Application.DoEvents()

       Next rowIndex


También lo que puedes hacer al utilizar el método DataGridView.Rows.Add que toma cómo argumento el número de filas a crear, es suspender la lógica del layout del control, esto aceleraría bastante el tiempo que tarda en agregar todas las filas, pero obviamente no se desbloquearía la UI.

Código (vbnet) [Seleccionar]
       DataGridView1.Columns.Add(String.Empty, String.Empty)
       DataGridView1.SuspendLayout()
       DataGridView1.Rows.Add(Short.MaxValue)
       DataGridView1.ResumeLayout()





EDITO: Ups, perdón, no me di cuenta que lo preguntaste en C#, aquí tienes una conversión online:

Código (csharp) [Seleccionar]

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{

private BackgroundWorker withEventsField_bgw = new BackgroundWorker();
private BackgroundWorker bgw {
get { return withEventsField_bgw; }
set {
if (withEventsField_bgw != null) {
withEventsField_bgw.DoWork -= Work;
}
withEventsField_bgw = value;
if (withEventsField_bgw != null) {
withEventsField_bgw.DoWork += Work;
}
}
}

private void Button1_Click(object sender, EventArgs e)
{

DataGridView1.ColumnCount = 1;
bgw.RunWorkerAsync();

}

public void DoRowAdd(DataGridView dgv, DataGridViewRow row)
{

if (dgv.InvokeRequired) {
dgv.Invoke(() => dgv.Rows.Add(row));

} else {
dgv.Rows.Add(row);

}

}

public void Work(object sender, EventArgs e)
{

for (int rowIndex = 0; rowIndex <= short.MaxValue; rowIndex++) {

DataGridViewRow row = new DataGridViewRow();
row.Cells.Add(new DataGridViewTextBoxCell { Value = rowIndex });
this.DoRowAdd(this.DataGridView1, row);

}

}

}

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


Considero que los otros dos ejemplos no necesitan una conversión a C# para entenderlos.

Saludos!
#5028
No se donde ves tú que la música clásica tenga algo que ver con los nerds, pero bueno. :-\

El chiptune (o música de 8-bits) de tu firma le pega más a los nerds.

Saludos!
#5029
Con el mensaje de error puedes deducir que la propiedad 'Text' del control 'textBox_Nombre_de_archivo' está vacía, ya que le estás pasando un argumento vacío a la función 'Readallbytes', y esto significa que estás intentando utilizar dicha propiedad antes de haberle asignado ninguna ruta de archivo.

Utiliza la propiedad 'FileName' de la instancia de ese diálogo 'OpenFileDialog'.

Saludos!
#5030
¿Y cual es el problema?, si ya tienes una Class que lo hace todo.

¿Y si en lugar de perdir que te lo hagan, mejor preguntas por lo que no entiendas de esa Class, para poder hacerlo por tus propios medios?.

Solo debes leer el archivo.smc de principio a fin para generar un array de Bytes, y pasarle esos bytes cómo argumento al constructor de la Class RomDump, el cual automaticamente llama al método ReadHeader y se asignan los valores a las propiedades de esa Class.

Es muy sencillo de realizar (en apenas 2 lineas de código), pero si no has entendido algo, especifica el que.

Te sugiero leer la documentación de los métodos de lectura de la Class System.IO.File, y la documentación de la Class System.IO.FileStream.

PD: Deja los copy/paste, ¡intenta aprender!.

Saludos!