|
5611
|
Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets !! (Compartan aquí sus snippets)
|
en: 26 Marzo 2015, 11:35 am
|
Este snippet sirve para añadir o eliminar de forma muuuuuy sencilla un archivo/aplicación al Startup de Windows mediante el registro, con características interesantes... Modo de empleo: WinStartupUtil.Add(UserType.CurrentUser, StartupType.Run, KeyBehavior.System32, title:="Application Title", filePath:="C:\Application.exe", arguments:="/Arguments", secureModeByPass:=True)
WinStartupUtil.Remove(UserType.CurrentUser, StartupType.Run, KeyBehavior.System32, title:="Application Title", throwOnMissingValue:=True)
Source: ' *********************************************************************** ' Author : Elektro ' Modified : 25-March-2015 ' *********************************************************************** ' <copyright file="WinStartupUtil.vb" company="Elektro Studios"> ' Copyright (c) Elektro Studios. All rights reserved. ' </copyright> ' *********************************************************************** #Region " Usage Examples " 'WinStartupUtil.Add(WinStartupUtil.UserType.CurrentUser, ' WinStartupUtil.StartupType.Run, ' WinStartupUtil.KeyBehavior.System32, ' title:="Application Title", ' filePath:="C:\Application.exe", ' secureModeByPass:=True) 'WinStartupUtil.Remove(WinStartupUtil.UserType.CurrentUser, ' WinStartupUtil.StartupType.Run, ' WinStartupUtil.KeyBehavior.System32, ' title:="Application Title", ' throwOnMissingValue:=True) #End Region #Region " Option Statements " Option Explicit On Option Strict On Option Infer Off #End Region #Region " Imports " Imports Microsoft.Win32 #End Region #Region " WinStartupUtil " ''' <summary> ''' Adds or removes an application to Windows Startup. ''' </summary> Public NotInheritable Class WinStartupUtil #Region " Properties " ''' <summary> ''' Gets the 'Run' registry subkey path. ''' </summary> ''' <value>The 'Run' registry subkey path.</value> Public Shared ReadOnly Property RunSubKeyPath As String Get Return "Software\Microsoft\Windows\CurrentVersion\Run" End Get End Property ''' <summary> ''' Gets the 'Run' registry subkey path for x86 appications on x64 operating system. ''' </summary> ''' <value>The 'Run' registry subkey path for x86 appications on x64 operating system.</value> Public Shared ReadOnly Property RunSubKeyPathSysWow64 As String Get Return "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run" End Get End Property ''' <summary> ''' Gets the 'RunOnce' registry subkey path. ''' </summary> ''' <value>The 'RunOnce' registry subkey path.</value> Public Shared ReadOnly Property RunOnceSubKeyPath As String Get Return "Software\Microsoft\Windows\CurrentVersion\RunOnce" End Get End Property ''' <summary> ''' Gets the 'RunOnce' registry subkey path for x86 appications on x64 operating system. ''' </summary> ''' <value>The 'RunOnce' registry subkey path for x86 appications on x64 operating system.</value> Public Shared ReadOnly Property RunOnceSubKeyPathSysWow64 As String Get Return "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce" End Get End Property #End Region #Region " Enumerations " ''' <summary> ''' Specifies an user type. ''' </summary> Public Enum UserType As Integer ''' <summary> ''' 'HKEY_CURRENT_USER' root key. ''' </summary> CurrentUser = &H1 ''' <summary> ''' 'HKEY_LOCAL_MACHINE' root key. ''' </summary> AllUsers = &H2 End Enum ''' <summary> ''' Specifies a Startup type. ''' </summary> Public Enum StartupType As Integer ''' <summary> ''' 'Run' registry subkey. ''' </summary> Run = &H1 ''' <summary> ''' 'RunOnce' registry subkey. ''' </summary> RunOnce = &H2 End Enum ''' <summary> ''' Specifies a registry key behavior. ''' </summary> Public Enum KeyBehavior As Integer ''' <summary> ''' System32 registry subkey. ''' </summary> System32 = &H1 ''' <summary> ''' SysWow64 registry subkey. ''' </summary> SysWow64 = &H2 End Enum #End Region #Region " Public Methods " ''' <summary> ''' Adds an application to Windows Startup. ''' </summary> ''' <param name="userType">The type of user.</param> ''' <param name="startupType">The type of startup.</param> ''' <param name="keyBehavior">The registry key behavior.</param> ''' <param name="title">The registry value title.</param> ''' <param name="filePath">The application file path.</param> ''' <param name="secureModeByPass"> ''' If set to <c>true</c>, the file is ran even when the user logs into 'Secure Mode' on Windows. ''' </param> ''' <exception cref="System.ArgumentNullException">title or filePath</exception> Public Shared Sub Add(ByVal userType As UserType, ByVal startupType As StartupType, ByVal keyBehavior As KeyBehavior, ByVal title As String, ByVal filePath As String, Optional ByVal arguments As String = "", Optional secureModeByPass As Boolean = False) If String.IsNullOrEmpty(title) Then Throw New ArgumentNullException("title") ElseIf String.IsNullOrEmpty(filePath) Then Throw New ArgumentNullException("filePath") Else If secureModeByPass Then title = title.Insert(0, "*") End If Dim regKey As RegistryKey = Nothing Try regKey = GetRootKey(userType).OpenSubKey(GetSubKeyPath(startupType, keyBehavior), writable:=True) regKey.SetValue(title, String.Format("""{0}"" {1}", filePath, arguments), RegistryValueKind.String) Catch ex As Exception Throw Finally If regKey IsNot Nothing Then regKey.Close() End If End Try End If End Sub ''' <summary> ''' Removes an application from Windows Startup. ''' </summary> ''' <param name="userType">The type of user.</param> ''' <param name="startupType">The type of startup.</param> ''' <param name="keyBehavior">The registry key behavior.</param> ''' <param name="title">The value name to find.</param> ''' <param name="throwOnMissingValue">if set to <c>true</c>, throws an exception on missing value.</param> ''' <exception cref="System.ArgumentNullException">title</exception> ''' <exception cref="System.ArgumentException">Registry value not found.;title</exception> Friend Shared Sub Remove(ByVal userType As UserType, ByVal startupType As StartupType, ByVal keyBehavior As KeyBehavior, ByVal title As String, Optional ByVal throwOnMissingValue As Boolean = False) If String.IsNullOrEmpty(title) Then Throw New ArgumentNullException("title") Else Dim valueName As String = String.Empty Dim regKey As RegistryKey = Nothing Try regKey = GetRootKey(userType).OpenSubKey(GetSubKeyPath(startupType, keyBehavior), writable:=True) If regKey.GetValue(title, defaultValue:=Nothing) IsNot Nothing Then valueName = title ElseIf regKey.GetValue(title.Insert(0, "*"), defaultValue:=Nothing) IsNot Nothing Then valueName = title.Insert(0, "*") Else If throwOnMissingValue Then Throw New ArgumentException("Registry value not found.", "title") End If End If regKey.DeleteValue(valueName, throwOnMissingValue:=throwOnMissingValue) Catch ex As Exception Throw Finally If regKey IsNot Nothing Then regKey.Close() End If End Try End If End Sub #End Region #Region " Private Methods " ''' <summary> ''' Gets a <see cref="RegistryKey"/> instance of the specified root key. ''' </summary> ''' <param name="userType">The type of user.</param> ''' <returns>A <see cref="RegistryKey"/> instance of the specified root key.</returns> ''' <exception cref="System.ArgumentException">Invalid enumeration value.;userType</exception> Private Shared Function GetRootKey(ByVal userType As UserType) As RegistryKey Select Case userType Case userType.CurrentUser Return Registry.CurrentUser Case userType.AllUsers Return Registry.LocalMachine Case Else Throw New ArgumentException("Invalid enumeration value.", "userType") End Select ' userType End Function ''' <summary> ''' Gets the proper registry subkey path from the parameters criteria. ''' </summary> ''' <param name="startupType">Type of the startup.</param> ''' <param name="keyBehavior">The key behavior.</param> ''' <returns>The registry subkey path.</returns> ''' <exception cref="System.ArgumentException"> ''' Invalid enumeration value.;startupType or ''' Invalid enumeration value.;keyBehavior ''' </exception> Private Shared Function GetSubKeyPath(ByVal startupType As StartupType, ByVal keyBehavior As KeyBehavior) As String Select Case keyBehavior Case keyBehavior.System32 Select Case startupType Case startupType.Run Return RunSubKeyPath Case startupType.RunOnce Return RunOnceSubKeyPath Case Else Throw New ArgumentException("Invalid enumeration value.", "startupType") End Select ' startupType Case keyBehavior.SysWow64 Select Case startupType Case startupType.Run Return RunSubKeyPathSysWow64 Case startupType.RunOnce Return RunOnceSubKeyPathSysWow64 Case Else Throw New ArgumentException("Invalid enumeration value.", "startupType") End Select ' startupType Case Else Throw New ArgumentException("Invalid enumeration value.", "keyBehavior") End Select ' keyBehavior End Function #End Region End Class #End Region
|
|
|
5612
|
Programación / Programación General / Re: Ayuda con programa para abrir archivo de audio automaticamente
|
en: 25 Marzo 2015, 17:19 pm
|
Buenas no es tarea, no tengo codigo, mejor dicho, no se de programación, solo quería si era posible que alguien me echara la mano al respecto. no se si alguien seria tan amable...
de todas maneras voy a empezar a aprender la programación porque veo que me es util.. Se considera una tarea puesto que buscas que te den hecho todo el código sin poner ningún esfuerzo por tu parte en el desarrollo del mismo, pero nosotros, quiero decir los usuarios del foro, estamos para orientar y ayudar a resolver problemas específicos; en muchos casos también aportamos códigos ya sean pequeños o extensos para mostrar soluciones a un problema, pero de ahí a hacerle por la cara un proyecto/aplicación entero a alguien eso no estaría bien cómo comprenderás, ya que sería aprovecharse del esfuerzo ajeno y esa persona no habría conseguido que aprendieses nada, pero bueno, dejémoslo estar así si realmente tienes ganas de aprender...
Ya que no tienes preferencia por ningún lenguaje de programación, te muestro un ejemplo en VB.Net, cómo te comenté es algo muy sencillo en este lenguaje de programación (en C# es practicamente lo mismo pero utilizando otra sintaxis), este Snippet monitorea los archivos entrantes del directorio que hay especificado, me suscribo el evento ' FileSystemWatcher.Created' que se dispara para notificar el archivo, y con él hago "lo que quiera" cómo por ejemplo ejecutarlo: Imports System.IO Public Class Form1 Private WithEvents fsw As New FileSystemWatcher With { .Path = "C:\Directory\", .Filter = "*.*", .IncludeSubdirectories = False, .NotifyFilter = NotifyFilters.FileName, .EnableRaisingEvents = True } Private Sub fsw_Created(ByVal sender As Object, ByVal e As FileSystemEventArgs) _ Handles fsw.Created Debug. WriteLine(String. Format("Incoming file intercepted: '{0}'", e. Name)) Select Case Path.GetExtension(e.Name).ToLower Case ".mp3", ".ogg", ".wav" Process.Start("C:\Ruta del reproductor.exe", ControlChars.Quote & e.FullPath & ControlChars.Quote) Case ".jpg", ".jpeg" Process.Start("C:\Ruta del visualizador.exe", ControlChars.Quote & e.FullPath & ControlChars.Quote) End Select End Sub End Class
Si prefieres abrir los archivos con el programa asociado por defecto, entonces simplemente pásale el nombre completo del archivo cómo primer parámetro al método Process.Start() y deja vacio el segundo parámetro. PD: Si tienes dudas sobre las herramientas que son necesarias para compilar el código de arriba, no dudes en preguntar, pero entonces trata de publicar tú pregunta en el subforo dedicado a la programación .Net. Saludos!
|
|
|
5613
|
Sistemas Operativos / Windows / Re: ¿Aplicación que envíe las pulsaciones de teclas a otra aplicación minimizada?
|
en: 25 Marzo 2015, 16:24 pm
|
Lo que parece ser que buscas es un administrador de hotkeys con el que poder registrar una combinación de teclas a la que le puedas asignar una serie de acciones cuando sea pulsada dicha combinación, y teniendo en cuenta que en esas acciones soportadas por ese Software se encuentren las acciones que necesitas de "activar ventana" (es decir, actvar el foco de una ventana localizándola mediante un Título, Handle, o PID) y "enviar keystrokes" (simular pulsaciones del teclado) ...pues, aunque todo es cuestión de buscar a fondo, parece dificil encontrar un Software con tantas características específicas rehunidas. Mediante programación lo podrías hacer tu mismo, depende del lenguaje y de tus conocimientos, no requeriría mucho esfuerzo. PD: Si quieres intertarlo por la vía facil entonces podrías usar el lenguaje AutoHotkey, que está orientado a la automatización de tareas por Macros (y es capaz de registrar un Hotkey global), aunque yo cómo de costumbre recomiendo VB.Net/C# ...que también es facil llevarlo a cabo. EDITO:http://www.hotkeymaster.com/Prueba la característica " Window" y " Keyboard Macro" Saludos!
|
|
|
5614
|
Programación / .NET (C#, VB.NET, ASP) / Re: Extraer datos de CDATA de un archivo XML en C#
|
en: 25 Marzo 2015, 00:44 am
|
Buenas! Para empezar, hay algunos errores en ese documento XML cómo para poder parsearlo. 1. El CDATA de tu documento XML lo tienes mal cerrado en </detalles>]> sería así: </detalles>]]>2. Los elementos <infoTributaria> y <factura> no los cierras en la expresión literal. Una vez hayas corregido esos fallos ...y de paso no te vendría nada mal formatear/indentar el código para hacerlo minimanete legible al ojo humano y así además evitar en el futuro ese tipo de errores que he mencionado, te quedaía más o menos un documento así: <?xml version="1.0" encoding="UTF-8"?> <autorizacion> <estado>AUTORIZADO</estado> <numeroAutorizacion>1703201515411617921521270013730687438</numeroAutorizacion> <fechaAutorizacion>2015-03-17T15:41:16.486-05:00</fechaAutorizacion> <comprobante> <![CDATA[ <?xml version="1.0" encoding="UTF-8"?> <factura id="comprobante" version="1.0.0"> <infoTributaria> <ambiente>2</ambiente> <tipoEmision>1</tipoEmision> <razonSocial>UNNOCYCLES CIA. LTDA.</razonSocial> <nombreComercial>UNNOCYCLES CIA. LTDA.</nombreComercial> <ruc>1792152127001</ruc> <detalles> <detalle> <codigoPrincipal>5132</codigoPrincipal> <codigoAuxiliar>FX150FM-BLA</codigoAuxiliar> <descripcion> MOTO FX 150 FORTE BLANCO MOTOR UNO</descripcion> <cantidad>2</cantidad> <precioUnitario>1887.11</precioUnitario> <descuento>1889.76</descuento> <precioTotalSinImpuesto>1884.46</precioTotalSinImpuesto> <impuestos> <impuesto> <codigo>2</codigo> <codigoPorcentaje>2</codigoPorcentaje> <tarifa>12.00</tarifa> <baseImponible>1884.46</baseImponible> <valor>226.14</valor> </impuesto> </impuestos> </detalle> </detalles> </infoTributaria> </factura> ]]> </comprobante> </autorizacion>
Ahora, solo debes cargar el documento corregido, y cargar la expresión literal cómo si fuese un documento XML adicional, y ya podrás parsear sus nodos/elementos cómo en este ejemplo: ' Valor literal. Dim cdataValue As String = XDocument.Load("C:\Doc.xml"). <autorizacion>.<comprobante>.First.Value. Trim({" "c, ControlChars.Lf, ControlChars.Tab}) ' Documento XML desde un valor literal. Dim xDoc As XDocument = XDocument.Parse(cdataValue) Dim sb As New System.Text.StringBuilder With sb .AppendFormat("Ambiente....: {0}", xDoc.<factura>.<infoTributaria>.<ambiente>.Value) .AppendLine() .AppendFormat("Razón.Social: {0}", xDoc.<factura>.<infoTributaria>.<razonSocial>.Value) .AppendLine() .AppendFormat("Descripción.: {0}", xDoc.<factura>.<infoTributaria>.<detalles>.<detalle>.<descripcion>.Value.Trim(" "c)) End With Trace.WriteLine(sb.ToString)
Saludos
|
|
|
5616
|
Sistemas Operativos / Windows / Re: [Duda y problema] Tengo un problema
|
en: 24 Marzo 2015, 07:46 am
|
1. El tal Spyware Terminator es un producto gratuito, muy mediocre, y con bajos índices de detección que está orientado al spyware con una pobre protección viral adicional, ese programa de poco te sirve en comparación con otros programas comerciales que ya he mencionado.
· ¿Tienes un AntiVirus eficiente instalado en tú sistema?, en caso afirmativo ...¿Cual?, y salta al siguiente punto, en caso negativo, desinstala completamente 'Spyware Terminator' para reemplazarlo, te recomiendo utilizar Malware-Bytes AntiMalware , o Avira , o NOD32, cualquiera de ellos.
2. ¿Has realizado en tu equipo algún escaneo profundo de virus con las firmas de virus actualizadas a la fecha actual?, en caso afirmativo, y suponiendo que el resultado del escaneo haya sido favorable, salta al siguiente punto, en caso negativo, no vale la pena seguir este tema hasta que realices una verificación con un software anti-viral que sea medianamente eficiente.
3. ¿Si reinicias tu equipo en 'Modo Seguro', siguen ocurriendo los problemas de saturación de red que has mencionado?, en caso afirmativo, comenta si notas cualquier diferencia en los síntomas que pueda ser de utilidad para localizar el motivo del problema, y salta al siguiente punto, en caso negativo, con mucha probabilidad puede ser síntoma de una infección de software malicioso y te sugiero volver a leer el primer punto, aunque también podría deberse a conflictos por drivers u otros servicios y/o procesos del sistema.
4. He leido varios comentarios en los cuales afirman que 'Spyware Terminator' disminuye notablemente el rendimiento general del equipo, y además, en tu log parece tener activo un proceso que estaría solicitando y/o recibiendo actualizaciones constantemente o cada "X" intervalos.
· ¿Si desinstalas el tal 'Spyware Temrinator', siguen ocurriendo los problemas de saturación de red que has mencionado?. en caso afirmativo, comenta si notas cualquier diferencia en los síntomas que pueda ser de utilidad para localizar el motivo del problema, en caso negativo, ya has dado con el origen del problema.
Saludos!
|
|
|
5617
|
Programación / .NET (C#, VB.NET, ASP) / Re: DLL en c#
|
en: 24 Marzo 2015, 06:54 am
|
pero cuando estoy usandolo en otro proyecto y ocurre una excepcion no controlada el depurador de visual me manda al codigo de donde ocurrio la exepcion en el dll. Tú mismo te estás respondiendo, eres tú quien tiene VS instalado y quien tiene el depurador de VS adjuntado, por ese motivo se te muestra el código fuente que ha generado la excepción. Cualquier otro PC que no disponga de VS instalado y que no tenga activado/adjuntado el depurador de VS en el S.O, y que además no disponga de los archivos de base de datos de depuración (PDB) entonces no debería poder acceder de forma accidental al código fuente del ensamblado al generarse una excepción, y digo de forma "accidental" por que el código fuente siempre será accesible para cualquier persona que tuviese un conocimiento básico sobre ingenieria inversa mediante Reflection (hay herramientas que facilitan la tarea, como .Net Reflector), a menos que protejas el código mediante empaquetado u ofuscación y esa persona no sea capaz de encontrar la forma de revertir dicha protección. ¿acaso tengo que controlar todas los errores de ejecucion en mi dll antes de generarlo, para que quienes lo usen no puedan acceder al codigo? Pues... hombre, si el código que estás manipulando lanza una excepción entonces desde luego que algo hay mal y eso significa que deberías tratar de corregirlo y/o controlar la excepción, todas las excepciones que haya y además las excepciones que puedas preveer, claro está. De todas formas, y aunque estas técnicas no te las aconsejo EN ABSOLUTO por ser motivo de MUY malas prácticas de programación: · En Vb.Net puedes ignorar las excecpciones de un bloque de código específico usando la declaración "On Error" (On Error Resume Next), en C# creo que no existe un equivalente. · Puedes controlar todas las excepciones de un proyecto, suscribiéndote a los siguientes eventos de la aplicación: AppDomain.CurrentDomain.FirstChanceException, AppDomain.CurrentDomain.UnhandledExceptiony Application.ThreadException, pero ten en cuenta que la ejecución se seguirá deteniendo al encontrar una excepción, y se seuirá reportando la excepción. Es algo muy sencillo pero si quieres un mayor control puedes hacer lo mismo con la librería NByg: https://nbug.codeplex.com/· Otra alternativa para ignorar las excepciones sería ejecutar todos los bloques de código pasando las instrucciones cómo parámetro de un método que recibiese cómo parámetro una expresión Lambda, por ejemplo: Public Shared Sub IgnoreExceptions(ByVal action As Action) Try action.Invoke() Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub Test() IgnoreExceptions(Sub() IO. File. Open("", IO. FileMode. Open) End Sub) End Sub
· Por último, otra alternativa para ignorar todas las excepciones, y mi favorita (aunque nunca he tratado de hacerlo de esta manera), sería utilizando técnicas del paradigma AOP (Aspect Oriented Programming), te recomiendo utilizar la librería PostSharp para facilitar dicha tarea, para decorar el código fuente de tal manera que puedas añadir atributos (o Aspects) a un método para ignorar las excepciones. Aquí tienes un ejemplo: http://www.rhyous.com/2012/06/15/aop-implementing-try-catch-in-csharp-with-postsharp/PD: No se si con la versión gratuita de PostSharp se podrá hacer. Saludos
|
|
|
5620
|
Sistemas Operativos / Windows / Re: Procesos dobles
|
en: 23 Marzo 2015, 21:36 pm
|
¿Es normal esto? Depende. Un proceso puede ser single-instance, es decir, de única instancia, o multi-instance, de múltiples instancias (ej: explorer.exe). Cómo el término multi-instance nos indica, el mismo proceso puede ser ejecutado varias veces, por ende se instanciará un proceso adicional con el mismo nombre que el proceso anteriormente instanciado, pero para llamar "clon" a un proceso adicional, éste también debería tener asignado un mismo MUTEX, y un mismo PID o Process Identifier (entre otros factores) para identificar los 2 procesos cómo el mismo proceso, lo que es imposible debido a la naturaleza del S.O. Lo que pretendo explicar con esto es que, encontrar dos procesos con el mismo nombre no es raro, ni mucho menos tiene por que ser síntoma de virus. Por otro lado, un virus puede haber sido desarrollado para suplantar la identidad de otro proceso por ejemplo utilizando un nombre conocido y familiar (ej: taskmgr.exe) para hacerse pasar cómo proceso legítimo y seguro, por ende, sin poder analizar y/o monitorear debidamente los procesos que has comentado aquí no se te puede dar ningún veredicto que sea 100% fiable sobre el origen de esos procesos. Los nombres de los procesos son: igfxsrvc.exe y taskeng.exe El primer proceso, igfxsrvc.exe, supuestamente se refiere a un servicio de Intel, Intel(R) Integrated Graphics Service, en ese caso no sería perjudicial. El segundo proceso, taskeng.exe, parece ser un virus conocido. Fuente(s): http://www.neuber.com/taskmanager/process/igfxsrvc.exe.htmlhttp://answers.microsoft.com/en-us/windows/forum/windows_7-security/what-is-taskengexe/526f43d3-d311-4637-a19a-a76f1ce351fbTus problemas de posibles virus los solucionarías muy sencillamente con un AntiVirus, así de simple, ¿a que esperas pues?, instálate MalwareBytes Anti-Malware, actualiza la base de firmas de virus a día de hoy, y realiza un escaneo profundo del sistema o simplemente escanea esos dos procesos sospechosos que comentaste. Saludos.
|
|
|
|
|
|
|