| |
|
6161
|
Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets !! (Compartan aquí sus snippets)
|
en: 19 Enero 2015, 16:03 pm
|
Compriimir una imagen mediante pérdida de calidad, hasta el tamaño objetivo: ''' <summary> ''' Compress an image to the specified target filesize. ''' </summary> ''' <param name="inputFile">The input image file.</param> ''' <param name="targettFile">The target image file.</param> ''' <param name="targetImageFormat">The target image format.</param> ''' <param name="targetFileSize">The target filesize, in bytes.</param> ''' <exception cref="System.NotImplementedException">Resize Image to -1% and reset quality compression...</exception> Private Sub CompressImage(ByVal inputFile As String, ByVal targettFile As String, ByVal targetImageFormat As ImageFormat, ByVal targetFileSize As Long) Dim qualityPercent As Integer = 100 Dim bmp As New Bitmap(inputFile) Dim codecInfo As ImageCodecInfo = (From codec As ImageCodecInfo In ImageCodecInfo.GetImageDecoders Where codec.FormatID = targetImageFormat.Guid).First Dim encoder As Imaging.Encoder = Imaging.Encoder.Quality Dim encoderParameters As New EncoderParameters(1) Using encoderParameter As New EncoderParameter(encoder, qualityPercent) encoderParameters.Param(0) = encoderParameter bmp.Save(targettFile, codecInfo, encoderParameters) End Using Dim fInfo As New FileInfo(targettFile) Do Until fInfo.Length <= targetFileSize qualityPercent -= 1 If qualityPercent = 50 Then ' Esto lo pongo de manera opcional. Throw New NotImplementedException("Resize Image to -1% and reset quality compression...") End If ' If qualityPercent = 60 Then ' resizePercent -= 1 ' bmp = ImageTools.ResizeImage(bmp, resizePercent) ' qualityPercent = 99 ' End If Using encoderParameter As New EncoderParameter(encoder, qualityPercent) encoderParameters.Param(0) = encoderParameter bmp.Save(targettFile, codecInfo, encoderParameters) End Using fInfo = New FileInfo(targettFile) Loop encoderParameters.Dispose() bmp.Dispose() End Sub
Plus esta funcion para redimensionar una imagen mediante porcentaje, para utilizarla en conjunto con el método de arriba: ''' <summary> ''' Resizes an image by a percentage. ''' </summary> ''' <param name="Bitmap">Indicates the image to resize.</param> ''' <param name="Percent">Indicates the percent size.</param> ''' <returns>Bitmap.</returns> Public Function ResizeImage(ByVal bitmap As Drawing.Bitmap, ByVal percent As Double, Optional ByVal quality As Drawing2D.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic, Optional ByVal pixelFormat As Imaging.PixelFormat = Imaging.PixelFormat.Format24bppRgb) As Drawing.Bitmap Dim width As Integer = (bitmap.Width \ (100I / percent)) Dim height As Integer = (bitmap.Height \ (100I / percent)) Dim newBitmap As New Bitmap(width, height, pixelFormat) Using g As Graphics = Graphics.FromImage(newBitmap) g.InterpolationMode = quality g.DrawImage(bitmap, 0, 0, width, height) End Using Return newBitmap End Function
|
|
|
|
|
6162
|
Foros Generales / Foro Libre / Re: Zozo, el infame demonio de la Ouija
|
en: 19 Enero 2015, 09:24 am
|
|
Vaya tela...
Lo siento por no leer el post más hallá de la introducción, pero es que siempre me ha parecido ridículo este tema de "apariciones" fantasmagóricas.
Sin ánimo de ofender ni etiquetar a nadie, pero yo personalmente entro en un estado de impotencia (pena, decepción, y otras emociones) al pensar que existen seres humanos inteligentes que pueden creer que, primero de todo, que los "fantasmas" o "demonios" existen, y segundo, que no tienen nada mejor que hacer que sincronizar sus horarios en su mundo "espiritual/dimensional" para aparecerse en nuestro mundo físico solamente cuando a nosotros nos venga bien (ej: jugando a Ouijas) y no cuando ellos quisieran, por la mañana, o por la tarde, no, así que habrá que darle las gracias a los demonios por ser tan considerados con nosotros y aparecer solo cuando a nosotros nos da la real gana.
...O bien estos "fantasmas" que se complican la vida apareciendo en las galletas con caras de jesúcristo, o en manchas en la pared u otras superficies, deben ser antiguas reminiscencias de estudiantes de bellas artes, pobres almas en pena xD, en fín, tiene mucha lógica todo este tema de los demonios, fantasmitas ...o los Dioses (al menos los dioses tal y como cuentan las religiones) xD.
Saludos!
|
|
|
|
|
6163
|
Programación / .NET (C#, VB.NET, ASP) / Re: [C# Duda] Como interactuar con una página web
|
en: 19 Enero 2015, 07:30 am
|
Gracias por la respuesta!! Después de leer lo que comentas, lo cierto es que parece verdaderamente complicado para simplemente automatizar un par de cosas, así que si que sale a cuenta crear un webBrowser con WebKit, por ejemplo. Quizás simplemente cueste demasiado por falta de información o herramientas para esa tarea específica en este lenguaje, por poner un ejemplo comparativo, en Ruby con la gema/librería Watir WebDriver (que se basa en Selenium) es cuestión de escribir un par de lineas para conseguir abrir un navegador y navegar a "X" página de forma "interactiva" (visualmente quiero decir), en python lo mismo con Mechanize (aunque si nor ecuerdo mal no era "interactivo"), pero en .Net, y por lo poco que sé de este tema de automatizar una aplicación externa, Windows Automation parece ser la opción más viable, aunque resulta algo complejo de utilizar. AWindows.Automation, y si no me equivoco tras haber leído algunos artículos en este foro puede ser utilizada esa misma librería para automatizar algo en un videojuego por ejemplo, no? Por ejemplo, algo bastante básico, automatizar la compra de x armas en Counter Strike, asociado a diferentes atajos de teclado. O igual me estoy liando y no se usa esa librería para ese tipo de fines No, Windows Automation no está orientado en ese aspecto ni se utiliza para esos fines (ni sabría decirte cómo hacerlo), una cosa es automatizar las funcionalidades de un Soft, y otra es leer/escribir los offsets de un proceso/juego. De todas formas en el foro de MSDN puedes plantear y resolver dudas al respecto de UI Automation: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/home?forum=windowsaccessibilityandautomationSi la idea es simular atajos del teclado entonces puedes hacer simplemente eso, registrar hotkeys globales en el sistema y utilizarlas, es una tarea mucho más sencilla. (o en el caso del Counter-Strike, simplemente puedes editar el archivo de configuración para añadir combinaciones de teclas para una compra automática, eso ya sería lo más sencillo de todo) Otra alternativa de automatización de software sería crear Macros (Grabar y reproducir movimientos del mouse y pulsaciones del teclado, entre otras cosas), para ello puedes utilizar aplicaciones de terceros (ej: JitBit Macro Recorder) o hacerlo tu mismo utilizando las funciones de la API de Windows ( FindWindowEx + EnumWindows + OtrasFunciones + SendInput (o MouseSend + Keybd_Event) ). http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspxAquí un ejemplo básico: http://msdn.microsoft.com/en-us/library/ms171548%28v=vs.110%29.aspxSaludos
|
|
|
|
|
6164
|
Programación / .NET (C#, VB.NET, ASP) / Re: [C# Duda] Como interactuar con una página web
|
en: 18 Enero 2015, 22:58 pm
|
Se puede hacer creando tu mismo un navegador en C#, pero eso no me interesa... porque no me interesa crear un navegador entero, me gustaría que a poder ser utilizase Chrome por ejemplo. Quizás haya herramientas que te ahorrarían el 90% de todo ese esfuerzo de elaboración manual para automatizar de forma "interactiva" un navegador externo, como por ejemplo Selenium, pero nunca lo he usado en .Net, y por los ejemplos que he visto PARECE ser que con Selenium habría que hookear/inyectar el proceso de Chrome, no estoy seguro, algo leí sobre el tema hace tiempo, pero parece requerir tela de elaboración también. Para este tipo de tareas yo he utilizado las classes de Windows Automation (con Firefox), obviamente primero se requiere hacerle bastantes análisis (Spy/Ing. Inversa) al poceso para descubrir el nombre de las classes, el nombre de sus funciones, los handles de las ventanas y los controles ...identificar las barras de navegaciónd le navegador y el resto de sus componentes, y etc, todo lo que sea necesario para automatizarlo, puedes valerte de Winspy++, SpyStudio, o las herramientas de Microsoft UI Automation de la SDK de Windows para conocer los detalles necesarios del exe. http://msdn.microsoft.com/en-us/library/System.Windows.Automation(v=vs.110).aspxEn resumen, deberías leer sobre técnicas de IPC (InterProcess comunication) para conocer otras alternativas también. Creo que deberías plantearte de nuevo la pregunta y no complicarte de esa manera, puedes implementar un navegador con funcionalidades básicas de forma sencilla y obtener mayor control, puedes utilizar un WebBrowser Control (IE), o usar la libreria de GeckoFX (Firefox), la librería de WebKit (Chrome), o la librería de pago de EO WebBrowser (Chrome), al menos esos son los que caben a destacar en mi opinión, y entre los 4 yo prefiero el navegador de EO por ser el más completo y compatible (flash, scripts, etc), sin duda el mejor de los 4 para evitar quebraderos de cabeza. De todas formas te muestro ejemplos aleatorios de la utilización de Windows Automation para Chrome, en C#: http://stackoverflow.com/questions/26381515/get-url-from-chrome-to-c-sharp-not-workinghttp://stackoverflow.com/questions/18897070/getting-the-current-tabs-url-from-google-chrome-using-c-sharpSaludos
|
|
|
|
|
6165
|
Programación / .NET (C#, VB.NET, ASP) / Re: [SOURCE] HostsMan v1.0
|
en: 18 Enero 2015, 20:40 pm
|
La cantidad de trabajo que debe llevar una aplicación así no? No creas, empecé y terminé en el mismo día, hoy. El mayor trabajo es diseñar la GUI e implementar sus características, el 50% del trabajo solo es leer y parsear un archivo de texto. TL-DR: Me ha costado unas pocas horas (con descansos), pero todo es gracias a que el core de la aplicación y otras "herramientas" secundarías ya las había desarrollado (solo necesitaban unos pequeños cambios y adaptaciones), cuando hago una aplicación siempre intento hacerlo todo para rehusarlo de forma genérica y me lo guardo para cuando lo vuelva a necesitar (vease mi colección de snippets), eso me ayuda a trabajar muy rápido como ves (rápido, pero eficiente), de lo contrario me hubiera costado varios días o semanas llevarlo a cabo de forma bien elaborada. PD: Gracias por comentar Saludos!
|
|
|
|
|
6166
|
Programación / .NET (C#, VB.NET, ASP) / [SOURCE] HostsMan v1.0
|
en: 18 Enero 2015, 19:29 pm
|
HostsMan By Elektro Descripción HostsMan es la herramienta simple pero definitiva para administrar los mapeos del archivo Hosts de Windows. Características
- Añadir, Elminar, o Editar mapeos.
- Bloquear, o Desbloquear mapeos.
- Soporte para usar comentarios en los mapeos.
- Buscar mapeos según el criterio de búsqueda.
- Copiar directamente al portapapeles, o navegar al host.
- Otras funcionalidades básicas.
Especificaciones Técnicas Project......: HostsMan Author.......: Elektro ( Contact me: ElektroStudios@ElHacker.net ) Descirption..: Hosts File Manager. Version......: 1.0 Dev. Language: VB.Net Technology...: Windows Forms Interface : Graphical User Interface Framework....: 4.0 Architecture.: Neutral x86/x64 Dependencies.: None Language.....: English Date Release.: 18-January-2015Imágenes
Descarga http://www.mediafire.com/download/ofjjtunmx110app/HostsMan.rarSaludos![/list][/list]
|
|
|
|
|
6167
|
Sistemas Operativos / Windows / Re: assceso denegado en el CLI, procesador de comandos de windows,
|
en: 18 Enero 2015, 05:14 am
|
que quiero crear un directorio en c:\ En la imagen estás intentando crear la carpeta en el directorio del sistema, no en el directorio raíz del disco (C:\). Hazlo así:
i me denega el assceso, no se eso del administrador, como me doy permiso Es claramente una denegación de permisos de usuario. Ya te explicaron como intentar resolverlo. También puedes tomar privilegios de Admin combinando el comando TakeOwn + Icacls, si lo necesitas te muestro un ejemplo. Saludos
|
|
|
|
|
6169
|
Programación / Ingeniería Inversa / Re: Encontrar el método que instancia un Form
|
en: 17 Enero 2015, 12:21 pm
|
Sorry si lo que dije te enreda. Si, un poco  Pero todo es cuestión de intentarlo y acostumbrarme a usar ollyDbg, ahora al menos se que se puede configurar el tipo de fuente de letra, y todo lo demás que me han dicho me ayudará. Ustedes me dicen que vaya unas lineas más atrás, el problema es que no se desde que instrucción debo ir hacia atrás para buscar xD, supongo que debuggeándo el exe y con unos cuantos breakpoints no me debería costar mucho encontrar la instrucción exacta ( demasiado optimismo :-/ ). Gracias a todos. Saludos
|
|
|
|
|
6170
|
Programación / .NET (C#, VB.NET, ASP) / Re: [Ayuda] Listbox , identificado y guardado de datos en C#
|
en: 17 Enero 2015, 10:14 am
|
Alguno que otro va a saltar diciendo que lo haga a mano por codigo pero mi idea es que sea dinamico y que se almacene en el listbox. No me ha quedado muy claro lo que quieres hacer, ¿ambos datos, preguntas y respuestas, quieres mostrarlos en un ListBox?, ¿o solo quieres mostrar las preguntas y ligar las respuestas a cada pregunta?. En el primer caso, un ListBox no está diseñado para almacenar/mostrar parejas de items, así que si pretendes mostrar ambos datos eso significa que le estás dándole el enfoque erroneo a tu aplicación, en su lugar puedes crear tu propio control, o utilizar un ListView por ejemplo, con 2 columnas, una para mostrar preguntas y en la otra respuestas. En el segundo caso, una solución sería almacenar las preguntas y respuestas en una colección se strings, o por ejemplo un KeyValuePair o una Tupla (entre otras), o tambiénbien puedes crear tu propio Type, ejemplo: VB.Net: ''' <summary> ''' Implements a kind of Question/Answer KeyValuePair. ''' This class cannot be inherited. ''' </summary> Public NotInheritable Class QA ''' <summary> ''' Gets the question. ''' </summary> ''' <value>The question.</value> ReadOnly Property Question As String Get Return Me.mQuestion End Get End Property Private mQuestion As String ''' <summary> ''' Gets the answer. ''' </summary> ''' <value>The answer.</value> ReadOnly Property Answer As String Get Return Me.mAnswer End Get End Property Private mAnswer As String ''' <summary> ''' Initializes a new instance of the <see cref="QA"/> class. ''' </summary> ''' <param name="question">The question.</param> ''' <param name="answer">The answer.</param> ''' <exception cref="System.ArgumentNullException"> ''' question;value cannot be empty. ''' or ''' answer;value cannot be empty. ''' </exception> Public Sub New(ByVal question As String, ByVal answer As String) If String.IsNullOrEmpty(question) Then Throw New ArgumentNullException("question", "value cannot be empty.") ElseIf String.IsNullOrEmpty(answer) Then Throw New ArgumentNullException("answer", "value cannot be empty.") Else Me.mQuestion = question Me.mAnswer = answer End If End Sub ''' <summary> ''' Prevents a default instance of the <see cref="QA"/> class from being created. ''' </summary> Private Sub New() End Sub End Class
+ Public Class TestForm ''' <summary> ''' The Question/Answer list. ''' </summary> Public ReadOnly QAlist As New List(Of QA) From { New QA(question:="pregunta1", answer:="7"), New QA(question:="pregunta2", answer:="9"), New QA(question:="pregunta3", answer:="5") } ''' <summary> ''' Handles the Load event of the TestForm form. ''' </summary> Private Sub TestForm_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load ' Add the questions into Listbox. Me.ListBox1.Items.AddRange((From qa As QA In QAlist Select qa.Question).ToArray) End Sub ''' <summary> ''' Handles the SelectedIndexChanged event of the ListBox1 control. ''' </summary> Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) _ Handles ListBox1.SelectedIndexChanged Dim lb As ListBox = DirectCast(sender, ListBox) If Not lb.SelectionMode = SelectionMode.One Then Throw New NotImplementedException("SelectionMode is not implemented.") End If Dim qa As QA = QAlist.Find(Function(x As QA) x.Question.Equals(lb.SelectedItem.ToString)) Debug. WriteLine(String. Format("Q: {0}", qa. Question)) Debug. WriteLine(String. Format("A: {0}", qa. Answer)) Debug. WriteLine(String. Empty) End Sub End Class
CSharp:using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; /// <summary> /// Implements a kind of Question/Answer KeyValuePair. /// This class cannot be inherited. /// </summary> public sealed class QA { /// <summary> /// Gets the question. /// </summary> /// <value>The question.</value> public string Question { get { return this.mQuestion; } } private string mQuestion; /// <summary> /// Gets the answer. /// </summary> /// <value>The answer.</value> public string Answer { get { return this.mAnswer; } } private string mAnswer; /// <summary> /// Initializes a new instance of the <see cref="QA"/> class. /// </summary> /// <param name="question">The question.</param> /// <param name="answer">The answer.</param> /// <exception cref="System.ArgumentNullException"> /// question;value cannot be empty. /// or /// answer;value cannot be empty. /// </exception> public QA(string question, string answer) { if (string.IsNullOrEmpty(question)) { throw new ArgumentNullException ("question", "value cannot be empty."); } else if (string.IsNullOrEmpty(answer)) { throw new ArgumentNullException ("answer", "value cannot be empty."); } else { this.mQuestion = question; this.mAnswer = answer; } } /// <summary> /// Prevents a default instance of the <see cref="QA"/> class from being created. /// </summary> private QA() { } } //======================================================= //Service provided by Telerik (www.telerik.com) //=======================================================
+ using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; public class TestForm { /// <summary> /// The Question/Answer list. /// </summary> public readonly List <QA > QAlist = new List <QA > { new QA (question : "pregunta1", answer : "7"), new QA (question : "pregunta2", answer : "9"), new QA (question : "pregunta3", answer : "5") }; /// <summary> /// Handles the Load event of the TestForm form. /// </summary> private void TestForm_Load(object sender, EventArgs e) { // Add the questions into Listbox. this.ListBox1.Items.AddRange((from qa in QAlistqa.Question).ToArray); } /// <summary> /// Handles the SelectedIndexChanged event of the ListBox1 control. /// </summary> private void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { ListBox lb = (ListBox)sender; if (!(lb.SelectionMode == SelectionMode.One)) { throw new NotImplementedException ("SelectionMode is not implemented."); } QA qa = QAlist.Find((QA x) => x.Question.Equals(lb.SelectedItem.ToString)); Debug.WriteLine(string.Format("Q: {0}", qa.Question)); Debug.WriteLine(string.Format("A: {0}", qa.Answer)); Debug.WriteLine(string.Empty); } public TestForm() { Load += TestForm_Load; } } //======================================================= //Service provided by Telerik (www.telerik.com) //=======================================================
Debug Output: Q: pregunta1 A: 7
Q: pregunta2 A: 9
Q: pregunta3 A: 5
|
|
|
|
|
|
| |
|