Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#11421
He encontrado otro script (Chino...) pero es demasiadooo avanzado para mi, no se como utilizarlo

Creo que sirve para buscar el titulo de la ventana de un proceso

Una ayuda???


Código (ruby) [Seleccionar]
require 'Win32API'
class Wnd
#for GetWindow
=begin
GW_CHILD=
GW_OWNER=
GW_HWNDFIRST=
GW_HWNDNEXT=
#for GetNextWindow
GW_HWNDNEXT=
GW_HWNDPREV=
=end

def initialize
   @hw = nil
   @GetWindow = Win32API.new("user32","GetWindow",['L']*2,'L')
   #top child
   @GetTopWindow = Win32API.new("user32","GetTopWindow",['L'],'L')
   # @GetNextWindow = Win32API.new("user32","GetNextWindowA",['L']*2,'L')
   @GetActiveWindow = Win32API.new("user32","GetActiveWindow",[],'L')
   @GetDesktopWindow = Win32API.new("user32","GetDesktopWindow",[],'L')
@FindWindow=Win32API.new("user32","FindWindowA",['L','P'],'L')
   @SetForegroundWindow=Win32API.new("user32","SetForegroundWindow",['L'],'V')
   @GetWindowText = Win32API.new("user32","GetWindowText",['L','P','i'],'i')
 
end
def find(cap)
   @hw = @FindWindow.Call(0,cap)
end
def fg
   @SetForegroundWindow.Call(@hw)
end
def caption
   lpString="\0"*251
   len = @GetWindowText.Call(@hw,lpString,250)
   p len
   lpString[0,len]
end
def test
 
end
end

wnd1=Wnd.new
wnd1.find("Win32 SDK Reference Help")
wnd1.fg
puts wnd1.caption
__END__





EDITO:

He conseguido sacar el título de la consola de windows , la CMD:

Código (ruby) [Seleccionar]
require 'Win32API'

 b = Win32API.new('kernel32' , 'GetConsoleWindow' , [] , 'L').call
 title = ' '*100
 win = Win32API.new('user32', 'GetWindowText', ['L', 'P', 'I'], 'I').Call(b, title, 256)

puts title



Pero ni idea de como hacerlo para todos los processos abiertos....

Quisiera algo así:

Código (ruby) [Seleccionar]
require 'Win32API'

 b = Win32API.new('kernel32' , 'Get ALL WINDOWS' , [] , 'L').call
 title = ' '*100

if title.include? "archivo abierto"
  abort
end
#11422
Acabo de intentarlo usando win32ole, pero no hay nada que muestre el archivo que tiene abierto el proceso:

Lo más parecido es el:
puts process.CommandLine
Pero no es lo mismo...
:-( :-( :-(


Código (ruby) [Seleccionar]
require 'win32ole'

wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")
for process in processes do
puts process.Caption
puts process.CommandLine
puts process.CreationClassName
puts process.CreationDate
puts process.CSCreationClassName
puts process.CSName
puts process.Description
puts process.ExecutablePath
puts process.ExecutionState
puts process.Handle
puts process.HandleCount
puts process.InstallDate
puts process.KernelModeTime
puts process.MaximumWorkingSetSize
puts process.MinimumWorkingSetSize
puts process.Name
puts process.OSCreationClassName
puts process.OSName
puts process.OtherOperationCount
puts process.OtherTransferCount
puts process.PageFaults
puts process.PageFileUsage
puts process.ParentProcessId
puts process.PeakPageFileUsage
puts process.PeakVirtualSize
puts process.PeakWorkingSetSize
puts process.Priority
puts process.PrivatePageCount
puts process.ProcessId
puts process.QuotaNonPagedPoolUsage
puts process.QuotaPagedPoolUsage
puts process.QuotaPeakNonPagedPoolUsage
puts process.QuotaPeakPagedPoolUsage
puts process.ReadOperationCount
puts process.ReadTransferCount
puts process.SessionId
puts process.Status
puts process.TerminationDate
puts process.ThreadCount
puts process.UserModeTime
puts process.VirtualSize
puts process.WindowsVersion
puts process.WorkingSetSize
puts process.WriteOperationCount
puts process.WriteTransferCount
end



EDITO:

Vale, Si, Si que me sirve:

Código (ruby) [Seleccionar]
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")
for process in processes do
puts process.CommandLine
end


Pero no es del todo eficiente en algunos casos, Así que necesito además de esa comprobación, una segunda comprobación para comprobar el nombre de la ventana del programa, he encontrado un code que lo hace pero es para VBS creo...

Una ayuda para "Convertirlo" a Ruby? Lo he intentado pero no lo consigo:

Código (vb) [Seleccionar]
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ProcessStartup",,48)
For Each objItem in colItems
   Wscript.Echo "ShowWindow: " & objItem.ShowWindow
   Wscript.Echo "Title: " & objItem.Title
Next






Código (ruby) [Seleccionar]
require 'win32ole'

wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("Select * from Win32_ProcessStartup")
for process in processes do
puts process.ShowWindow
puts process.Title
end


No me muestra nada, Pero támpoco da error   :(

¿Que me falta?
#11423
Por fin he encontrado algo útil!!!

Lo malo es que el ejemplo es para Delphi...
CitarUsing the Native API function NtQuerySystemInformation you can list all open handles from all processes
http://stackoverflow.com/questions/1575286/delphi-get-what-files-are-opened-by-an-application

API: Win32API
Función: NtQuerySystemInformation
http://msdn.microsoft.com/en-us/library/ms724509%28VS.85%29.aspx


¿Alguien podria ayudarme a entender como utilizarla para averiguar lo que necesito, en ruby?


EDITO:

He encontrado un ejemplo en chino, pero no hace lo que necesito ,lo único que he encontrado:


Código (ruby) [Seleccionar]
#!/usr/local/bin/ruby

# WindowsNTŒn,ÅCPU•‰‰×,ƃƒ,ƒŠ•‰‰×,ð‹L˜^,·,é

require "Win32API"

# '²¸ŠÔŠu[•b]
interval = 1

# CPU •‰‰×,ÌŽæ"¾—p
NtQuerySystemInformation = Win32API.new('NTDLL', 'NtQuerySystemInformation', 'LPLP', 'I')
perfInfo = "\0\0\0\0" * 78
timeInfo = "\0\0\0\0" * 8
sysInfoLen = "\0\0\0\0"

# ƒƒ,ƒŠÁ"ï,ÌŽæ"¾—p
GlobalMemoryStatus = Win32API.new('kernel32','GlobalMemoryStatus','P','V')
memStruct = "\0\0\0\0" * 8

$regular = false
$formerIdle = 0
$formerTime = 0
while true
 # ƒAƒCƒhƒ‹ŽžŠÔ,ÌŽæ"¾
 NtQuerySystemInformation.call(2, perfInfo, perfInfo.size, sysInfoLen)
 idle = perfInfo.unpack("L")[0]
 # ƒVƒXƒeƒ€ŽžŠÔ,ÌŽæ"¾
 NtQuerySystemInformation.call(3, timeInfo, timeInfo.size, sysInfoLen)
 time = timeInfo.unpack("L3")[2]
 # ·•ª,Å CPU •‰‰×,ðŒvŽZ[%]
 cpuLoad = 100.0 - ((100.0 * (idle - $formerIdle)) / (time - $formerTime))
 if cpuLoad < 0 or cpuLoad > 100
   $regular = false
 end
 $formerIdle = idle
 $formerTime = time

 # ƒƒ,ƒŠÁ"ï,ÌŽæ"¾[%]
 GlobalMemoryStatus.call(memStruct)
 memLoad =memStruct.unpack("L2")[1]

 if $regular
   printf "time=%s cpu=%4.1f mem=%4.1f\n", \
     Time.now.strftime("%H:%M:%S"), cpuLoad, memLoad
 else
   $regular = true
 end

 sleep interval
end
#11424
He simplificado el code como he podido, bueno, digamos que le he "quitado mierd@" xD

he corregifo un fallo , no salia la pantalla de ayuda

hmmm, me faltaba por agregar unos cuantos cracteres ilegales bastante comunes en los nombres de los archivos como º ª ´, todavia me faltan 2 más, uno muy importante es la comilla ', pero no se como hacerlo, ya lo descubriré.

Y ya he arreglado la caja de dialogo para que no muestre esos últimos 5 dígitos.

Ahora sí, Ya no lo edito más hasta que encuentre ayuda para el problemón del acceso al archivo, Lo prometo (Dedos cruzados :P). Lo cierto es que lo volveré a editar si me doy cuenta de algún fallo...


Saludos...
#11425
Windows / Re: Win 7 Solucion posible
6 Marzo 2012, 04:03 AM
Cita de: Zorronde en  6 Marzo 2012, 01:42 AM
Varios de los activadores que encontre No funcionan .

puede ser por eL SP1 en el cual creo que viene incluida la Actualizacion....033.-

XD Zorronde No empezemos con la paranoya de esa actualización

Con lo que te dió Simorg te sirve

La kb971033 No viene instalada por defecto, De echo sale la casilla de esa actu "desmarcada" por defecto en windows update.

Creo que tuviste tus dudas y preguntaste sobre esa actu hace un tiempo, y hasta Songoku te lo desconfirmó, que te ha echo cambiar de idea?
Bueno, creo que eras tu, no lo recuerdo bien   ;)

no te preocupes usa el Daz loader

salu2
#11426
Windows / Re: Activador "daz"
5 Marzo 2012, 23:27 PM
ayer sacaron una nueva versión


Daz loader 2.1.1



http://www.datafilehost.com/get.php?file=e259337e

Si no te funciona, Debe ser por tu versión de windows 7 (Una muy antigua), Mira las versiones soportadas

EDITO:
Quise decir, Las NO soportadas ( -7600 ):

CitarNote:  You must be running build 7600 or greater for Windows 7 and Windows Server 2008 R2.

Note: Windows 7 N editions will only be supported when OEM SLP serials leak.

http://forums.mydigitallife.info/threads/24901-Windows-Loader-Current-release-information


saludosss
#11427
No se bloqueará, Pero se reiniciará cada 1 hora o 2 horas desde que inicias sesión. Al menos eso pasaba con la RC1, no se si ahora será peor, o "mejor".


Activador: DAZ Loader 2.1

Se ha dicho mil veces en el foro, busca :P
#11428
He vuelto a modificar el script, Ahora muestra más información en esta ventana:



No he conseguido hacer un "split" para cortar los 5 dígitos del final, Pero bueno.

Sé que es una "tool" rara, pero no por eso tiene que dejar de ser interesante (Aunque sea para aprender), Prueben y comenten xD

La sintaxis indentación y demás ccomo por ejemplo los métodos repetidos o la funcion de convertir el tamaño a MB se puede simplificar para no repetirlo, Lo sé está fatal, Es lo que tiene probar 1.000 cosas en un día y hacer 2.000 tests con cada modificación para asegurar que no haya errores...
Cuando consiga lo único que me falta para acabar este maldito code lo arreglaré todo y lo dejaré bonito xD


Salu2
#11429
He mejorado el code con lo poco que sé de Ruby  :P

Si la carpeta de destino no existe, se pregunta para crearla o no. (Si no se crea, no se pueden copiar los archivos xD)

Y en fin, antes daba un error si la ruta contenia el caracter " ú ", ya lo he corregido.

Ah, Y ya no reemplaza el caracter " – ", Si el archivo contiene ese caracter (u otro ilegal) Lo copia tal cual...

Solo me falta saber como ocultar la maldita CMD (Sin usar nircmd XD o win32ole), O mejor aún, Comprobar si un archivo está abierto por algún proceso sin usar la CMD, sería mucho más eficaz...

Cita de: EleKtro H@cker en  5 Marzo 2012, 11:00 AM

Resumiendo, Necesito una forma más nátiva y eficaz en Ruby para comprobar si un archivo está siendo usado por algún proceso:

Ejemplo:
Código (ruby) [Seleccionar]
If $archivo ABIERTO POR $cualquier_programa_de_windows
Sleep 01
elsif
mover $archivo a...
end

PD: Deposite su ayuda ----->   [     AQUÍ     ]  <-----

Gracias
#11430
Definitivamente el método de "comprobar el exitstatus" no me sirve para nada, engaña mucho, Por ejemplo he echo comprobaciones y el Winamp tarda 10 segundos en actualizarse en el "tasklist" (o al revés, el tasklist será el q tarda 10 segundos, no se)...

Resumiendo, Necesito una forma más nátiva y eficaz en Ruby para comprobar si un archivo está siendo usado por algún proceso:


Ejemplo:

Código (ruby) [Seleccionar]
If $archivo ABIERTO POR $cualquier_programa_de_windows
Sleep 01
elsif
mover $archivo a...
end







Aqui dejo esto, lo siento por tanto borrador xD


Código (ruby) [Seleccionar]
def Access(source_file, dest_file)
begin
 ENV['tmp'] = $archivo.split('\\').last.split('.').first
 'cheat environment_variables --add'

 # CÓDIGO ORIGINAL:
 # system('start /b /MIN cmd /C Tasklist /v | Find "%tmp:~10%" >NUL')
 # ESTA PARTE HAY QUE MEJORARLA PARA QUE NO SE VEA LA CONSOLA

  system('Title MOVEMEBYELEKTRO & NirCMD win hide ititle "MOVEMEBYELEKTRO" & Tasklist /v | Find "%tmp:~10%" >NUL')

until $?.exitstatus.eql? 1 or $?.exitstatus.eql? 0
   sleep 0.1
end

  if $?.exitstatus.eql? 0
     reintentar($archivo.encode('utf-8').gsub("\û", "-"), ARGV[0])
  end

  if $?.exitstatus.eql? 1
     FileUtils.mv $archivo.encode('utf-8').gsub("\û", "-"), ARGV[0]
  end
 
rescue
  reintentar($archivo.encode('utf-8').gsub("\û", "-"), ARGV[0])
end
end