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

#7521
Hola

EDITO: Nada, no hagan caso de lo que digo más abajo, pueden eliminar o cerrar el tema, siento las molestias

Últimamente me ha dado por cambiarme el nick (me aburrí del antiguo y ahora me cuesta decidirme), el caso es que me gustaría poner "Elektro" a secas, pero el sistema me dice que ese nombre ya está establecido por otro usuario.

Yo nunca he visto otro Elektro en el foro, no sé, ¿Alguien de arriba podría verificar si existe ese usuario y, en caso de estar inactivo durante varios años pues... eliminar esa cuenta o cambiarle el nombre por otro parecido (cambiarle la K por la C) para poder cambiarme yo mi nombre?, no se si esto será mucho pedir pero no creo que deje de ser ético si se trata de una cuenta inactiva durante años... ¿no creen?.

¿Alguien puede decirme algo al respecto?

Un saludo!
#7522
Dudas Generales / Re: carpetas misteriosas.
29 Diciembre 2013, 03:25 AM
! Ahi qe ber qe pronto se hagarran a los fáyos hórtograficos, cuomo si ustèdes escriviesen un perdfecto díalekto ¡

Yo no lo veo motivo de burla por muy garrafal que sea el fallo (como es el caso), pero ...sí, vaya, ¡ vaya un personaje merecedor de una insignia Troll !.

Saludos!
#7523
Al final voy a acabar odiando los Listbox :silbar:

¿Que has intentado?

No entiendo muy bien lo que pretendes hacer (eso de combinar, pero no sumar ni adicionar?), te muestro la manera de concatenar dos listas de items en un tercer Listbox, añadiendo un "separador" entre cada lista (que si no me equivoco, ya las tienes agrupadas de 4 en 4).

Código (vbnet) [Seleccionar]
       Dim Items1 As List(Of String) = ListBox1.Items.Cast(Of String)().ToList
       Items1.Add("  ")

       Dim Items2 As List(Of String) = ListBox2.Items.Cast(Of String)().ToList
       Items2.Add("  ")

       Dim CombinedItems As List(Of String) = Items1.Concat(Items2).ToList

       ListBox3.Items.AddRange(CombinedItems.ToArray)


Saludos
#7524
No se si te das cuenta de la cantidad de conocimientos que se requieren para llevar a cabo esta tarea, además de la experiencia en intentos fallidos, si ...porque hookear APIS es lo que tiene, que por alguna chorrada insignificante un hook puede ir perféctamente en Windows XP, pero no funcionar en otra versión de Windows, y lo mismo con las arquitecturas, además entre las diferentes versiones de windows pueden modificar los parámetros de "X" funciones. Fíjate si es dificil que resulta necesario utilizar librerías de terceros para realizar estos hooks de forma decente los cuales ya se encargan de inyectar y etc...

Este campo no lo he tocado prácticamente nada, no vayas a pensar que soy un experto en el tema, los únicos hooks que he realizado han sido de bajo nivel con las funciones que la WinAPI proporciona para instalar los hooks, pero a lo que voy ...implementar ICopyHook sería una manera más limpia (y estable) sin necesidad de Hookear, y te permitiria tener control sobre los archivos eliminados desde el Explorer, pero sigue siendo una pesadilla llevarlo a cabo.

Ahora bien, hay otra alternativa mucho más facil que se me ha ocurrido, sirviéndote del FileSystemWatcher. No pongo la mano en el fuego de haberlo dejado 100% efectivo, deberías testear en profundidad lo que sucede cuando eliminas dos archivos/carpetas con el mismo nombre pero con distinta fecha de modificación para comprobar si se restaura la que se debe restaurar, yo solo te dejo la idea:

EDITO: Para proceder a usar el siguiente código necesitas referenciar Microsoft Shell Controls And Automation.
EDITO2: Le añadí un par de cosas más, y también lo documenté un poco mejor...
Código (vbnet) [Seleccionar]
Imports System.IO
Imports Shell32

Public Class Test

    Private SH As New Shell
    Private RecycleBin As Folder = SH.NameSpace(ShellSpecialFolderConstants.ssfBITBUCKET)
    Private WithEvents FSW As New FileSystemWatcher

    Private Shadows Sub Load() _
    Handles MyBase.Load

        ' Seteo las propiedades del objeto 'FileSystemWatcher'.
        With FSW
            .Path = "C:\Test"
            .IncludeSubdirectories = True
            .Filter = "*"
            .NotifyFilter = NotifyFilters.FileName Or NotifyFilters.DirectoryName
            .EnableRaisingEvents = True
        End With

    End Sub

    Private Sub OnItemDeleted(sender As FileSystemWatcher, e As FileSystemEventArgs) _
    Handles FSW.Deleted

        ' Almacenamos una colección de los items de la papelera de reciclaje.
        ' Tanto archivos, carpetas, y accesos directos .lnk (que no se tratan como archivos ni carpetas),
        ' cuyo nombre sea el mismo nombre que el elemento que se acaba de eliminar.
        ' Y los ordenamos por su fecha de modificación.
        Dim DeletedItems As IEnumerable(Of FolderItem) =
            RecycleBin.Items.Cast(Of FolderItem).
                             Where(Function(Item) Item.Name = e.Name).
                             OrderBy(Function(Item) Item.ModifyDate)

        ' Si hubiera más de un elemento con el mismo nombre,
        ' seleccionamos el último elemento que se eliminó (o al menos, eso se supone que debería suceder.)
        Dim LastDeletedItem As Shell32.FolderItem = DeletedItems.LastOrDefault

        If LastDeletedItem IsNot Nothing Then

            ' Esto es un simple checkeo por prevención,
            ' considero que solo hay un 0,00001% de posibilidades de que se de la condición...
            ' Esto podría deberse a que el usuario haya desecho manuálmente la acción de borrado (CTRL+Z),
            ' en un tiempo menor del que la aplicación ha procesado los elementos de la papelera.
            '
            ' También está el caso de las incontrolables acciones de terceros,
            ' Como por ejemplo el editor de texto 'Sublime Text', que al modificar un archivo,
            ' lo elimina dando un falso positivo.
            If (LastDeletedItem.IsFolder AndAlso Directory.Exists(e.FullPath)) _
               OrElse (Not LastDeletedItem.IsFolder AndAlso File.Exists(e.FullPath)) Then

                Throw New Exception(String.Format("¿ El elemento ha sido restaurado ?: {0}", e.FullPath))
                Exit Sub

            End If

            ' Invocamos el verbo "undelete" para deshacer la acción de borrado sin necesidad de escribir más isntrucciones.
            ' Otros verbos que se pueden usar por ejemplo "delete" para eliminar el elemento de forma permanente,
            ' u "open" para abrir las propiedades del elemento.
            LastDeletedItem.InvokeVerb("undelete")

            ' O bien hacemos otra cosa distinta, como por ejemplo un backup del archivo/directorio eliminado...
            '
            'Dim BackupPath = String.Format("C:\Backup\{0}", e.Name)
            '
            'Select Case LastDeletedItem.IsFolder
            '
            '    Case True
            '        FileIO.FileSystem.CopyDirectory(LastDeletedItem.Path, BackupPath,
            '                                        FileIO.UIOption.AllDialogs, FileIO.UICancelOption.ThrowException)
            '
            '    Case False
            '        FileIO.FileSystem.CopyFile(LastDeletedItem.Path, BackupPath,
            '                                   FileIO.UIOption.AllDialogs, FileIO.UICancelOption.ThrowException)
            '
            'End Select

        End If

    End Sub

End Class


Saludos
#7525
Dudas Generales / Re: carpetas misteriosas.
28 Diciembre 2013, 19:19 PM
En fín...
#7526
Cita de: alicia19es en 28 Diciembre 2013, 17:18 PMuser32.dll ... deletefile ...

Esa es precísamente una de las funciones que nombré: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915%28v=vs.85%29.aspx

Iguálmente deberías hookear esa función para interceptar cuando el SO llama a la función, pero ya puestos mejor prueba con NtSetFileInformation (se encuentra en la ntdll.dll) porque según he leido es la función por la que pasa cualquier método de eliminación (y otros), aunque está indocumentada así que mucha información no tengo, pero DeleteFile ahora que lo leo la documentación es posible que no tenga nada que ver con tu propósito puesto que no tiene parámetros para enviar a la papelera, es una función que debe estar limitada a la Shell (supongo).

Saludos
#7527
Veo que al final te serviste de VBS como te indiqué, aquí tienes una pequeña simplificación del código por si quieres:

Código (dos) [Seleccionar]
@ECHO OFF

For /F "Tokens=1-2 Delims=." %%X In (
'wmic.exe os get version ^| FINDSTR "[0-9]"'
) Do (

If %%X%%Y EQU 51 (
REM XP
set "COCO=%UserProfile%\Escritorio"
) Else (
REM Vista, 7, 8
set "COCO=%UserProfile%\Desktop"
)
)

(
Echo Set Link = WScript.CreateObject^("WScript.Shell"^).CreateShortcut^("%COCO%\Compensacion Bicentenario.lnk"^)
Echo With Link
Echo .TargetPath = "%PROGRAMFILES%\CompensacionBicentenario\1.5\BacosiRegional.jar"
Echo .WindowStyle = 1
Echo .IconLocation = "%PROGRAMFILES%\carpeta\1.5\BacosiRegional.jar"
Echo .WorkingDirectory = "%PROGRAMFILES%\CompensacionBicentenario\1.5\"
Echo .Save
Echo End With
) > "%TEMP%\ad.vbs"

Wscript.exe "%TEMP%\ad.vbs"

Exit /B 0


Saludos
#7528
No es nada facil, debes crear o bien un Hook Global (API Hook), o bien un driver (File System Filter Driver).

La función (indocumentada) NtSetFileInformation de la WinAPI es llamada para eliminar un archivo, con la estructura FileDispositionInformation ,
aunque también debes mirar la función DeleteFile, y no se si habrá otras, y luego está el uso de la interface ICopyHook que exclusívamente previene de la eliminación mediante la Shell.

Para intentar hookear la API puedes utilizar la librería Deviare, o EasyHook, mhook (c++), u otras. Hay varios ejemplos en Google tanto para VBNET como C#, aunque parece que todas las librerías tienen sus desventajas y bugs.

EDITO: En este ejemplo puedes hacerte una idea del modo de empleo de Easyhook junto a lo necesario para hookear dicha functión NtSetFileInformation.

Saludos.
#7529
Dudas Generales / Re: carpetas misteriosas.
27 Diciembre 2013, 19:59 PM
Cita de: -- KiLiaN -- en 26 Diciembre 2013, 17:51 PMProbablemente estes infectado con algun virus, pasale el antivirus y el antispyware a tu pc.

Cita de: jemez44 en 26 Diciembre 2013, 18:08 PMestoy resfriado. Lo he contado en forocoches.

Cita de: Lurker en 26 Diciembre 2013, 19:28 PMY a nosotros que coño nos importa si lo has contado en forocoches.??

Cita de: jemez44 en 26 Diciembre 2013, 20:12 PMtengo una invi...

Siempre intentando que te proporcionen ayuda con una indirecta sobre una (supuesta) invitación a forocoches, de verdad que eres muy cansino...

Como ya te han comentado, no nos importa en absoluto, es más, a mi me resulta patético, es como el que se registra con nombre de mujer para que le ayuden.

Saludos!
#7530
Scripting / Re: Problemas con Comando IF
27 Diciembre 2013, 19:45 PM
Esta linea:
Citar
Código (dos) [Seleccionar]
If not defined var (goto:menu)

La reemplazas por esta otra:
Código (dos) [Seleccionar]
If Not Defined VAR (Goto :MENU) ELSE (Goto :%VAR%)

Y eliminas todo esto:
Citar
Código (dos) [Seleccionar]
IF "%var%" = "%PECOMEXT%" GOTO:PECOMEXT
IF "%var%" = "%PEGARANT%" GOTO:PEGARANT
IF "%var%" = "%PEIMPORT%" GOTO:PEIMPORT
IF "%var%" = "%PEOPINTE%" GOTO:PEOPINTE
IF "%var%" = "%PETESORI%" GOTO:PETESORI
IF "%var%" = "%PETRANXT%" GOTO:PETRANXT
IF "%var%" = "%PEVALORE%" GOTO:PEVALORE
IF "%var%" = "%PECOMUNIC%" GOTO:PECOMUNIC

Si quieres simplificar más el código, puedes utilizar Call en lugar de Goto, y elimina todos los Pause/Exit, son innecesarios.

Saludos