Autor
		 | 
		
			Tema: Cerrar todas las Ventanas (C/S Taskkill)  (Leído 6,371 veces)
		 | 
	 
 
	
		
			
				
					
						
							Dessa
							
								 
								
								  Desconectado
								Mensajes: 624
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Con este código intento cerrar todas Aplicaciones (no procesos) con ventanas (visibles con y sin bordes) que se encuentran abiertas, con el Api SendMesssage (que me permite guardar los cambios) o con Taskkill (que cierra todo sin pedir permiso, ignorando todos los cambios), por lo tanto no se olviden de guardar todo antes de aplicar con Taskkill. La pregunta es como puedo evitar que se cierre el explorer cuando tengo que cerrar las pantallas sin bordes, para no tener que ejecutarlo de nuevo al final ?,  Private Sub Command1_Click() EnumWindows AddressOf EnumWindowsProc, ByVal 0& If Check1.Value = 1 Then   Dim x As Long: x = GetTickCount: While GetTickCount < x + 500: Wend   Shell "explorer.exe" End If End Sub No doy con la clase del explorer para poder agregarla al if de EnumWindowsProc   Public Function EnumWindowsProc(ByVal Hwnd As Long, ByVal lParam As Long) As Boolean   If TaskWindow(Hwnd) Then     If GetClsName(Hwnd) <> "Shell_TrayWnd" or GetClsName(Hwnd) <> "Classe_explorer" Then ... ... ...   EnumWindowsProc = True End Function Nota1: Hay que compilar y guardar para ejecutarloNota2: CTL-ALT-SUP (Aministrador, aplicaciones, tarea neva..., explorer, aceptar) si hace falta volver el explorer Formulario  Option Explicit
  Private Sub Form_Load()        If App.PrevInstance Then End    Call SetWindowPos(Me.Hwnd, -1, 0, 0, 0, 0, &H2 Or &H1)        MsgBox "Ejecutar Compilado " + vbCrLf + vbCrLf + "Taskkill no Guarda cambios en las Aplicaciones abiertas, cierra directamente", vbCritical, "Atención"        Me.Caption = "Ejecutar Compilado": Me.Top = 1680: Me.Left = 1560    Option1.Caption = "Cerrar con  Taskill   (No pide ni guarda nada, cierra todo)"    Option2.Caption = "Cerrar con API  SendMessage  (Pedirá guardar Cambios)"    Check1.Caption = "Incluir  Ventanas  sin  Bordes   ( Cerrará el explorer )"    Option1.Left = 120: Option1.Width = 4465: Option1.Top = 960    Option2.Value = True    Option2.Left = 120: Option2.Width = 4465: Option2.Top = 360    Check1.Left = 120: Check1.Width = 4465: Check1.Top = 2460    Command1.Caption = "Aceptar"    Command1.Left = 1560: Command1.Top = 1680
  End Sub
  Private Sub Command1_Click()    EnumWindows AddressOf EnumWindowsProc, ByVal 0&    If Check1.Value = 1 Then   Dim x As Long: x = GetTickCount: While GetTickCount < x + 500: Wend   Shell "explorer.exe" End If
  End Sub
 
 
 Módulo  Option Explicit Declare Function GetTickCount Lib "kernel32" () As Long 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 Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal Hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal wIndx As Long) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal Hwnd As Long, lpdwprocessid As Long) As Long Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long Const IsTask = &H10000000 Or &H800000 'solo ventanas visibles y con bordes Const IsTask2 = &H10000000 ' solo ventanas visibles
  Public Function EnumWindowsProc(ByVal Hwnd As Long, ByVal lParam As Long) As Boolean   If TaskWindow(Hwnd) Then     If GetClsName(Hwnd) <> "Shell_TrayWnd" Then       If Form1.Option1.Value = True Then         Dim idProc As Long: Call GetWindowThreadProcessId(Hwnd, idProc)         Dim Handle_Proceso As Long: Handle_Proceso = OpenProcess(&H400 + &H10, 0, idProc)         Dim Buffer As String: Buffer = Space(255)         Dim ret As Long: ret = GetModuleFileNameExA(Handle_Proceso, 0, Buffer, 255)         Dim ruta As String: ruta = Left(Buffer, ret)         Call CloseHandle(Handle_Proceso)         If Mid(ruta, InStrRev(ruta, "\") + 1) <> App.EXEName + ".exe" Then           Shell "cmd.exe /c Taskkill /f /IM " + Mid(ruta, InStrRev(ruta, "\") + 1)         End If       End If       If Form1.Option2.Value = True Then         If Hwnd <> Form1.Hwnd Then Call SendMessage(Hwnd, &H112, &HF060&, 0)       End If     End If   End If      'If EnumWindowsProc = False Then Open App.Path & "\archivo.txt" For Append As #1: Print #1, GetClsName(Hwnd): Close #1     EnumWindowsProc = True
  End Function
  Private Function TaskWindow(hwCurr As Long) As Long   Dim lngStyle As Long: lngStyle = GetWindowLong(hwCurr, (-16))   If Form1.Check1.Value = 0 Then If (lngStyle And IsTask) = IsTask Then TaskWindow = True   If Form1.Check1.Value = 1 Then If (lngStyle And IsTask2) = IsTask2 Then TaskWindow = True End Function
  Private Function GetClsName(handle As Long) As String     Dim lpClassName As String: lpClassName = Space(256)     Dim RetVal As Long: RetVal = GetClassName(handle, lpClassName, 256)     GetClsName = Left$(lpClassName, RetVal) End Function
 
 
 Sauludos 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Última modificación:  8 Enero 2009, 01:06 am por Dessa »
								 | 
								
									 
									En línea
								 | 
							  
							 
							Adrian Desanti 
						 | 
					 
				 
			 |  
		 
	 |  
	| 
		
		
	 |  
	
		
		
			
				
					
						
							Dessa
							
								 
								
								  Desconectado
								Mensajes: 624
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Siempre son bienvenidas las criticas constructivas krackwar  y siempre uso APIs (o por lo menos lo intento) pero en este caso que nesecito cerrar todo abuptamente "Taskkill" esta respondiendo perfecto con y sin bordes. (sendMesagge no responde sin bordes), por otro lado solo estoy probando con hasta donde puede llegar "Taskkill", pero si me das una buena razon para descartarla seria  la mejor critica constructiva. (y por supuesto que aceptaria)
  PD: Alguna idea para encontrar la classe del explorer ? (para no tener que ejecutarlo al final de EnumWindowsProc)
  Saludos de Dessa
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							Adrian Desanti 
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							krackwar
							
								 
								
								  Desconectado
								Mensajes: 900
								
								
								
								
								
								  
							 
						 | 
						
							
							 
							
Siempre son bienvenidas las criticas constructivas krackwar  y siempre uso APIs (o por lo menos lo intento) pero en este caso que nesecito cerrar todo abuptamente "Taskkill" esta respondiendo perfecto con y sin bordes. (sendMesagge no responde sin bordes), por otro lado solo estoy probando con hasta donde puede llegar "Taskkill", pero si me das una buena razon para descartarla seria  la mejor critica constructiva. (y por supuesto que aceptaria)
  PD: Alguna idea para encontrar la classe del explorer ? (para no tener que ejecutarlo al final de EnumWindowsProc)
  Saludos de Dessa
 
  Ok , te digo las razones , taskkill por si no lo sabes es un exe que se encuentra en system32 , si le cambias el nombre te jode este codigo , al llamar a otro exe estas cargando mas el pobre pc , si hay algun error en cerrar tu no lo sabes exepto que leyeras lo que devuelve pero ene ste caso no lo lees , esas son las razoneds     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							Mi blogBienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.  El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.   
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Dessa
							
								 
								
								  Desconectado
								Mensajes: 624
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Tendre muy en cuenta esa buena razon, y seguire probando para ver en la practica hasta donde se puede, en maquinas altas hasta ahora no tube errores, voy a empezar a probar con P-III. Si no sirve el primero que la descartará sere yo. Si se te ocurre algo para el explorer por favor me lo pasas Saludos     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							Adrian Desanti 
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Dessa
							
								 
								
								  Desconectado
								Mensajes: 624
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Ok , te digo las razones , taskkill por si no lo sabes es un exe que se encuentra en system32 , si le cambias el nombre te jode este codigo ,     Solo pòr curiosidad intenta cambiar el nombre de  taskkill en system32 y luego lo llamas desde vb o desde la consola, notaras que taskkill se sigue ejecutando, por otro lado no te olvides que las Apis dependen de las DLLs en que se encuentren sus funciones, tambien se pueden borrar o cambiarle el nombre y se te caga el code que las llama. Saludos     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							Adrian Desanti 
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							[Zero]
							
								Wiki 
								
								  Desconectado
								Mensajes: 1.082
								
								 
								CALL DWORD PTR DS:[0]
								
								
								
								
								
								  
								 
							 
						 | 
						
							
							 
							
Jaja, bueno es raro que alguien cambie el nombre de la kernel32      Las apis son más rápidas, con manejo de errores y dan más posibilidades    . Saludos  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche 
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Dessa
							
								 
								
								  Desconectado
								Mensajes: 624
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Coincido que es raro que alguien queira cambiarle el nombre a las DLL ( no a kernel32) y tambien es raro que quiera cambiarle el nombre a Taskkill, tambien coincido con que las funciones Apis (que siempre intento utilizar) son mas rápidas, pero este mensaje no es una discución sobre eso, mi pregunta en este mensaje es como puedo cerrar las ventanas sin borde sin que se cierre el Explorer. exe (para no tener que ejecutarlo desde el código)   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Última modificación:  8 Enero 2009, 17:09 pm por Dessa »
								 | 
								
									 
									En línea
								 | 
							  
							 
							Adrian Desanti 
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							el_c0c0
							
								 
								
								  Desconectado
								Mensajes: 307
								
								
								
								
								
								  
							 
						 | 
						
							
							 
							
Coincido que es raro que alguien queira cambiarle el nombre a las DLL ( no a kernel32) y tambien es raro que quiera cambiarle el nombre a Taskkill, tambien coincido con que las funciones Apis (que siempre intento utilizar) son mas rápidas, pero este mensaje no es una discución sobre eso, mi pregunta en este mensaje es como puedo cerrar las ventanas sin borde sin que se cierre el Explorer. exe (para no tener que ejecutarlo desde el código)  
  hace una lista de procesos criticos y omitilos al listarlos.. hablando de exes en memoria y no de handles de ventanas.. saludos  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							  '-     coco "Te voy a romper el orto"- Las hemorroides  
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Dessa
							
								 
								
								  Desconectado
								Mensajes: 624
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Gracias por responder a la preguta el_c0c0 , ya habia probado con eso pero no responde.
  Public Function EnumWindowsProc(ByVal Hwnd As Long, ByVal lParam As Long) As Boolean   If TaskWindow(Hwnd) Then     If GetClsName(Hwnd) <> "Shell_TrayWnd" Then         Dim idProc As Long: Call GetWindowThreadProcessId(Hwnd, idProc)         Dim Handle_Proceso As Long: Handle_Proceso = OpenProcess(&H400 + &H10, 0, idProc)         Dim Buffer As String: Buffer = Space(255)         Dim ret As Long: ret = GetModuleFileNameExA(Handle_Proceso, 0, Buffer, 255)         Dim ruta As String: ruta = Left(Buffer, ret)         Call CloseHandle(Handle_Proceso)         If Mid(ruta, InStrRev(ruta, "\") + 1) <> App.EXEName + ".exe" or Mid(ruta, InStrRev(ruta, "\") + 1) <> "EXPLORER.EXE"  Then           Shell "cmd.exe /c Taskkill /f /IM " + Mid(ruta, InStrRev(ruta, "\") + 1)         End If     End If   End If
  Me está volviendo loco, saludos
 
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							Adrian Desanti 
						 | 
					 
				 
			 |  
		 
	 |  
	 |  
 
	 
	
 
			 
			
				
					
						| Mensajes similares | 
					 
					
						 | 
						Asunto | 
						Iniciado por | 
						Respuestas | 
						Vistas | 
						Último mensaje | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Broma, cerrar sesion mensenger, cerrar ventanas y mostrar mensaje???
							 
							Programación Visual Basic
						 | 
						
							nb248077
						 | 
						
							2
						 | 
						
							3,158
						 | 
						
							 
							
								11 Diciembre 2012, 20:37 pm 
								por Stakewinner00
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							El Banco Central chino ordena cerrar todas las cuentas con bitcoins
							 
							Noticias
						 | 
						
							wolfbcn
						 | 
						
							4
						 | 
						
							2,417
						 | 
						
							 
							
								29 Marzo 2014, 15:25 pm 
								por Kami
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							:) Aca de nuevo ---- Cerrar programa y liberar todas las variables
							 
							.NET (C#, VB.NET, ASP)
						 | 
						
							luis456
						 | 
						
							2
						 | 
						
							2,511
						 | 
						
							 
							
								22 Noviembre 2014, 12:44 pm 
								por luis456
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Google acabará con las molestas ventanas que no se pueden cerrar  
							 
							Noticias
						 | 
						
							wolfbcn
						 | 
						
							0
						 | 
						
							2,329
						 | 
						
							 
							
								 2 Abril 2017, 02:53 am 
								por wolfbcn
							
						 | 
					 
				 
			    |