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

#7541
Hola


1. No se ve ninguna imagen.

2 Tampoco se ve ninguna información sobre la excepción.


3. Este es el subforo equivocado, debiste postear esto en la sección .NET.

4. Al menos yo no pienso hacer el esfuerzo de examinar un código que no lleve sus etiquetas de código como mandan las normas (y con comentarios en frances).

Felices fiestas a todos lo que lean!
#7542
Código (dos) [Seleccionar]
@Echo OFF

Set "OldTextFile=Archivo.txt"
Set "NewTextFile=Nuevo Archivo.txt"

(
FOR /F "Usebackq Delims=" %%@ IN ("%OldTextFile%") DO (
Set "str=%%@"
Call Set "str=%%str:~1,-1%%"
Call Echo %%str%%
)
)> "%NewTextFile%"

Pause&Exit


Aunque sería conveniente que lo hicieses en cualquier otro lenguaje como por ejemplo VisualBasicScript:

Código (vb) [Seleccionar]
Set FSO = CreateObject("Scripting.FileSystemObject")

Set OldTextFile = FSO.OpenTextFile(".\Archivo.txt", 1)
Set NewTextFile = FSO.CreateTextFile(".\Nuevo Archivo.txt", 2)

TextContent = Split(OldTextFile.ReadAll(), vbCrLf)

For Each Item In TextContent

If Not Item = "" Then
NewTextFile.write(Mid(Item, 2, (Len(Item)-2)))
NewTextFile.write(vbCrLf)
End If

Next

OldTextFile.Close
NewTextFile.Close


EDITO:
Cita de: binario010101 en 25 Diciembre 2013, 22:51 PMtuve que usar las "" para que no se interpretara el primer >> y se creara el archivo mi.txt

En lugar de encerrar la cadena de texto entre comillas, símplemente podrías haber escapado los caracteres ilegales (^>^>), y así no tendrías la necesidad de convertir un archivo de texto.

Saludos
#7543
Símplemente estoy en contra de la discriminación que se ejerce a los moderadores ..."locales" como yo, que se han de buscar la vida como puedan en cualquier situación, por ejemplo tú y varias personas más del Staff creo que podeis entender mis motivos perféctamente porque he acudido en más de una ocasión a vosotros y también a el-brujo para solucionar cualquier cosa, la simple necesidad o impotencia de tener que solucioanr un problema "a lo lobo solitario" acudiendo/molestando a otro moderador que a su vez quizás tenga que acudir/molestar a otro compañero suyo ...es algo que me molesta mucho hacer (tanto por mi como por las terceras personas) como le molestaría a cualquier otro moderador al que le negasen el acceso a un lugar de moderadores para poder postear "X" problema o cualquier otra cosa.

Óbviamente mi crítica ha sido porque este es el único lugar donde he visto que existe esa desambiguación entre moderadores, no digo que otros lugares sean mejores ni peores, a mi me gusta EHN ...pero lo cierto es que a todos los moderadores se les debería recibir por igual y con la misma confianza pudiendo acceder así a un subforo de moderadores, es lo más normal del mundo y es como se hace, ¿Si al fín y al cabo tanto colaboradores como moderadores ayudamos y aportamos con la página, porque los moderadores "comunes" no pueden acceder a un subforo de moderación?, es algo que jamás entenderé, es como quitarle el instrumento a un músico, alguien que sabe hacer una cosa ...pero no le dan lo necesario para poder hacerlo lo mejor que sabe.

Quizás estos comentarios que acabo de hacer hubiera sido mejor hacerlos por privado, pero la cuestión es ...¿donde?, si como ya sabeis ni yo ni muchos otros tenemos un lugar parecido donde poder debatir estas cosas (u otras cosas que reálmente si tengan importancia), de lo que no cabe duda es que estamos en el subforo de 'Sugerencias y dudas del foro' así que a pesar de que ahora mismo acabo de invadir (sin querer) el post formulado por otro usuario ...creo que es el lugar idoneo para responder a tus aclaraciones, Simorg.

PD: Espero no causar problemas ni malas miradas de nadie con mi respuesta, pues símplemente he expresado mi opinión y además creo que lo hice con bastantes fundamentos. Ya no tengo nada más que expresar sobre el tema.

Un saludo!
#7544
Cita de: .:UND3R:. en 25 Diciembre 2013, 02:20 AMEfectivamente van a la papelera, en donde los colaboradores y moderadores pueden visualizarlo.

Quisiera aclarar que, por moderadores, solo pueden acceder los moderadores globales, como en el subforo de moderadores ...que por algún motivo se excluye a los moderadores corrientes (algo que siempre he desaprobado y en mi opinión es un gesto muy feo, pero bueno, solo lo comento).

Saludos!
#7545
Cualquier lenguaje te sirve para la tarea, estos son los pasos a seguir de una solución cualquiera:

1. Iterar los elementos dentro de la carpeta (un For/Loop/Búcle).

2. Usar expresiones regulares (RegEx) para capturar y reemplazar la cadena de texto en cada archivo.

3. Compartir el código realizado con los demás usuarios.

Saludos
#7546
Scripting / Re: Recursividad en batch
23 Diciembre 2013, 05:45 AM
Cita de: Slikp en 23 Diciembre 2013, 01:55 AMesto sucede por que no tengo la Aplicacion instalada y por ese motivo cada vez que intento abrir el archivo desde cualquier lugar debo especificarle con que aplicacion debe abrirse.

Exacto, al no tener la aplicación instalada, no existe ninguna asociación establecida para ese tipo de archivo específico que intentas abrir...

Si tu escribes este comando:
Código (dos) [Seleccionar]
Start /B "" "Archivo.elek"

...Sin tener la aplicación asociada que pueda abrir archivos con extensión "elek", la shell no va a saber que hacer ...mas que preguntarte por la aplicación en cuestión.

Tienes dos soluciones:

1. Especificar el programa al usar el comando Start, y pasarle el archivo como parámetro:

Código (dos) [Seleccionar]
Start /B "Título cualquiera" "\..\Ruta del pendrive\Programa.exe" "\..\Ruta del Archivo.elek"

\..\ equivale al directorio Root de la ubicación actual desde la que se ejecuta el Script (Ejemplo: "C:\"), así que no deberías tener problemas para localizar los archivos necesarios.

2. Crear una asociación para ese tipo de archivo, en este caso "elek".

Código (dos) [Seleccionar]
Assoc ".elek"="ElektroSoft"
Ftype "ElektroSoft"=".\Notepad.exe"
REM O bien con soporte para recibir parámetros:
REM Ftype "ElektroSoft"=".\Notepad.exe" "%%1" %%*


Código (dos) [Seleccionar]
Start /B "" "Archivo.elek"

Saludos.
#7547
EDIT:

I've seen again your question and I've noticed now one thing that I didn't noticed when I were writting my answer, so seems that you only wanted to hide the CLI arguments of the process?, well, you can still follow the solution below to hide the item entirelly, or you could adapt the code to your needs, but properly hacking the TaskManager process is not easy as you've seen.





Well, I'm not an expert about this but it's not kinda "click & go" ...this has any of ease, basically you'll need to write a hook and that really requires a lot of guru knowledges, and also depends on some things like your OS version.

BTW an easier way to manage this is by taking control of the TaskManager's child window where the listview is inside to find the item where the process that we want to hide is listed on it, and then hide it. The control refreshes itself so we need to hide again the item(s) in a specified interval, again and again. The best you can do is follow the solution below.

The code below is a little vb6lish because the original code snippet was written by another guy, I've only extended the main code (Time ago) adding a couple of new features but ATM I've never simplified the code to remove these annoying vb6lish parts, BTW this large code worked well in my scenario under Win7 TaskManager process. On Win8 all the things changes.

I've added a feature to hide more than one process at once, you can see all of this at the header usage examples.

Código (vbnet) [Seleccionar]
#Region " Hide Process From TaskManager "

' [ Hide Process From TaskManager ]
'
' // By Elektro H@cker
'
' Examples :
'
' Hide_Process_From_TaskManager.Processes_Names = {Process.GetCurrentProcess.ProcessName, "cmd", "notepad.exe"} ' Processes to hide.
' Hide_Process_From_TaskManager.Task_Manager_Window_Titles = {"Administrador de tareas de Windows", "Windows Task Manager"} ' Support for unknown TaskManager Window Titles.
' Hide_Process_From_TaskManager.Hide_Interval = 3 ' Hidding Interval.
' Hide_Process_From_TaskManager.Running = True  ' Start hidding processes.
' Hide_Process_From_TaskManager.Running = False ' Stop hidding processes.

#Region " Hide Process From TaskManager Class "

Imports Microsoft.Win32.SafeHandles
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.ComponentModel

Module Hide_Process_From_TaskManager

#Region " API's "

   Private Delegate Function EnumDelegate(ByVal lngHwnd As IntPtr, ByVal lngLParam As Integer) As Integer
   Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
   Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumDelegate, ByVal lParam As Integer) As Integer
   Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As IntPtr, ByVal lpString As System.Text.StringBuilder, ByVal cch As Integer) As Integer
   Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As IntPtr) As Integer
   Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

   <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
   Private Sub GetClassName(ByVal hWnd As System.IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer)
   End Sub

#End Region

#Region " Variables "

   ''' <summary>
   ''' The processses to hide from TaskManager.
   ''' Caution: The process name is Case-Sensitive.
   ''' </summary>
   Public Processes_Names() As String = {Process.GetCurrentProcess.ProcessName} ' The current process.

   ''' <summary>
   ''' The interval time in ms to hide the process from TaskManager.
   ''' Values greater than "5" can cause bad visual effects in TaskManager processes list.
   ''' </summary>
   Public Hide_Interval As Int32 = 3 ' ms

   ''' <summary>
   ''' The known Window Titles for Task Manager process.
   ''' This is necessary to work properly in all languages.
   ''' Add here your own Task Manager Window Tittle if is not inside.
   ''' Default support: Spanish, English, Deutsch
   ''' </summary>
   Public Task_Manager_Window_Titles() As String = { _
       "Administrador de tareas de Windows", _
       "Windows Task Manager", _
       "Windows Task-Manager", _
   }

   ''' <summary>
   ''' Gets the next process in the Processes_Names array to hide it.
   ''' Don't touch this.
   ''' </summary>
   Public MyProc As String

   Dim t As New Timer
   Dim hwnd As IntPtr
   Dim controls As String
   Dim ProcLV As IntPtr = IntPtr.Zero

   Private Const LVM_FIRST = &H1000
   Private Const LVM_DELETECOLUMN = LVM_FIRST + 28
   Private Const LVM_GETITEMCOUNT = (LVM_FIRST + 4)
   Private Const LVM_SORTITEMS = (LVM_FIRST + 48)
   Private Const LVM_DELETEITEM = (LVM_FIRST + 8)
   Private Const LVM_GETNEXTITEM = (LVM_FIRST + 12)
   Private Const LVM_GETITEM = (LVM_FIRST + 75)

#End Region

#Region " Properties "

   ''' <summary>
   ''' Turns ON/OFF the process hiding.
   ''' </summary>
   Public Property Running() As Boolean
       Get
           If t.Enabled = True Then
               Return True
           Else
               Return False
           End If
       End Get
       Set(ByVal value As Boolean)
           If value = True Then

               If Processes_Names.Length = 0 Then Throw New Exception("Processes_Names Array is empty.")
               If Hide_Interval <= 0 Then Throw New Exception("Hide_Interval value is too low, minimum value: 1")

               MyProc = Processes_Names(0)
               If Not t.Interval = Hide_Interval Then
                   With t
                       AddHandler t.Tick, AddressOf t_Tick
                       .Interval = Hide_Interval
                       .Enabled = True
                       .Start()
                   End With
               Else
                   t.Enabled = True
                   t.Start()
               End If
           Else
               t.Enabled = False
               t.Stop()
               ProcLV = IntPtr.Zero
           End If
       End Set
   End Property

#End Region

#Region " Timer Tick event "

   Private Sub t_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
       If ProcLV = IntPtr.Zero Then

           For Each Title In Task_Manager_Window_Titles
               hwnd = FindWindow(vbNullString, Title)
               If hwnd <> 0 Then
                   EnumChildWindows(hwnd, New EnumDelegate(AddressOf Hide_Process_From_TaskManager.EnumChildWindows), 0)
               End If
           Next

       Else
           GetListView(hwnd, ProcLV)
       End If
   End Sub

#End Region

#Region " Functions "

   ' EnumChildWindows
   Private Function EnumChildWindows(ByVal lngHwnd As IntPtr, ByVal lngLParam As Integer) As Integer
       Dim strClassName As String = ObtenerClase(lngHwnd)
       Dim strText As String = ObtenerTextoVentana(lngHwnd)
       If InStr(strClassName, "SysListView32") Then
           GetListView(hwnd, lngHwnd)
           If InStr(strText, "Procesos") Then
               ProcLV = lngHwnd
           End If
       End If
       Dim Classes As String = lngHwnd.ToString & ", " & strClassName & ", " & strText
       Return 1
   End Function

   ' ObtenerClase
   Private Function ObtenerClase(ByVal handle As IntPtr) As String
       Dim strClassName As New System.Text.StringBuilder()
       strClassName.Length = 255
       GetClassName(handle, strClassName, strClassName.Length)
       Return strClassName.ToString
   End Function

   ' ObtenerTextoVentana
   Private Function ObtenerTextoVentana(ByVal handle As IntPtr) As String
       Dim titleText As New System.Text.StringBuilder()
       titleText.Length = GetWindowTextLength(handle) + 1
       GetWindowText(handle, titleText, titleText.Length)
       Return titleText.ToString
   End Function

#End Region

End Module

Module GetItems

#Region " API's "

   ' OpenProcess
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function OpenProcess(ByVal dwDesiredAccess As UInteger, ByVal bInheritHandle As Boolean, ByVal dwProcessId As Integer) As SafeProcessHandle
   End Function

   ' ReadProcessMemoryW
   <DllImport(kernel32, EntryPoint:="ReadProcessMemory", SetLastError:=True, CharSet:=CharSet.Unicode)> _
   Private Function ReadProcessMemoryW(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As StringBuilder, ByVal nSize As Integer, ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' ReadProcessMemory
   <DllImport(kernel32, SetLastError:=True, CharSet:=CharSet.Ansi)> _
   Private Function ReadProcessMemory(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As StringBuilder, ByVal nSize As Integer, ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' ReadProcessMemory
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function ReadProcessMemory(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As LV_ITEM, ByVal nSize As Integer, ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' ReadProcessMemory
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function ReadProcessMemory(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As HDITEM, ByVal nSize As Integer, ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' ReadProcessMemory
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function ReadProcessMemory(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As IntPtr, ByVal nSize As Integer, ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' SendMessage
   <DllImport(user32, SetLastError:=True)> _
   Private Function SendMessage(ByVal hWnd As IntPtr, ByVal message As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
   End Function

   ' GetHeaderSendMessage
   <DllImport(user32, SetLastError:=True, EntryPoint:="SendMessageA")> _
   Private Function GetHeaderSendMessage(ByVal hWnd As IntPtr, ByVal message As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
   End Function

   ' SendMessage
   <DllImport(user32, SetLastError:=True)> _
   Private Function SendMessage(ByVal hWnd As IntPtr, ByVal message As UInteger, ByVal wParam As Integer, ByVal lParam As StringBuilder) As Integer
   End Function

   ' SendMessage
   <DllImport(user32, SetLastError:=True)> _
   Private Function SendMessage(ByVal hWnd As IntPtr, ByVal message As UInteger, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer
   End Function

   ' VirtualAllocEx
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function VirtualAllocEx(ByVal hProcess As SafeProcessHandle, ByVal lpAddress As IntPtr, ByVal dwSize As Integer, ByVal flAllocationType As UInteger, ByVal flProtect As UInteger) As IntPtr
   End Function

   ' VirtualFreeEx
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function VirtualFreeEx(ByVal hProcess As SafeProcessHandle, ByVal lpAddress As IntPtr, ByVal dwSize As Integer, ByVal dwFreeType As UInteger) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' WriteProcessMemory
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function WriteProcessMemory(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As LV_ITEM, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ' WriteProcessMemory
   <DllImport(kernel32, SetLastError:=True)> _
   Private Function WriteProcessMemory(ByVal hProcess As SafeProcessHandle, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As HDITEM, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

#End Region

#Region " Variables "

   Dim listViewHandle As IntPtr

   Public Const LVM_FIRST As UInteger = &H1000
   Public Const LVM_DELETEITEM As UInteger = (LVM_FIRST + 8)
   Public Const kernel32 As String = "kernel32"
   Public Const user32 As String = "user32"
   Public Const LVM_GETITEMCOUNT As UInteger = &H1004
   Public Const LVM_GETITEMTEXT As UInteger = &H102D
   Public Const LVM_GETHEADER As UInteger = &H101F
   Public Const HDM_GETIEMA As UInteger = &H1203
   Public Const HDM_GETITEMW As UInteger = &H120B
   Public Const HDM_GETITEMCOUNT As UInteger = &H1200
   Public Const HDM_GETUNICODEFORMAT As UInteger = &H2006
   Public Const HDI_TEXT As UInteger = 2
   Public Const MEM_COMMIT As UInteger = &H1000
   Public Const MEM_RELEASE As UInteger = &H8000
   Public Const PAGE_READWRITE As UInteger = 4
   Public Const PROCESS_VM_READ As UInteger = &H10
   Public Const PROCESS_VM_WRITE As UInteger = &H20
   Public Const PROCESS_VM_OPERATION As UInteger = &H8
   Public Const WM_GETTEXT As UInteger = &HD
   Public Const WM_GETTEXTLENGTH As UInteger = &HE

#End Region

#Region " Structures "

   <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
   Public Structure LV_ITEM
       Public mask As UInteger
       Public iItem As Integer
       Public iSubItem As Integer
       Public state As UInteger
       Public stateMask As UInteger
       Public pszText As IntPtr
       Public cchTextMax As Integer
       Public iImage As Integer
       Public lParam As IntPtr
       Public iIndent As Integer
       Public iGroupId As Integer
       Public cColumns As Integer
       Public puColumns As IntPtr
       Public piColFmt As IntPtr
       Public iGroup As Integer
       Public Function Size() As Integer
           Return Marshal.SizeOf(Me)
       End Function
   End Structure

   <StructLayout(LayoutKind.Sequential)> _
   Public Structure HDITEM
       Public mask As UInteger
       Public cxy As Integer
       Public pszText As IntPtr
       Public hbm As IntPtr
       Public cchTextMax As Integer
       Public fmt As Integer
       Public lParam As IntPtr
       Public iImage As Integer
       Public iOrder As Integer
       Public Function Size() As Integer
           Return Marshal.SizeOf(Me)
       End Function
   End Structure

#End Region

#Region " Functions "

   Public Function GetListView(ByVal handle As IntPtr, ByVal lvhandle As IntPtr) As Boolean
       listViewHandle = lvhandle
       Dim hParent As IntPtr = handle

       Dim id As Integer = -1
       Try
           For Each p In Process.GetProcessesByName("taskmgr")
               id = p.Id
           Next
           If id = -1 Then
               Throw New ArgumentException("Can't find process", "processName")
           End If
       Catch : Return False : End Try

       Dim hprocess As SafeProcessHandle = Nothing
       Try
           hprocess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, id)

           If hprocess Is Nothing Then
               If Marshal.GetLastWin32Error = 0 Then
                   Throw New System.ComponentModel.Win32Exception
               End If
           End If

           Dim itemCount As Integer = SendMessage(listViewHandle, LVM_GETITEMCOUNT, IntPtr.Zero, IntPtr.Zero)

           For row As Integer = 0 To itemCount - 1

               Dim lvi As New ListViewItem(GetItem(row, 0, hprocess))

               For Each processname In Processes_Names
                   MyProc = processname
                   If lvi.Text.Contains(Hide_Process_From_TaskManager.MyProc) Then SendMessage(listViewHandle, LVM_DELETEITEM, row, IntPtr.Zero)
               Next

           Next
       Catch : Return False
       Finally
           If hprocess IsNot Nothing Then
               hprocess.Close()
               hprocess.Dispose()
           End If

       End Try
       Return True
   End Function

   Public Function GetItem(ByVal row As Integer, ByVal subitem As Integer, _
                               ByVal hProcess As SafeProcessHandle) As String

       Dim lvitem As New LV_ITEM
       lvitem.cchTextMax = 260
       lvitem.mask = 1
       lvitem.iItem = row
       lvitem.iSubItem = subitem
       Dim pString As IntPtr
       Dim s As New StringBuilder(260)

       Try

           pString = VirtualAllocEx(hProcess, IntPtr.Zero, 260, MEM_COMMIT, PAGE_READWRITE)
           lvitem.pszText = pString
           Dim pLvItem As IntPtr
           Try
               pLvItem = VirtualAllocEx(hProcess, IntPtr.Zero, lvitem.Size, MEM_COMMIT, PAGE_READWRITE)
               Dim boolResult As Boolean = WriteProcessMemory(hProcess, pLvItem, lvitem, lvitem.Size, 0)
               If boolResult = False Then Throw New Win32Exception

               SendMessage(listViewHandle, LVM_GETITEMTEXT, row, pLvItem)
               boolResult = ReadProcessMemory(hProcess, pString, s, 260, 0)
               If boolResult = False Then Throw New Win32Exception
               boolResult = ReadProcessMemory(hProcess, pLvItem, lvitem, Marshal.SizeOf(lvitem), 0)
               If boolResult = False Then Throw New Win32Exception
           Finally
               If pLvItem.Equals(IntPtr.Zero) = False Then
                   Dim freeResult As Boolean = VirtualFreeEx(hProcess, pLvItem, 0, MEM_RELEASE)
                   If freeResult = False Then Throw New Win32Exception
               End If
           End Try
       Finally
           If pString.Equals(IntPtr.Zero) = False Then
               Dim freeResult As Boolean = VirtualFreeEx(hProcess, pString, 0, MEM_RELEASE)
               If freeResult = False Then Throw New Win32Exception
           End If
       End Try

       Return s.ToString

   End Function

   Friend NotInheritable Class SafeProcessHandle : Inherits SafeHandleZeroOrMinusOneIsInvalid

       Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean

       Public Sub New()
           MyBase.New(True)
       End Sub

       Public Sub New(ByVal handle As IntPtr)
           MyBase.New(True)
           MyBase.SetHandle(handle)
       End Sub

       Protected Overrides Function ReleaseHandle() As Boolean
           Return CloseHandle(MyBase.handle)
       End Function

   End Class

#End Region

End Module

#End Region

#End Region


Good luck.
#7548
Scripting / Re: Recursividad en batch
22 Diciembre 2013, 12:02 PM
Citar   Set /p ErrorLevel=                       Seleccione La Ubicacion O Departamento De Este Equipo (Ingrese Un Numero):

   choice.exe /M "                                                        Son correctos los datos Y o N? "
   If %ErrorLevel% EQU 2 ...

La integridad del código está complétamente mal.

1. El mensaje del comando Set /P debes encerrarlo entre comillas dobles como en el ejemplo que te puse (Para evitar en el futuro posibles errores/fallos humanos con caracteres ilegales, como los parentesis que lleva tu mensaje).

2. La variable %ErrorLevel% es una variable dinámica que devuelve el código de salida del último comando procesado, pero tu la estas reemplazando por una variable local que se llama exáctamente igual,
por ese motivo la pregunta booleana del comando Choice no te va a devolver un código de salida (1/2), te va a devolver el valor numérico que usaste para definir tu propia variable ErrorLevel en el comando Set /P.

Por algo te dije que debias reemplazar dicha variable.
Para solucionarlo símplemente vuelve a seguir los pasos que te indiqué ...pero esta vez hazlo al pie de la letra, crea una variable con un nombre distinto para usar en el comando SET /P y usa ese mismo nombre de variable como parámetro de la función "GetAnswer", y así el otro Choice [Y/N] te funcionará con la variable %ErrorLevel% corriente.

Saludos!
#7549
Cita de: DarkProgrammer en 21 Diciembre 2013, 21:22 PM
Disculpas por la demora.
Queria leer el source que me pasaste y me tira amenaza detectada el .exe, tendras el server infectado? , hay alguna posibilidad de que me lo subas sin el ejecutable?.

Gracias

Es un falso positivo, ¿porque símplemente no eliminas el exe y lo compilas tu mismo?, puedes examinar el source de arriba a abajo, o subir el exe a Anubis para detectar traces, verás q no hace nada

Saludos!
#7550
Scripting / Re: Recursividad en batch
21 Diciembre 2013, 09:39 AM
El comando choice en Windows XP, existe, en tu caso no se encontraba donde debería estar (quizás estés usando un Windows XP Lite, u otro motivo) pero por defecto viene incluido, y efectívamente la sintaxis del comando difiere de una version de Windows a otra, pero eso tiene facil solución, accediendo a la ayuda dle comando en tu versión de windows...

Choice /?

Como opciones del comando choice puedes usar valores numéricos desde el 0 hasta el 9, como valores alfabéticos desde la A a la Z, incluyendo caracteres de habla hispana como la ñ y la Ç trencada, áéíóú, àèìòù, así como äëïöü, lo que en total da posibilidad a más que 45 opciones.

Código (dos) [Seleccionar]
Choice.exe /C "¤€µ,¡¢£...Š•—,,‰‹"" /M "Selecciona una opcion"



No es un comando perfecto, no puedes usar "11", "12", !3", etc, esto es Batch.

Si prefieres hacerlo usando el comando Set /P para que todas las opciones sean numéricas, puedes hacerlo perféctamente, solo tienes que reemplazar el comando choice por Set /P, y reemplazar la variable ErrorLevel que uso cuando llamo a la función Getanswer, por la variable establecida por el comando Set /P.

Saludos