elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: [1]
1  Programación / .NET (C#, VB.NET, ASP) / [SOURCE][C#] IPv4Control WC_IPADDRESS (SysIPAddress32) for .Net en: 21 Diciembre 2015, 21:55 pm
Source Code - Github

Hace más de veinte años, Microsoft desarrolló una Librería para facilitar y estandarizar la tarea de los desarrolladores a la hora de implementar en sus aplicaciones. En ella estaban encapsulados una serie de controles comunes con el objeto de que el desarrollador se dedicase a los entresijos del corazón de su aplicación, dejando la interacción con el usuario a una mera, facil y simple implementación de dichos controles.
Con la llegada (hace 14 años) de la tecnología .NET y su CLR, se facilitó aún más esta implementación. Por ejemplo, para interaccionar con el usuario y presentarle los datos de una base de datos utilizamos un control ListView, sin necesidad de crear dicho interfaz.
Es curioso cuando menos que el único control no incluido en .NET, sea WC_IPADDRESS (SysIPAddress32), y más curioso aún que en todo este tiempo no se haya desarrollado una implementación usable, simple y fácil del mismo, máxime teniendo en cuenta del tipo de utilidad que tiene: interaccionar con el usario sobre uno de los aspectos más básicos de las redes TCP/IP: su dirección IP.

Esta imlementación pretende ser un acercamiento a esa implemetación fácil y simple.

Desde el punto de vista técnico, se ha elegido tomar como base un TextBox y aprovechando la herencia de clases, implementar las funcionaidades incluidas en la librería original Common control.

Los Clase Form en .NET no tiene las mismas características que una ventana de diálogo. Esto implica que Windows no interpreta correctamente las pulsaciones de teclas para la navegación a través de los distintos controles.
Es por ello que se invalidan determinadas propedades, además de realizar subclass a los elementos necesarios.

If you need a custom development, or any other issues, please contact via email.
2  Programación / .NET (C#, VB.NET, ASP) / Re: crear controles en tiempo de ejecucion en: 20 Diciembre 2015, 23:03 pm
vale
3  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Ofrecer servicios, otras páginas sin que se considere spam en: 20 Diciembre 2015, 22:57 pm
ok gracias!!
4  Foros Generales / Sugerencias y dudas sobre el Foro / Ofrecer servicios, otras páginas sin que se considere spam en: 20 Diciembre 2015, 21:00 pm
Hola.
¿Hay alguna sección del foro en la que poder ofertar tus servicios, sin que se considere spam?
Gracias!!
5  Programación / .NET (C#, VB.NET, ASP) / Re: Cerrar Form.ShowDialog() en: 20 Diciembre 2015, 20:56 pm
Hola a todos!!
En el código que acabo de publicar, tienes un ejemplo de como usar la función using con un formulario.
Se crea un input box, que se descarga de forma automática.
Saludos!!
6  Programación / .NET (C#, VB.NET, ASP) / Re: [SOURCE][C#]API for: Binbox, Shorte, Relink, nCrypt, Imgur, Picload, MCrypter en: 20 Diciembre 2015, 20:54 pm
añadido go4up
Saludos!!
7  Programación / .NET (C#, VB.NET, ASP) / Re: crear controles en tiempo de ejecucion en: 20 Diciembre 2015, 15:03 pm
Aparte, quiero hacer un pequeño matíz:
Los controles implementan la interfáz IDisposable, por lo tanto se debe mantener una referencia a los controles que se crean en tiempo de ejecución...
No es necesario, por lo menos en c# y entiendo que IML es común. Así estás duplicando la información.
Un simple for each Control in Formulario.Controls te da una referencia y por tanto no es necesario almacenar otro array.
Para todos los controles que no están heredados de la API nativa de Windows, es decir no tienen un hWnd, el tema se complica un poco más, pero creo que esta fuera del alcance de este post
Saludos!!
8  Programación / .NET (C#, VB.NET, ASP) / Re: crear controles en tiempo de ejecucion en: 19 Diciembre 2015, 23:58 pm
Te pongo un ejemplo, tómalo como tal
Aquí creo y cargo los controles en tiempo de ejecución. Provienen de un DataSet:
Código:
            foreach (DataColumn s in dt.Columns.Cast<DataColumn>()
                .Where(x => x.Caption.StartsWith(prefixParam))
                .OrderBy(x => x.DataType.ToString())
                .ThenBy(x => x.Caption))
            {
                //var GenricTypeValue = asb[s.Name] == null ? null : Convert.ChangeType(asb[s.Name], s.PropertyType);
                lblGeneric = new Label();
                lblGeneric.TabStop = false;
                lblGeneric.Name = "lbl" + s.Caption.Substring(prefixParam.Length);
                lblGeneric.Text = lblGeneric.Name.Substring(iPrefixControl + 2);
                this.Controls.Add(lblGeneric);
                txtGeneric = new RichTextBox();
                txtGeneric.DetectUrls = true;
                txtGeneric.Multiline = false;
                if ("Pepe Juan WebOficial ".Contains(s.Caption + " "))
                    txtGeneric.Multiline = true;
                txtGeneric.TabIndex = txtCount++;
                txtGeneric.Name = "txt" + s.Caption.Substring(prefixParam.Length);
                txtGeneric.DataBindings.Add(new Binding("Text", dt, s.Caption));
                this.Controls.Add(txtGeneric);
            }

Y aquí les sitúo:

Código:
private void posCtrlsInTP(TabPage tbpGeneric, List<Label> listLabel, int tbpGenericMaxHeight, DataTable dt, int iTabPages)
        {
            //SetTabHeader(tbpGeneric, this.BackColor);
            Label lastLabel = new Label();
            int iLbl = 0;
            foreach (Label ctrlLabel in listLabel)
            {
                Control ctrlGeneric = this.Controls[this.Controls.IndexOf(ctrlLabel) + 1];
                ctrlLabel.Parent = tbpGeneric;
                ctrlLabel.Left = 2 * sepLeft;
                ctrlLabel.Height = (int)(3F * sepTop);
                ctrlLabel.Top = (lastLabel.Top == 0 ? 0 : sepTop) + lastLabel.Top + lastLabel.Height;
                ctrlLabel.TabStop = false;
                ctrlLabel.AutoSize = true;
                ((Label)ctrlLabel).TextAlign = ContentAlignment.MiddleCenter;
                iLbl++;
                if (iLbl > 3)
                    ctrlLabel.Left = ((tbpGeneric.Width / 2) + (tbpGeneric.Width / 8)) - ctrlLabel.Width - (2 * sepLeft);
                else
                    ctrlLabel.Left = (tbpGeneric.Width / 8) - ctrlLabel.Width - (2 * sepLeft);

                ctrlGeneric.Parent = tbpGeneric;
                ctrlGeneric.Width = defWidth;
                //ctrlGeneric.Left = (tbpGeneric.Width / iPosMiddle) - ctrlGeneric.Width - (3 * sepLeft);
                ctrlGeneric.Left = ctrlLabel.Left + ctrlLabel.Width + (2 * sepLeft);
                if ((iTabPages > 1) && (iTabPages < 5))
                {
                    ((RichTextBox)ctrlGeneric).Multiline = true;
                    ctrlGeneric.Height = tbpGeneric.Height - (3 * sepTop);
                    ctrlGeneric.Width = tbpGeneric.Width - (4 * sepLeft);
                    ctrlGeneric.Left = (sepLeft);
                    ctrlLabel.Visible = false;
                }
                else
                    ctrlGeneric.Height = ctrlLabel.Height + (1 * sepTop);
                ctrlGeneric.Top = ctrlLabel.Top - (sepTop / 3); //re-Top for correct Alignment

                ToolTip tt = new ToolTip();

                string sName = ctrlGeneric.Name.Substring(iPrefixControl + 2);
                string sTip = sName;// rmTT.GetString("TIP_" + sName.ToUpper());
                tt.ReshowDelay = 400;
                tt.AutoPopDelay = 20000;
                tt.UseFading = true;
                tt.IsBalloon = true;
                tt.ToolTipTitle = sName;
                tt.SetToolTip(ctrlGeneric, sTip);
                lastLabel = ctrlLabel;
                if (iLbl == 3)
                    lastLabel = new Label();
            }
            //calculate Maximum Height
            int tbpGenericHeight = lastLabel.Top + lastLabel.Height + (4 * sepTop);
            if (tbpGenericHeight > tbpGenericMaxHeight) tbpGeneric.Parent.Height = tbpGenericHeight;
        }

Con este resultado:


Hace muchos años que cargo casi todos los controles en tiempo de ejecución. Si mal no recuerdo, VB3 tenía la limitación de no poder crear controles, el formulario debía tener uno y a partir de el creabas una matriz de controles. Algo que como verás es´ta superado hace tiempo.
Saludos!!
9  Programación / .NET (C#, VB.NET, ASP) / Re: Problema con Expresiones regulares en: 19 Diciembre 2015, 20:49 pm
Hola.
En ingeniería existe una máxima que a veces se olvida:
Divide y Vencerás
Prueba con bloques "<img(.*?)/>" y analiza con un regex más simple la casuística.
Para hacer scraping hay varias librerías que simplifican el trabajo, como RestSharp

Acabo de publicar un código que hace uso intensivo de regex, pero está en c#.
Y te recomiendo que mires tutoriales antes de meterte de lleno. La web del guille en su día tenía ejemplos muy buenos. Regex es una herramienta muy potente, pero requiere de un aprendizaje previo, a mi modo de ver.

Saludos!!
10  Programación / .NET (C#, VB.NET, ASP) / [SOURCE][C#]API for: Binbox, Shorte, Relink, nCrypt, Imgur, Picload, MCrypter en: 19 Diciembre 2015, 11:28 am
Sample video (youtube)

Source Code - Github

Introducción:

Varios Host de imágenes y servicios de monetización disponen de una API, que a menudo suele ser difícilmente accesible desde .Net.
Dichas API's tienen un funcionamiento común. Se envían datos a la web mediante una petición POST y ésta devuelve un texto (link) en formato JSON, XML, plano, etc.
La composición de los elementos a enviar incluye uno o varios identificadores (ID, hash), así como los datos a procesar, bien sea texto o un fichero.
Ésta composición puede resultar simple o verdaderamente compleja como en el caso de Binbox.
Las peticiones se realizan casi siempre de modo asíncrono mediante HttpWebRequest, aunque están implementados varios ejemplos más simples utilizando WebClient.

En este código se muestra como acceder de forma simple desde c#.

API's incluidas:

Monetization Services
Binbox
Shorte

Encryption Services
Relink
nCrypt
encrypterme.ga
youpaste.co
linkcrypter.net

Images Host
Picload
Imgur
Devianstar

Para la utilización de las API's se requiere de una cuenta, así como la activación de la API dentro de las opciones de usuario de cada servicio.

Ejemplo del archivo uploaderNet.apis
idShorte=eeeeeeeee
idRelink=2222222222
idBinbox=idBinbox
idNCrypt=rrrrrrrrrrrr
idImgur=eeeeeeeee
idSecretImgur=6666666666
idPicload=idPicload
hashPicload=dddddddddddd
urlMCrypter=http://encrypterme.ga/api
urlMCrypter=http://youpaste.co/api
urlMCrypter=http://linkcrypter.net/api
(El programa selecciona el primer valor válido para cada campo)

Puntos de interés:
La integración entre Java y .Net necesita de una DLL adicional, Jurassic.dll. Llegar a comprender el funcionamiento de esta integración puede resultar muy complejo, pero una vez adquiridos los conocimientos necesarios, se abre un abanico de posibilidades para la ejecución de todo tipo de Scripts escritos en java desde .Net.
El servicio de monetización Binbox utiliza "javascript Stanford Crypto Library"
Gracias a ésta integración de ambas plataformas (Java y .Net) en un par de líneas de código se pueden resolver problemas que de otra forma requerirían de la migración del código, tarea que puede demorarse meses.

Para el acceso a Picload, se ha creado una DLL compatible con COM+, una tecnología de más de 20 años que sigue siendo válida en entornos Windows. Esto hace posible que se pueda llamar desde PHP, Excel, Java, o cualquier aplicación windows.

El diseño de la interfaz está inspirado en los actuales Windows 10 y Android (conocidos como Metro o Modern)

Se ha implementado un InputBox con este mismo diseño, que es fácilmente accesible y permite una interacción simple con el usuario.

Observaciones:
La utilización masiva de estas API's puede acabar con bloqueos temporales de las cuenta de usuario, o incluso la expulsión del servicio.

Cuando se desarrolla dentro de un grupo de trabajo es imprescindible ajustarse a las normas básicas de escritura de código, y de esa forma llevo escribiendo durante años dentro de los grupos de programadores en los que he participado.
Por ejemplo, la utilización de corchetes en las enumeraciones:
foreach (Control ctrl in this.Controls)
{
ctrl.BackColor = this.BackColor;
}

Dado que el desarrollo de este ejemplo ha sido unipersonal y carece de un enfoque didáctico, se han omitido deliberadamente todo tipo de corchetes innecesarios, por lo que la lectura de este código puede resultar complicada.
Tampoco contiene, en general, comentarios. Y se han excluido casi todos los bloques try/catch, por lo que apenas hay control de errores. En un desarrollo típico el control de errores supone un 40% del código.

Si necesita un desarrollo a medida, o cualquier otra cuestión, no dude en contactar a través del correo.

CENSURADO
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines