canal visual basic .net

Recursos Visual Basic.NET, VB.NET, Manuales de programación, Tutoriales, Foros de programación, Comunidad de programadores

Usuarios activos:  86

Foros de programación, recursos, tutoriales, sistemas operativos...

Bienvenido a la zona de foros. Participa en alguno de nuestros foros: Foros de visual basic, foros de visual basic.net foros de Crystal reports, foros de C++ - C# , foros de Java, foros de PHP, foros de ASP.net. Seguro que hay un foro que te servirá de gran utilidad y si no lo encuentras avísanos y crearemos uno nuevo.
 

Retroceder   Foro > Recursos y tutoriales > Sistema
 
LinkBack Herramientas Buscar en Tema Desplegado
  #1 (permalink)  
Antiguo 12-Jan-2007, 01:26
Member
Iniciad@
 
Fecha de Ingreso: 12-January-2007
Ubicación: Mexico
Mensajes: 43
Predeterminado

Hola, NECESITO DE SU AYUDA, tengo una duda,lo que quiero es una forma de detectar los procesos que se ejecutan, y mande un mensaje.

Por ejemplo:

- Selecciono un archivo desde el "Explorador de Windows": Y el programa debe mostrar "Seleccionaste 'Nombre del Archivo'

- Borro ese archivo: Y el programa debe mostrar "Borraste el archivo"

o tambien

- Dar click con el raton sobre mi PC por ejemplo. y que el programa diga "Seleccionaste Mi PC"

- O al dar doble click sobre la papelera de reciclaje, muestre un mensaje que diga "Entraste a la papelera de reciclaje"

Esto es posible!? Llevo dias investigando y no encuentro nada...
__________________
"Una máquina puede hacer el trabajo de 50 hombres corrientes. Pero no existe ninguna máquina que pueda hacer el trabajo de un hombre extraordinario."
Responder Citando
  #2 (permalink)  
Antiguo 05-Feb-2007, 11:11
Senior Member
Expert@
 
Fecha de Ingreso: 15-December-2005
Ubicación: Bogotá, D.C
Mensajes: 400
Enviar un mensaje por Yahoo  a Néstor Acevedo
Predeterminado

en la guia de recursos ahy un post creo que de Leandro donde "oculta" un proceso... pero lo que pide realmente son los eventos que ocurren en el equipo.
Responder Citando
  #3 (permalink)  
Antiguo 06-Feb-2007, 14:46
Avatar de Leandro
Moderador
Veteran@
 
Fecha de Ingreso: 08-December-2005
Mensajes: 548
Enviar un mensaje por MSN a Leandro Enviar un mensaje por Yahoo  a Leandro
Predeterminado

hola yo estaba intentando hacer algo asi y bueno me mareo mucho asi que lo deje pero de todas, mas que nada por el tema de que el ejemplo que te voy a pasar recarga mucho la memoria del explorer , se que hay una forma en la que esto no ocurrira pero me tengo que poner a estudiarla y esta muy complicada , bien lo que hace este ejemplo es mostrar que icono selecionaste del escritorio , no estoy seguro que te funcione ya que hay un handle que me lo tira en mi pc siempre igual no se si sera lo mismo con otra pc (solo en xp) en numero es 65692 bien seguramente no entendes nada de lo que explico
pero mira el ejemplo

en un form con u timer
Código:
Option Explicit
Private Type LVITEM
 mask As Long
 iItem As Long
 iSubitem As Long
 state As Long
 stateMask As Long
 pszText As Long
 cchTextMax As Long
 iImage As Long
 lParam As Long
 iIndent As Long
End Type
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 OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Const LVIF_IMAGE = &H2
Private Const LVIF_TEXT = &H1
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETITEM As Long = (LVM_FIRST + 5)
Private Const LVM_GETITEMCOUNT = (LVM_FIRST + 4)
Private Const LVM_GETITEMSTATE = (LVM_FIRST + 44)
Private Const LVIS_SELECTED = &H2
Private Const PAGE_READWRITE = &H4&
Private Const MEM_RESERVE = &H2000
Private Const MEM_COMMIT = &H1000
Private Const MEM_RELEASE = &H8000
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_VM_WRITE = &H20
Dim Handle As Long
Private Sub Form_Load()
 Dim i As Integer
 Me.AutoRedraw = True
 
 Handle = 65692
 
 
 For i = 0 To GetListViewCount(Handle) - 1
 Me.Print ListViewGetText(Handle, 0, i)
 Next i
End Sub
Private Function ListViewGetText(ByVal hwnd As Long, ByVal iSubitem As Integer, ByVal iItem As Integer) As String
 Dim lngProcID As Long, lngProcHandle As Long
 Dim typLvItem As LVITEM, strLvItem As String
 Dim lngVarPtr1 As Long, lngVarPtr2 As Long
 Dim lngMemVar1 As Long, lngMemVar2 As Long
 Dim lngMemLen1 As Long, lngMemLen2 As Long
 Call GetWindowThreadProcessId(hwnd, lngProcID)
 If lngProcID <> 0 Then
 lngProcHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, lngProcID)
 If lngProcHandle <> 0 Then
 strLvItem = String(255, vbNullChar)
 lngVarPtr1 = StrPtr(strLvItem)
 lngVarPtr2 = VarPtr(typLvItem)
 lngMemLen1 = LenB(strLvItem)
 lngMemLen2 = LenB(typLvItem)
 lngMemVar1 = VirtualAllocEx(lngProcHandle, 0, lngMemLen1, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
 lngMemVar2 = VirtualAllocEx(lngProcHandle, 0, lngMemLen2, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
 With typLvItem
 .cchTextMax = 255
 .iItem = iItem
 .iSubitem = iSubitem
 .mask = LVIF_TEXT
 .pszText = lngMemVar1
 End With
 Call WriteProcessMemory(lngProcHandle, ByVal lngMemVar1, ByVal lngVarPtr1, lngMemLen1, 0)
 Call WriteProcessMemory(lngProcHandle, ByVal lngMemVar2, ByVal lngVarPtr2, lngMemLen2, 0)
 Call SendMessage(hwnd, LVM_GETITEM, ByVal 0, ByVal lngMemVar2)
 Call ReadProcessMemory(lngProcHandle, ByVal lngMemVar1, ByVal lngVarPtr1, lngMemLen1, 0)
 strLvItem = StrConv(strLvItem, vbUnicode)
 strLvItem = Left(strLvItem, InStr(1, strLvItem, vbNullChar) - 1)
 ListViewGetText = strLvItem
 Call VirtualFreeEx(lngProcHandle, ByVal lngMemVar1, lngMemLen1, MEM_RELEASE)
 Call VirtualFreeEx(lngProcHandle, ByVal lngMemVar2, lngMemLen2, MEM_RELEASE)
 Call CloseHandle(lngProcHandle)
 End If
 End If
End Function
Function GetListViewCount(ByVal hwnd As Long) As Long
'this simply get number of items
GetListViewCount = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, ByVal 0)
End Function
Function GetItemSelected(hwnd As Long) As Long
Dim i As Long, Index As Long
For i = 1 To GetListViewCount(hwnd)
Index = SendMessage(hwnd, LVM_GETITEMSTATE, i - 1, ByVal LVIS_SELECTED)
If Index > 0 Then
GetItemSelected = i
Exit For
End If
Next
End Function
Private Sub Timer1_Timer()
Dim Index As Long
Index = GetItemSelected(Handle) - 1
Me.Caption = ListViewGetText(Handle, 0, Index)
End Sub
Responder Citando
  #4 (permalink)  
Antiguo 06-Feb-2007, 17:17
Avatar de Dark_soul
Member
Iniciad@
 
Fecha de Ingreso: 13-October-2006
Ubicación: Mexico
Mensajes: 38
Enviar un mensaje por MSN a Dark_soul
Predeterminado

Hola que tal, mira hay un ejemplo en el cual enumeran los procesos y dependiendo del programa que selecciones le impide su ejecucion.

http://www.recursosvisualbasic.com.a...ocesos_wmi.htm
Responder Citando
  #5 (permalink)  
Antiguo 06-Feb-2007, 17:49
Senior Member
Guru
 
Fecha de Ingreso: 07-December-2005
Mensajes: 1.122
Predeterminado

Hola Dark_soul , ese ejemplo hace otra cosa, pero no es lo que pretende hacer Drakun ...que es algo bastante complicado de hacer

Pd: hola Leandro, probé el ejemplo, pero la función ( l a que está dentro del Timer) me devuelve siempre un vbnullstring, ¿ te faltó algún pedaso de código? o yo hice algo mal ??

saludos
Responder Citando
  #6 (permalink)  
Antiguo 06-Feb-2007, 20:26
Avatar de Leandro
Moderador
Veteran@
 
Fecha de Ingreso: 08-December-2005
Mensajes: 548
Enviar un mensaje por MSN a Leandro Enviar un mensaje por Yahoo  a Leandro
Predeterminado

Cita:
Iniciado por Luciano
Pd: hola Leandro, probé el ejemplo, pero la función ( l a que está dentro del Timer) me devuelve siempre un vbnullstring, ¿ te faltó algún pedaso de código? o yo hice algo mal ??

saludos
hola si en verdad en handle no es fijo recien mire cual era el handle del syslistview32 del escritorio y cambia asi bueno hay que buscarlo, esto tambien funciona si se le pasa el handle del syslistview32una carpeta , pero bueno lo malo de este metodo es como dije antes es que incrementa la memoria del explorer (usa el mismo metodo que el code de la guia de recursos para ocular los procesos.

aca esta buscando el handle

Código:
Option Explicit
Private Type LVITEM
 mask As Long
 iItem As Long
 iSubitem As Long
 state As Long
 stateMask As Long
 pszText As Long
 cchTextMax As Long
 iImage As Long
 lParam As Long
 iIndent As Long
End Type
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 OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) 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 LVIF_IMAGE = &H2
Private Const LVIF_TEXT = &H1
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETITEM As Long = (LVM_FIRST + 5)
Private Const LVM_GETITEMCOUNT = (LVM_FIRST + 4)
Private Const LVM_GETITEMSTATE = (LVM_FIRST + 44)
Private Const LVIS_SELECTED = &H2
Private Const PAGE_READWRITE = &H4&
Private Const MEM_RESERVE = &H2000
Private Const MEM_COMMIT = &H1000
Private Const MEM_RELEASE = &H8000
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_VM_WRITE = &H20
Dim Handle As Long
Private Sub Form_Load()
 Dim i As Integer
 Me.AutoRedraw = True
 
 
 
 Handle = FindWindow("Progman", vbNullString)
 Handle = FindWindowEx(Handle, ByVal 0&, "SHELLDLL_DefView", vbNullString)
 Handle = FindWindowEx(Handle, ByVal 0&, "SysListView32", "FolderView")
 
 If Handle <> 0 Then
 For i = 0 To GetListViewCount(Handle) - 1
 Me.Print ListViewGetText(Handle, 0, i)
 Next i
 
 Timer1.Interval = 2000
 Else
 MsgBox "No se encontro el listview - SysListView32 -"
 End If
End Sub
Private Function ListViewGetText(ByVal hwnd As Long, ByVal iSubitem As Integer, ByVal iItem As Integer) As String
 Dim lngProcID As Long, lngProcHandle As Long
 Dim typLvItem As LVITEM, strLvItem As String
 Dim lngVarPtr1 As Long, lngVarPtr2 As Long
 Dim lngMemVar1 As Long, lngMemVar2 As Long
 Dim lngMemLen1 As Long, lngMemLen2 As Long
 Call GetWindowThreadProcessId(hwnd, lngProcID)
 If lngProcID <> 0 Then
 lngProcHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, lngProcID)
 If lngProcHandle <> 0 Then
 strLvItem = String(255, vbNullChar)
 lngVarPtr1 = StrPtr(strLvItem)
 lngVarPtr2 = VarPtr(typLvItem)
 lngMemLen1 = LenB(strLvItem)
 lngMemLen2 = LenB(typLvItem)
 lngMemVar1 = VirtualAllocEx(lngProcHandle, 0, lngMemLen1, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
 lngMemVar2 = VirtualAllocEx(lngProcHandle, 0, lngMemLen2, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
 With typLvItem
 .cchTextMax = 255
 .iItem = iItem
 .iSubitem = iSubitem
 .mask = LVIF_TEXT
 .pszText = lngMemVar1
 End With
 Call WriteProcessMemory(lngProcHandle, ByVal lngMemVar1, ByVal lngVarPtr1, lngMemLen1, 0)
 Call WriteProcessMemory(lngProcHandle, ByVal lngMemVar2, ByVal lngVarPtr2, lngMemLen2, 0)
 Call SendMessage(hwnd, LVM_GETITEM, ByVal 0, ByVal lngMemVar2)
 Call ReadProcessMemory(lngProcHandle, ByVal lngMemVar1, ByVal lngVarPtr1, lngMemLen1, 0)
 strLvItem = StrConv(strLvItem, vbUnicode)
 strLvItem = Left(strLvItem, InStr(1, strLvItem, vbNullChar) - 1)
 ListViewGetText = strLvItem
 Call VirtualFreeEx(lngProcHandle, ByVal lngMemVar1, lngMemLen1, MEM_RELEASE)
 Call VirtualFreeEx(lngProcHandle, ByVal lngMemVar2, lngMemLen2, MEM_RELEASE)
 Call CloseHandle(lngProcHandle)
 End If
 End If
End Function
Function GetListViewCount(ByVal hwnd As Long) As Long
'this simply get number of items
GetListViewCount = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, ByVal 0)
End Function
Function GetItemSelected(hwnd As Long) As Long
Dim i As Long, Index As Long
For i = 1 To GetListViewCount(hwnd)
Index = SendMessage(hwnd, LVM_GETITEMSTATE, i - 1, ByVal LVIS_SELECTED)
If Index > 0 Then
GetItemSelected = i
Exit For
End If
Next
End Function
Private Sub Timer1_Timer()
Dim Index As Long
Index = GetItemSelected(Handle) - 1
Me.Caption = ListViewGetText(Handle, 0, Index)
End Sub
saludos
Responder Citando
  #7 (permalink)  
Antiguo 06-Feb-2007, 20:43
Senior Member
Guru
 
Fecha de Ingreso: 07-December-2005
Mensajes: 1.122
Predeterminado

Hola,

Si ahora me toma bien el Listview del escritorio y me actualiza los datos en el caption del form

Para actualizar los elementos ( el listado de items en el form ) se puede llamar al procedimeinto del formload y ponerlo en el timer

Código:
Private Sub Timer1_Timer()
Dim Index As Long
Dim i As Integer
Index = GetItemSelected(Handle) - 1
Me.Caption = ListViewGetText(Handle, 0, Index)

 Cls
 For i = 0 To GetListViewCount(Handle) - 1
Me.Print ListViewGetText(Handle, 0, i)
 Next i


End Sub
Pd Leandro yo en algun lado vi un ejemplo para hacer algo relacionado a esto, pero sin el problema que mensionás de los recursos , Si lo encuentro te lo paso

saludos
Responder Citando
  #8 (permalink)  
Antiguo 07-Feb-2007, 00:02
Member
Iniciad@
 
Fecha de Ingreso: 12-January-2007
Ubicación: Mexico
Mensajes: 43
Predeterminado

Gracias, muchas gracias, no sabes cuanto tiempo llevo intentando hacer un codigo asi, lo probare y te escribire mis resultado muchas gracias Leandro.
__________________
"Una máquina puede hacer el trabajo de 50 hombres corrientes. Pero no existe ninguna máquina que pueda hacer el trabajo de un hombre extraordinario."
Responder Citando
  #9 (permalink)  
Antiguo 07-Feb-2007, 15:24
Senior Member
Guru
 
Fecha de Ingreso: 07-December-2005
Mensajes: 1.122
Predeterminado

Muevo el ejemplo a la guia de recursos.

Pd: Le cambié el nombre al post

saludos
Responder Citando
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Activado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
escritorio o web point General 0 20-Jun-2008 14:17
Enumerar claves del registro Lliterola Visual Basic 6.0 0 21-Dec-2006 00:33
Directorio del escritorio Guests Visual Basic 6.0 4 19-Sep-2006 09:19
Actualizar escritorio Guests Visual Basic 6.0 2 22-Aug-2006 03:19
Icono al escritorio Guests Visual Basic 6.0 3 15-Jul-2006 21:12


La franja horaria es GMT +2. Ahora son las 02:21.


Visual Studio .VisualBasic.net .ADO.NET .ASP.NET .Framework .Crystal report
[Visual Basic .NET · Información legal · Condiciones de uso · Publicidad · Contacto · RSS novedades Foro · Inicio]
Un sitio web de Internelia (Ontecnia) © Copyright 2010 canalvisualbasic.net. Todos los derechos reservados