Skip navigation.

exploreopera

| Help

Sign up | Help

A little bit of me

$_POST['Welcolme' . ' to . ' $SkoryBlog] . . . enjoy it :)

Posts tagged with "Windows"

VS2008 - 2005 Error al abrir editor de .vb

, ,

Pues por cuestiones que no recuerdo exactamente quería ponerme a crear una aplicación windows forms para hacer una prueba de código cuando zaz!! que me sale el siguiente mensaje:



Y por su puesto con mi cara de o.O' me puse a buscar una solución ... reinstalando componentes de VS2008 y nel, quitando toda la instalación y reinstalando desde 0 y nel ... instalando VS2005 para checar que pex y me decia k la solución no se podía abrir prk era más actual ... tons nel >.<

Y ps ya pa acabarla de amolar de tanto k le moví ps tmb me eché el VS2005 y tampoco me abría el desginer para las formas ¬¬' ... so despues de tanto estres (pork me urgía sacar ese test rápido) ... use el efectivo comando devenv /resetskippkgs dentro de la ruta del VS2008 y tmb de la ruta del VS2005 y voala! ya funcionaron ambas versiones n_n



P.S. Eso sí, me kito medio día esta madre U_U

Solicitud de Ayuda, via NetSend con Messenger Service

, , , ...

Que onda, el siguiente programa lo hice a necesidad de que en ocasiones tenia que estar físicamente al tanto de un equipo que se encuentra en producción y por consiguiente no podía realizar otras actividades, para solucionar las fallas que se presentarán la brevedad. Entonces se me ocurrió hacer una miniaplicación que mandará un mensaje a los encargados de sistemas cuando necesitarán ayuda con dicho equipo.

Para lograrlo me basé en el conocido NetSend y en Messenger Service. Acá les dejo el código con algunas explicaciones ... e igual si tienen dudas pues se las podemos resolver.

1. Primero abrimos VB6 y creamos un nuevo proyecto tipo ejecutable, damos doble click sobre nuestro Form1 y pegaremos las siguientes líneas de código justo arriba de nuestro evento load de la forma:

'===================================================
' By Sk0rpy0 (skorpyo.rules@gmail.com)
' Blogger, Geek & More (http://my.opera.com/Skorpyo)
'===================================================
Option Explicit

Const ERROR_SUCCESS = 0
Const ERROR_MORE_DATA = 234
Const SV_TYPE_SERVER = &H2
Const SIZE_SI_101 = 24

Private Type SERVER_INFO_101
  dwPlatformId As Long
  lpszServerName As Long
  dwVersionMajor As Long
  dwVersionMinor As Long
  dwType As Long
  lpszComment As Long
End Type

Private Declare Function NetServerEnum Lib "netapi32.dll" (ByVal servername As String, _
  ByVal level As Long, buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, _
  totalentries As Long, ByVal servertype As Long, ByVal domain As String, resumehandle As Long) As Long

Private Declare Function NetApiBufferFree Lib "netapi32.dll" (BufPtr As Any) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Private Declare Function lstrcpyW Lib "kernel32" (ByVal lpszDest As String, ByVal lpszSrc As Long) As Long

Private Const NERR_Success As Long = 0&
Private Const NERR_BASE = 2100
Private Const NERR_NameNotFound = NERR_BASE + 173
Private Const NERR_NetworkError = NERR_BASE + 36
Private Const ERROR_ACCESS_DENIED = 5
Private Const ERROR_INVALID_PARAMETER = 87
Private Const ERROR_NOT_SUPPORTED = 50

Private Declare Function NetMessageBufferSend Lib "netapi32.dll" (servername As Any, _
  msgname As Byte, fromname As Any, buf As Byte, ByVal buflen As Long) As Long

Dim Machine As String


Explicación:
Lo que hacemos en sí es importar todo lo necesario para que funcione la API de NetSend, y creamos una variable para guardar el nombre de la máquina que realiza la solicitud.



Una vez hecho lo anterior, en el evento Load de nuestra aplicación utilizaremos las siguientes líneas:

Private Sub Form_Load()
  Dim nRet As Long
  Dim sTo() As Byte
  Dim sMsg() As Byte

GetMachineName 'Procedimiento para obtener el nombre de la máquina

Dim i As Integer
Dim IP As String
For i = 1 To 3
    If i = 1 Then IP = "10.10.10.10"
    If i = 2 Then IP = "10.10.10.11"
    If i = 3 Then IP = "10.10.10.12"
sTo = IP & Chr(0)

  sMsg = "Se ha presentado una falla en el equipo de: " & Machine & "." + vbCrLf _
  + "Por favor acuda a la brevedad para antender la solicitud." & Chr(0) 'txtMsg & Chr(0)
  nRet = NetMessageBufferSend(ByVal 0, sTo(0), ByVal 0, sMsg(0), UBound(sMsg))

Next
  
Select Case nRet
  Case NERR_Success: MsgBox Machine + ": Su solicitud de ayuda ha sido envíada al Departamento de Sistemas." + vbCrLf _
  + "En un momento una persona acudirá a asistirlo.", vbInformation, "Solicitud Enviada"
  Case NERR_NameNotFound: MsgBox "No se pudo mandar la solicitud de ayuda, intentelo más tarde", vbCritical, "Solicitud Ayuda"
  Case NERR_NetworkError: MsgBox "Se encontró una falla en la red, vuelva a intentarlo mas tarde", vbCritical, "Fallo en el envío de solicitud"
  Case ERROR_ACCESS_DENIED: MsgBox "Acceso Denegado a ésta función, posiblemente tenga deshabilitado el servicio", vbCritical, "Acceso Denegado"
  Case ERROR_INVALID_PARAMETER: MsgBox "Parámetro Inválido", vbCritical, "Error"
  Case ERROR_NOT_SUPPORTED: MsgBox "El envío de mensajes no esta soportado por su equipo", vbCritical, "Error"
  Case Else: MsgBox "Se ha encontrado un error inesperado", vbCritical, "Error"
End Select
  Unload Me
End Sub


Explicación:
* Despues de declarar las variables, vamos al procedimiento para obtener el nombre del equipo.
* A continuación realizo un ciclo para mandar el mensaje a los 3 encargados de sistemas que somos aquí (lo pueden adaptar a sus necesidades).
* Cada vuelta del ciclo mandamos el mismo mensaje cambiando el destinatario en la variable "IP"
* Creamos un Select Case para determinar que mensaje regresa la API de Net Send y especificando las acciones necesarias para cada uno.
* Por último descargamos la forma actual, con lo que se termina la aplicación.



Bien ahora solo queda ejemplificar la función para obtener el nombre de la máquina que la tenemos a continuación:

Sub GetMachineName()
  Dim Obj, object As Object
  Dim strComputer As String
    
    strComputer = "."
    Set Obj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2").ExecQuery("Select * FROM Win32_OperatingSystem")
  For Each object In Obj
    Machine = object.Description
  Next
  
If Machine = "" Then Machine = InputBox("Introduzca su nombre o área de trabajo. Ésta información será enviada los encargados de sistemas" + vbCrLf _
+ "para agilizar la atención de su solicitud.", "Solicitud de Ayuda")

End Sub

Explicación:
* Creamos dos variables tipo Object y una tipo string que guardará la descripción del equipo
* Asignamos las propiedades del sistema Obj
* Guardamos la propiedad Description a nuestra variable Machine y con esto tenemos el dato listo.


NOTA: Estoy obteniendo la Descripción del Equipo y NO el nombre de la máquina (ComputerName); ésto a razones empresariales. Si desean obtener específicamente el nombre en sí, pueden utilizar Environ(5) que nos trae el nombre de la máquina:

Dim Tarray() As String
Dim LongName As String
    LongName = Environ(5)
    Tarray() = Split(LongName, "=", -1, vbTextCompare)
    Machine = Tarray(1) 'Trim(Mid(LongName, 14, (Len(LongName) - 13)))



Una vez hecho todo lo anterior generamos nuestro .exe y al ejecutarlo presentará el siguiente mensaje a los encargados de sistemas:



Y este a quien solicitó la ayuda.



Bien, hasta aquí llegamos con este programa, si les sirve ps k bien estimados :smile:


P.S. Como se requiere que este habilitado el servicio de Mensajería (Messenger Service), aquí les dejo las siguientes líneas para que lo activen sin tener que entrar a administrar MiPC. Abrimos notepad y pegamos:

@echo off
sc config messenger start= auto > nul
sc start messenger > nul
if errorlevel 0 (
echo El Servicio de Mensajeria esta habilitado
)


Guardamos como EnableMsnSrv.bat o .cmd y le damos doble click en los equipo que queremos que tengan esta comunicación. Slds.

Un chistorín geek

, , ,

Aquí les dejo la siguiente imagen de una mini pelea entre windows y linux ... Solo tómenlo con humor xD y no más que eso ...



Vía: PuntoGeek

Conocer consumo ancho de banda red local

, , ,

Si deseamos saber el consumo de ancho de banda que existe en nuestra red podemos utilizar la siguiente aplicación que solo requiere unos ajustes para proporcionarnos información por cada equipo de la red y ofreciendonos también la opción de ver gráficas con los altibajos del tráfico de red.

La aplicación (funcional tanto para Windows como Linux) se llama BandWithd y pueden ver más info aquí:
http://sourceforge.net/projects/bandwidthd


Configurar PowerOptions para todos los usuarios

, ,

Estando en el work me preguntaron si sabía como hacer que lo que se ajustaba para un usuario en cuanto a las opciones de energía (como apagado del monitor, discos duros, etc. ... despues de determinado tiempo) fuera lo mismo para los demás usuarios que ingresaran con su cuenta de dominio en la máquina (porque usualmente se crea un esquema independiente para cada user). Así que me encomende a ver como se podía hacer y encontré la siguiente forma:

1. Primero estando con cualquier usuario configuramos las opciones de energía a como queramos que estén para los demás usuarios:


2. Suponiendo que así es como las queremos guardamos la configuración y procedemos a abrir una consola (Inicio + R y luego teclean "cmd" sin comillas).

3. Una vez ahí vamos a hacer uso de un comando llamado "powercfg" (viene desde XP SP2) que a grandes rasgos trae las siguientes opciones:
  POWERCFG [/LIST | /QUERY [name] | /CREATE name | /DELETE name |                
       /SETACTIVE name | /CHANGE name settings |                               
       /HIBERNATE {ON|OFF} | /EXPORT name [/FILE filename] |                   
       /IMPORT name [/FILE filename] | /GLOBALPOWERFLAG {ON|OFF} /OPTION flag |
       /BATTERYALARM {LOW|CRITICAL} [settings] |                               
       /DEVICEQUERY queryflags | /DEVICEENABLEWAKE devicename |                
       /DEVICEDISABLEWAKE devicename | /?]                                     
                                                                               
Description:                                                                   
    This command line tool enables an administrator to control                 
    the power settings on a system.                                                    
                                                                                
Examples:                                                                       
    POWERCFG /LIST                                                              
    POWERCFG /QUERY scheme                                                      
    POWERCFG /QUERY                                                             
    POWERCFG /CREATE scheme                                                     
    POWERCFG /DELETE scheme                                                     
    POWERCFG /SETACTIVE scheme                                                  
    POWERCFG /CHANGE scheme /monitor-timeout-dc 15                              
    POWERCFG /CHANGE scheme /monitor-timeout-dc 0                               
    POWERCFG /HIBERNATE on                                                      
    POWERCFG /EXPORT scheme /file file                                          
    POWERCFG /QUERY number /NUMERICAL                                           
    POWERCFG /GLOBALPOWERFLAG on /OPTION BATTERYICON                            
    POWERCFG /AVAILABLESLEEPSTATES                                              
    POWERCFG /BATTERYALARM low                                                  
    POWERCFG /BATTERYALARM critical /ACTIVATE on /LEVEL 6 /ACTION hibernate     
    POWERCFG /DEVICEQUERY wake_armed                                            
    POWERCFG /DEVICEENABLEWAKE "Microsoft USB IntelliMouse Explorer"            


4. Desde la línea de comandos y en la ubicación que queramos (en mi caso estoy en C:\) tecleamos "powercfg /list" para que nos despliegue la lista de esquemas existentes:


5. Procedemos a exportar el esquema que deseemos (en mi caso Home/Office Desk) con la siguiente instrucción:
C:\>powercfg /export "Home/Office Desk" PowerScheme.pow  


Donde:
- "Home/Office Desk" = Nuestro esquema que queremos exportar.
- PowerScheme.pow = Nombre que vamos a ponerle al esquema (puede ser cualquiera con extensión .pow)

6. Una vez efectuado ésto nos creará el archivo en la ruta actual donde nos encontremos (en este caso C:\). Para importar las opciones de dicho esquema se utiliza el siguiente comando (estando dentro de la sesión del usuario a quien se lo queremos aplicar):
powercfg /import PowerScheme.pow


P.S. Se puede generar un archivo batch .bat, .cmd, etc etc .. que se ejecute automáticamente cuando inicia sesión el usuario, si tienen dudas de como hacerlo tamos a la orden. Slds.

Asignar una unidad virtual a una carpeta

, ,

Si somos de los que tenemos carpetas a las que accesamos constantemente y quisieramos tener una manera un poco más rápida de accesarlas, podemos asignar una unidad virtual en Windows asignandole una letra a nuestra carpeta.

Para esto abrimos una línea de comandos (cmd o command) y una vez dentro de ésta utilizaremos la siguiente orden:

subst x: "C:\Documents and Settings\Sk0rpy0"

Explicación:

* La "x:" representa la letra de unidad que queremos asignar a nuestra carpeta. Obtendremos un error si intentamos utilizar una letra que ya existe (por ejemplo C:)
* La ruta "C:\Documents and Settings\Sk0rpy0" es el directorio de nuestro equipo al cual queremos asignarle dicha unidad virtual. Hay que asegurarnos de poner los signos " " entre la ruta en caso que ésta contenga espacios, de lo contrario no funcionará

* Si queremos ver la lista de unidades virtuales que hemos asignado tecleamos subst sin parámetros
* Para eliminar la unidad virtual que hemos asignado utilizamos el siguiente comando:

subst x: /d


Ejemplo:

1. Asignamos la letra "Y:" a la ruta de Mis Documentos del usuario za02521
2. Mostramos las unidades virtuales que hemos creado
3. Asignamos la letra "M:" a la ruta de C:\Windows
4. Mostramos las unidades virtuales que hemos creado
5. Intentamos asignar la letra "M:" a la ruta C:\Program Files (nos da un error puesto que ya existe)
6. Eliminamos la unidad virtual "M:" asignada a C:\Windows
7. Mostramos las unidades virtuales que nos quedan

Después de efectuar estos movimientos nos quedaría solo asignada la unidad "Y:" con referencia hacia los documentos del usuario como lo pueden ver en la siguiente imágen:


Notas:
* Podrán ver que pone el mismo nombre de la unidad donde se encuentra el sistema operativo ("Local")
* Es como crear un link símbolico en linux (ln -s)

El único inconveniente con los pasos anteriores es que cada inicio de Windows tendríamos que volver a ejecutar las instrucciones. Ésto lo podemos resolver creando un archivo .bat que se ejecute cada inicio del sistema. Abrimos un editor como notepad y ponemos el comando que crea las unidades virtuales, para posteriormente guardarlo con extensión .bat


Ahora solo restará introducirlo a la carpeta de Inicio del sistema para que se ejecute, como tarea programada o bien en el registro (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run) como un nuevo valor StringValue con la ruta del archivo.

P.S. También existe un software que realiza en esencia lo mismo llamado VisualSubst :D ... pero es bueno saber como hacer las cosas "a pie". Slds.

Fuente: CybernetNews

Habilitar archivos ocultos en Windows

, , ,

En ocasiones por más que seleccionemos la opción de mostrar archivos ocultos de las propiedades de carpeta, no logramos ver nuestros archivos. Entonces podemos hacer lo siguiente:

Abre el notepad y pegas la línea de código que esta en la parte inferior del post, la guardas con extensión .reg (ej. "Habilitar.reg") y luedo das doble click sobre el mismo. Te preguntará si deseas agregar el siguiente elemento en el registro, seleccionas que si y entonces ya deberías porder ver tus archivos ocultos.

reg add "hkey_local_machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\showall" /v checkedvalue /t REG_DWORD /d "00000001" /f

Cómo leer info de BD desde VB .Net

, , ,

Que tal, para los recien iniciados en el mundo de .Net (como yo xD) aquí les dejo una breve explicación de como podemos acceder a la BD y extraer información específica en base a parámetros introducidos en runtime. Este ejemplo esta orientado a una aplicación WindowsForm enlazada a Access por motivos de facilitar el trabajo. Si necesitan enlazarse a SQL Server solo tienen que cambiar el ConnectionString (www.connectionstrings.com)

1. Primero declaramos las variables que vamos a necesitar. Lo podemos hacer en el procedimiento que queramos o bien como variables públicas para la forma (justo debajo de Public Class Form1).

   
 ' Shared Public Vars usadas para la conexión con la BD
    Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _
            "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=K:\ScrapControl.mdb")
    Dim cmd As OleDb.OleDbCommand
    Dim myDA As OleDb.OleDbDataAdapter
    Dim myDS As DataSet


Analizando...

*con: Se encarga de guardar el ConnectionString a la BD que se requiera (esto es lo que podemos cambiar dependiendo de nuestra BD que estemos manejando.
*cmd: Es el comando que vamos a enviar como "acción" a la BD.
*myDA: Se requiere un adaptador de datos que es quien recibirá los resultados de la ejecución de cmd.
*myDS: Por medio de myDA vamos a llenar nuestro DataSet para poder trabajar "fuera de línea" con nuestros datos obtenidos.


Si hasta aquí vamos bien, lo que sigue es ejecutar las acciones necesarias. Supongamos que tenemos un botón para buscar registros que estén en un rango de dos fechas que tenemos en dos DateTimePicker, entonces tenemos que construir primero nuestro query y despues realizar lo necesario para la consulta ....

Try
           dim globalQuery as String = "SELECT * FROM CutReport WHERE CutDate BETWEEN '" & dtpDate1.text & "' AND '" & dtpDate2.text & "'"
            cmd = New OleDbCommand(globalQuery, conn) ' Creamos el comando con la cadena global
            If con.State = ConnectionState.Closed Then con.Open() ' Abrimos la conexión 
            myDA = New OleDbDataAdapter(cmd) ' Creamos un adaptador de datos en base al comando 
            myDataSet = New DataSet() ' Creamos un nuevo dataset que vamos a llenar
            myDA.Fill(myDataSet, "CutReport") ' Llenamos el dataset con nuestra consulta 
            Me.dgvResult.DataSource = myDataSet.Tables("CutReport").DefaultView ' Asignamos el contenido del dataset al grid
            con.Close() ' Cerramos la conexión
            GridFormating() 'Se da formato a las columnas del Grid
        Catch ex As Exception
            MessageBox.Show(ex.Message) 'En caso de alguna falla mandamos llamar un excepción
        End Try


Analizando...

*globalQuery: Aquí vamos a guardar nuestro query en base a los valores de los DTP, sólo concatenamos adecuadamente.
*cmd: Este comando nos pide dos parámetros, primero cual es la sentencia a ejecutar que en este caso sería *globalQuery, y a donde nos queremos conectar conn.
*Si nuestra conexión esta cerrada procedemos a abrirla
*Creamos un nuevo adaptador que guardaremos en myDA y un nuevo dataset que también guardaremos en myDS
*Por medio de la opción Fill de nuestro adaptador llenamos nuestro dataset, indicándole el nombre de la tabla en donde realizamos la consult (en este caso "CutReport")
*Vaciamos el contenido de nuestro dataset a un grid (dgvResult) para desplegarlo en nuestra forma
*Por último cerramos la conexión con la BD

Pueden ver que hay un procedimiento llamado GridFormating(), éste no hace más que poner "bonito" el contenido del grid; sería cuestión de que lo hicieran de la manera en que más les agrade a ustedes.

Aquí les dejo un pantallazo:



Bien pues hasta aquí llegaríamos con esta mini explicación, espero les sea de ayuda. Próximamente les pondré otras explicaciones que pueden ser interesantes. Slds.



Crear imagenes completas de nuestro PC

, ,

Si queremos realizar copias de seguridad potentes y fáciles contamos con una aplicación llamada Acronis True Image, la cual ofrece flexibilidad para protección y recuperación de eventos imprevistos tales como virus, descargas de software inestable y anomalías de discos duros.

Lo que hace es crear una copia exacta de nuestro PC, ya sea realizando una copia de seguridad completa, incremental o bien, una copia de los datos que consideremos importantes.



Página Oficial: Acronis
Descargar: Acronis.TI Home

Power Quest Partition Magic

, ,



Partition Magic

Se trata de una de las más conocidas de las herramientas que nos permiten gestionar nuestras particiones. Admite numerosos tipos de discos duros y se puede trabajar con casi todos los tipos de particiones existentes de un modo fácil y sencillo.

Se puede pasar todo tipo de información de una partición a otra sin que tus aplicaciones corran ningún riesgo. Además ofrece un sistema de arranque seguro gestionando los sistemas operativos que podemos instalar en cada una de las particiones, permitiéndonos también tener varios sistemas operativos en una sola partición sin correr riesgos.

Creo que ahora lo conocen como Norton Partition Magic, pero al menos esta versión que les dejo aquí me ha funcionado bien :yes:

Descargar: Partition Magic