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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32
241  Programación / Programación Visual Basic / Re: Como llamo a este array de string? en: 28 Noviembre 2015, 05:00 am
Hola

KresH ya te ya contestado correctamente.

Código
  1. Msgbox(tpautas(1))

o como te ha contestado KresH

Pero si estás en VB(5 o 6) o NET no hay problema en empezar a ingresar valores al array a partir de (1).  

En Vb6 puedes definir el Array así tpautas(1 to  14) y no habría ningún tpautas(0):

Código
  1. Dim tpautas(1 to 14) as String 'Desde 1 a 14

Pero si lo defines así tpautas(14) entonces hay un tpautas(0) que no usas, pero tampoco pasaría nada, solo debes acordarte que está ahí según lo que hagas para evitar errores:

Código
  1. Dim tpautas(14) as String 'Desde 0 a 14


Si estás en VB.NET entonces no puedes poner Dim tpautas(1 to 14) as String debes poner :

Código
  1. Dim tpautas(14) as String 'Desde 0 a 14

y tendrías un tpautas(0)...


Sldos
242  Programación / Programación Visual Basic / Re: Ayuda Con MsgBox???? en: 28 Noviembre 2015, 04:37 am
Hola...
Entiendo que estás en VB y no VB.NET dicho esto no entiendo muy bien lo que quieres pero a ver si te sirve esto. Muestra el mensaje al pulsar Enter.


Código
  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2. If KeyAscii = vbKeyReturn Then
  3. Text1.SetFocus
  4. MsgBox ("La Transferencia Ha Sido Completada")
  5. End If
  6. End Sub
  7.  



En VB.NET
Código
  1.   Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.        If e.KeyChar = Convert.ToChar(Keys.Enter) Then
  3.            MsgBox("La Transferencia Ha Sido Completada")
  4.        End If
  5.    End Sub

Según entiendo quieres introducir una información y luego ingresar dicha información. 'Enter' sería el acto en sí de 'ingresar información' o 'Aceptar' e inmediatamente al pulsar muestra el mensaje.  

243  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar estilo de las ventanas (invertir, quitar botones, bloquear, etc) en: 28 Noviembre 2015, 03:19 am
Gracias Elektro
¿Entonces según eso mi código no funcionaría en 64bits?
Tengo un PC con W764bits ahora lo pruebo y hago los cambios... jeje

Por cierto, se hace muy engorroso ver el código con el <summary>

Código
  1. ''' ----------------------------------------------------------------------------------------------------
  2. ''' <summary>
  3. ''' Changes an attribute of the specified window.
  4. ''' <para></para>
  5. ''' The function also sets the 32-bit (<c>LONG</c>) value at the specified offset into the extra window memory.
  6. ''' </summary>
  7. ''' ----------------------------------------------------------------------------------------------------
  8. ''' <remarks>
  9. ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms633591%28v=vs.85%29.aspx"/>
  10. ''' </remarks>

Creo que está bien pero en el navegador tienes que ir bajando y bajando.... :¬¬

Sl2s
244  Programación / .NET (C#, VB.NET, ASP) / Cambiar estilo de las ventanas (invertir, quitar botones, bloquear, etc) en: 27 Noviembre 2015, 19:07 pm
Hola

He creado este código para cambiar el estilo de las ventanas, se puede invertir la barra de título sin alterar el resto del form, bloquear el form, quitar los botones, desactivar botones de la barra, cambiar la posición de título de la barra de título, quitar los bordes, mostrar el form como un popup menú, etc.

Los cambios son combinables en algunos casos.



CAMBIAR EL ESTILO DE LAS VENTANAS

Código
  1. #Region "Cambiar estilo de la ventana"
  2. Public Module modChangeStyleWindow
  3.    Const GWL_ID = (-12)
  4.    Const GWL_STYLE = (-16)
  5.    Const HWND_NOTOPMOST = -2
  6.    Const SWP_NOZORDER = &H4
  7.    Const SWP_NOSIZE = &H1
  8.    Const SWP_NOMOVE = &H2
  9.    Const SWP_FRAMECHANGED = &H20
  10.    Const SWP_DRAWFRAME = SWP_FRAMECHANGED
  11.  
  12.    Enum WindowsStyle
  13.        WS_SIZABLE = &H0                                'Con todos los botones y la barra de título
  14.        WS_SIZABLE_DISABLEMAXB = &HFFFFFFFFFFFFFFFF     'Desactiva el botón maximizar
  15.        WS_SIZABLE_DISABLEMINB = &HFFFFFFFFFFFE5E08     'Desactiva el botón minimizar
  16.        WS_DLGFRAME_DISABLE = &H5FD8220                 'Cuadro diálogo desactivado (no permite ninguna interacción con el form)
  17.        WS_DLGFRAME_FIXEDSINGLE = &HFFFFFFFFFFF9CA28    'Cuadro diálogo no redimensionable
  18.        WS_DLGFRAME_SIZABLE = &HFFFFFFFFFFFDC5B0        'Cuadro diálogo redimensionable
  19.        WS_DISABLED = &H8000000                         'Desactivado (no permite ninguna interacción con el form)
  20.        WS_SYSMENU_DISABLE = &H5F5E100                  'Desactiva el menú y desactivado              
  21.        WS_SYSMENU_SIZABLE = &HFFFFFFFFFFF8F350         'Desactiva el menú y redimensionable
  22.        WS_SYSMENU_FIXEDSINGLE = &HFFFFFFFFFFF4EC10     'Desactiva el menú y no es redimensionable
  23.        WS_FIXEDSINGLE = &HFFFFFFFFFFFCEAF0             'No redimensionable
  24.        WS_FIXEDSINGLE_DISABLEMAXB = &HFFFFFFFFFFFBBA40 'No redimensionable y desactiva el botón maximizar
  25.        WS_FIXEDSINGLE_DISABLEMINB = &HFFFFFFFFFFFAEF20 'No redimensionable y desactvia el botón minimizar
  26.        WS_NOBORDER = &H325AA0                          'Sin bordes
  27.        WS_FLAT3D = &HB1FE68                            'Sin bordes con línea exterior
  28.        WS_POPUP = &H712CA8                             'Menú Popup
  29.    End Enum
  30.  
  31.    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
  32.    Private Function SetWindowLong(ByVal hwnd As IntPtr, _
  33.                                          ByVal nIndex As Integer, _
  34.                                          ByVal dwNewLong As Integer) As Integer
  35.    End Function
  36.  
  37.  
  38.    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=False)> _
  39.    Private Function SetWindowPos(ByVal hwnd As IntPtr, _
  40.                                         ByVal hWndInsertAfter As IntPtr, _
  41.                                         ByVal X As Integer, _
  42.                                         ByVal y As Integer, _
  43.                                         ByVal cx As Integer, _
  44.                                         ByVal cy As Integer, _
  45.                                         ByVal wFlags As Integer) As Integer
  46.    End Function
  47.  
  48.  
  49.    <System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetWindowLongA", SetLastError:=True)> _
  50.    Private Function GetWindowLong(ByVal hWnd As IntPtr, _
  51.                                          <System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I4)> ByVal nIndex As Integer) As Integer
  52.    End Function
  53.  
  54.    Public Sub ChangeStyleWindow(ByVal hwnd As IntPtr, ByVal StyleForm As Integer, ByVal SetStyle As Boolean)
  55.        'mantiene el tamaño de la ventana
  56.        Dim stl As Integer = GetWindowLong(hwnd, GWL_STYLE)
  57.  
  58.        Select Case SetStyle
  59.            '//Solo Ventana 'Sizable'
  60.            'Case True : If stl = &H16CF0000 Then stl += StyleForm
  61.            'Case False : If stl = &H16CF0000 + StyleForm Then stl -= StyleForm
  62.            '//Cualquier tipo de ventana u objeto con handle
  63.            Case True : stl += StyleForm
  64.            Case False : stl -= StyleForm
  65.        End Select
  66.  
  67.        SetWindowLong(hwnd, GWL_STYLE, stl)
  68.        Call SetWindowPos(hwnd, HWND_NOTOPMOST, Nothing, Nothing, Nothing, Nothing, _
  69.        SWP_NOZORDER + SWP_NOSIZE + SWP_NOMOVE + SWP_DRAWFRAME)
  70.    End Sub
  71.  
  72. End Module
  73. #End Region
  74.  


CAMBIAR EL ESTILO DE LA BARRA
Código
  1. Region "Cambiar estilo de la Barra de Título"
  2. Module modChangeStyleBar
  3.    Const GWL_ID = (-12)
  4.    Const GWL_STYLE = (-16)
  5.    Const GWL_EXSTYLE = (-20)
  6.    Const HWND_NOTOPMOST = -2
  7.    Const SWP_NOZORDER = &H4
  8.    Const SWP_NOSIZE = &H1
  9.    Const SWP_NOMOVE = &H2
  10.    Const SWP_FRAMECHANGED = &H20
  11.    Const SWP_DRAWFRAME = SWP_FRAMECHANGED
  12.  
  13.    Enum WStyleBarTitle
  14.        WStB_NORMAL_THICKBORDER = &H200                             'Normal con borde ancho
  15.        WStB_NORMALCAPTIONLEFT = &H0                                'Título a la izquierda
  16.        WStB_NORMAL_CAPTIONRIGHT = &H1000                           'Título a la derecha
  17.        WStB_INVERT_CAPTIONLEFT = &H405000                          'Invertido con título a la izquierda
  18.        WStB_INVERT_CAPTIONRIGHT = &H400000                         'Invertido con título a la derecha
  19.        WStB_TOOLWINDOW_CAPTIONLEFT = &H6590                        'Tool window con título a la izquierda y borde fino
  20.        WStB_TOOLWINDOW_CAPTIONRIGHT = &H5580                       'Tool window con título a la derecha y borde fino
  21.        WStB_TOOLWINDOW_THICKBORDER_CAPTONLEFT = &H68F              'Tool window con título a la izquierda y borde grueso
  22.        WStB_TOOLWINDOW_THICKBORDER_CAPTONRIGHT = &H5A80            'Tool window con título a la derecha y borde grueso
  23.        WStB_TOOLWINDOWS_INVERT_CAPTIONLEFT = &H401080              'Tool window Invertido con título a la izquierda y borde fino
  24.        WStB_TOOLWINDOWS_INVERT_CAPTIONRIGHT = &H400180             'Tool window invertido con título a la derecha y borde fino
  25.        WStB_TOOLWINDOWS_INVERT_THICKBORDER_TITLELEFT = &H403390    'Tool window Invertido con título a la izquierda y borde grueso
  26.        WStB_TOOLWINDOWS_INVERT_THICKBORDER_TITLERIGHT = &H400290   'Tool window invertido con título a la derecha y borde grueso
  27.        WS_EX_DLGMODALFRAME = &H1
  28.        WS_EX_NOPARENTNOTIFY = &H4
  29.        WS_EX_TOPMOST = &H8
  30.        WS_EX_ACCEPTFILES = &H10                                    'Cambia el cursor cuando se arrastr un archivo a la ventana
  31.        WS_EX_TRANSPARENT = &H20
  32.        WS_EX_MDICHILD = &H40
  33.        WS_EX_TOOLWINDOW = &H80
  34.        WS_EX_WINDOWEDGE = &H100
  35.        WS_EX_CLIENTEDGE = &H200
  36.        WS_EX_CONTEXTHELP = &H400
  37.        WS_EX_RIGHT = &H1000
  38.        WS_EX_LEFT = &H0
  39.        WS_EX_RTLREADING = &H2000
  40.        WS_EX_LTRREADING = &H0
  41.        WS_EX_LEFTSCROLLBAR = &H4000
  42.        WS_EX_RIGHTSCROLLBAR = &H0
  43.        WS_EX_CONTROLPARENT = &H10000
  44.        WS_EX_STATICEDGE = &H20000
  45.        WS_EX_APPWINDOW = &H40000
  46.        WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE Or WS_EX_CLIENTEDGE)
  47.        WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE Or WS_EX_TOOLWINDOW Or WS_EX_TOPMOST)
  48.        WS_EX_LAYERED = &H80000
  49.        WS_EX_NOINHERITLAYOUT = &H100000 ' Disable inheritence of mirroring by children
  50.        WS_EX_LAYOUTRTL = &H400000 ' Right to left mirroring
  51.        WS_EX_COMPOSITED = &H2000000
  52.        WS_EX_NOACTIVATE = &H8000000
  53.    End Enum
  54.    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
  55.    Private Function SetWindowLong(ByVal hwnd As IntPtr, _
  56.                                          ByVal nIndex As Integer, _
  57.                                          ByVal dwNewLong As Integer) As Integer
  58.    End Function
  59.  
  60.  
  61.    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=False)> _
  62.    Private Function SetWindowPos(ByVal hwnd As IntPtr, _
  63.                                         ByVal hWndInsertAfter As IntPtr, _
  64.                                         ByVal X As Integer, _
  65.                                         ByVal y As Integer, _
  66.                                         ByVal cx As Integer, _
  67.                                         ByVal cy As Integer, _
  68.                                         ByVal wFlags As Integer) As Integer
  69.    End Function
  70.  
  71.  
  72.    <System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetWindowLongA", SetLastError:=True)> _
  73.    Private Function GetWindowLong(ByVal hWnd As IntPtr, _
  74.                                          <System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I4)> ByVal nIndex As Integer) As Integer
  75.    End Function
  76.  
  77.    'Estilo de la barra de título
  78.    Public Sub ChangeStyleBarWindow(ByVal hwnd As IntPtr, ByVal StyleBar As Integer)
  79.        SetWindowLong(hwnd, GWL_EXSTYLE, StyleBar)
  80.        Call SetWindowPos(hwnd, HWND_NOTOPMOST, Nothing, Nothing, Nothing, Nothing, _
  81.        SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME)
  82.    End Sub
  83. End Module
  84. #End Region



EJEMPLO DE USO


Si se aplican varias veces el mismo estilo se pueden obtener estilos curiosos.



Código
  1.    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        For i As Integer = 0 To 5
  3.            modChangeStyleWindow.ChangeStyleWindow(Me.Handle, WindowsStyle.WS_SYSMENU_FIXEDSINGLE, True)
  4.        Next i
  5.    End Sub


para modo popup:

Código
  1.   modChangeStyleWindow.ChangeStyleWindow(Me.Handle, WindowsStyle.WS_POPUP, True)


Para invertir la barra de título:
Código
  1.       Call modChangeStyleBar.ChangeStyleBarWindow(Me.Handle, modChangeStyleBar.WStyleBarTitle.WStB_INVERT_CAPTIONRIGHT)


Invertido y desactivado:
Código
  1.   Call modChangeStyleWindow.ChangeStyleWindow(Me.Handle, modChangeStyleWindow.WindowsStyle.WS_DISABLED, True)
  2.        Call modChangeStyleBar.ChangeStyleBarWindow(Me.Handle, modChangeStyleBar.WStyleBarTitle.WStB_INVERT_CAPTIONRIGHT)


Espero os sirva  ;)

Sl2s


Se me olvidaba, para restaurar la ventana establecer 'False'
'Activa el cambio
Código
  1. Call modChangeStyleWindow.ChangeStyleWindow(Me.Handle, modChangeStyleWindow.WindowsStyle.WS_DISABLED, True)

'Desactiva el cambio (en este caso se tendría que hacer con un timer o similar ya que WS_DISABLE no permite la interacción con el form ni con los controles que contiene)
Código
  1. Call modChangeStyleWindow.ChangeStyleWindow(Me.Handle, modChangeStyleWindow.WindowsStyle.WS_DISABLED, False)

sl2s
245  Programación / Programación Visual Basic / Re: VB6: Problema con función "ProcessExists" en: 25 Noviembre 2015, 18:49 pm
Hola
Solo necesitas esto, tal cual...(Sin declaraciones API)

Código
  1. Public Function ToKnowIfAppIsActive(strAppName As String) As Boolean
  2. Dim IdProceso As Long
  3.  Dim ListaProcesos  As Object
  4.  Dim ObjetoWMI    As Object
  5.  Dim Proceso   As Object
  6.  Dim NameProcess As String
  7.  
  8.  
  9.  Set ObjetoWMI = GetObject("winmgmts:")
  10. If IsNull(ObjetoWMI) = False Then
  11.  Set ListaProcesos = ObjetoWMI.InstancesOf("win32_process")
  12.  
  13.  For Each Proceso In ListaProcesos
  14.        NameProcess = Proceso.Name
  15.        IdProceso = Proceso.ProcessID
  16.            If NameProcess = strAppName Then
  17.                ToKnowIfAppIsActive = True
  18.                Exit For
  19.            Else
  20.                ToKnowIfAppIsActive = False
  21.            End If
  22.    Next
  23. End If
  24.  
  25. End Function

Por si no lo sabías te comento  que Chrome.exe es una aplicación especial. Si ejecutas el Administrador de Tareas de windows (Ctrl + R y escribe taskmgr.exe) y luego miras en la pestaña 'Procesos', verás que la lista de procesos hay más de un Chrome.exe ejecutándose.  Así que si tienes que encontrar la ventana principal debes buscar la ventana de chrome cuyo nombre de clase  (ClassName) sea "Chrome_WidgetWin_1"

sl2s
246  Programación / .NET (C#, VB.NET, ASP) / Re: Snippet para obtener handle de procesos en: 25 Noviembre 2015, 17:18 pm
Es útil, funciona muy bien hasta donde lo he testeado.

Yo uso la parte importante del código que has mostrado (función GetProcessHandle) para obtener el hwnd de la ventana principal de un proceso para cambiar la visibilidad de dicha ventana mediante la función Win32 ShowWindow.

saludos

Hola
Si te soy sincero,  como conoces Net mucho más que yo pensé mostrarías una de tus perlas usando código Net para hacer lo mismo. Por eso dejé la coletilla:

Código:
Si hay otra forma más sencilla, decídmelo

Y si no tu otro/a. XD

Claro que no me refiero a reducir el código,  sino al uso de alguna otra clase distinta a Process, u otra función.

No entiendo porqué con la clase Process sólo se obtengan los handles de unos pero de otros no.

sl2s
247  Programación / .NET (C#, VB.NET, ASP) / Re: Subir voltaje desde API de Windows en: 24 Noviembre 2015, 16:24 pm
Hola

Con lo del voltaje supongo que te refieres a subir el volumen del PC. Mírate la librería de snippets del genio Elektro que puso en este mismo foro:
libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets

Encontrarás varios relacionados con el volumen.

Yo tengo una versión de código para VB6 pero tengo  que pasarlo a Net. :-\

sl2



 ::) Espera... que creo que me he colado ¿voltaje de los componentes?
¿Te refieres a voltaje la 'diferencia de potencial eléctrica'? pues si es eso... puff a eso no llego

Lo malo de eso es que necesitas una compu de 'laboratorio' porque no es una cosa para ponerse experimentar con tu compu. la puedes quemar
(también se me ocurre que de poder hacerse puede usarse con malas intenciones  :¬¬)

Quizás te interese esto:
http://foro.elhacker.net/hardware/programas_imprescindibles-t39488.0.html

Funciones de administración de energía
248  Programación / .NET (C#, VB.NET, ASP) / Importar APIs en: 24 Noviembre 2015, 00:45 am
Hola

///IMPORTAR APIs///
Quiero compartir esta código curioso para importar APIs de librerías DLL y de aplicaciones. Es muy útil.

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim DialogoAbrir As New System.Windows.Forms.OpenFileDialog
  5.        DialogoAbrir.Title = "Abrir..."
  6.        DialogoAbrir.FilterIndex = 1
  7.        DialogoAbrir.Filter = "*.dll|*.dll|*.exe|*.exe"
  8.        DialogoAbrir.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System)
  9.        If DialogoAbrir.ShowDialog() = DialogResult.OK Then
  10. ImportAPI(DialogoAbrir.FileName)
  11.        End If
  12.  
  13.  
  14.  
  15.    End Sub
  16.    Sub ImportAPI(ByVal Path_Dll As String)
  17.  
  18.        '//VB6
  19.        'Dim Path_Link As String = DirProgramFiles & "\Microsoft Visual Studio\VB98\link.exe"
  20.  
  21.        '****IMPORTANTE****:
  22.        '//VB2010
  23.        'link.exe se encuentra en:
  24.        'C:\Archivos de programa\Microsoft Visual Studio 10.0\VC\bin\
  25.        'Tiene dependencia con 'mspdb100.dll' que se encuentra en:
  26.        'C:\Archivos de programa\Microsoft Visual Studio 10.0\Common7\IDE
  27.        'Haz una copia de link.exe en  ...\Common7\IDE de lo contrario dará error al no encontrar 'mspdb100.dll'
  28.  
  29.        '//VS2012 64bits
  30.        'link.exe se encuentra en:
  31.        'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
  32.        'mspdb100.dll' se encuentra en:
  33.        'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE
  34.  
  35.        Dim DirProgramFiles As String
  36.  
  37.        If Environment.Is64BitOperatingSystem Then
  38.            DirProgramFiles = (Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86))
  39.        Else
  40.            DirProgramFiles = (Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles))
  41.        End If
  42.  
  43.        Dim Path_Link As String  = (DirProgramFiles & "\Microsoft Visual Studio 10.0\Common7\IDE\link.exe")
  44.        Dim FileTemp As String = System.IO.Path.GetTempFileName     'Crea un archivo temporal
  45.        Dim C34 As String = Convert.ToChar(34)
  46.  
  47.        'Linea de comandos para link.exe
  48.        Dim StartLink As String = String.Format("{0}{1}{2} /dump /exports {3}{4}{5} /out:{6}{7}{8}", _
  49.                                                C34, Path_Link, C34, _
  50.                                                C34, Path_Dll, C34, _
  51.                                                C34, FileTemp, C34)
  52.        Try
  53.            'Ejecuta link.exe
  54.            Dim myProcess As New Process()
  55.            myProcess.StartInfo.UseShellExecute = False
  56.            myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  57.            myProcess.StartInfo.FileName = StartLink
  58.            myProcess.StartInfo.CreateNoWindow = True
  59.            myProcess.Start()
  60.        Catch ex As Exception
  61.            MessageBox.Show("No se encuentra link.exe")
  62.        End Try
  63.  
  64.  
  65.         Me.Cursor = Cursors.WaitCursor
  66.        System.Threading.Thread.Sleep(2000)
  67.        Me.Cursor = Cursors.Default
  68.  
  69.        Dim strBuffer As New System.IO.StreamReader(FileTemp)
  70.        TextBox1.Text = strBuffer.ReadToEnd
  71.        strBuffer.Close()
  72.        FileIO.FileSystem.DeleteFile(FileTemp)
  73.  
  74.    End Sub
  75.  
  76.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  77.  
  78.    End Sub
  79. End Class


Sl2




El método también se puede usar para obtener información a través de aplicaciones que usen comandos

Este ejemplo obtiene es el resultado de hacer: ping www.google.es

Código
  1.  
  2. Public Class Form1
  3.  
  4.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.  
  6.    End Sub
  7.  
  8.  
  9.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  10.  Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
  11.        TextBox1.Text = GetResultCommand(sCommand)
  12.    End Sub
  13.  
  14. #Region "GetResultCommand"
  15.    Public Function GetResultCommand(ByVal sCommandLine As String) As String
  16.        Dim FileTemp As String = System.IO.Path.GetTempFileName     'Crea un archivo temporal
  17.        Dim C34 As String = Convert.ToChar(34)
  18.        Dim Result As String = Nothing
  19.  
  20.  
  21.        sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)
  22.  
  23.  
  24.        Try
  25.            Dim myProcess As New Process()
  26.            With myProcess
  27.                .StartInfo.UseShellExecute = False
  28.                .StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  29.                .StartInfo.FileName = sCommandLine
  30.                .StartInfo.CreateNoWindow = True
  31.                .Start()
  32.            End With
  33.  
  34.        Catch ex As Exception
  35.            MessageBox.Show(ex.Message)
  36.        End Try
  37.  
  38.        Me.Cursor = Cursors.WaitCursor
  39.        System.Threading.Thread.Sleep(2000)
  40.  
  41.        Dim FileAccesible As Boolean = False
  42.        While FileAccesible = False
  43.            Try
  44.                Dim strBuffer As New System.IO.StreamReader(FileTemp, System.Text.Encoding.GetEncoding("ibm850"))
  45.                Result = strBuffer.ReadToEnd()
  46.                FileAccesible = True
  47.                strBuffer.Close()
  48.  
  49.            Catch ex As Exception
  50.                FileAccesible = False
  51.            End Try
  52.             My.Application.DoEvents()
  53.        End While
  54.        Me.Cursor = Cursors.Default
  55.        FileIO.FileSystem.DeleteFile(FileTemp)
  56.        Return Result
  57.    End Function
  58. #End Region
  59. End Class
  60.  

Mediante este...snippet, supongo. Se obtendría el resultado de una línea de comandos que usáramos en la consola de windows:


Código
  1. GetResultCommand(LÍNA DE COMANDO)

Es importante poner entre comillas la aplicación a la que llamamos:
""cmd.exe""

Código
  1. Dim sCommand As String = String.Format("""cmd.exe"" /r ping {0} ", "www.elhacker.net")

para menos lío también se puede llamar así:

Código
  1. Dim sCommand As String = String.Format("""{0}"" /r ping {1} ", "cmd.exe", "www.elhacker.net")

el caso es que la aplicación quede entre comillas.

[MODIFICACADO]
Bueno, he hecho una pequeña modificación porque me he dado cuenta que claro, no todas las aplicaciones con comandos tienen el mismo comando de salida. Por ejemplo link.exe tiene /out: y cmd.exe tiene '>'. Así que esto es mejor aplicarlo cuando establecemos el comando y no desde el snippet

Con lo cual quedaría así con link.exe:
Código
  1.      Dim sCommand As String = String.Format("""{0}"" /dump /exports {1} /out:", _
  2. "C:\Archivos de programa\Microsoft Visual Studio 10.0\Common7\IDE\link.exe", _
  3.    "c:\windows\system32\shell32.dll")
  4.        TextBox1.Text = GetResultCommand(sCommand)

o así en con cmd.exe:
Código
  1.   Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
  2.        TextBox1.Text = GetResultCommand(sCommand)

Y he modificado esta línea quitando '>':

Código
  1. sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)

También he añadido:
Código
  1. System.Text.Encoding.GetEncoding("ibm850")

Que no se en otra compu, pero en la mía si no establezco esta codificación para leer el archivo no se ven correctamente las vocales con acento.

-------------------------------------------------------


         ALGUNOS COMANDOS INTERESANTES PARA OBTENER INFORMACIÓN
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r dir C: >", "cmd.exe")
         
     
Código:
Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
   
   Para mostrar todo el contenido de la tabla de rutas IP
   
Código:
Dim sCommand As String = String.Format("""{0}"" /r route print >", "cmd.exe")

      Muestra la configuración de TCP/IP completa de todos los adaptadores
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r ipconfig /all >", "cmd.exe")


        Muestra una lista de todos los controladores de dispositivo instalados y sus propiedades.
        [modo tabla]
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r driverquery >", "cmd.exe")
       [modo csv]
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r driverquery /fo csv >", "cmd.exe")


        Muestra los archivos en lista donde se ejecuta esta apliación
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r tree /f >", "cmd.exe")

        Muestra todos los archivos del directorio C: (puede tardar un poco según el disco)
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r tree c:\ /f >", "cmd.exe")


        [Este es muy buen comando]
        Muestra información de configuración detallada acerca de un equipo y su sistema operativo
        (puedes usar 'csv' o 'list' en lugar de 'table'
   
Código:
Dim sCommand As String = String.Format("""{0}"" /r systeminfo /fo table >", "cmd.exe")
       
   Para obtener información de un determinado host (sistema)
        comando= 'systeminfo /s HOST /fo table'
        Para(obtener) 'HOST'  escribe hostname en la consola y luego lo incorporas en el siguente
        comando, en este caso es 'mypc'
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r systeminfo /s mypc /fo table >", "cmd.exe")

        Muestra una lista de los servicios que se están ejecutando
Código:
Dim sCommand As String = String.Format("""{0}"" /r Net start  >", "cmd.exe")

        Muestra las conexiones activas
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat >", "cmd.exe")

        Muestra todas las conexiones y puertos de escucha
        '
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -a >", "cmd.exe")

        Muestra el ejecutable que crea cada conexión o puerto de(escucha)
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -b >", "cmd.exe")

        Muestra las estadísticas Ethernet. Se puede combinar con la opción()-s
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -e >", "cmd.exe")

        Muestra estadísticas por protocolo. De forma predeterminada,
        se muestran para IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP y
        UDPv; se puede utilizar la opción -p para especificar un
        subconjunto de los valores predeterminados
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -s >", "cmd.exe")


        CONSEJO:
        'ALGUNOS COMANDOS PERMITEN USAR TRES TIPOS DE LISTA [LIST|CSV|TABLE]
        usando CSV puedes acceder fácilmente a la información usando SPLIT
        MODO CSV: "infoA","InfoB","infoC","InfoD"
        Ejemplo:
        Devuelve la dirección de control de acceso a medios (MAC, media access control) y  lista de los protocolos de red asociados con cada la dirección de todas las tarjetas de red de cada equipo
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r getmac  /fo csv /nh /v >", "cmd.exe")
       
Código:
Dim sCommand As String = String.Format("""{0}"" /r getmac  /s mypc /fo csv >", "cmd.exe")


Espero que os sirva

sl2  :D


[condejo]
Para un TextBox u otro control de texto usa la fuente Courier New para que las tablas se muestren de forma ordenada.
249  Programación / .NET (C#, VB.NET, ASP) / Re: Generar un archivo txt con fecha hora y una variable en: 22 Noviembre 2015, 15:27 pm
Hola

  Te da error  porque el directorio no existe . Primero debes crear el directorio:

Código
  1. Directory.CreateDirectory(MyDir)

Para añadir texto a un archivo ya creado debes usar AppendAllText (si no hay archivo lo crea):

Código
  1. File.AppendAllText(FilePath, ContentFile)

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.IO;
  11. namespace WindowsFormsApplication1
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.        // Variable.    
  20.        string Variable = "Esto es una prueba ";        
  21.        string contenido = string.Format("{0:dd/MM/yyyy HH:mm} ", DateTime.Now);
  22.        private void Form1_Load(object sender, EventArgs e)
  23.        {
  24.  
  25.        }
  26.  
  27.        private void button1_Click(object sender, EventArgs e)
  28.        {
  29.            richTextBox1.Text = Variable + contenido;
  30.        }
  31.  
  32.        private void button2_Click(object sender, EventArgs e)        
  33.        {   string sDirectory = @"C:\Carpeta";
  34.            string NameFile = "NombreArchivo.txt";
  35.            string FilePath = string.Format("{0}\\{1}", sDirectory, NameFile);
  36.            string sAddLine = string.Format("{0}{1}{2}", Variable, contenido, Environment.NewLine);
  37.  
  38.            //Si el directorio no existe entonces lo crea
  39.            if (Directory.Exists(sDirectory).Equals(false))
  40.            {
  41.                Directory.CreateDirectory(sDirectory);
  42.            }        
  43.            //Escribe en el archivo      
  44.            File.AppendAllText(FilePath, sAddLine);
  45.            //File.WriteAllText(String.Format("{0}\\{1}", sDirectory, NameFile), Variable + contenido)
  46.            //File.WriteAllText("nombrearch.txt", Variable & contenido)
  47.        }      
  48.    }    
  49. }
  50.  





250  Programación / .NET (C#, VB.NET, ASP) / Snippet para obtener handle de procesos en: 21 Noviembre 2015, 06:18 am
Hola

Iré al grano, utilizando la función Process.GetProcesses() puedo obtener información del los procesos del sistema así como el Handle o el MainWindowHandle de la ventana principal de un proceso.

El problema es que en algunos casos  MainWindowHandle  devuelve 0

Recordé un viejo código de VB que tenía por ahí. Y tras un buen rato probando lo conseguí pasar a VB.NET, ya que usa APIs y si no se usa bien devuelve error o valores nulos.

Se necesita el ID de un proceso para obtener el handle principal, y dado que la clase  Process no devuelve valor nulo con los IDs obtengo todos los Handles en la lista.


Ahí va el code  ;):

////OBTENER HANDLE PROCESO////

Código
  1. #Region "Obtener Handle Proceso"
  2. Public Module modProcessHandle
  3.    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
  4.    Private Function FindWindow(ByVal lpClassName As String, _
  5.    ByVal lpWindowName As String) As IntPtr
  6.    End Function
  7.    <DllImport("user32.dll", ExactSpelling:=True, CharSet:=CharSet.Auto)> _
  8.    Public Function GetParent(ByVal hWnd As IntPtr) As IntPtr
  9.    End Function
  10.    <DllImport("user32.dll", ExactSpelling:=True, CharSet:=CharSet.Auto)> _
  11.    Private Function GetWindow(ByVal hWnd As IntPtr, _
  12.    ByVal wCmd As Integer) As IntPtr
  13.    End Function
  14.    <DllImport("user32.dll", ExactSpelling:=True, CharSet:=CharSet.Auto)> _
  15.    Private Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, _
  16.    ByRef lpdwProcessId As Integer) As IntPtr
  17.    End Function
  18.  
  19.  
  20.    Public Function GetProcessHandle(ByVal ProcessId As Integer) As IntPtr
  21.        Dim HwndTemporal As IntPtr
  22.        Dim idProc As Integer = 0
  23.        Dim HWND As IntPtr = IntPtr.Zero
  24.        Const GW_HWNDNEXT = 2
  25.        HwndTemporal = FindWindow(Nothing, Nothing)
  26.        ' Loop hasta que encuentra una coincidencia o no hay más identificadores de ventana:
  27.        Do Until HwndTemporal = IntPtr.Zero
  28.            ' Comprueba que no tenga ninguna ventana 'Parent'
  29.            If GetParent(HwndTemporal) = IntPtr.Zero Then
  30.                GetWindowThreadProcessId(HwndTemporal, idProc)
  31.                If ProcessId.Equals(idProc) Then
  32.                    HWND = HwndTemporal 'Devuelve el handle encontrado
  33.                    Return HWND
  34.                    Exit Do ' Salir de bucle
  35.                End If
  36.            End If
  37.            idProc = 0
  38.            'Siguiente identificador de ventana
  39.            HwndTemporal = GetWindow(HwndTemporal, GW_HWNDNEXT)
  40.        Loop
  41.        Return HWND
  42.    End Function
  43.  
  44. End Module
  45. #End Region


Aquí un ejemplo de como usarlo para obtener una lista con los procesos en ejecución sus handles y su Class Name.


Código
  1. Option Strict On
  2. Option Explicit On
  3. Imports System.Runtime.InteropServices
  4. Imports System.Text
  5.  
  6. Public Class Form1
  7.    <DllImport("user32.dll", CharSet:=CharSet.Auto)>
  8.    Private Shared Function GetClassName(ByVal hWnd As IntPtr, _
  9.   ByVal lpClassName As System.Text.StringBuilder, _
  10.   ByVal nMaxCount As Integer) As Integer
  11.    End Function
  12.    Dim ClassName As StringBuilder = New StringBuilder(256)
  13.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  14.        ListView1.Columns.Add("Name", 100)
  15.        ListView1.Columns.Add("MainHandle", 100)
  16.        ListView1.Columns.Add("ClassName", 200)
  17.        ListView1.Columns.Add("MainHandle", 100)
  18.        ListView1.Columns.Add("ClassName", 200)
  19.        ListView1.View = View.Details
  20.        ListView1.FullRowSelect = True
  21.        'Recorre los procesos y agrega la información al ListView
  22.        For Each Proceso In Process.GetProcesses()
  23.            Dim Handle As IntPtr = modProcessHandle.GetProcessHandle(Proceso.Id)
  24.            If Handle <> IntPtr.Zero Then
  25.                'Nombre Proceso
  26.                ListView1.Items.Add(Proceso.ProcessName)
  27.  
  28.                'MainWindowHandle
  29.                ListView1.Items(ListView1.Items.Count - 1).SubItems.Add _
  30.                    (Conversion.Hex(Proceso.MainWindowHandle.ToInt32))
  31.                'ClassName
  32.                ClassName.Clear()
  33.                GetClassName(CType(Proceso.MainWindowHandle.ToInt32, IntPtr), ClassName, ClassName.Capacity)
  34.                ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(ClassName.ToString)
  35.  
  36.                'MainWindowHandle
  37.                ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(Conversion.Hex(CInt(Handle)))
  38.                'ClassName
  39.                ClassName.Clear()
  40.                GetClassName(Handle, ClassName, ClassName.Capacity)
  41.                ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(ClassName.ToString)
  42.  
  43.            End If
  44.        Next
  45.    End Sub
  46.  
  47.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  48.  
  49.    End Sub
  50. End Class
  51. #Region "Obtener Handle Proceso"
  52. Public Module modProcessHandle
  53.    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
  54.    Private Function FindWindow(ByVal lpClassName As String, _
  55.    ByVal lpWindowName As String) As IntPtr
  56.    End Function
  57.    <DllImport("user32.dll", ExactSpelling:=True, CharSet:=CharSet.Auto)> _
  58.    Public Function GetParent(ByVal hWnd As IntPtr) As IntPtr
  59.    End Function
  60.    <DllImport("user32.dll", ExactSpelling:=True, CharSet:=CharSet.Auto)> _
  61.    Private Function GetWindow(ByVal hWnd As IntPtr, _
  62.    ByVal wCmd As Integer) As IntPtr
  63.    End Function
  64.    <DllImport("user32.dll", ExactSpelling:=True, CharSet:=CharSet.Auto)> _
  65.    Private Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, _
  66.    ByRef lpdwProcessId As Integer) As IntPtr
  67.    End Function
  68.  
  69.  
  70.    Public Function GetProcessHandle(ByVal ProcessId As Integer) As IntPtr
  71.        Dim HwndTemporal As IntPtr
  72.        Dim idProc As Integer = 0
  73.        Dim HWND As IntPtr = IntPtr.Zero
  74.        Const GW_HWNDNEXT = 2
  75.        HwndTemporal = FindWindow(Nothing, Nothing)
  76.        ' Loop hasta que encuentra una coincidencia o no hay más identificadores de ventana:
  77.        Do Until HwndTemporal = IntPtr.Zero
  78.            ' Comprueba que no tenga ninguna ventana 'Parent'
  79.            If GetParent(HwndTemporal) = IntPtr.Zero Then
  80.                GetWindowThreadProcessId(HwndTemporal, idProc)
  81.                If ProcessId.Equals(idProc) Then
  82.                    HWND = HwndTemporal 'Devuelve el handle encontrado
  83.                    Return HWND
  84.                    Exit Do ' Salir de bucle
  85.                End If
  86.            End If
  87.            idProc = 0
  88.            'Siguiente identificador de ventana
  89.            HwndTemporal = GetWindow(HwndTemporal, GW_HWNDNEXT)
  90.        Loop
  91.        Return HWND
  92.    End Function
  93.  
  94. End Module
  95. #End Region


Como demostración he hecho que se muestre en una columna los handles obtenidos con la clase Process y otra columna con los handles obtenidos con el snippet. Se puede ver que con algunos procesos ocultos, es decir no son visibles, se devuelve valor 0, pero con el snippet se obtiene el handle sin problemas. Además se obtienen los nombres de clase (ClassName) que sin los Handles de las ventanas no es posible obtenerlos. Por lo menos que yo sepa.

La primera columna ClassName se obtiene con MainWindowHandle del Procces. La segunda columna ClassName se obtiene con los handles obtenidos con el snippet.


Si hay otra forma más sencilla, decídmelo  :-*


El código original VB6 está en el siguiente enlace:
CodeVB

Espero que os sirva...

Saludos
Páginas: 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines