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 - okik

#91
Hola,
Necesito saber el estado de la conexión, si es limitada o no. Pero de forma que no se cuelgue el programa. Por ejemplo, supongamos que tengo conexión a la red  y trato de abrir una web mediante InternetOpen desde el Timer y si no se puede da valor falso, en cuyo caso tengo conexión a la red LIMITADA. Pero ocurre que como uso el timer constantemente trata de abrir la web y como no puede se el programa se cuelga.

gracias
#92
::)Hola,

Me estoy haciendo mi propio paquete de instalación y necesito adentrarme en como registrar la apliación, dlls, ocx, etc. en el registro, crear ID programa y todo eso. Desde el programa de instalación. Ya que no he encontrado nada.

Salu2
#93
::)No se como hacer descarga directa de archivos (con dirección Http) a través de un servidor socks.

Descargaba mediante URLDownloadToFile, Webbrowser o AsyncRead. El caso es que quiero una forma de indicar que se haga desde un servidor  SOCKS y usando una dirección HTTP.

No se si se podrá. Ahora mismo estaba experimentando y he conseguido conectar usando Winsock pero no se como luego aplicarlo a los sistemas de descarga habituales, no se si me explico.

gracias por la ayuda





Quiero hacerlo a través del servidor socks para evitar el bloqueo de direcciones por parte del servidor http. Esto es cuando se hace desde redes públicas, bibliotecas, universidades, etc.

#94
Redes / Evitar bloqueo DNS
8 Abril 2015, 14:08 PM
Hola

Hice un programa con VB6 y he usado Webbrowser. El caso es que al usar una red wiifi pública me aparece el OpenDNS de bloqueo cuando entro en determinadas páginas, las de descarga. Con el programa obtengo todos los links de una página y todos los enlaces de descarga. Pero no puedo si el P&//%// OpenDNS me bloquea no hay manera. :(

¿Hay alguna forma de evitar el bloqueo dentro de mi programa? Ya se que usando Tor Browser por ejemplo puedo evitar el bloqueo pero no desde mi programa que usa el browser de IE mediante el control Webbrowser.

He probado cambiando el protocolo de  Internet para usar una determinada DNS, pero no me ha funcionado.

Agradecería cualquier ayuda, gracias.

#95
He buscado y nada.

He creado un programa con el Webbrowser pero cuando lo uso en algunas redes wifi libres, públicos, tienen un sistema de bloqueo para determiandas páginas. Se me abre el OpenDNS en lugar de la página a la que quería entrar.

Mi programa obtiene todos los enlaces de descarga de una página. Pero si me bloquean el acceso pues no hay nada q hacer.

No he encontrado la manera de saltarme el bloqueo.  :-(

Agradecería cualquier ayuda, gracias.

=====
He probado cambiando  en las propiedades de Protocolo de Internet  versión 4 (TCP/IPv4) usar unas determinada DNS pero no ha funcionado.



#96
Hola

Quiero desde VB (net o 6) crear una carpeta personalizada. Esto es, una carpeta que contiene un archivo INI, el cual indica el icono que ha de usar la carpeta y la imagen de fondo que ha de mostrar.

Lo del archivo INI ya se como va. El caso es que se hacerlo manualmente, pero no se si habrá alguna API o Script para crearla directamente desde una apliación y luego desde el programa modificar el archivo INI.

He probado de usar un código CLSID, nombrando la carpeta:

Nombre.{450d8fba-ad25-11d0-98a8-0800361b1103}

Entonces, en este caso, la carpeta se convierte en una carpeta "MyDocuments", pero no se crea el archivo "Desktop.ini"

Gracias

#97
Hola
Llevo tiempo intentando semitransparentar un picture o una sólo una parte de un formulario. A día de hoy no lo he conseguido. No me importa que sea con vb6 o vb.net


He hecho un poquito de trampa, para simular el efecto. Aquí dejo una muestra de lo que quiero. Pero repito, que sólo simula el efecto.

1 Formulario: Form1
1 Formulario: Form2 (establecer como BorderStyle=0)
1 PictureBox en Form1
1 PictureBox en Form2
1 Control Timer en el Form1: Timer1


En un MÓDULO:

Código (vb) [Seleccionar]

Option Explicit
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
'Obtiene posición de una ventana u objeto
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const WS_EX_LAYERED = &H80000

 
Public Function CreateObjectTransparent(ByVal frmMain As Form, ByVal frmObj As Form, objPic As PictureBox, ByVal Alpha As Integer)
Dim i
frmObj.Show
frmObj.ZOrder 1
Transparencia frmObj.hwnd, Alpha
objPic.BackColor = &HFF00FF
AnularColor frmMain.hwnd, &HFF00FF
EnableWindow frmObj.hwnd, 0

End Function
'Función que aplica la transparencia, se le pasa el hwnd del form y un valor de 0 a 100
Public Function Transparencia(ByVal hwnd As Long, NivelTrans As Integer) As Long
Dim X As Long
On Error Resume Next
NivelTrans = (NivelTrans * 255) / 100

  X = GetWindowLong(hwnd, GWL_EXSTYLE)
  X = X Or WS_EX_LAYERED
  SetWindowLong hwnd, GWL_EXSTYLE, X
  'Establece la transparencia
  SetLayeredWindowAttributes hwnd, 0, NivelTrans, LWA_ALPHA

If Err Then
  Transparencia = 2
End If
End Function
'Función que aplica la transparencia, se le pasa el hwnd del form y un valor de 0 a 255
Public Function AnularColor(ByVal hwnd As Long, Color As Long) As Long
Dim X As Long
On Error Resume Next
      X = GetWindowLong(hwnd, GWL_EXSTYLE)
      X = X Or WS_EX_LAYERED
      SetWindowLong hwnd, GWL_EXSTYLE, X
      'Establece la transparencia
      SetLayeredWindowAttributes hwnd, Color, 0, &H1
      AnularColor = 0
If Err Then
AnularColor = 2
End If
End Function


Public Sub ResizeOjb(ByVal objPic As PictureBox, ByVal frmObj As Form)
Dim r As RECT, s As RECT, N
N = GetWindowRect(objPic.hwnd, r)
frmObj.Move r.Left * 15 - 200, r.Top * 15 - 200, objPic.Width + 400, objPic.Height + 400
End Sub




En un FORMULARIO:

Código (vb) [Seleccionar]

Private Sub Form_Load()
Form2.Picture1.BackColor = vbBlack
CreateObjectTransparent Form1, Form2, Picture1, 50
End Sub

Private Sub Form_Unload(Cancel As Integer)
Unload Form2
End Sub

Private Sub Timer1_Timer()
ResizeOjb Picture1, Form2
End Sub



Lo que hago es transparentar completamente el Picture1 del Form1 y luego semitransparentar el Form2 que contiene otro Picture. Obtengo la posición del Picture1 del Form1 y muevo y redimiensiono el Form2 al Picture1 del Form1. Coloco el Form2 debajo del Form1 y de esta manera creo el efecto de semitransperancia tan solo en un parte del Form1. Ademas he agrandado un poco el Form2 con respecto al Picture1 del Form1 para que al mover el formulario no se formen huecos ya que al mover muy rápido no le da tiempo a recolocar el Form2, lo bastante como para que se vean huecos si se mueve demasaido rápido

Este método que he utilizado NO me permite interactuar con el PictureBox semitransparente. Si que es posible quitando "EnableWindow frmObj.hwnd, 0" pero entonces al hacer clic en el Picture del Form2, éste se coloca delante del Form1. Ya he probado Zorder. No sirve queda un poco chapucero.

Esto  lo pongo como ejemplo pero no es lo que quiero. Lo ideal sería poder solo semitranspertentar una parte del Form o un Picture.



Saludos.


==============
Esto es una imagen que encontré googleando. Algo así me hiría de miedo. Como se ve en la imagen los controles no son transparentes pero el form sí.




#98
Hola
En Windows vista no aparece el icono que indica que estoy conectado a internet, es decir, el globo terráqueo no aparece, en su lugar aparece una X de color rojo (no conectado):



Tuve problemas hace unos días con eso pero era aún peor, me indicaba un mensaje que decía que el servicio de detección del estado de conexión estaba desactivado. Restauré el sistema a un punto anterior, y el problema quedó solucionado. Pero un par de días despues otra vez igual, pero ahora no me indica ningún mensaje, ni nada. Sin embargo si que hay conexión.

Agradecería cualquier ayuda, y si es posible especificar. Por ejemplo no decir "activas el servicio de detectción de redes... y listo", pero, ¿Como se llama ese servicio? ¿Cual es su nombre?. Lo digo porque he buscado en Google y suelen contestar así y yo he mirado en la lista en Ejecutar/service.msc y no se cual és, o no está el que comentat. Posiblemente por ser de otro SO.

Saludos y gracias


#99
Hola

Esto es un ejemplo de uso de SendMessage para enviar comandos a otras aplicaciones. Se necesita el Handle de la otra aplicación y un código que hace referencia a una acción o evento determinado. Los códigos se pueden encontrar usando la herramienta Spy++ incluida en VB y VB.Net

Este programita permite cambiar las vistas de los iconos del escritorio como si fuera un ListView y también cambia las vistas del Explorador de windows.  Es como hacer "clic" en 'Vistas' del Explorador de Windows pero se hace remotamente desde el programa.

Intrucciones:

- Crea un array con dos controles OptionButton, 5 de cada uno: Option1 y Option2

En un formulario meter esto:

Código (vb) [Seleccionar]
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long

Private Const WM_COMMAND = &H111

Private Sub Form_Load()
Option1.Item(0).Caption = "Vista Miniatura"
Option1.Item(1).Caption = "Mosaico"
Option1.Item(2).Caption = "Iconos"
Option1.Item(3).Caption = "Lista"
Option1.Item(4).Caption = "Detalle"

Option2.Item(0).Caption = "Vista Miniatura"
Option2.Item(1).Caption = "Mosaico"
Option2.Item(2).Caption = "Iconos"
Option2.Item(3).Caption = "Lista"
Option2.Item(4).Caption = "Detalle"
End Sub

Public Function VistasEscritorio(ByVal Code As Long)
Dim hwProgMan As Long
Dim hwDesktop As Long
hwProgMan = FindWindow("Progman", "Program Manager")
hwDesktop = FindWindowEx(hwProgMan, &H0, "SHELLDLL_DefView", vbNullString)
SendMessage hwDesktop, WM_COMMAND, Code, &H0
End Function

Public Function VistasExplorador(ByVal Code As Long)
Dim hwExplorer As Long
Dim ListView As Long

'Para XP
hwExplorer = FindWindow("ExploreWClass", vbNullString)
ListView = FindWindowEx(hwExplorer, &H0, "SHELLDLL_DefView", vbNullString)
SendMessage ListView, WM_COMMAND, Code, &H0

'Para Vista/...
hwExplorer = FindWindow("CabinetWClass", vbNullString)
ListView = FindWindowEx(hwExplorer, &H0, "ShellTabWindowClass", vbNullString)
SendMessage ListView, WM_COMMAND, Code, &H0
End Function

Private Sub Option1_Click(Index As Integer)
Dim Code As Long
Select Case Index
Case 0: Code = 28717 'Vista Miniatura
Case 1: Code = 28718 'Mosaico
Case 2: Code = 28713 'Iconos
Case 3: Code = 28715 'Lista
Case 4: Code = 28716 'Detalles
End Select
Call VistasEscritorio(Code)
End Sub
Private Sub Option2_Click(Index As Integer)
Dim Code As Long
Select Case Index
Case 0: Code = 28717 'Vista Miniatura
Case 1: Code = 28718 'Mosaico
Case 2: Code = 28713 'Iconos
Case 3: Code = 28715 'Lista
Case 4: Code = 28716 'Detalles
End Select
Call VistasExplorador(Code)
End Sub

#100
Hola amig@s,

Hace unos días restauré el SO del portátil. El caso es que se me olvidó desconectar el servicio de Bluetooth y configurar el antivirus y el firewall para restringir la conexión de otros usuarios de la red para compartir archivos. Me conecté a una red  Wi-Fi pública de una biblioteca y se me desactivó el servicio de detección de redes, y no hubo forma de volverlo a activar, sin embargo tenía conexión a Internet. Recibí  el siguiente mensaje:

"Recientemente se agregó o eliminó una apliación PIM (Personal Information Management) en el sistema" (relacionado con el Bluetooth".

Además se desactivó la protección sonar del antivirus, que tampoco hubo forma de activarlo. Y en  "red" había un PC con nombre desconocido, es decir, no era el mío.

Finalmente, tuve que reastaurar el sistema a un punto anterior. Para poder solucionar el problema. Desinstalar y volver a instalar el antivirus, actualizarlo y por supuesto esta vez si, desconectar el Bluetooth y desactivar "Permitir que los dispositivos Bluetooth encuentren este equipo" y también "Permite que los elementos Bluetooth puedan enviarle PIM, como tarjetas de presentación, elementos de calendario, mensajes de correo electrónico y notas".

Alguna vez he recibido tarjetas de presentación invitandome a compartir multimedia (teniendo habilitado el Bluetooth). ¿Quién lo hace y porqué?

No se si es que son intentos de intrusió o  que, quizás a traves de un dispositivo mobil. >:(



#101
INSERTAR UN MANIFEST A NUESTRA APLICACIÓN Y EJECUTAR COMO ADMINISTRADOR EN VB6

Hola,
Seguro que hay más de un usuari@ de VB6 que le gustaría que su aplicación creada con VB6 tenga un aspecto actualizado con respecto a los nuevos SO de Microsoft. Además, poder cambiar el nivel de Control de cuentas de usuario de Windows, es decir que requiera iniciarse como "Administrador", de modo que permita acceder al registro y crear claves o modificar valores que requieren privilegios de Administrador.

Hace varios años busqué información en la Web y me costó encontrar un tutorial claro de como hacer simplemente que mi aplicación se ejecutara con nivel de Administrador. Encontré que podías añadir un archivo manifest, pero externo a la aplicación, con lo cual tu aplicación siempre tendría que ir acompañada de dicho archivo. El manifiesto, también permite habilitar los temas para los controles y cuadros de diálogo comunes del XP y posteriores.

Sin embargo, es posible introducir dicho manifiesto dentro de nuestra aplicación y que al iniciarse nuestra aplicación se aplique las instrucciones de dicho manifiesto. Visual Basic .Net ya lo hace de forma automática, y por supuesto es posible modificarlo dentro del entorno de programación.

Existen varios programas como ResourceHacker o PE Explorer que permiten introducir dentro de nuestra aplicación ya compilada, un manifiesto. Sin embargo, no es necesario ningún programa externo a VB6 para introducir un manifiesto en nuestra aplicación. A continuación explico como hacerlo con VB6 y Microsoft Visual C++ 6.0.

He hecho una explicación detallada. Realmente el proceso es muy sencillo, pero por escrito parece más complicado de lo que es realmente. Una vez se conoce el proceso se hace en un momento.

1. Crear un archivo de recursos con Microsoft Visual C++
Antes de nada hay que crear un archivo de recurso con el manifiesto y  compatible con VB6. Para ello iniciamos Microsoft Visual C++ 6.0 que, si lo tienes instalado, encontrarás el acceso directo en el menú inicio en la carpeta de "Microsoft Visual Studio 6.0". Si no lo tienes instalado, inicias el paquete de instalación de Visual Studio 6 y agregas Visual C++.

Bien, una vez iniciado Visual C++, en el menú "Insert" seleccionas "Resource..." o bien pulsa "Ctrl + R".



Del cuadro [Insert Resource] pulsa el botón [Custom]. Aparecerá otro cuadro con el nombre [New custom Resource] que te pide que introduzcas el [Resource Type]. Escribe "24" (sin comillas) y pulsa "OK".




Se creará un cuadro de texto de datos binarios de nombre "Script1-IDR_DEFAULT1 (24)", en el que más adelante, habrá que introducir el manifiesto.





Si esta ventana aparece maximizada, en el menú "Window" selecciona "Tile Horizontally" para poder visualizar el árbol de proyecto.





1.1 Cambiar el nombre del objeto de datos binarios
Haz clic en el árbol con el botón derecho del ratón sobre  "IDR_DEFAULT1" y selecciona propiedades.




Cambia el ID  por "1" (sin comillas) ya que por defecto es "IDR_DEFAULT1". Esto último es muy importante para que el manifiesto funcione. El nombre debe ser 1

Puedes también cambiar la opción "Language", yo pondría "Neutral" que es la primera opción de la lista.



De modo que el árbol queda así:



1.2 Cambiar le nivel de usuario
Llega el momento de introducir nuestro manifiesto, pero antes de hacerlo quizás quieras elegir el nivel de cuenta usuario para tu aplicación. Para ello, habrá que hacer una pequeña modificación en el manifiesto que se muestra más abajo.

Hay tres niveles de cuenta de usuario, a elección personal, para nuestra aplicación.

Fíjate en esta línea del manifiesto anterior:



Los tres niveles de cuenta son:

asInvoker

requireAdministrator

highestAvailable

Si quieres que tu aplicación se ejecute como Administrador cambia "asInvoker" por "requireAdministrator"



La línea quedaría así:

<requestedExecutionLevel level="requireAdministrator " uiAccess="false" />




Manifiesto:

Código (xml) [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"  xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" manifestVersion="1.0">
 <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>

<!-- Opciones del manifiesto de Control de cuentas de usuario-->
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
   <security>
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
       <requestedExecutionLevel level="asInvoker" uiAccess="false" />
     </requestedPrivileges>
   </security>
 </trustInfo>

<!-- Habilitar los temas para los controles-->
 <dependency>
   <dependentAssembly>
     <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         processorArchitecture="*"
         publicKeyToken="6595b64144ccf1df"
         language="*"
       />
   </dependentAssembly>
 </dependency>

<!-- Windows seleccionara automaticamente el entorno de mayor compatibilidad-->
     <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
       </compatibility>
</asmv1:assembly>


1.3 Escribir el manifiesto
En el cuadro de texto de datos binarios "1", hay que copiar y pegar el manifiesto mostrado arriba.



(Si habías cerrado el cuadro de textos binarios "1", haz doble clic sobre 1 en el árbol de proyecto para abrirlo de nuevo)

Al pegar el manifiesto el "documento" queda así:




MUY IMPORTANTE  :o
Es esencial para que funcione nuestro manifiesto, que la última línea quede en blanco. En la siguiente imagen puede verse que la última línea 0004f0 no está vacía. Si ocurre esto, nuestro manifiesto no funcionará:



La última línea debe estar vacía, para conseguirlo colocamos el cursor en el último punto (en la parte derecha, donde hay letras) y pulsa 'espacio' cuyo valor hexadecimal es 20, hasta que quede una última línea vacía:




Como puede verse en la imagen de arriba, ahora la última línea es 000500 y está vacía. Repito que esto es esencial  para que funcione el manifiesto en nuestra aplicación, de lo contrario la aplicación no se ejecutará.

1.4 Guardar y crear archivo RES
Después guardas como archivo RES.El cuadro "Guardar como" tiene tres opciones:

Resource Script (.rc)
Resource Template (.rt)
32-bit Resource File (.res)



Guardamos como "32-bit Resource File (.res)". Lo necesitarás para introducirlo en tu aplicación. Puedes elegir el nombre que te de la gana.

Mi consejo es que crees los tres tipos de manifiesto, y los guardes para otras aplicaciones. Pero ten en cuenta que cuando abras el proyecto VB6, éste buscará el archivo RES (archivo de recursos) que hayas vinculado al proyecto y que si en tu proyecto modificas el archivo RES añadiendo imágenes, cursores, iconos, archivos o tablas cadenas, luego, al guardar los cambios el archivo RES quedará modificado. Además, si ha sido movido o borrado cuando inicies el proyecto VB, el archivo RES, lógicamente no se cargará. Lo mejor, una vez creado el archivo RES, es hacer una copia del archivo en la carpeta de nuestro proyecto. Así, cada proyecto que hagamos tendrá su propio archivo RES.

2. Incrustar el manifiesto en la aplicación
Pues llega el momento de coger ese archivo RES que has creado y meterlo en tu aplicación. Para ello necesitamos una herramienta incluida en VB6 llamada "Editor de Recursos de VB6".

Abre tu proyecto de VB6 y ya dentro del entorno de programación ejecutas el Editor de Recursos de VB6. Es posible que no lo tengas habilitado. Para habilitarlo vas al menú "Complementos" y abres el "Administrador de complementos", aparecerá un cuadro con una lista de complementos. Selecciona "Visual Basic 6 Resource Editor" en la lista y marca como "visto"; cargado/Descargado y  Cargar al iniciar.

Bien,  una vez cargado "Visual Basic 6 Resource Editor" debería abrirse una ventana acoplable  y mostrarse un cubo verde en la barra de menú. Si no aparece la ventana del editor o la cierras sin querer, haz clic sobre el cubo verde. También se puede abrir desde el menú "Herramientas".




No encuentro el Editor de Recursos en VB6 :o
¿Cómo? ¿Que no encuentras "Visual Basic 6 Resource Editor"? Esto puede deberse a dos razones, que no has instalado los complementos de VB6 o que probablemente estés ejecutando Windows como invitado o usuario sin privilegios. Al instalarse VB6 se crean unas claves en el registro y ocurre que las claves relacionadas con los complementos y demás las crea en el registro del Administrador pero no en el registro de las cuentas sin privilegios. Por esta razón no aparecen los complementos. Al instalar VB6, Windows no crea estas claves a usuarios sin privilegios de Administrador.

Para solucionar el problema ejecuta VB6 como Administrador y si lo tienes instalado los complementos deberían aparecer en la lista. Hay un truco para poder usar los complementos en una cuenta sin privilegios de Administrador y es, que una vez instalado VB6 desde una cuenta de Administrador, acceder al registro de Windows y extraer todas las claves de VB6, para luego agregarlas, forzadamente, desde la cuenta sin privilegios. Concretamente la clave principal es (incluir las subclaves):

[HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0]

Y  la relacionada con el Editor de Recursos y sus valores es:

[HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0\Addins\ResEdit6.Connect]
"FriendlyName"="#2000"
"Description"="#2001"
"SatelliteDllName"="RsEdt"
"LoadBehavior"=dword:00000000
"CommandLineSafe"=dword:00000000

2.1  Abrir el manifiesto
La ventana del editor de recursos tiene una barra de menú, pulsa "Abrir" (la carpetita amarilla con flecha) o haces clic en la ventana con el botón secundario del ratón y seleccionas "Abrir". Y busca el archivo de recursos que creaste con Visual C++  de formato *.RES para cargarlo.




Al cargar el archivo de recursos con el manifiesto creado con Visual C++, el editor se muestra así:





2.2 Código necesario para el proyecto VB6
Tu proyecto ya tiene cargado un manifiesto. Pero hay un problema, puede que no te funcione en XP o cuando lo ejecutes en  Windows en "Safe Mode" (modo seguro).  Aún queda introducir el siguiente código en tu proyecto:

Código (vb) [Seleccionar]
Private Declare Sub InitCommonControls Lib "comctl32" ()

Private Sub Form_Initialize()
InitCommonControls
End Sub


Así se muestra un formulario VB6 sin el manifiesto.

Sin manifiesto:




Si todo se ha hecho correctamente tu aplicación debería mostrarse así una vez compilada:

Con manifiesto:

En Windows XP


Al ejecutar el programa en Windows XP, algunos controles se verán con un fondo de color negro. Para evitarlo, mete el control dentro de un PictureBox y entonces se verá correctamente.


En Windows Vista



En Windows 7



Y si as aplicado  "requireAdministrator", entonces al abrirla debería mostrar un cuadro de confirmación.


3. Introducir manifiesto en una aplicación ya creada con Microsoft Visual C++
Se pueden introducir manifiestos en aplicaciones ya creadas.

Ejecutas Visual C++ y abres cualquier aplicación como "Resource"




Puedes introducir el manifiesto como se ha explicado anteriormente o bien abres un archivo de recursos ya creado con el manifiesto y lo copias haciendo clic primero con el botón izquierdo sobre "1" o "24" para seleccionar y luego con el botón derecho del ratón y sin soltar arrastrar hacia el proyecto de la aplicación y copiar:












Ahora guardas y ya está hecho.
#102
Hola amigos,

Llevaba no se ya ni cuanto tiempo, buscando una forma de colocar un formulario en el fondo del escritor y que permaneciera ahí como si formara parte del mismo, como un gadget.

Ayer me puse a experimentar con la declaración API, SetLayeredWindowAttributes y modificando el valor dwNewLong  de SetWindowLong y ¡Sorpresa! El formulario permanece siempre en el escritorio y no se puede tocar, ni mover, ni cerrar, ni nada, pero si que se puede ver. Tampoco aparece al pulsar Alt+Tab. Y cuando haces clic en él con el ratón, es como si no existiera. En definitiva, un formulario fantasma. No se cual será el término correcto.

Funciona con el Handle (HWND), de modo que se puede aplicar a cualquier ventana.


He hecho un ejemplo. Es un gigantesco reloj del sistema que se muestra en el escritorio.

Se necesita:
- Un formulario
- Un control PictureBox (para mostra el reloj)
- Un control Timer    (para actualizar reloj)

Modifica las propiedades del form a:
BorderStyle = 0
ShowInTaskbar =False

Esto es para un MÓDULO:

Código (vb) [Seleccionar]
'//////////////////////////////////////////////////////////////////
'//////////////////////////////////////////////////////////////////
'/////Establece el estilo de un formulario a modo fantastasma./////
'/////Características:                                        /////
'/////-Permenece siempre en el fondo del escritorio.          /////
'/////-Es visible.                                            /////
'/////-No se activa mediante el puntero del ratón.            /////
'/////-No se puede mover.                                     /////
'/////-No se puede colocar encima de otro formulario.         /////
'/////-No se puede activar mediante  ALT + TAB.               /////
'/////-Cuando haces clic con el ratón sobre él, se comporta   /////
'///// como si el formulario no existiera. De modo que en el  /////
'///// escritorio aparecerán los menús flotantes o el cuadro  /////
'///// de selección tal y como si no estuviera.               /////
'//////////////////////////////////////////////////////////////////
'//////////////////////////////////////////////////////////////////
'/////////////////////Creado por OKIK//////////////////////////////
'//////////////////////////////////////////////////////////////////

Option Explicit
Private Declare Function SetWindowPos Lib "user32" _
(ByVal Hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2

'Declaración del Api SetLayeredWindowAttributes _
que establece la transparencia al form
Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal Hwnd As Long, _
ByVal crKey As Long, _
ByVal bAlpha As Byte, _
ByVal dwFlags As Long) As Long

'Recupera el estilo de la ventana
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal Hwnd As Long, _
ByVal nIndex As Long) As Long

'Establece un valor del 32bits para una compensación especificada en la memoria de la ventana extra
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal Hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Const LWA_ALPHA = &H2               'Crea una capa alfa (transparencia)
Public Const LWA_NULLCOLOR = &H1           'Anula un color especificado
Public Const LWA_ALPHA_NULLCOLOR = &H3     'Crea una capa alfa y anula un color especificado
Public Const LWA_NORMAL = &H0              'Normal, sin trasnparencia y sin anulación color
Public Const RMV_COLOR_BLACK = &H0         'Color para anular (negro)
Public Const RMV_COLOR_MAGENTA = &HFF00FF  'Color para anular (magenta)
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000       'Estilo de capa
Private Const WS_EX_GHOSTFORM = &H64        'Estilo fantasma

Private Function SendFormBottom(ByVal Hwnd As Long)
'Envia el formulario al fondo la primera vez que se ejecuta
SetWindowPos Hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Function
Public Function SetGhostForm(ByVal Hwnd As Long, _
ByVal NivelTransparencia As Integer, _
ByVal NullColor As Long, _
ByVal TypeLayer As Long) As Long
Dim X As Long
Dim lpPrevWndProc As Long
On Error Resume Next
      X = GetWindowLong(Hwnd, GWL_EXSTYLE)
      X = X Or WS_EX_LAYERED Or WS_EX_GHOSTFORM
      SetWindowLong Hwnd, GWL_EXSTYLE, X
      NivelTransparencia = Int(((NivelTransparencia * 255) / 100) + 0.5)
      SetLayeredWindowAttributes Hwnd, NullColor, NivelTransparencia, TypeLayer
      SetGhostForm = 0
      SendFormBottom Hwnd
If Err Then
SetGhostForm = 2
End If
End Function



Y esto para el FORMULARIO

Código (vb) [Seleccionar]
Private Sub Form_Activate()
'SetGhostForm (Handle, Trasnparencia, Color para anular, Tipo de capa)
'Mantiene el formulario siempre abajo
Call SetGhostForm(Me.Hwnd, 45, RMV_COLOR_BLACK, LWA_ALPHA_NULLCOLOR)
End Sub

Private Sub Form_Load()
   With Picture1
       .Font = "Arial"
       .ForeColor = vbGreen
       .BackColor = vbBlack
       .FontSize = 100
       .AutoRedraw = True
       .Move 0, 0, 8000, 2000
       .BorderStyle = 0
   End With
   Timer1.Enabled = True
   Timer1.Interval = 1
End Sub
Private Sub Form_Resize()
   Me.Move Screen.Width - Me.Width - 100, 0, _
   Picture1.Width, Picture1.Height
End Sub

Private Sub Timer1_Timer()
   With Picture1
       Picture1.Cls
       Picture1.CurrentX = 150
       Picture1.CurrentY = 15
       Picture1.Print Time
   End With
End Sub


Lo malo es que los accesos directos no se superponen sobre el formulario, sino que se quedan debajo. Pero lo curioso es que aunque estén debajo, si haces doble clic sobre ellos (con el form encima), se pueden mover o ejecutar igualmente.

He hecho lo del reloj sólo como un ejemplo de utilidad, pero para crear un formulario fantasma basta con hacer la llamada a SetGhostForm que se encuentra en el módulo.  No funciona desde Form_Load, solo en Form_Resize y Form_Activate


Si no quieres transparencia, ni remover ningún color, usa LWA_NORMAL:

Call SetGhostForm(Me.Hwnd, 0, 0, LWA_NORMAL)


Si solo quieres transparencia usa LWA_ALPHA y estableces un valor entre 0 y 100, cuanto menor sea el valor más transparente se volverá el formulario:

Call SetGhostForm(Me.Hwnd, 100, 0, LWA_ALPHA)


LWA_ALPHA_NULLCOLOR, permite hacer las dos cosas:

Call SetGhostForm(Me.Hwnd, 50, RMV_COLOR_BLACK, LWA_ALPHA_NULLCOLOR)

#103
Hola,
He buscado y rebuscado en la red y finalmente encontré la forma de refrescar el escritorio de windows y el Explorador de carpetas (Explorer)

Esto sirve para cuando cambias valores en el registro directamente desde tu programa, en lugar de usar Opciones de Carpeta. Por ejemplo, ocultar las extensiones de archivo, mostrar archivos ocultos o  mostrar vistas en miniaturas en lugar de iconos. Al refrescar automáticamente se muestran los cambios; si deshabilitas las extensiones de archivo, al refrescar (actualizar) se ocultan las extensiones.

Yo intuía que debía usar PostMessage o SendMessage, lo que no sabía era que comando usar. Finalmente los encontré pero referido a otros tipos de lenguaje, no para VB. He encontrado otras formas con VB pero no funcionaban o solamente funcionaban para el escritorio. Como explico más abajo, todo se tiene que hacer por separado: escritorio, explorador de windows y actualizar iconos.


Código completo y definitivo para refrescar el escritorio, el explorador de carpetas y ACTUALIZAR LOS ICONOS en XP/Vista/¿Windows 7/8?:

Código (vb) [Seleccionar]
Option Explicit
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long

Private Const WM_COMMAND = &H111
Private Const SC_REFRESH_DESKTOP = &H7103
Private Const SC_REFRESH_EXPLORER_VISTA = &HA220
Private Const SC_REFRESH_EXPLORER_XP = &H7FEF

'Función para actualizar los iconos
Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" _
(ByVal hwnd As Long, ByVal msg As Long, _
ByVal wParam As Long, ByVal lParam As Long, _
ByVal fuFlags As Long, ByVal uTimeout As Long, _
lpdwResult As Long) As Long

Private Const WM_SETTINGCHANGE = &H1A
Private Const HWND_BROADCAST = &HFFFF&
Private Const SPI_SETNONCLIENTMETRICS = 42
Private Const SMTO_ABORTIFHUNG = &H2


Public Function RefreshDesktop()
Dim hwProgMan As Long, hwDesktop As Long, hwExplorer As Long

'Refresca el escritorio
hwProgMan = FindWindow("Progman", "Program Manager")
hwDesktop = FindWindowEx(hwProgMan, &H0, "SHELLDLL_DefView", vbNullString)
PostMessage hwDesktop, WM_COMMAND, SC_REFRESH_DESKTOP, &H0

'Refresca explorer
'VISTA/¿Windows 7/8?
hwExplorer = FindWindow("CabinetWClass", vbNullString)
PostMessage hwExplorer, WM_COMMAND, SC_REFRESH_EXPLORER_VISTA, &H0
'XP
hwExplorer = FindWindow("ExploreWClass", vbNullString)
PostMessage hwExplorer, WM_COMMAND, SC_REFRESH_EXPLORER_XP, &H0

'Actualiza los iconos
Call SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, &H0, SMTO_ABORTIFHUNG, &H1, &H0)
End Function

Private Sub Command1_Click()
RefreshDesktop
End Sub


'//////////////////
Tuve una errata ayer con el nombre de clase del explorador de windows para Windows XP; le añadí una R de más. La culpa es de google :¬¬ Como no estaba seguro busqué ahí y encontre referencias escrito así y bueno, esa es la escusa. Lo he corregido :D.

El nombre de clase de Explorer para XP es: "ExploreWClass". Con toda seguridad, lo he comprobado personalmente.

De todos modos el código o comando para refrescar Explorer en XP es diferente que en Vista o Windows 7. De modo que tampoco iba a funcionar aunque hubiera escrito bien el nombre de clase. Ayer comprobé cual era el comando a usar con spy++ y lo he añadido.

He añadido además el código para actualizar los iconos porque no se actualizaban los iconos. Esto es, cuando cambias el icono por defecto de una determinada extensión de archivo directamente en el registro de windows y quieres ver los cambios sin tener que cerrar sesión o simular un cambio en Opciones de carpeta.

No me extraña que no encontrara la forma de refrescar windows. Parece ser que hay que hacerlo todo por separado, por un lado el escritorio, por el otro Explorer y por el otro actualizar los iconos.


Como se puede ver, en XP el código wParam es &H7FEF=32751. Lo he testado y ¡funciona!.
#104
Hola,

Se trata de un código para loggear. Rellena de forma automático al login de una página.

Código (vbnet) [Seleccionar]
Dim theElementCollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("Input")
           For Each curElement As HtmlElement In theElementCollection
               Dim controlName As String = curElement.GetAttribute("id").ToString
               If controlName = idUser Then
                   curElement.SetAttribute("Value", UserName)
               End If
           Next



El error se produce en ("Input").y es "NullReferenceException"---> "Referencia a objeto no establecida como instancia de objeto"

Si coloco el código en el evento WebBrowser1_DocumentCompleted entonces no se produce ningún error pero me interesa introducirlo en un evento Click de un botón.


Nota:

idUser  es una variable string con el id del control de la página donde hay que introducir el nombre de usuario

UserName es una variable string para el nombre del usuario

#105
Hola,
Aunque hacía programas, nunca me he dedicado al hackeo. Últimamente por curiosidad he empezado a buscar información sobre hackeo en Internet para hacer esto o aquello, sin ninguna maldad ni interés de hacer daño. Solo por saber como va.

Sin embargo, cual es mi sorpresa cuando me encuentro que Internet está censurado. Mi IP da información de donde procede mi conexión, que en este caso es España, cuando trataba de entrar en determinadas páginas extranjeras no podía. Ayer introduje el complemento Hola! un VPN a Chrome para que parezca que me estoy conectando desde UK o USA o cualquier otro país  y pueda tener acceso a determinada información. Pero que casualidad, hoy ya no funciona.
Para poder hacerlo he utilizado los siguientes enlaces:

(copia y pega "chrome://net-internals/#sockets" en el Omnibox)

Madre mía, en menos de cinco minutos encontré la información que buscaba. ¿Quién demonios censura Internet en España? ¿El gobierno? ¿Por qué? No lo entiendo.
#106
Uso muy a menudo una red pública. Uso el antivirus Norton Internet Security, que se supone me protege  de ello. Lo he configurado para restringir cualquier conexión de cualquier usuario de la red a mi compu.  Tengo vista y entro como usuario con limitaciones, de modo que cualquier cambio de configuración o instalación de un programa requiere introducir contraseña. Nunca meto contraseñas manualmente, con teclado.

Aunque se programar nunca me he dedicado al hackeo, más para "hackear" algún programilla que otro, pero estoy muy verde en estas cosas.  Me estoy descargado Ettercap (espero que no tenga malware), para ver como va. Pero dudo que me aclare como evitar ser "sniffado".

Se que alguien me puede hacer mitm (Man In The Middle), es precisamente lo que quiero evitar, ¿pero como?.

Saludos
#107
Hola,
pues eso. Quisiera saber si hay alguna manera usar InPrivate con WebBrowser. 
#108
Hola

LLevo infinidad de tiempo intentando encontrar la manera de cambiar el nombre de clase un formulario creado en VB6 o VB.NET. Pero no he encontrado la forma.

ClassName en VB6:
ThunderRT6FormDC fuera del entorno de programación
ThunderFormDC dentro del entorno de programación

ClassName en VB.NET
WindowsForms10.Window.8.app...

Sé que es posible establecer tu propio ClassName si creas el form desde cero mediante CreateWindowEx. Pero los usuarios de VB estamos mal acostumbrados y eso de tener que crear las cosas de forma "imaginaria" y que solo sean visibles cuando se ejecuten.... es un rollo. No hay ganas.

Lo curioso es que jamás me he encontrado ninguna aplicación, ni grande, ni pequeña, que tubiese el nombre de clase (ClassName) como ThunderRT6FormDC. Luego, ¿Nadie que se dedique profesionalmente  ha utilizado VB para crear sus apliaciones? o bien, ¿sí que es posible cambiarlo.?

A ver si algún gurú de la programación me lo sabe explicar.

#109
Hola,

Apenas acabo de empenzar a programar en VB.net2010 y me encuentro que al crear un paquete de instalación se crea una dependéncia con un archivo *.msi donde está contenido los archivos del programa. Esto no es del todo un problema. El problema está en que, una vez realizada la instalación, al ejecutar el programa windows busca el archivo msi de la isntalación, lo cual es un palo enorme ya que me obliga a tener el archivo msi siempre disponible para ejecutar el programa.
#110
Hola,
Ya uso Vb,net pero estoy corrigiendo un programa que hice con vb6. Es un poco grande y no quiero pasarlo a vb.net.

El programa descarga archivos pero ocurre que NO descarga archivos que sean demasiado grandes.

El código que uso para descargar es este:

Código (vb) [Seleccionar]
Private Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long,  _
ByVal szURL As String,  _
ByVal szFileName As String,  _
ByVal dwReserved As Long,  _
ByVal lpfnCB As Long) As Long
Dim Contador As Integer
   Const ERROR_SUCCESS As Long = 0
   Const INTERNET_FLAG_RELOAD As Long = &H80000000
   Const BINDF_ASYNCHRONOUS = &H1
   Const BINDF_ASYNCSTORAGE = &H2
   Const BINDF_NOPROGRESSIVERENDERING = &H4
   Const BINDF_OFFLINEOPERATION = &H8
   Const BINDF_GETNEWESTVERSION = &H10 ' El funcionamiento del lazo debe recuperar la más nueva versión de los datos.
   Const BINDF_NOWRITECACHE = &H20
   Const BINDF_NEEDFILE = &H40
   Const BINDF_PULLDATA = &H80
   Const BINDF_IGNORESECURITYPROBLEM = &H100
   Const BINDF_RESYNCHRONIZE = &H200
   Const BINDF_HYPERLINK = &H400
   Const BINDF_NO_UI = &H800
   Const BINDF_SILENTOPERATION = &H1000
   Const BINDF_PRAGMA_NO_CACHE = &H2000
   Const BINDF_FREE_THREADED = &H10000
   Const BINDF_DIRECT_READ = &H20000
   Const BINDF_FORMS_SUBMIT = &H40000
   Const BINDF_GETFROMCACHE_IF_NET_FAIL = &H80000



Public Function DownloadFile(URL As String,  _
LocalFilename As String) As Boolean
   Dim lngRetVal As Long
   lngRetVal = URLDownloadToFile(0&, URL, LocalFilename, BINDF_ASYNCHRONOUS , 0&)
   If lngRetVal = 0 Then DownloadFile = True
End Function
#111
Hola,
windows XP te muestra un perrito que quiero llevar a la perrera...vamos quitarlo de ahí.






En realidad es mera curiosidad de como hacerlo, porque una vez me descargué un XP de windowsue, que había sido modificado, incluso el programa de instalación. Venía con algunos reagalitos (virus, troyanos), y había quitado el perrito. Siempre me he preguntado como lo hizo. Supongo que el sistema de búsqueda usa algunos dlls, y que habrá que sustiturilos o modificarlos.

Gracias




Me respondo yo mismo... lo encontre aquí:

http://www.fermu.com/es/start/16-regedit/configuracion-del-sistema/87-quitar-el-perrito-de-la-busqueda-de-xp

Hay que entrar en el registro de windows:
-Tecla windows + R
- escribir: regedit
-ir a:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState]
- Crear una nueva clave alfanumérica y nombrarla: use search asst
- Modificar la clave y poner: no
- no hace falta reiniciar
#112


La informacion de revocacion del certificado de seguridad de este sitio no está disponible. ¿Desea continuar?


He econtrado este código:

Código (vbnet) [Seleccionar]
Public Shared Function ValidateServerCertificate(ByVal sender As Object, ByVal certificate As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
        Return True
    End Function
    Private Sub WebBrowser1_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles WebBrowser1.Validated
        System.Net.ServicePointManager.ServerCertificateValidationCallback = AddressOf ValidateServerCertificate
    End Sub


Me funcionó  creo que un par de veces pero ahora no se porqué no funciona, sigue vuelve a salir la alerta de seguridad.

y si pongo:
Código (vbnet) [Seleccionar]
WebBrowser1.ScriptErrorsSuppressed = True

simplemente no entra y ni sale mensaje ni nada


#113
Hola
He buscado y buscado pero no lo he conseguido. Todo lo que encuentro es similar a esto

Código (vbnet) [Seleccionar]
Imports System.Net
Public Class Form1
   Dim mem As String
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



       Dim strHostName As String
       Dim strIPAddress As String
       strHostName = "http://www.google.es"
       strHostName = System.Net.Dns.GetHostName()
       strIPAddress = System.Net.Dns.GetHostEntry(strHostName).AddressList(0).ToString()

       mem = strIPAddress
       TextBox1.Text = strIPAddress

   End Sub
End Class


Pero no funciona

el código original en lugar de poner:

System.Net.Dns.GetHostEntry

ponía:   System.Net.Dns.GetHostByName

pero VB2010 me lo pone como error con una linea verde debajo en señal de advertencia de posible error. si uso  GetHostEntry no me lo subraya pero me da un número muy raro con expresiones variadas

si uso GetHostByName me da un IP normal del tipo:

XX.XXX.XX.XXX

pero siempre me da el mismo. Da igual la URL que introduzca en strHostName


Gracias
#114
hola,

Qué sorpresa cuando he querido entrar ElHacker.net desde Barcelona Wifi y me encuentro que me sale este mensaje:


Destino no permitido

La página que intentas visitar está restringida por motivos éticos.

Si crees que tendría que ser accesible des de Barcelona WiFi, comunícanoslo, por favor.



Saludos

#115
Hola,

Acabo de iniciarme en Visual Studio 2010, siempre he usado  Visual Basic 6.

El caso es que no siempre puedo disponer de Internet. Y cuando trabajo si conexión resulta prácticamente imposible encontrar determinada información sobre como hacer esto o aquello, especialmente con los controles y sus propiedades de VB2010.

La ayuda 'sin conexión' que proporciona VB2010, no sirve de gran ayuda en muchos casos.

Sería fantástico disponer de un auténtico tutorial sobre los controles y sus propiedades, con ejemplos sencillos de cada propiedad.


Por ejemplo, ayer mismo quise usar el control MonthCalendar, y no encontré la manera de hacer lo mismo que hacía en VB6 con el control Calendar, cuando llamaba al evento NextDay.  Así que tuve que agregar el componente antiguo.

Otra cosa que intenté es hacer un array de controles, pero resulta que VB2010 no dispone de esa función. Hay que hacerlo por código, no se puede gráficamente... :(

Además VB2010 no es nada intuitivo. Por ejemplo poniendo por caso el ejemplo anterior en VB6 ponías Calendar._ y cuando en la lista de opciones veías _:NextDay  pues fácilmente intuías lo que hacía. Ahora no es así.

Necesito un PDF o un blog (iré guardando las páginas) que vaya exponiendo control por control y exponiendo sus propiedades con ejemplos.

Gracias de antemano

#116
Windows / Activar Windows XP
31 Enero 2015, 12:59 PM
Hola,
LLevo tiempo buscando la forma de activar Windows XP con mi propio programa ya que requiere conexión por Internet o Llamar por teléfono.

Uso Visual Basic 6 o VB.Net 2010.

Tengo el WinXP SP3 y no se si es que con las anteriores versiones era distinto o que, pero los sistema que he encontrado por la red o son falsos o no funcionan. Por ejemplo lo de cambiar el valor de la clave de registro OOBETimer. Esto solo 'SIMULA' estar activado pero a los 30 días se bloquea. Lo que hace es quitar el mensaje de activación. Otra cosa que he encontrado es lo del WGA, que en mi Windows XP no aparece por ninguna parte y además aunque use los cracks que hay por la red (con virus, por cierto), no funcionan. Si hay uno que funciona pero no tengo ni idea de lo que hace.

Realmente me trae de cabeza y me gustaría saberlo. Según creo e intuyo, debo poder acceder al sistema ANTES que se inicio windows.

Encontré un programa de activación que creaba una sesión nueva de Windows, como si hubiera instalado otro sistema operativo aparte, y aparecía en la pantalla de selección del sistema a cargar cuando se inicia el ordenador. Se iniciaba hacia sus cositas.... y luego reiniciaba de nuevo con el sistema ya activado.

Me gustaría saber como se hacen estas cosas.

Gracias
#117
Hola,
Quiero exportar datos de un DataGridView a un archivo Excel (*.xls) utilizando VB.Net (2010)

He buscado  y he encontrado este sistema y similares:

https://techperu.wordpress.com/2011/10/25/exportar-de-datagridview-a-excel-vb-net-y-sql-server/

Y vale, funciona, pero tiene dependencia con EXCEL . Esto conlleva que si se utiliza en un sistema sin Office y sin Excel, no se puede exportar los datos a un fichero excel. Lógicamente, yo no quiero esto  :¬¬

............

Bueno, encontré la forma  :xD

Código (vbnet) [Seleccionar]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   DATAGRIDVIEW_TO_EXCEL((DataGridView1)) ' PARAMETER: YOUR DATAGRIDVIEW
End Sub

Private Sub DATAGRIDVIEW_TO_EXCEL(ByVal DGV As DataGridView)
   Try
       Dim DTB = New DataTable, RWS As Integer, CLS As Integer

       For CLS = 0 To DGV.ColumnCount - 1 ' COLUMNS OF DTB
           DTB.Columns.Add(DGV.Columns(CLS).Name.ToString)
       Next

       Dim DRW As DataRow

       For RWS = 0 To DGV.Rows.Count - 1 ' FILL DTB WITH DATAGRIDVIEW
           DRW = DTB.NewRow

           For CLS = 0 To DGV.ColumnCount - 1
               Try
                   DRW(DTB.Columns(CLS).ColumnName.ToString) = DGV.Rows(RWS).Cells(CLS).Value.ToString
               Catch ex As Exception

               End Try
           Next

           DTB.Rows.Add(DRW)
       Next

       DTB.AcceptChanges()

       Dim DST As New DataSet
       DST.Tables.Add(DTB)
       Dim FLE As String = "" ' PATH AND FILE NAME WHERE THE XML WIL BE CREATED (EXEMPLE: C:\REPS\XML.xml)
       DTB.WriteXml(FLE)
       'Dim EXL As String = "" ' PATH OF/ EXCEL.EXE IN YOUR MICROSOFT OFFICE
       'Shell(Chr(34) & EXL & Chr(34) & " " & Chr(34) & FLE & Chr(34), vbNormalFocus) ' OPEN XML WITH EXCEL

   Catch ex As Exception
       MsgBox(ex.ToString)
   End Try

End Sub


Como ves he anulado las líneas...

Código (vbnet) [Seleccionar]
     'Dim EXL As String = "" ' PATH OF/ EXCEL.EXE IN YOUR MICROSOFT OFFICE
       'Shell(Chr(34) & EXL & Chr(34) & " " & Chr(34) & FLE & Chr(34), vbNormalFocus) ' OPEN XML WITH EXCEL


Porque hacen referencia a Excel.exe y estas líneas solo sirven para mostrar el archivo una vez guardado.

El código lo encontré aquí:

http://stackoverflow.com/questions/680199/how-to-export-datagridview-to-excel-using-vb-net

Saludos
#118
Hola

Después de mucho curiosear no encontré nada. Iba a preguntar, pero encontré la solución por mí mismo. Es la siguiente:


Código (vbnet) [Seleccionar]
'//Se introducen los datos en el datagrid....

'//Desactivar 'reordenar las filas' al hacer clic en la cabecera de una columna
For x = 0 To DataGridView1.ColumnCount - 1               
      .Columns(x).SortModeDataGridViewColumnSortMode.NotSortable         
Next x



IMPORTANTE  :o: Debe introducirse DESPUÉS de introducir los datos en el datagrid. De lo contrario no funcionará, en cualquier caso, sólo en la primera columna.

Al poner "NotSortable" las cabeceras de las columnas no reaccionan al hacer clic, es decir no se comportan como botones.

Si quieres que las cabeceras hagan el efecto de clic (pero sin reordenar) entonces pones  "Programmatic"

Código (vbnet) [Seleccionar]
For x = 0 To DataGridView1.ColumnCount - 1               
      .Columns(x).SortModeDataGridViewColumnSortMode.Programmatic         
Next x



Si quieres que NO reordene en una determinada columna  pones el índice de la columna en .columns(índice):


DataGridView1.Columns(INDICE).SortModeDataGridViewColumnSortMode.NotSortable

ejemplo:

Código (vbnet) [Seleccionar]
DataGridView1.Columns(0).SortModeDataGridViewColumnSortMode.NotSortable


Espero que a álguien le sirva.
#119
Hola,
Antes de nada decir que antes usaba VB6 y he empezado a programar recientemente en VB2010.

Estoy transcribiendo un programa VB6 a VISUAL BASIC .NET 2010. No lo quiero convertir, puesto que quiero empezar desde el principio aprovechando las ventajas de vb2010. El programa creado con vb6, accedía a una hoja de cálculo Excel (*.xls)  de la siguiente manera (simplificada):


Importar referéncias:
'Microsoft DAO 3.51 Object Library"
'Microsoft ActiveX Data Objects 2.0 Library"


Código (vb) [Seleccionar]
Dim SheetName As String
Dim RecSet As ADODB.Recordset


'Abre la hoja de cálculo 01.xls
With CreateObject("ADOX.Catalog")
   .ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _
                     & "c:\01.xls';" _
                     & "Extended Properties='Excel 8.0;HDR=yes'"
   SheetName = .Tables(0).Name
   Set RecSet = New ADODB.Recordset
   Set RecSet.ActiveConnection = .ActiveConnection
End With
RecSet.Open "[" & SheetName & "]", , adOpenForwardOnly, adLockReadOnly, adCmdTable


'Lee el archivo
RecSet.MoveFirst ' Se coloca al principio
RecSet.MoveNext
Valor = CStr(RecSet.Fields(1)) 'Obtiene un valor fila:1 y columna:1

RecSet.Close


El caso es que llevo varios días buscando en la red y no consigo encontrar una forma clara de hacer lo mismo con vb2010. Porque yo no quiero acceder a todo el contenido, sino a una fila y columna concreta del archivo xls, según necesite.

Otra cosa que se me ha ocurrido es leer todo y meterlo en un DataGridView, para luego acceder a los datos desde el DataGridView.

Con los datos tengo que hacer cálculos matemáticos, por eso tengo que poder acceder a una información concreta de la tabla según necesite.

Espero que alguien me pueda ayudar  :P.

Saludos