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ú

Temas - FJDA

#46
Buenas  :)

Hoy tenía la intención de comprar una placa base Raspberry Pi 3 Modelo B. Primero fui al MediaMarkt la de "yo no soy tonto" que según su Web está disponible por un precio bastante elevado la verdad 44,99, o sea 45€ teniendo en cuenta que ya está la versión 4. Para empezar, no se si porque he ido solo, con ropa informal sin traje y zapatos caros pero no me atendió ni dios. Tras preguntar por placas base me envían a un pasillo si es que se puede llamar así pues dabas tres pasos y se acabó, no había absolutamente nada, no vi ni una placa base. No se que le ha pasado a esta tienda pero todo muy minimalista, sólo vi un simple panel frontal, un DVD que ya se ya empieza a estar obsoleto pero ¿sólo una marca? ¿un modelo?. No vi discos duros internos, solo externos WD, ordenadores gaming  carísimos, portátiles, cables, pantallas por todas partes, teclados y ratones, smartphones, todo packs, apenas un panel de componentes informáticos con cables y usbs y cosas así, altavoces. Parece como si ahora la tienda se centre en la venta Online y limiten los productos en la venta física. Las estanterías cortísimas, ponen mesas con PCs, portátiles, monitores, smpartphones y debajo las cajas con el producto. Ya está lejos de ser un supermercado de la electrónica. Aún con intención de comprar no encontré lo que buscaba y me fuí.

Luego fuí al Worten, aún peor, el sistema de venta muy similar, solo que sólo vi un mísero PC gaming, lo demás igual teclados, ratones, monitores, portátiles, teléfonos, tablets. Según su web 36,99€ (37€), total 8€ menos que los del "yo no soy tonto" y con toda la razón, tontos no son la verdad. En cuanto el trato, lo mismo sólo vi 4 empleados muy jóvenes, una cajera muy liada con un solo cliente, luego los otros 3 intentando embalar una TV plana como si un trabajo de ingeniería se tratara, mientras un grupo de personas esperaban mirando resignados ante tal pasividad por parte del personal. En un momento, que pude pido ayuda para encontrar el Raspberry pero me dice  la chica que espere.  Me di una vueltecita más sin éxito buscando entre tanta entantería minimalista, al no encontrarlo simplemente me fuí.

Casualmente el Carrefour estaba cerca y vi en Internet que vendían también la placa base Raspberry por 39,95 € (40€) en este caso 5€ menos que los del "yo no soy tonto". Igualmente, busque sin éxito, quizás solo lo vendan Online.

¿Qué está ocurriendo? Antes se te rompía algo o simplemente querías algo ¡ya! ibas y lo comprabas pero ahora según que cosas es tarea imposible encontrar algo si no es por Internet. En tiendas físicas noto que falta variedad de marcas y modelos, tanto de informática como de todo.

Finalmente lo compraré por Internet y la versión 4.






#47
hola

Mi duda puede ser un poco rara, pero es que conozco varias personas que fuman petas y lejos de verles en plan relax parece que se han bebido 5 red bulls del tirón. No se que clase de petas fumarán, no se si hachís o marihuana, el caso es que los veo estupendos, superlúcidos, en cambio yo que no fumo, ni bebo y ya ni digamos tomar drogas y estoy hecho una *****.

En serio, que efectos pueden tener los petas porque no veo que les pase nada y llevan tiempo,¿pueden seguir así hasta que se hagan viejos?

Por cierto que triste que solo tenga tiempo para el foro libre y lo que es programar no lo veo ni de lejos, ya ni me molesto porque acabo dejando todo a medias tintas.  :(
#48
hola, no se muy bien donde exponer la pregunta. En principio sería en juegos pero viendo el tipo de temas que se abren ahí no creo sea el sitio.

Lo que me gustaría saber es como editar archivos binarios protegidos, ya que al cambiar un valor de dinero pongamos en el juego el valor es 15236, esto en el archivo se vería en hexadecimal y su valor sería 3B 84, pero invertido 3B 84 --> 84 3B:

En el juego:
15236

En el guardado del juego se vería :
7650:  00 00 00 00 00 00 00 84 3B 00 00


Sin embargo en muchos juegos  esto no está permitido puesto que al hacerlo el juego interpreta que el archivo está corrupto y esto es porque estos juegos al final del archivo de guardado se guarda otro valor. Es este valor el que no se obtener, ya que es una especie de sistema para detectar cambios en el archivo. A ver si tengo suerte y alguien sabe algo sobre el tema. Creo que pudiera ser la suma total de bytes del archivo o algo así.


gracias de antemano

#49
hola, puede parece extraño el problema pero así es.

Me he dado cuenta que al usar el cuadro de diálogo Abrir con...  no muestra los mismos programas que desde el directorio distinto de C:\\

Quise abrir un archivo de imagen con photoshop y le di a "Abrir con" y luego "Elegir programa predeterminado", entonces le di a Examinar ya que Photoshop no aparecía entre las opciones a elegir (si aparece desde C:\\) entonces fui a la carpeta de Photoshop y seleccioné el archivo EXE de photoshop, pero no se agrega.
No comprendo porqué y no se como solucionarlo.

gracias de antemano



he hecho una cosa y parece que viene a ser un parche pero bueno  :-\

He ido al registro de windows a la clave:
HKEY_CLASSES_ROOT\.png

En (predeterminado) he quitado el dato "pngfile" y lo he reemplazado por "Photoshop.BMPFile.12" he dado a Abrir con... y aparecía Photoshop, luego he vuelto a poner "pngfile" y continúa apareciendo Photoshop al clicar en Abrir con..

así queda arreglado, pero debería poder añadirlo usando el cuadro y no teniendo que hacer estas chapuzas en el registro :(

nota:
Para quien no entienda porqué he hecho esto para solucionarlo. El truco consiste en asociar momentáneamente la extensión PNG con photoshop, ya que  Photoshop.BMPFile.12 es una clave que contiene el shell que asocia los archivos BMP con Photoshop para que estos al hacer doble clic sobre ellos se abra automáticamente con Photoshop. Igualmente podría haber usado Photoshop.PNGFile.12 cuyo shell es el mismo. Una vez asociado he vuelto a desasociarlo poniendo otra vez el dato "pngfile", que hacer referencia una clave que asocia el archivo con PhotoViewer.dll de Windows de modo que ahora al hacer doble clic sobre el se abre con el visor de Windows y a la vez aparece Photoshop cuando le doy a Abrir con...







jaaa ya lo averigüe   :)

fui a la clave de registro:
HKEY_CURRENT_USER\Software\Classes\Applications

Perdonen no ponga imagen pero no encontré ninguna aceptable en google, se ve algo similar a esto:

Applications
> HexEditor.exe
> ImgBurn.exe
> mpc-hc.exe
> Photoshop.exe
> PsPad.exe
> sublime_text.exe
> UltraISO.exe
> uTorrent.exe
> WinRAR.exe


Ahí en Applications contiene unas claves que son las aplicaciones que aparecen en el cuadro Abrir con..


da el caso que en otra ocasión tuve Photoshop instalado en otro directorio que no era "C:\Program Files\Adobe\Adobe Photoshop CS5" entonces en esta clave estaba la dirección antigua:
HKEY_CURRENT_USER\Software\Classes\Applications\Photoshop.exe\shell\open\command

Por eso el cuadro de diálogo Abrir con... no podía mostrar Photoshop porque no lo encontraba.

Lo único que tuve que hacer es reemplazar la dirección antigua por la nueva.

Ahora ya aparece que bien  :laugh:

diréis como es que desde C:\\ si aparecía. Porque aparecia en el menu y en la parte superior del cuadro Abrir con..  donde dice "Programas recomendados",  pero no en el cuadro inferior. Al hacer el primer truco el de la chapuza aparecía en programas recomendados pero hay veces no se porqué no aparece lo de programas recomendados solo la parte la parte inferior los Otros programas tal como se ve en la imagen de arriba y si esto ocurría no podía abrir con photoshop.

#50
.NET (C#, VB.NET, ASP) / substraer color
21 Abril 2019, 22:03 PM
estoy intentado substraer el color de una imagen.

El objetivo es superponer un objeto PictureBox y hacer transparentar una parte de color verde de modo que se puedan ver objetos que hay debajo del PictureBox.

He intentado esto, pero lo único que consigo es un agujero en el formulario, ya que al transparentar el color verde de la imagen que está en el picture, también transparenta el formulario y se ve el escritorio, o cualquier cosa que haya debajo del formulario de la aplicación.


Código (vbnet) [Seleccionar]
Imports System
Imports System.Runtime.InteropServices
Imports System.Security
Imports System.Drawing.Imaging

Public Class Form1
   <DllImport("User32.dll", CharSet:=CharSet.Unicode), SuppressUnmanagedCodeSecurityAttribute>
   Private Shared Function SetLayeredWindowAttributes(ByVal HWND As IntPtr, ByVal crKey As Integer, ByVal bAlpha As Byte, ByVal dwFlags As Integer) As Integer
   End Function
   <DllImport("User32.dll", EntryPoint:="GetWindowLongA", CharSet:=CharSet.Unicode), SuppressUnmanagedCodeSecurityAttribute>
   Private Shared Function GetWindowLong(ByVal HWND As IntPtr, ByVal nIndex As Integer) As Integer
   End Function
   <DllImport("User32.dll", EntryPoint:="SetWindowLongA", CharSet:=CharSet.Unicode), SuppressUnmanagedCodeSecurityAttribute>
   Private Shared Function SetWindowLong(ByVal HWND As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
   End Function

   Const GWL_EXSTYLE = (-20)
   Const WS_EX_LAYERED = &H80000
   Const GreenColor = &HFF00

   Private Function SubstractColor(ByVal HWND As IntPtr, Color As Integer) As Integer

       SetWindowLong(HWND, GWL_EXSTYLE, GetWindowLong(HWND, GWL_EXSTYLE) Or WS_EX_LAYERED)
       SetLayeredWindowAttributes(HWND, Color, 0, &H1)
       Return Nothing
   End Function

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       SubstractColor(Me.Handle, GreenColor)
   End Sub
End Class


Mi Net no tiene la System.Windows.Media que creo serviría para esto.

https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.color.subtract?view=netframework-4.8

Tampoco me funciona lo de backcolor = color. transparent, ni aún colocando imágenes con transparencia. Recuerdo que el objetivo es recortar o substraer una parte del PictureBox en la sección marcada por un determinado color.

Parece complicado
#51

Tras leer este artículo LA FALACIA DEL COCHE ELÉCTRICO ya no me parece tan buena idea lo de cambiar el parque automovilístico de combustión de gasolina o gasoil a eléctrico.

No me cuadraba lo de que contaminarían menos ya que las baterías en sí ya contaminan. Sí, se pueden reciclar pero ya sabemos que no todo acaba reciclado, no todas las baterías de móviles acaban recicladas, ni las alcalinas, ni las de botón, ni las actuales para coche con plomo, ni todos los plásticos, ni todo lo demás.

Este artículo sugiere se contaminaría se emitiría igualmente el mismo CO2 a la atmósfera en la producción de estos vehículos que los vehículos actuales de combustión en total.

Por otro lado algo que ya sabía es el tiempo de vida de las baterías, que hay que cambiar según parece cada 5 años y cuestan como un coche de baja gama o uno de segunda mano.

Entonces si esto es cierto ¿no sería mejor usar vehículos de hidrógeno? ¿Por qué no se promocionan de igual manera? ¿No será cosa de las compañías eléctricas  para poder así explotar más su sector?

En este sentido me llama la atención la iniciativa del PSOE queriendo apostar por los coches eléctricos:
Los nuevos objetivos verdes del PSOE: energía 100% renovable y todos los coches eléctricos en 2050

Ahora, yo no se si es cosa de una mala interpretación de los periodistas de la propuesta del gobierno ya que dice en el mismo artículo "Asimismo, el Ejecutivo quiere que en 2050 el parque de turismos y vehículos comerciales ligeros esté exento de emisiones de CO2" pero no dice que deban ser eléctricos, dice "exento de emisiones de CO2. Pero si que las gasolineras instalen puntos de recarga eléctrica. ¿Y el hidrógeno?

En mi opinión creo que es mejor apostar por el  hidrógeno.

Mientras el mundo piensa en un futuro de coches eléctricos, Japón lo apuesta (casi) todo al coche de hidrógeno

¿Qué opinan?

#52
Estoy creando un código html mediante xmlDocument. Me gustaría ver el código  en árbol pero se muestra lineal. Aquí dejo un código de ejemplo:

Código (vbnet) [Seleccionar]

       'Crear un nuevo documento XML.
       Dim xmlDoc As XmlDocument = New XmlDocument
       'Crear la etiqueta html.
       Dim xmlRoot As XmlElement = xmlDoc.CreateElement("html")
       xmlDoc.AppendChild(xmlRoot)

       'Crea la etiqueta de encabezado y agrégala al elemento html.
       Dim xmlHead As XmlElement = xmlDoc.CreateElement("head")
       xmlRoot.AppendChild(xmlHead)

       'Crea la etiqueta del título, configura su texto como "Tabla de base de datos"
       'y anexarlo debajo del elemento cabeza.

       Dim xmlTitle As XmlElement = xmlDoc.CreateElement("title")
       xmlTitle.AppendChild(xmlDoc.CreateTextNode("tabla de prueba"))
       xmlHead.AppendChild(xmlTitle)


       Dim xmlCSSStyle As XmlElement = xmlDoc.CreateElement("style")
       xmlCSSStyle.AppendChild(xmlDoc.CreateTextNode("td{background-color: olive;}"))
       xmlHead.AppendChild(xmlCSSStyle)

       ' <html>
       '       <head>
       '           <title> Tabla de base de datos </title>
       '           <style>
       '               td{background-color: olive;}
       '           </style>
       '       </head>
       '</html>

       ' Create the body element and append it to the root.
       Dim xmlBody As XmlElement = xmlDoc.CreateElement("body")
       xmlRoot.AppendChild(xmlBody)

       ' Create the table and append it.
       Dim xmlTable As XmlElement = xmlDoc.CreateElement("table")
       xmlBody.AppendChild(xmlTable)

       '' Create the rows.
       For I = 1 To 2
           Dim xmlRow As XmlElement = xmlDoc.CreateElement("tr")
           xmlTable.AppendChild(xmlRow)
           Dim xmlCell As XmlElement = xmlDoc.CreateElement("td")
           xmlCell.AppendChild(xmlDoc.CreateTextNode("contenido"))
           xmlRow.AppendChild(xmlCell)
       Next


       WebBrowser1.DocumentText = xmlDoc.OuterXml


Así es como queda el código HTML

Código (html4strict) [Seleccionar]

<html><head><title>tabla de prueba</title><style>td{background-color: olive;}</style></head><body><table><tr><td>contenido</td></tr><tr><td>contenido</td></tr></table></body></html>


Me ayudaría se visualizara así:
Código (html4strict) [Seleccionar]

<!DOCTYPE html>
<html>
<head>
<title>tabla de prueba</title>
<style>td{background-color: olive;}</style>
</head>
<body>
<table>
<tr>
<td>contenido</td>
</tr>
<tr>
<td>contenido</td>
</tr>
</table>
</body>
</html>


gracias de antemano



Tras mucho buscar encontré la manera, usando XDocument  en lugar de XmlDocument. El código es muy flexible así que se puede hacer de muchas maneras, incluso a partir de un DataTable crear una tabla en HTML.

Aquí dejo un ejemplo sencillo de como lo voy a hacer:

Código (vbnet) [Seleccionar]

     Dim docHTML As XDocument = New XDocument
       Dim docType As XDocumentType = New XDocumentType("html", Nothing, Nothing, Nothing)
       docHTML.Add(docType) '<!DOCTYPE html >

       Dim HTML As XElement = New XElement("html", New XElement("head", New XElement("title", "HTML de prueba")), New XElement("body"))
       Dim HEAD As XElement = HTML.Element("head")
       Dim BODY As XElement = HTML.Element("body")

       Dim etiquetaStyle As XElement = New XElement("style", vbCrLf,
                                                    "body{background-color: red;}", vbCrLf,
                                                    "h1{font-style: italic}", vbCrLf)
       Dim script As XElement = New XElement("script", "")
       HEAD.Add(New XElement(etiquetaStyle))

       Dim h1 As XElement = New XElement("h1", "Hola mundo")
       h1.SetAttributeValue("class", "titulo1")
       BODY.Add(New XElement(h1))
       docHTML.Add(HTML)


       TextBox1.Text = docHTML.ToString()
       WebBrowser1.DocumentText = docHTML.ToString()


Esto quedaría así:
Código (html4strict) [Seleccionar]

<!DOCTYPE html >
<html>
 <head>
  <title>HTML de prueba</title>
   <style>
body{background-color: red;}
h1{font-style: italic}
</style>
 </head>
 <body>
   <h1>Hola mundo</h1>
 </body>
</html>


También se puede escribir concatenado tal como xElement("html", new xElement("head",new xElement...),  xElement("body", new xElement...), pero a la hora de modificar cosas cuando es muy largo se hace tedioso. Prefiero hacerlo por partes.

Para añadir atributos a una etiqueta basta usar SetAttributeValue:

Código (vbnet) [Seleccionar]

h1.SetAttributeValue("class", "titulo1")


y el resultado sería :
Código (html4strict) [Seleccionar]

<h1 class="titulo1">Hola mundo</h1>


Espero le sirvan saludos



Acabo de averiguar que es posible crear las etiquetas de la siguiente manera:
Código (vbnet) [Seleccionar]

    Dim TABLECLAS1 As XElement = New XElement(<table>
                                                      <tr>
                                                          <td>Mercurio</td>
                                                          <td>Venus</td>
                                                      </tr>
                                                      <tr>
                                                          <td>Mercurio</td>
                                                          <td>Venus</td>
                                                      </tr>
                                                  </table>)

Me ha parecido muy curioso así que posteo.

#53
hola,  resulta que he recibido un mensaje de varios accesos fallidos a mi cuenta  y pensé que intentaron hackear mi cuenta. Pero resulta que al entrar en https://www.elhacker.net/geoip.html veo que la IP que recibe elhacker.net de mi conexión es la misma que muestra el mensaje de advertencia que me llegó al correo.

He mirado en detalles de conexión local y la IP no es igual que muestra elhacker.net. La verdad esto me asustó un poco porque ayer estuve haciendo cosas raras e instalando programas extraños y recibí varios intentos de intrusión, para colmo me han bloqueado una cuenta y al ver el mensaje de elhacker.net pensé que tenía malware en la compu y me estaban hackeando.

Resultante, mi  IP según https://www.elhacker.net/geoip.html es 185.*** mientras que la de mi red local es 192.** ¿eso por qué?


gracias
#54
hola, mi duda es que adaptador wireless puedo comprar que tenga un alcance de al menos 300m con obstáculos. Es que se suelen anunciar añadiendo (sin obstáculos) pero nunca dice cuanto con obstáculos.

por ejemplo esto dice que alcanza 500 a 2000m  (sin obstáculos), sencillamente no me lo creo y si es así, ¿cuánto con obstáculos?

https://www.amazon.es/dp/B07C9RTSXQ/ref=sspa_dk_detail_2?psc=1&pd_rd_i=B07C9RTSXQ

La razón es que hay un wifi público a uno 300 metros de donde vivo y me gustaría poder pillar esa wifi, pero no se como. Entre yo y su router wifi hay edificios de por medio.
#55
que hay, voy a comprar almohadillas térmicas para mi portátil además de pasta térmica. El caso es que buscando en tiendas online, resulta que la gente en Amazon valora siempre a la baja, tendencia en esta tienda, pero me hace dudar. Muchos se quejan que lo han aplicado a su CPU y alcanza los 90 ºC. Sin embargo en Aliexpress, mismas marcas las valoran muy positivamente. También es que veo precios muy dispares para aparentemente la misma marca y tipo, no se si es que habrán falsas de los chinos.



Para CPU yo usaría la que va en una jeringuilla, osea grasa térmica. En este caso entiendo que los que votan negativamente en Amazon es que han usado mal el producto colocando las almohadillas en el CPU. Pero culpa la tienen los fabricantes también porque lo anuncian como disipadores para CPU.  

Al desmontar el portátil y quitar la refrigeración he visto que usaron almohadillas para los chips pero en el CPU grasa calorífica, que ya estaba seca.

De todos modos me gustaría que me aconsejaran una marca en concreto o alguna especificación aconsejable ya que no entiendo muy bien los datos técnicos que aportan los vendedores.

gracias
#56
Hardware / caja o torre para placa base vieja
14 Febrero 2019, 15:31 PM
que tal, tengo una placa base Asus ya de 10 años y quiero montarla en una  torre para meterle el viejo XP.

Lo que ocurre es que no se si valdrá cualquier torre y es que deben encajar las entradas para el DC el, audio, VGA, etc y claro no se como puedo encontrar una torre adecuada.

Me acabo de dar cuenta que es algo tan simple, que aprendes tantas cosas de informática y luego alto tan simple se convierte en tan complicado, porque no todas las torres son iguales. No se como referenciar en Google para buscar una tipo de torre específica para mi placa base.

Alguna ayuda

gracias


ya lo he encontrado sería esta



La clave es fijarse en la parte de atrás que tenga el número de ranuras para PCI que tengla la placa base.

Serían 4 en mi caso
#57
hola, estoy intentado crear una carpeta como la de SYSTEM INFORMATION.



Hace poco hice una reparación de disco y se crearon unas carpetas

found.000
found.001
found.002

resulta que éstas carpetas son idénticas en comportamiento a las de 'system information'

La única manera de acceder a éstas carpetas es desde fuera del sistema. Ni en modo seguro se puede. O bien desde Linux, un disco de arranque o algo así.

Entonces tengo la curiosidad de cómo se crean estas carpetas.

He conseguido crear carpetas que deniegan el acceso con net y consola pero son fáciles de volver a hacerlas accesibles con simples comandos de consola.


gracias




Para anticiparme a posibles ejemplos. Esto no sirve:
Código (vbnet) [Seleccionar]
       Dim fs As FileSystemSecurity = File.GetAccessControl(TextBox1.Text)
       fs.AddAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny))
       File.SetAccessControl(TextBox1.Text, CType(fs, FileSecurity))


No permite acceder pero el cuadro que muestra no es el mismo.





He estado un buen rato investigando y parece un tema relacionado permisos y auditoría de una carpeta o directorio.

Al hacer clic en la carpeta found.000 con el botón derecho. pestaña SEGURIDAD/OPCIONES AVANZADAS.

Vemos las pestañas Permisos y Auditoría. Toqueteando un poco y activando todos los permisos para mí, conseguí abrir la carpeta y además volverla al estado de "acceso denegado".

Ahora es cuestión de aplicarlo usando NET  :-\.

Continuaré investigando...
#58
Tengo esa duda, tengo un portátil que ya tiene sus añitos y se sobrecalienta y se apaga. He comprobado el sistema de ventilación y funciona correctamente. No se para ni se atasca

He visto en lugares públicos que también gente con portátiles viejos tienen que levantarlos un poco o ponerles ventiladores extra en la parte inferior para evitar el sobrecalientamiento

¿A qué es debido? ¿Hay alguna forma de evitarlo?

gracias


(el problema se acentúa en verano, lógico no?)
#59
Hola

Tengo un portátil que ahora no uso mucho pero que cuando lo pongo en marcha resulta que se ha cambiado la hora de forma aleatoria.

Como es aleatorio el cambio de hora y fecha no creo que sea de la pila, ya que de ser así se pondría a la hora y fecha mínima por defecto.


Si apago el portátil y lo dejo un par de horas apagado, sin batería y lo vuelvo a encender tiene la hora bien.

No se que hacer  :-\,


Gracias

#60
Android / Fraude Suscripción automática
20 Julio 2017, 13:24 PM
hola, acabo de adquirir uno de estos móviles de última generación con Android, y me encuentro que al instalar varias aplicaciones (gratuitas) de vez en cuando me aparece publicidad spam al activar alguna aplicación, como wallapop por ejemplo aparece una especie de página de publicidad. (pero no siempre)

El caso es que en una de ellas en lugar de darle a cerrar debí sin querer darle a otro sitio y  me suscribí a un servicio de 2€ y pico semanales. La operadora me lo notifico via sms y lo bloquee de inmediato.

En un ordenador quizás me apañaría para quitar este tipo de cosas pero desde Android no tengo ni idea y no quiero tener que recurrir a APPs de terceros

Espero me puedan ayudar.

Gracias



#61
Buenas,

mi problema es que las letras de las particiones (volúmenes) se cambian solas.

Me pasó lo siguiente:

- El sistema funciona bien un día pero de pronto Windows empieza a fallar y se cuelga, luego intento iniciar y no hay manera. Si lo consigo se vuelve a colgar.

- Entonces arranco desde un USB para iniciar en modo consola y descubro que los las letras de las particiones a cambiado

C: System (partición que crea Windows con el sistema de reparación)
D:  Boot (partición que alberga Windows)
E: partición libre
F: CD-ROM


Cuando debería ser así:

*: System (partición que crea Windows con el sistema de reparación)
C:  Boot (partición que alberga Windows)
D: partición libre
E: CD-ROM


entonces lo cambio con DISKPART y luego todo funciona otra vez bien pero, luego vuelve a ocurrir. No se si será un virus o que.


gracias por la ayuda

#62
Desarrollo Web / jquery desde un archivo js
29 Abril 2017, 20:10 PM
hola

estoy intentado usar jquery desde una archivo js, pero no devuelve valor.


Quiero obtener el color rgb del bacground de  un <label>


var colorRGB;

(function($){colorRGB=$('label').css('background-color')})(jQuery);


pero la variable colorRGB es Undefined. El <label> tiene color y desde html la funcion $('label').css('background-color') funciona y devuelve el color. pero no consigo que funcione desde un archivo js.

No se usar jquery dentro de un archivo js   :(


#63
hola

Estoy aprendiendo javascript y he llegado a ese punto que quiero crear una librería llamando a una función externa de una archivo js.

Esto en el HTML
Código (javascript) [Seleccionar]

<body>

<div class="container"></div>
<script type="text/javascript">
var contenedor= document.getElementsByClassName('container')[0];
with(contenedor)
{
style.width="300px"
style.height="300px"
style.backgroundColor="red"
}
//aquí llamaría a la función externa crearParrafo que crearía el objeto
//párrafo dentro del div

crearObjeto(contenedor)
//Esta  sería la función externa en el archivo crearParrafo.js
// function crearObjeto(contenedor)
// {
// //crear objeto
// var parrafo= document.createElement('p');
// parrafo.innerText="¡Hola mundo!"
// contenedor.appendChild(parrafo);
// }
</script>
<script type="text/javascript" src="crearParrafo.js"></script>
</body>



y esta función en archivo javascript externo:
Código (javascript) [Seleccionar]

function crearObjeto(contenedor)
{
//crear objeto
var parrafo= document.createElement('p');
parrafo.innerText="¡Hola mundo!";
contenedor.appendChild(parrafo);
};


Esta parte de como llamar a funciones externas como jquery y librerías personalizadas no se como hacerlo.

Ayuda por favor

Gracias




Encontré la manera

En el HTML pongo:


Encontré la manera

en el HTML pongo:

Código (javascript) [Seleccionar]
<div class="container"></div>
<script type="text/javascript" src="crearObjeto.js"></script>
<script type="text/javascript">
var n = document.getElementsByClassName('container')[0]
var objeto= crearObjeto(document);
n.appendChild(objeto)
</script>


y el archivo crearObjeto.js

Código (javascript) [Seleccionar]

function crearObjeto($)
{
var objeto= $.createElement('p')
objeto.innerText="hola mundo"
with(objeto)
{
style.backgroundColor="lightblue"
style.width="100px"
}
return objeto
};



pero yo he visto usar expresiones como esta:

$(element).yourfunctionname()

...
(function($){
$.fn.yourFunctionName = function(){
    alert('function called succesfully for - ' + $(this).html() );
}

y no comprendo esta sintaxis

#64
hola

Supón que que te acusan judicialmente  o con intención de grabar tu respuesta como confesión de romper un cristal de una ventana que no rompiste y  te preguntan:

Citar¿Es verdad que rompiste la ventana?

La respuesta debería ser NO. La cual se interpreta como 'NO, no es verdad'

pero si te preguntan:

Citar¿No es verdad que rompiste la ventana?

¿la respuesta debería ser SI o NO? porque si digo NO, ¿ no sería como decir que 'Si, es verdad que rompí la ventana'? o Si, no es verdad que rompí la ventana
No, no es verdad que rompí la ventana

luego las formulas posibles de hacer al pregunta serían:
Citar¿Es verdad que rompiste la ventana?
R: NO

Citar¿Es verdad que no rompiste la ventana?
R: Si

Citar¿No es verdad que no rompiste la ventana?
R: ?

Citar¿No es verdad que rompiste la ventana?
R: ?


Tengo esa duda que me confunde mucho.  :¬¬

#65
Se que la pregunta perece broma, pero es absolutamente sincera.

Estoy  realizando un curso del SOC, y el coordinador me ha notificado que si durante las prácticas en empresa hago algún "ruidito" (aunque sea involuntariamente) seré inmediatamente expulsado.

NOTA: el "ruidito" todo y aunque no fuera tal si se pensara que lo es, igualmente sería expulsado.

¿Es esto legal? ¿Se puede echar a alguien por tirarse un pedo o eructar?

En el caso que ocurriera me gustaría denunciarlo legalmente ¿tendría las de ganar o las de perder?

gracias
#66
hola

He creado un DataGridView dentro da algunas celdas he añadido combox (DataGridViewComboBoxCell). El caso es que necesito que al seleccionar un elemento del combo, automáticamente reciba el evento y usar el valor seleccionado para buscarlo en una tabla DataTable para luego obtener un valor:

Código (vbnet) [Seleccionar]

    Public Sub GetValue(ByVal numCol As Integer, ByVal numRow As Integer)
        If numCol = 0 Then
            For Each N As DataRow In dt.Rows
                Dim Item As String = CStr(N.Item(1).ToString.Replace("*", ""))
                Try
                    If DataGridView1.Item(numCol, numRow).Value.ToString.Contains(Item) Then
                        DataGridView1.Item(5, 0).Value = N.Item(10)
                    End If
                Catch ex As Exception

                End Try

            Next
        End If
    End Sub


Tengo una tabla DataTable llamada dt y con el este código la idea es añadirla en un evento el cual me devuelve la columna y la fila donde  he seleccionado el elemento del combo y llamo al procedimiento getValue:
Código (vbnet) [Seleccionar]
GetValue(e.ColumnIndex, e.RowIndex )

Pero no consigo encontrar ningún evento que ejecute el procedimiento instantáneamente nada más hacer clic en un elemento del combo.

Solo consigo que devuelva el valor cuando hago clic en otra ceda del DataGridView y abandono el combo.

espero me puedan ayudar  :)


Gracias
#67
Programación General / VB.NET infravalorado
18 Marzo 2017, 12:42 PM
que tal.

Actualmente estoy en una escuela de informática en la cual estoy aprendiendo javascript , que no necesito ir a una escuela para aprender, pero claro, siendo autodidacta no hay título.

El caso es que yo comenté  que sabía programar con VB, VB.NET y C# pero el profesor me trata como si fuera un mamarracho que no ha programado en su vida, ni tuviera ni idea de programación, algo que me irrita bastante. Muy al contrario que con otro estudiante que ya de entrada decía que sabía javascript (sin título), que lo tiene como si fuera el mismísimo Albert Einstein de la programación. Dicho estudiante dijo que VB es una porquería, al tiempo que ASP.NET

Tengo la sensación que VB.NET y VS en general se INFRAVALORA bastante, y es considerado una programación menor.

Personalmente creo que VB,  C# y C++  tiene mucha más funcionalidad y complejidad que javascript. Éste último destaca porque es muy usado teniendo en cuenta que es el lenguaje por excelencia para aplicaciones WEB, y teniendo en cuenta el tiempo que vivimos y su uso en Internet, no es de extrañar que se le de más importancia, mientras que  VB por ejemplo queda relegado sistemas de desarrollo de Windows.

La verdad es que es irritante haberme tirado años programando con VB (el viejo y el de ahora) y últimamente en C# para llegar a un sitio y me traten como un recién salido de la guardería en el ámbito de la programación.

También veo en Internet muchos comentarios negativos hacia VB.NET y no entiendo muy bien el porqué, En algunos aspectos lo entiendo pero en términos de funcionalidad y complejidad no creo que sea como hablar de él como si fuera de preescolar.

Saludos
#68
que tal, tengo Windows 7 64 bits y no tengo disponible en el menú Nuevo del menú contextual del Escritorio el "Documento de texto enriquecido"

Buscando en Google, he encontrado que modificando el registro en HKEY_CLASSES_ROOT, elijo cualquier extensión de archivo. Si no tiene la clave [ShellNew] la creo,  y en esta clave añado un valor de cadena con nombre "NullFile", el tipo de archivo elegido aparecerá en el menú Nuevo.

Sin embargo, y atención a esto, desde otro ordenador también con Windows 7 que SI dispone del Documento de texto enriquecido (RTF) en el menú nuevo, no aparece tal valor "NullFile". Así que no creo que el que no tenga dicho valor sea la razón de que no me aparezca en el menú del otro ordenador.

¿Alguien sabe porqué y como puedo añadirlo?





El "NullFile" está en la extensión .bmp y sin embargo no aparece en el menú.

Creo recordar que había un cuadro en no se donde donde se podía elegir los elementos de este menú, pero quizás me equivoque.


Gracias
#69
que tal, necesito obtener las celdas seleccionadas al hacer click de un DataGridView.

He probado con este código pero sólo me devuelve la celda donde hice clic.
Código (vbnet) [Seleccionar]

  Dim celda As New List(Of String)
       For Each cell As DataGridViewCell In Me.DataGridView1.SelectedCells
           celda.Add(CStr(cell.ColumnIndex & "," & cell.RowIndex))
       Next
       MessageBox.Show(String.Join("; ", celda))


la idea es que al seleccionar un grupo de celdas al hacer clic, introducir una serie de valores automáticos en dichas celdas, pero necesito saber cuales están seleccionadas para introducirles el valor.

Ademas DataGridView1.SelectedCells.Count sólo me devuelve el valor 1 al hacer clic en el evetno DataGridView1_CellMouseClick, aunque haya más de una celda seleccionada.

gracias




Bueno, parece que solo funciona desde un evento distinto de CLICK, puedo obtener las celdas seleccionadas desde otros eventos como MOUSEUP o MOUSEDOWN.

Al parecer al hacer click sobre una celda del grupo de celdas seleccionadas, se deseleccionan todas las celdas y queda solamente 1 celda seleccionada, entonces siempre devuelve 1.

También devolvería todas las celdas desde un botón, por ejemplo:

How to: Get the Selected Cells, Rows, and Columns in the Windows Forms DataGridView Control




#70
hola

Estoy intentado conectar con mi cuenta de correo GMAIL desde Net pero no hay manera.

Consiguo conectar pero el acceso es bloqueado y recibo un mensaje en el correo gmail notificando intentos de inicio de sesión bloquados.

El código que he usado es el siguiente:


Código (vbnet) [Seleccionar]
Imports Limilabs.Client.IMAP

Module Module1

   Private Const _server As String = "imap.gmail.com"
   Private Const _user As String = "USER"
   Private Const _password As String = "PASSWORD"

   Sub Main()
       Using imap As New Imap

           imap.ConnectSSL(_server, 993)

           ' imap.Connect(_server)                           ' Use overloads or ConnectSSL if you need to specify different port or SSL.

           imap.Login(_user, _password)                    ' You can also use: LoginPLAIN, LoginCRAM, LoginDIGEST, LoginOAUTH methods,
           ' or use UseBestLogin method if you want Mail.dll to choose for you.

           Dim folders As List(Of FolderInfo) = imap.GetFolders()      ' List all folders on the IMAP server

           Console.WriteLine("Folders on IMAP server: ")
           For Each folder As FolderInfo In folders

               Dim status As FolderStatus = imap.Examine(folder.Name)  ' Examine each folder for number of total and recent messages.

               Console.WriteLine(String.Format("{0}, Recent: {1}, Total: {2}", _
                   folder.Name, _
                   status.MessageCount, _
                   status.Recent))                                     ' Display folder information                
           Next

           ' You can also Create, Rename and Delete folders:
           imap.CreateFolder("Temporary")
           imap.RenameFolder("Temporary", "Temp")
           imap.DeleteFolder("Temp")

           imap.Close()
       End Using
         Console.ReadLine()
   End Sub

End Module



Desde mi cuenta gmail he habilitado el acceso IMAP. Y la configuración que gmail te recomienda para correo entrante es la siguiente:


Servidor de correo entrante (IMAP)

imap.gmail.com
Requiere SSL: Sí
Puerto: 993


Ver: Leer mensajes de Gmail desde otros clientes de correo mediante IMAP

He usado la librería Mail.dll. Para más información entrar aquí:

Download emails using POP3 in .NET

y para descarga de la librería y ejemplos de uso aquí:
Mail.dll - .NET email component (IMAP, POP3, S/MIME)


NOTA: Desde Windows Live ocurre exáctamente igual.

Gracias




Lo he testado desde una cuenta hotmail y  funciona. Hay que cambiar el servidor  IMAP por "imap-mail.outlook.com"




Volví a intentarlo usando POP3 Pero recibo el siguiente mensaje de error

[AUTH] Web login required: https://support.google.com/mail/answer/78754
#71
hola

Hace unos días windows no detectaba mi tarjeta Micro-SD.



Al hacer clic en la unidad aparecía un mensaje de windows ofrenciendo formatear. Por supuesto le di a 'Cancelar'.




Pensando que el comando CHKDSK en consola no serviría al ser ilegible, busco en Google -Reparar micro SD-. Los resultados me llevan a páginas donde se ofrece usar programas.

Tras bajarme uno de ellos veo que no repara el SD si no que se limita a rastrear el contenido y crear una lista de archivos recuperables y sin la jerarquía de carpetas. Así que lo cierro y lo dejo estar.

Decidí probar  el comando CHKDSK en modo reparación y recuperé el SD. Con todos las carpetas y archivos.


COMO REPARAR UNA MICRO-SD DESDE WINDOWS
Sin necesidad de usar programas externos, ni descargar nada.

- Pulsa el botón INICIO de Windows

- Escribe 'cmd.exe' y cuando lo veas en la lista dale con el botón derecho y ejecútalo como Administrador

- En la ventana negra que se abre (la consola), escribe:


CHKDSK LETRAUNIDAD: /F

Por ejemplo, si tu MICRO-SD está en la unidad H: pones:

CHKDSK H:  /F

y luego pulsa ENTER.




Inmediatamente  chkdsk.exe, una aplicación de windows que se encuentra en  system32,  comenzará a comprobar la unidad y reparar los errores que contenga. Una vez acabe, la unidad ya será accesible.



En el caso que hayan archivos dañados y se quiera recuperar información , puedes usar /R. Ocurre cuando no puedes abrir una carpeta que debería ser accesible o no se encuentran archivos que deberían estar en determinado directorio. Windows no pudo registrar debidamente los últimos archivos creados, debido a una detención de la escritura repentina.


CHKDSK H: /R

/R Encuentra los sectores dañados y recupera la información legible.(implica /F)

Este proceso es más lento.


El uso de de CHKDSK ya lo conocía, es super conocido, pero no pensé que pudiera reparar un SD ilegible, pero así ha sido y por este motivo lo comparto aquí, para todo aquel que le ocurra lo mismo y quiera recuperar su SD dañado.

Si usas este proceso de reparación con unidades de disco o particiones en uso como C:/ seguramente recibirás un mensaje invitándote a realizar la comprobación la próxima vez que se inicie el sistema. Esto es que cuando reinicies y  antes de que se inicie sesión de Windows, CHKDSK hará la comprobación de la unidad.



RECOMENDACIONES
Para evitar errores en el futuro, recomiendo expulsar los pendrives, discos externos USB y tarjeta SD de forma segura. Puedes hacerlo simplmente pulsando sobre el icono en forma de USB que hay en área de notificación de windows (al lado del reloj), y seleccionar la unidad a extraer de forma segura









Ocurre que si windows está escribiendo en la unidad si lo sacas de golpe antes de que se modifique el registro de archivos, se corrompe y luego puede ocurrir que el disco, pendrive, o tarjeta SD sea inaccesible o bien que alguna carpeta que contenga no sea accesible a causa de un error en la escritura del registro de archivos de la unidad. En caso de poder acceder al disco pero que una carpeta que creamos y que debería contener x archivos no se accesible por un error, para recuperar los archivos que ésta contenía usa el comando CHKDSK y aplica el comando /R.


Si se da el caso que no puede expulsar la unidad de forma segura porque algún proceso la está usando, cierra los programas que pueda estar accediendo a algún archivo en la  unidad. Si aún así sigues sin poder extraer de forma segura, seguramnte sea el mismo Explorer.exe. En tal caso puedes cerrarlo y volverlo a abrir:


Ejecuta la consola (CMD.EXE) desde inicio o Run (Tecla Windows + R) y escribre lo siguiente:

TASKKILL /F /IM Explorer.exe
(para cerrar explorer.exe)

START Explorer.exe
(para abrir explorer.exe de nuevo)

También puedes ejecutar taskmgr.exe o bien pulsar [CTRL+ ALT+ SUPR] y selecciona Iniciar Administrador de Tareas. Desde ahí puedes cerrar Explorer y luego abrir nuevamente Explorer.exe desde el menú Abrir/Nueva tarea(Ejecutar...).

Luego vuelve a intentar expulsar la unidad de forma segura.



· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex
#72
hola buenas

Tengo un código simple HTML de una página web. El cual al abrirlo con el navegador, éste crea cookies.

Con seguridad no son scripts los que los crea pues he eliminado todas las direcciones a archivos javascript. Dicho esto no se como lo hace a no ser que si es mediante javascript, se descargue desde una url href.

Lo que necesito es algún truco o algo que me permita averiguar que debo eliminar del código HTML para que no genere cookies.


(Se que se pueden bloquear desde el navegador pero no es lo que me interesa)

Gracias
#73
Sugerencias y dudas sobre el Foro / ¿el-hacker.org?
13 Diciembre 2016, 12:42 PM
Buscando en google, me ha aparecido un enlace con el nombre 'el-hacker.org/', al darle el servicio de DNS me ha bloqueado la entrada. Además el antivirus me lo valora como [?] (El antivirus desconoce el contenido de la página, todavía no ha sido evaluada)

El enlace principal es este:

elhacker.INFO - Hackear


la cosa es que en la parte inferior ponía parte de texto de un hilo de elhacker.net.  Este
https://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwimorDGjPHQAhWGuxQKHcIiAZ4QFggvMAI&url=http://serokool.el-hacker.org/&usg=AFQjCNGpn6PNx1VhOdfdYSLRzuyMhS-01Q&bvm=bv.141320020,d.d24

Que debería ser este:

Lista simple -- Error

o este otro, ya que muestra el título de uno  y el título de este otro hilo
https://foro.elhacker.net/foro_libre/estaria_interesante_crear_un_programita_con_el_algoritmo_de_cada_especie_animal-t460050.0.html;msg2096713

Lo explico mejor por si no se entiende.

Google muestra... elhacker.INFO - Hackear debajo de este enlace pones fragmentos de texto que hace referencia a varios hilos de elhacker.net.

Tal como así:

Citar
elhacker.INFO - Hackear
juce.el-hacker.org/
Cómo crear una versión portátil de Windows 10 en un disco duro USB para . .... Estaría interesante crear un programita con el algoritmo de cada especie animal ...

#74
Windows / Los editores de 64 bits se atascan
13 Diciembre 2016, 11:43 AM
hola
tengo windows7 de 64bits y los editores de 64bits se atascan de vez en cuando al escribir durante un segundo. Me pasa también con Photoshop de 64bits.

No se que puede ser. No es el OS porque tengo el mismo en otro ordenador y va bien. No se si será alguna configuración del bios.

gracias por la ayuda
#75
Windows / Notepad se atasca al escribir
21 Noviembre 2016, 10:30 AM
hola, tengo este problema con el Notepad, cuando escribo se atasca durante un par de segundo de vez en cuando.

Voy escribiendo y  de pronto aunque pulse las teclas no escribe durante  un par de segundos. Luego funciona de nuevo correctamente y tras escribir o dejar de escribir un rato al escribir de nuevo vuelve a bloquearse ese par de segundos.

Solo me pasa con el Notepad. Es raro, nunca me ha pasado con ningún sistema.

Estoy usando W764bits.

gracias
#76
hola

Voy a vender por Internet  como particular poniendo un anuncio. Es un objeto caro. En principio me gustaría entregar en mano en mi ciudad, porque dudo de enviar por correo no vayan a romperlo y luego devolverlo diciendo que estaba roto.

Mi duda es si lo envío por correo, puedan hacer eso, ¿Qué me aconsejan?. No se si se puede poner -no se admiten devoluciones- o algo así.

Nunca he vendido nada y no conozco los pasos a seguir para evitar problemas de cualquier tipo. ¿Si entrego en mano debo hacer un firmar un papel de conformidad o algo así ? No se.

Es que está en perfectas condiciones y no quiero que luego me vengan con pegas y me lo devuelvan roto. Más que nada es eso.

gracias








#77
Buenas amigos,  estoy intentando saturar una imagen y lo he conseguido pero el programa tarda mucho en procesar los cambios. Estoy orgulloso de lo que he conseguido porque no ha sido fácil averiguarlo, pero no va bien. He usado los miembro ColorMatrix y SetColorMatrix y he conseguido crear una matriz que realiza la saturación de una imagen, pero al usar un TrackBar el proceso de los cambios es demasiado lento.

    S = (TrackBar1.Value) + 100

       Dim Rojo As Single = CSng(299 * (100 - S) / 100000)
       Dim Verde As Single = CSng(587 * (100 - S) / 100000)
       Dim Azul As Single = CSng(114 * (100 - S) / 100000)

       S = CSng(S / 100)
       Dim colorMatrixVal As Single()() = {
       New Single() {Rojo + S, Rojo, Rojo, 0, 0}, _
       New Single() {Verde, Verde + S, Verde, 0, 0}, _
       New Single() {Azul, Azul, Azul + S, 0, 0}, _
       New Single() {0, 0, 0, 1, 0}, _
       New Single() {0, 0, 0, 0, 1}}



Este lo he hecho como ejemplo para ponerlo aquí:
Código (vbnet) [Seleccionar]

Imports System.IO
Imports System.Drawing.Imaging



Public Class Form1
   Private originalBitmap As Bitmap = Nothing
   Private previewBitmap As Bitmap = Nothing
   Private resultBitmap As Bitmap = Nothing
   Dim PictureBox1 As New PictureBox With {.Location = New Point(10, 10),
                                           .Size = New Size(400, 240),
                                           .SizeMode = PictureBoxSizeMode.StretchImage,
                                           .BackColor = Color.DarkGray}
   Dim Button1 As New Button With {.Location = New Point(PictureBox1.Width + 20, 10), .Text = "Cargar"}
   Dim Button2 As New Button With {.Location = New Point(PictureBox1.Width + 20, 40), .Text = "Guardar"}
   Dim TrackBar1 As New TrackBar With {.Location = New Point(10, PictureBox1.Height + 20),
                                       .AutoSize = True,
                                       .Size = New Size(PictureBox1.Width, 10),
                                       .TickStyle = TickStyle.TopLeft,
                                       .BackColor = Color.DarkGray,
                                       .TickFrequency = 50,
                                       .Maximum = 100,
                                       .Minimum = -100,
                                       .Value = 0,
                                       .Orientation = Orientation.Horizontal}
   Dim Label1 As New Label With {.Location = New Point(TrackBar1.Width + 20, TrackBar1.Top + 10),
                                 .AutoSize = True,
                                 .Text = "0",
                                .Font = New Font("Arial", 20, FontStyle.Bold)}

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
       Me.Controls.Add(PictureBox1)
       Me.Controls.Add(Button1)
       Me.Controls.Add(Button2)
       Me.Controls.Add(TrackBar1)
       Me.Controls.Add(Label1)

       Label1.BringToFront()
       Me.Size = New Size(520, 400)

       AddHandler TrackBar1.ValueChanged, AddressOf TrackBar1_ValueChanged
       AddHandler Button1.Click, AddressOf Button1_Click
       AddHandler Button2.Click, AddressOf Button2_Click
   End Sub

   Private Sub TrackBar1_ValueChanged(sender As Object, e As EventArgs)

       Label1.Text = TrackBar1.Value.ToString()
       AplicarSaturacion(True)
   End Sub


   Private Sub Button1_Click(sender As Object, e As EventArgs)
       Dim ofd As New OpenFileDialog()
       ofd.Title = "Abrir imagen"
       ofd.Filter = "Jpeg Images(*.jpg)|*.jpg|Png Images(*.png)|*.png"
       ofd.Filter += "|Bitmap Images(*.bmp)|*.bmp"

       If ofd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
           Dim streamReader As New StreamReader(ofd.FileName)
           originalBitmap = DirectCast(Bitmap.FromStream(streamReader.BaseStream), Bitmap)
           streamReader.Close()
           previewBitmap = Image.FromFile(ofd.FileName)
           PictureBox1.Image = previewBitmap

           AplicarSaturacion(True)
       End If
   End Sub

   Private Sub Button2_Click(sender As Object, e As EventArgs)
       AplicarSaturacion(False)


       If resultBitmap IsNot Nothing Then
           Dim sfd As New SaveFileDialog()
           sfd.Title = "Guardar imagen"
           sfd.Filter = "Jpeg Images(*.jpg)|*.jpg|Png Images(*.png)|*.png"
           sfd.Filter += "|Bitmap Images(*.bmp)|*.bmp"

           If sfd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
               Dim fileExtension As String = Path.GetExtension(sfd.FileName).ToUpper()
               Dim imgFormat As ImageFormat = ImageFormat.Png

               If fileExtension = "BMP" Then
                   imgFormat = ImageFormat.Bmp
               ElseIf fileExtension = "JPG" Then
                   imgFormat = ImageFormat.Jpeg
               End If

               Dim streamWriter As New StreamWriter(sfd.FileName, False)
               resultBitmap.Save(streamWriter.BaseStream, imgFormat)
               streamWriter.Flush()
               streamWriter.Close()

               resultBitmap = Nothing
           End If
       End If
   End Sub
   Public Sub AplicarSaturacion(Byval  preview As Boolean)
       If previewBitmap Is Nothing Then
           Return
       End If
       Dim Imagen As Image = previewBitmap
       Dim Pic As PictureBox = PictureBox1
       Dim Grafico As Graphics
       Dim Rectangulo As Rectangle
       Pic.Image = New Bitmap(Pic.Width, Pic.Height, PixelFormat.Format32bppArgb)
       Grafico = Graphics.FromImage(Pic.Image)
       Rectangulo = New Rectangle(0, 0, Pic.Width, Pic.Height)
       Grafico.DrawImage(Imagen, Rectangulo)
       Dim S As Single

       S = (TrackBar1.Value) + 100

       Dim Rojo As Single = CSng(299 * (100 - S) / 100000)
       Dim Verde As Single = CSng(587 * (100 - S) / 100000)
       Dim Azul As Single = CSng(114 * (100 - S) / 100000)

       S = CSng(S / 100)
       Dim colorMatrixVal As Single()() = {
       New Single() {Rojo + S, Rojo, Rojo, 0, 0}, _
       New Single() {Verde, Verde + S, Verde, 0, 0}, _
       New Single() {Azul, Azul, Azul + S, 0, 0}, _
       New Single() {0, 0, 0, 1, 0}, _
       New Single() {0, 0, 0, 0, 1}}

       Dim colorMatrix As New ColorMatrix(colorMatrixVal)
       Dim ImagenAtributos As New ImageAttributes

       ImagenAtributos.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
       Grafico.DrawImage(Imagen, Rectangulo, 0, 0, Imagen.Width, Imagen.Height, GraphicsUnit.Pixel, ImagenAtributos)
       Pic.Refresh()
       resultBitmap = Pic.Image
   End Sub
End Class


Va bien  pero al deslizar el TrackBar se producen trompicones al moverlo.


He conseguido convertir por mi cuenta un código de VB viejo a NET que usa API. Que no sé, seré el único que lo he hecho porque puse en google -SetColorAdjustment VB.NET-  y ni rastro, las declaraciones que encontraba eran como en VB6.

Conseguí crear un código basado en API con SetColorAdjustment y GetColorAdjustment , y funciona bien. Los cambios son suaves pero tiene un problema y es que no puedo guardar los cambios y no consigo refrescar el PictureBox correctamente.

Este es el código:
Código (vbnet) [Seleccionar]

Imports System.IO
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices
Imports WindowsApplication1.NativeMethods



Public Class Form1
   Private originalBitmap As Bitmap = Nothing
   Private previewBitmap As Bitmap = Nothing
   Private resultBitmap As Bitmap = Nothing
   Dim picLoad As Boolean
   Dim PictureBox1 As New PictureBox With {.Location = New Point(10, 10),
                                           .Size = New Size(400, 240),
                                           .SizeMode = PictureBoxSizeMode.StretchImage,
                                           .BackColor = Color.DarkGray}
   Dim Button1 As New Button With {.Location = New Point(PictureBox1.Width + 20, 10), .Text = "Cargar"}
   Dim Button2 As New Button With {.Location = New Point(PictureBox1.Width + 20, 40), .Text = "Guardar"}
   Dim TrackBar1 As New TrackBar With {.Location = New Point(10, PictureBox1.Height + 20),
                                       .AutoSize = True,
                                       .Size = New Size(PictureBox1.Width, 10),
                                       .TickStyle = TickStyle.TopLeft,
                                       .BackColor = Color.DarkGray,
                                       .TickFrequency = 50,
                                       .Maximum = 100,
                                       .Minimum = -100,
                                       .Value = 0,
                                       .Orientation = Orientation.Horizontal}
   Dim Label1 As New Label With {.Location = New Point(TrackBar1.Width + 20, TrackBar1.Top + 10),
                                 .AutoSize = True,
                                 .Text = "0",
                                .Font = New Font("Arial", 20, FontStyle.Bold)}

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
       Me.Controls.Add(PictureBox1)
       Me.Controls.Add(Button1)
       Me.Controls.Add(Button2)
       Me.Controls.Add(TrackBar1)
       Me.Controls.Add(Label1)

       Label1.BringToFront()
       Me.Size = New Size(520, 400)

       AddHandler TrackBar1.ValueChanged, AddressOf TrackBar1_ValueChanged
       AddHandler Button1.Click, AddressOf Button1_Click
       AddHandler Button2.Click, AddressOf Button2_Click
       AddHandler PictureBox1.Paint, AddressOf PictureBox1_Paint
   End Sub
   Public Sub PictureBox1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs)
       If picLoad = True Then
           AplicarSaturacion(True)
       End If

   End Sub
   Private Sub TrackBar1_ValueChanged(sender As Object, e As EventArgs)
       Label1.Text = TrackBar1.Value.ToString()
       PictureBox1.Refresh()
       PictureBox1_Paint(1, Nothing)
   End Sub


   Private Sub Button1_Click(sender As Object, e As EventArgs)
       Dim ofd As New OpenFileDialog()
       ofd.Title = "Guardar imagen"
       ofd.Filter = "Jpeg Images(*.jpg)|*.jpg|Png Images(*.png)|*.png"
       ofd.Filter += "|Bitmap Images(*.bmp)|*.bmp"

       If ofd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
           Dim streamReader As New StreamReader(ofd.FileName)
           originalBitmap = DirectCast(Bitmap.FromStream(streamReader.BaseStream), Bitmap)
           streamReader.Close()
           previewBitmap = Image.FromFile(ofd.FileName)
           PictureBox1.Image = previewBitmap
           picLoad = True
           AplicarSaturacion(True)
       End If
   End Sub

   Private Sub Button2_Click(sender As Object, e As EventArgs)
       AplicarSaturacion(False)


       If resultBitmap IsNot Nothing Then
           Dim sfd As New SaveFileDialog()
           sfd.Title = "Abrir Imagen"
           sfd.Filter = "Jpeg Images(*.jpg)|*.jpg|Png Images(*.png)|*.png"
           sfd.Filter += "|Bitmap Images(*.bmp)|*.bmp"

           If sfd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
               Dim fileExtension As String = Path.GetExtension(sfd.FileName).ToUpper()
               Dim imgFormat As ImageFormat = ImageFormat.Png

               If fileExtension = "BMP" Then
                   imgFormat = ImageFormat.Bmp
               ElseIf fileExtension = "JPG" Then
                   imgFormat = ImageFormat.Jpeg
               End If

               Dim streamWriter As New StreamWriter(sfd.FileName, False)
               resultBitmap.Save(streamWriter.BaseStream, imgFormat)
               streamWriter.Flush()
               streamWriter.Close()

               resultBitmap = Nothing
           End If
       End If
   End Sub
   Public Sub AplicarSaturacion(ByVal preview As Boolean)


       Dim ca As COLORADJUSTMENT
       ca.caSize = CType(Marshal.SizeOf(ca), Short)
       Dim HDcPic As IntPtr = CType(PictureBox1.CreateGraphics.GetHdc, IntPtr) 'GetDC(PictureBox1.Handle)


       SetStretchBltMode(HDcPic, HALFTONE)
       GetColorAdjustment(HDcPic, ca)
       ca.caColorfulness = TrackBar1.Value
       SetColorAdjustment(HDcPic, ca)

       StretchBlt(HDcPic, 0, 0, PictureBox1.Image.Width, PictureBox1.Image.Height, _
       HDcPic, 0, 0, PictureBox1.Image.Width, PictureBox1.Image.Height, TernaryRasterOperations.SRCCOPY)

       resultBitmap = PictureBox1.Image

   End Sub




NativeMethods > GetColorAdjustment y SetColorAdjustment  para VB.NET

Código (vbnet) [Seleccionar]

<Security.SuppressUnmanagedCodeSecurity>
Friend Class NativeMethods
   Inherits Attribute
   Private Sub New()
   End Sub
   <DllImport("gdi32.dll")> _
   Public Shared Function BitBlt(hObject As IntPtr,
                                 nXDest As Integer,
                                 nYDest As Integer,
                                 nWidth As Integer,
                                 nHeight As Integer,
                                 hObjSource As IntPtr,
                                 nXSrc As Integer,
                                 nYSrc As Integer,
                                 dwRop As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function
   <DllImport("gdi32.dll")>
   Shared Function SetColorAdjustment(hdc As IntPtr,
                                      <MarshalAs(UnmanagedType.Struct)>
                                      ByRef lpca As COLORADJUSTMENT) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   <DllImport("gdi32.dll")>
   Shared Function GetColorAdjustment(ByVal hdc As IntPtr,
                                      <MarshalAs(UnmanagedType.Struct)>
                                      ByRef lpca As COLORADJUSTMENT) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   <DllImport("user32.dll")>
   Shared Function GetDC(ByVal hWnd As IntPtr) As IntPtr
   End Function

   <DllImport("gdi32.dll")> _
   Public Shared Function StretchBlt(hdc As IntPtr, _
                                     x As Integer,
                                    y As Integer,
                                    nHeight As Integer,
                                    hSrcDC As Integer,
                                    hObjSource As IntPtr, _
                                   xSrc As Integer,
                                   ySrc As Integer,
                                   nSrcWidth As Integer,
                                   nSrcHeight As Integer,
                                   dwRop As TernaryRasterOperations) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   <DllImport("gdi32.dll")> _
   Public Shared Function SetStretchBltMode(ByVal hObject As IntPtr,
                                            ByVal nStretchMode As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   <StructLayout(LayoutKind.Sequential)>
   Public Structure COLORADJUSTMENT
       Public caSize As Short
       Public caFlags As Short
       Public caIlluminantIndex As Short
       Public caRedGamma As Short
       Public caGreenGamma As Short
       Public caBlueGamma As Short
       Public caReferenceBlack As Short
       Public caReferenceWhite As Short
       Public caContrast As Short
       Public caBrightness As Short
       Public caColorfulness As Short
       Public caRedGreenTint As Short
   End Structure

  Public Enum caIlluminantIndex
       ILLUMINANT_DEVICE_DEFAULT = 0 'Device's default. Standard used by output devices.
       ILLUMINANT_A = 1 'Tungsten lamp.
       ILLUMINANT_B = 2 'Noon sunlight.
       ILLUMINANT_C = 3 'NTSC daylight.
       ILLUMINANT_D50 = 4 'Normal print.
       ILLUMINANT_D55 = 5 'Bond paper print.
       ILLUMINANT_D65 = 6 'Standard daylight. Standard for CRTs and pictures.
       ILLUMINANT_D75 = 7 'Northern daylight.
       ILLUMINANT_F2 = 8 'Cool white lamp.
       ILLUMINANT_DAYLIGHT = ILLUMINANT_C 'Same as ILLUMINANT_C.
       ILLUMINANT_FLUORESCENT = ILLUMINANT_F2 'Same as ILLUMINANT_F2.
       ILLUMINANT_MAX_INDEX = ILLUMINANT_F2 'Same as ILLUMINANT_F2.
       ILLUMINANT_NTSC = ILLUMINANT_C 'Same as ILLUMINANT_C.
       ILLUMINANT_TUNGSTEN = ILLUMINANT_A 'Same as ILLUMINANT_A.
   End Enum


   Public Enum TernaryRasterOperations
       SRCCOPY = &HCC0020 ' dest = source
       SRCPAINT = &HEE0086 ' dest = source OR dest
       SRCAND = &H8800C6 ' dest = source AND dest
       SRCINVERT = &H660046 ' dest = source XOR dest
       SRCERASE = &H440328 ' dest = source AND (NOT dest)
       NOTSRCCOPY = &H330008 ' dest = (NOT source)
       NOTSRCERASE = &H1100A6 ' dest = (NOT src) AND (NOT dest)
       MERGECOPY = &HC000CA ' dest = (source AND pattern)
       MERGEPAINT = &HBB0226 ' dest = (NOT source) OR dest
       PATCOPY = &HF00021 ' dest = pattern
       PATPAINT = &HFB0A09 ' dest = DPSnoo
       PATINVERT = &H5A0049 ' dest = pattern XOR dest
       DSTINVERT = &H550009 ' dest = (NOT dest)
       BLACKNESS = &H42 ' dest = BLACK
       WHITENESS = &HFF0062 ' dest = WHITE
   End Enum
   Public Const HALFTONE = 4

   <DllImport("gdi32.dll")> _
   Public Shared Function SetBkColor(hdc As IntPtr, crColor As Integer) As Integer
   End Function

End Class



Se ve muy largo el código pero tenía que ponerlo para que puedan analizar.

Espero que me puedan ayudar. No puedo darles nada solo mi agradecimiento. gracias




He conseguido redibujar correctamente el PictureBox en la versión para API metiendo la saturación en el evento PAINT, pero sigo sin poder guardar los cambios

Añadí la configuración al código anterior.





#78
.NET (C#, VB.NET, ASP) / Libros para aprender NET
7 Septiembre 2016, 12:24 PM

Serían tan amables de decirme libros de NET para aprender.

Me interesa  en español porque no se inglés. En bibliotecas públicas he encontrado pero son unos tochos y dicen cosas muy, muy básicas y se recrean mucho en conceptos y explicaciones para cosas muy simples. Además que tiran mucho de VB antiguo. También he mirado en tiendas y más de lo mismo.

Buscando en google, veo que los buenos de verdad  y que explican cosas interesantes pero son en inglés.

Me interesa especialmente vb.net y wpf.

gracias de antemano.