ehoney
Usuario (Uruguay)
A veces estamos sincronizando gran cantidad de datos y queremos que la computadora se apague sola al terminar. Para eso escribí un programa en AutoHotkey. Aca pongo el código. Cualquiera puede bajarse el AutoHotKey y compilarlo. También modificarlo a su gusto. Prefiero esto en vez de poner el exe, porque me parece mas seguro. Aca el código: [color=#000000] DetectHiddenWindows, On #SingleInstance ignore TrayIcons(sExeName = "") { WinGet, pidTaskbar, PID, ahk_class Shell_TrayWnd hProc:= DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar) pProc:= DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4) idxTB:= GetTrayBar() SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_BUTTONCOUNT Loop, %ErrorLevel% { SendMessage, 0x417, A_Index-1, pProc, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_GETBUTTON VarSetCapacity(btn,32,0), VarSetCapacity(nfo,32,0) DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", &btn, "Uint", 32, "Uint", 0) iBitmap := NumGet(btn, 0) idn := NumGet(btn, 4) Statyle := NumGet(btn, 8) If dwData := NumGet(btn,12) iString := NumGet(btn,16) Else dwData := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64") DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", &nfo, "Uint", 32, "Uint", 0) If NumGet(btn,12) hWnd := NumGet(nfo, 0) , uID := NumGet(nfo, 4) , nMsg := NumGet(nfo, 8) , hIcon := NumGet(nfo,20) Else hWnd := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 8), nMsg:=NumGet(nfo,12) WinGet, pid, PID, ahk_id %hWnd% WinGet, sProcess, ProcessName, ahk_id %hWnd% WinGetClass, sClass, ahk_id %hWnd% If !sExeName || (sExeName = sProcess) || (sExeName = pid) VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2) , DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", &wTooltip, "Uint", 128*2, "Uint", 0) , DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0) , sTrayIcons .= "idx: " . A_Index-1 . " | idn: " . idn . " | Pid: " . pid . " | uID: " . uID . " | MessageID: " . nMsg . " | hWnd: " . hWnd . " | Class: " . sClass . " | Process: " . sProcess . "`n" . " | Tooltip: " . wTooltip . "`n" } DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000) DllCall("CloseHandle", "Uint", hProc) if InStr(sTooltip,"ropbox")>0 { Return sTooltip } Return wTooltip ;sTrayIcons } GetTrayBar() { ControlGet, hParent, hWnd,, TrayNotifyWnd1 , ahk_class Shell_TrayWnd ControlGet, hChild , hWnd,, ToolbarWindow321, ahk_id %hParent% Loop { ControlGet, hWnd, hWnd,, ToolbarWindow32%A_Index%, ahk_class Shell_TrayWnd If Not hWnd Break Else If hWnd = %hChild% { idxTB := A_Index Break } } Return idxTB } up2date(){ if (RegExMatch(TrayIcons("Dropbox.exe"), "Aktualisiert")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Up to date")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Actualizado")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "À jour")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Aggiornato")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Mutakhir")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Terkini")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Aktualny")>0) { Return true } if (RegExMatch(TrayIcons("Dropbox.exe"), "Atualizado")>0) { Return true } Return false } ;----------------------------------------------------------------------- Gui, Add, Text, x52 y20 w320 h50 +Center vDbstatus, starting... Gui, Font, S10 CDefault, Verdana Gui, Add, Button, x112 y70 w200 h50 , exit Gui, Show, x127 y87 h124 w414, Shutdown when Dropbox ist up to date ;----------------------------------------------------------------------- Seconds=30 altName=close otravez: output = % TrayIcons("Dropbox.exe") GuiControl,, Dbstatus,%output% if (up2date()){ Seconds-=1 GuiControl,, shutdown,shutdown in %Seconds% `n(click to cancel) GuiControl,, exit,shutdown in %Seconds% `n(click to cancel) if (Seconds<1) { Shutdown, 9 ExitApp } }else{ GuiControl,, shutdown,exit Seconds=30 sleep 1000 goto, otravez } ;----------------------------------------------------------------------- Buttonclose: Buttonshutdown: Buttonexit: GuiClose: ExitApp [/color] copiar y pegar en un archiv de texto .ahk. Luego compilarlo con AutoHotKey ( http://www.autohotkey.com/ )
Aunque esta página quiza sea poco vista desde Alemania, si alguno tiene parientes alli, puede pasarle el dato. Yo estando en Alemania lo he probado y funciona. Debes llamar a alguno de estos numeros en alemania: 069 3329 6633 0211 5399098 0201 8588 505 Luego te pide que marques el numero incluyendo el codigo de pais y completas con # (o el *) El costo de la llamada es el costo de cualquier llamada dentro de Alemania. Si tienes tarifa plana, entonces es gratis. Puedes hablar hasta 1 hora. Luego puedes volver a llamar. Fuente: http://www.tarife-fuer-ferngespraeche.de/teltarga.htm
Según dos físicos de la University of Nottingham,Edmund Copeland y Tony Padilla la suma de todos los números da -1/12. es decir 1+2+3+4+5+6+n=-1/12 Acá la explicación, que es matemáticamente correcta. Tomamos 3 formulas: A = 1 - 1 + 1 - 1 + 1 - 1 + … B = 1 - 2 + 3 - 4 + 5 - 6 + … C = 1 + 2 + 3 + 4 + 5 + 6 + … Empecemos con A: El resultado de A es 0 o 1, dado que la suma es infinita, tomamos el promedio: 1/2. Ahora sigamos con B. Calculemos cuando es 2*B. Para esto tomamos las dos series y las corremos un lugar. Esto es posible, porque se trata de sumas: 2*B = 1 - 2 + 3 - 4 + 5 - 6 + … + 1 - 2 + 3 - 4 + 5 + … __________________________ = 1 - 1 + 1 - 1 + 1 - 1 + … = A Si 2*B = A = 1/2 entonces B = 1/4 por último tomamos C y hacemos C - B: C - B = 1 + 2 + 3 + 4 + 5 + 6 + … -(1 - 2 + 3 - 4 + 5 - 6 + …) __________________________ = 0 + 4 + 0 + 8 + 0 + 12 + … Si a este resultado sacamos el factor 4: C - B = 4*(1 + 2 + 3 + 4 + 5 + 6 + …) lo que está entre paréntesis es C, por lo tanto: C - B = 4*C despejamos: 3*C = -B C = -B/3 C = -1/12 Acá la explicación (en inglés): link: http://www.youtube.com/watch?v=w-I6XTVZXww
Desde la introducción del iPhone se hizo famoso las touchscreen. El programa gratuito DesktopInTouch permite convertir cualquier monitor plano en touchscreen.En lugar de utilizar el mouse para manejar la computadora, se utilizan los dedos en el escritorio. DesktopInTouch mide los cambios de voltaje en la pantalla del monitor para determinar la posición exacta de los dedos.Las ventanas se pueden cerrar y mover con los dedos. Presentaciones y galerías de imágenes se manejan como en el iPhone. Especialmente con la música y los programas de 3D, el software muestra su fuerza con el software apropiado para jugar directamente en la pantalla.DesktopInTouch también trae consigo una interfaz de usuario personalizado. El software incluye un lector de huellas dáctiles que permite desbloquear la computadora sin ingresar la contraseña. En otra etapa de desarrollo, el software será capaz de medir la presión arterial directamente en el escritorio.Lo mejor de todo es que el software es totalmente gratuito y no necesita de ningun extra en hardware. link: http://www.youtube.com/watch?v=8aI3_6-s8Aghttp://desktopintouch.softonic.de/