|
5941
|
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
|
|
|
5942
|
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
|
|
|
5943
|
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!
|
|
|
5944
|
Programación / .NET (C#, VB.NET, ASP) / [SOURCE] HostsMan v1.0
|
en: 18 Enero 2015, 19:29 pm
|
HostsManBy 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]
|
|
|
5945
|
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
|
|
|
5947
|
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
|
|
|
5948
|
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
|
|
|
5949
|
Programación / Ingeniería Inversa / Re: [Tutorial]Unpack .NET Reactor + Crack
|
en: 17 Enero 2015, 08:53 am
|
Me quito el sombrero.¡ Gracias por ilustrarnos con tus conocimientos ! EDITO:Joder, ¡es que te lo has currado muchísimo! Señores, ahí tienen el mejor buscador de duplicados de todos los tiempos, un aplauso a la mágia del compañero .:: Under ::. PD: Sé que otra persona del foro intentó desempaquetar y craquear esa aplicación, ¡ GRACIAS para esa persona flameante por intentarlo también! Saludos
|
|
|
5950
|
Programación / Scripting / Re: Mover a otra carpeta y usar una archivo por orden de menor a mayor con BATCH
|
en: 17 Enero 2015, 08:40 am
|
buen el caso que cuando el capitulo seleccionado se añade a la lista de reproducción no muestra el tiempo del vídeo, puedo solo especular que: Esa información la extrae WinAmp de los archivos, puedes configurar en las opciones de WinAmp para que siempre obtenga los metadatos aunque los archivos aun no hayan sido procesados por el reproductor: Por otro lado, como bien has deducido winamp no puede reconocer la duración de ciertos archivos de video, creo que la única solución es que mejoren/actualicen el programa en general... creo que para ese problema de la duración del video solo puedes intentar buscar una solución en el foro de winamp. PD: Aunque en la opción de la imagen especifica que es para leer los títulos, lo cierto es que también es para leer la duración de los archivos. Saludos
|
|
|
|
|
|
|