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

#6091
Cita de: AlonsoCN en 23 Noviembre 2014, 05:58 AM1.-  ¿Hay un lugar donde pueda presentar formalmente con los chicos del foro?

Tu fecha de registro es del 2009, nuevo no eres... solo inactivo, de todas formas un gran ¡Bienvenido al foro!, pero porfavor, leerse los temas con chincheta...


Preséntate aquí si eres nuevo

Saludos
#6092
No se si será un Hash o un algorritmo desencriptable, pero el inicio de la cadena indica que el valor cifrado, al descifrase debería dar como resultado un valor Hexadecimal, quizás ese indicio te sirva para algo a ti o a los que sepan más sobre este tema, así lo veo yo:

0x+(valor Hex cifrado)

Saludos
#6094
Lo que comentas no fue un fallo, te expliqué que podías utilizar la aplicación SetACL para adquirir privilegios, con la aplicación RegIni puedes cambiar los permisos pero no el propietario, aunque si con cambiar los permisos te sirve para el caso entonces perfecto y no se hable más :P.

Donde si que cometí un fallo con las prisas es aquí, se me olvidó añadir la variable para eliminar las claves de forma dinámica:
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList"    /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithProgids" /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice"      /F


Cambialo por:
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%FileExtension%\OpenWithList"    /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%FileExtension%\OpenWithProgids" /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.%FileExtension%\UserChoice"      /F


Me alegro de que te haya servido :)

Saludos, y no olvides modificar tu mensaje principal para utilizar el icono de resuelto si el tema está resuelto.
#6095
Buenas

1) Muestra las declaraciones de dichas variables, y la parte del código donde accedes a esa variable esperando que sea "0".

2) ¿Ese es el único y principal Form de la aplicación?, ya que en tal caso estás terminando la aplicación correctamente.

Las variables (normales) solo existen durante la instancia del Form/Class donde se encuentren, y si ese es el Form principal entonces todo tipo de variable/objeto solo existe mientras la app esté en ejecución, es decir, si terminas la app y la vuelves a iniciar toda variable debería volver a su valor por defecto (ya sea este valor "0" o el valor que le asignaste por defecto),
de todas formas no se si ese es el Form principal o un Form secundarío ni si estás usando variables compartidas u otra cosa, así que prueba a utilizar el evento FormClosing para "resetear" las variables, aunque esto no es necesario en caso de que solo tengas un Form en tu aplicación:

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

   Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
   Handles MyBase.Shown

       Form2.Show()
       Debug.WriteLine(String.Format("Valor de 'Var' despues de cargar el Form2: {0}", CStr(Form2.var))) ' 5

       Form2.Close()
       Debug.WriteLine(String.Format("Valor de 'Var' despues de cerrar el Form2 de forma normal: {0}", CStr(Form2.var))) ' 5

       Form2.Close(resetVars:=True)
       Debug.WriteLine(String.Format("Valor de 'Var' despues de cerrar el Form2 de forma alterna: {0}", CStr(Form2.var))) ' 1

   End Sub

End Class


Form2:
Código (vbnet) [Seleccionar]
Public Class Form2

   ' Declaro e inicializo la variable con el valor por defecto "1".
   Public Shared var As Integer = 1

   Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs) _
   Handles MyBase.Load

       ' Cambio el valor de Var al cargar este Form.
       var = 5

   End Sub

   Public Overloads Sub Close(ByVal resetVars As Boolean)

       If resetVars Then ' reseteo la variable a su valor or defecto.
           var = 1
       End If

       ' Llamo al método close de la clase base.
       MyBase.Close()

   End Sub

End Class


PD: Otra cosa que puedes hacer (en caso de que sea un Form secundario) es utilizar el método Form.Dispose, con esto se liberan sus recursos.

Saludos
#6096
A ver, lo he testeado en una instalación limpia (en una máquina vitual)

En un principio como ya te comenté, el método que yo tutilizo para modificar una asociación me funciona sin problemas (que es la misma metodología que utilizo en aquél Batch-Script),
sin embargo, la extensión PNG (al igual que JPG) son extensiones que ya están registradas por Windows... por defecto, veo varias referencias a alguna CLSID y otras cosas, y, aunque a mi me funcione cómo lo hago, puede que haya obviado algún detalle a tener en cuenta en ciertas circunstancias como las de tu equipo.

Prueba este método "forzoso", reseteando/eliminando las MRU:

Código (ini) [Seleccionar]
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.png]
@="MyAssoc.PNG"
[HKEY_CLASSES_ROOT\MyAssoc.PNG]
@="Imagen PNG"
[HKEY_CLASSES_ROOT\MyAssoc.PNG\Shell\Open\Command]
@="\"C:\\Windows\\System32\\mspaint.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.png]
@="MyAssoc.PNG"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAssoc.PNG]
@="Imagen PNG"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAssoc.PNG\Shell\Open\Command]
@="\"C:\\Windows\\System32\\mspaint.exe\" \"%1\""

[-HKEY_CLASSES_ROOT\.png\OpenWithProgIds]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithProgids]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice]


En Batch:
Código (dos) [Seleccionar]
@Echo OFF

Set "FileExtension=png"
Set "TypeName=MyAssoc.PNG"
Set "FileDescription=Imagen PNG"
Set "Application=C:\Windows\System32\mspaint.exe"

(
REG ADD "HKCR\.%FileExtension%"              /V "" /D "%TypeName%"                /F
REG ADD "HKCR\%TypeName%"                    /V "" /D "%FileDescription%"         /F
REG ADD "HKCR\%TypeName%\Shell\Open\Command" /V "" /D "\"%Application%\" \"%%1\"" /F

REG ADD "HKLM\SOFTWARE\Classes\.%FileExtension%"              /V "" /D "%TypeName%"                /F
REG ADD "HKLM\SOFTWARE\Classes\%TypeName%"                    /V "" /D "%FileDescription%"         /F
REG ADD "HKLM\SOFTWARE\Classes\%TypeName%\Shell\Open\Command" /V "" /D "\"%Application%\" \"%%1\"" /F
)1>NUL

(
REG DELETE "HKCR\.%FileExtension%\OpenWithProgIds"                                                 /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList"    /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithProgids" /F
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice"      /F
)1>NUL 2>&1

Pause&Exit


PD: Lo mismo para el formato JPG

Saludos
#6097
Cita de: DarK_FirefoX en 19 Noviembre 2014, 19:19 PM¿que es Result2255 y que hace Count?

El objeto Result2255 es una colección genérica ( List(Of Integer) ), y por ende la propiedad Count ya sabes o ya te puedes hacer una idea de para que sirve:
http://msdn.microsoft.com/en-us/library/vstudio/bb919303%28v=vs.90%29.aspx

PD: No, no soy mago, es que cada semana surge un nuevo problema con las listas de luis456 xD.




Cita de: luis456 en 20 Noviembre 2014, 07:52 AMLabel1.Text = Result2255.Count.ToString()
me muestra la cuenta en cualquier parte del formulario y no dentro del lebel ???

En tu caso el problema solo puede ser uno de estos tres:

1) Tienes esa instrucción dentro de un bloque try/catch, y la instrucción no se llega a procesar.
2) Por un descuido sin darte cuenta estás borrando/limpiando el texto del Label después de esa instrucción.
3) El control no es visible, ya sea por que utiizaste la propiedad Control.Visible = False, o por que pusiste el Label detrás de otro control, o pones un contorl delante en tiempo de ejecución.
4) Estés intentando asignarle un texto de forma asíncrona al Label y nunca se llegua a procesar la instrucción.

En cualquier caso sin ver el código es imposible ayudar, pero eso te debería servir para encontrar el fallo... porque seguro que es una "tontería" como las que he comentado, revisa el code bien.

Saludos
#6098
Creeme, esa clave de registro que te ha comentado tu compañero no es importante, solo almacena la elección del programa que haces en la lista de programas que te muestra Windows para abrir el archivo (Click derecho > Abrir con...), eso no tiene que ver con la asociación del archivo sino con tu elección favorita.
Aquellas claves que sí tienen que ver con la asociación son las que te expliqué, las claves que modifico en aquél Batch-Script.

EDITO: luego editaré este mensaje para proponerte alguna otra solución




De todas formas te explico el Error de acceso:
A lo que se deniega el acceso es al intento de modificación del registro, no tiene que ver con el archivo en si mismo, el archivo no está protegido;
ciertas partes del registro están protegidas por defecto al igual que ciertos archivos sensibles del sistema están protegidos, ambos necesitan adquirir privilegios para su modificación y/o eliminación (a pesar de que ya seas Administrador en el equipo, un Administrador no tiene privilegios sobre todo).

Puedes utilizar la aplicación SetACL para adquirir privilegios de forma automatizada sobre dicha clave: https://helgeklein.com/download/

Ejemplo, en Batch:
Código (dos) [Seleccionar]
@Echo OFF

Set "RegKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice"

".\SetACL.exe" -on "%RegKey%" -ot "reg" -ownr "n:%UserName%"        -rec "Yes" -actn "setowner" -silent
".\SetACL.exe" -on "%RegKey%" -ot "reg" -ace  "n:%UserName%;p:full" -rec "Yes" -actn "ace"      -silent


(o también puedes hacerlo de forma manual desde el regedit)

Después de eso ya podrás modificar/eliminar la clave en cuestión.

Saludos!
#6099
Cita de: Kaxperday en 19 Noviembre 2014, 22:49 PM
Gracias por la respuesta elektro lo tendré en cuenta la verdad que con el doenvents se pinza tambien, pasado un rato se pinza, tendré que aprender a usar eso de threads, aunque cuantos deberái crear?

Solo un proceso hijo para que haga la descarga bastaría no? y no se pinzaría verdad?

O necesito varios, ¿qué garantías me dan los threads y cuantos he de usar?

Gracias.

No he visto el código que tienes y dependiendo de la situación/código recomiendo una cosa u otra, pero me hago una idea que debe ser un código bastante "tocho" donde haces peticiones a webs y procesas los source y tal así que creo que lo mejor en tu caso sería que arrastrases al Form un BackgroundWorker (solo uno) y utilices sus eventos para realizar la tarea del Web-Spider en segundo plano, tanto acceder a webs como la descarga.

Formas hay muchas, y te sirve por igual un Thread, Task, o BackgroundWorker, pero veo mucho más apto el BakgroundWorker en tu caso por que debes ir actualizando el estado de las descargas y tal en la UI (o eso pre-supongo sin haber visto el code), y el BakgroundWorkers te facilida esa tarea de "actualización" gracias a los eventos que dispone a los que puedes suscribirte.

¿Garantías?, lo que ocurra en segundo plano se queda en ese segundo plano, quiero decir que la UI (que es el thread principal) no se va a colapsar/colgar/laguear en ningún momento si elaboras bien el código, es decir, sin usar el For en el thread de la UI por que eso es lo que genera el colapso, lo que tengas que hacer hazlo en segundo plano.

Te sugiero leer ejemplos donde usen BakgroundWorkers para aprender su funcionamiento y no cometer errores, ya que no es cosa de 1 día y quizás no te salga como esperas a la primera:
http://lmgtfy.com/?q=codeproject+backgroundworker

PD: Y si estás usando .Net Framework 4.5 te puedes servir también de las "nuevas" declaraciones asíncronas:
Asynchronous Programming with Async and Await

Saludos!
#6100
Cita de: Kaxperday en 18 Noviembre 2014, 18:55 PMApplication.DoEvents();

En vb6 vale, pero hay mitos y leyendas sobre la instrucción "DoEvents" en .Net, es una solución al problema que tienes pero que acarraerá otro tipo de problemas en segundo plano... por ejemplo el "lag" al que te refieres ya que la instrucción "DoEvents" se procesa cada cierto tiempo dentro del búcle que hiciste, no es nada recomendable usar esa "técnica" ni siquiera como último recurso, más cuando tienes una multitud de alternativas que son las que debes utilizar.

Lo que te ocurre con la aplicación es lo más normal del mundo ya que es single-thread. La duda que tienes es debido a una falta de conocimientos y entendimiento sobre lo que estás haciendo, sobre un concepto muy importante de la proramación;
Debes aprender programación asíncrona, el uso del multi-threading:

BackgroundWorker Class (System.ComponentModel)
Thread Class (System.Threading) - MSDN
Task Class (System.Threading.Tasks) - MSDN


Cita de: Kaxperday en 18 Noviembre 2014, 18:37 PMHe probado a ponerle Thread.Sleep(10); pero nada sigue igual.

Esa instrucción precisamente debes evitar usarla, ya que sirve para detener la ejecución del thread actual... (es decir para "colgar" la app y dejarla sin respuesta)

En otras palabras, las tareas "intensivas" debes realizarlas en segundo plano (sub-threads) sí o sí para no colapsar/colgar el thread actual, no utilices DoEvents.

Saludos