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

#1111
Cita de: rigorvzla en 29 Marzo 2018, 05:21 AMeh estado trabajando con la libreria SevenZip

No existe ninguna librería para .NET que se llame así, el nombre al que te refieres en realidad es SevenZipSharp, un wrapper de la librería de SevenZip (C/C++).

Cita de: rigorvzla en 29 Marzo 2018, 05:21 AMy me ah resultado tremenda

Bueno, a modo de advertencia te digo: deberías tener en cuenta que estás utilizando una librería obsoleta, siendo la última actualización del año 2012, y aparte, por experiencia en su utilización durante varios años (dejé de usarla hace ya tiempo) te puedo decir que esa librería está llena de bugs conocidos que nunca fueron corregidos por el autor, y limitaciones/características que no son del todo soportadas.

De todas formas siempre es mucho mejor recurrir a la libreria de SevenZipSharp que ponerse a desarrollar un algoritmo de compresión basado en la ejecución de 7zip.exe, pero mejor todavía sería que implementases tu propio wrapper de la librería 7zip.dll para cumplir tus necesidades (puedes tomar como ejemplo todo el P/Invoking de la librería de SevenZipSharp ).

Para operaciones de compresión muy puntuales siempre viene bien SevenZipSharp, cumple su función, al igual que lo hace la librería DotNetZip, pero si buscas algo más actualizado y desarrollado por grandes programadores (los mismos que desarrollaron la IDE 'SharpDevelop') entonces quizás quieras plantearte olvidar esas librerías y empezar a utilizar SharpZipLib en su lugar: https://github.com/icsharpcode/SharpZipLib




Con respecto al error que tienes, si por el nombre de la propiedad "directorioComprimidos" debemos asumir que a dicha propiedad le estás asignando la ruta de un directorio (ej. "C:\") entonces creo que es algo evidente donde, cual, y por qué motivo estás teniendo un error...

Citar
Código (csharp) [Seleccionar]
File.Create(Settings.Default.directorioComprimidos)

El método File.Create(), como su propio nombre indica por si mismo tiene el propósito de crear archivos, no directorios; para eso utiliza el método Directory.Create(). Cuando le pasas la ruta de un directorio existente al método File.Create(), salta la misma excepción que ya has mencionado.

Aparte de eso, en el código original que has mostrado, el método CompressDirectory() tiene especificado como segundo argumento un nombre de archivo, un argumento de tipo string:
Citar
Código (csharp) [Seleccionar]
tmp.CompressDirectory(folderToZip, @"test.7z");

sin embargo, tú le estás intentando pasar un stream como argumento:
Citar
Código (csharp) [Seleccionar]
tmp.CompressDirectory(folderToZip, File.Create(Settings.Default.directorioComprimidos));
(y además, aparte de eso, como ya habiamos explicado, aparentemente intentas pasarle la ruta de un directorio al método File.Create)

Si eso que estás intentando hacer no te genera un error en tiempo de compilación entonces perfecto, significará que existe una sobrecarga del método CompressDirectory la cual si acepta un stream como argumento, yo hace mucho que no utilizo SevenZipSharp así que ahora mismo no recuerdo ese detalle, pero sin embargo sigue habiendo un problema de todas formas, y es que no te estás asegurando de liberar el stream, y eso es malo, muy malo, por que te estarías dejando abierto el controlador del archivo que creases, y con ello te estarías auto-impidiendo el acceso de lectura y escritura a ese archivo en tu propia aplicación... ya que no te guardas la referencia en ningún lado para poder manipular el stream.

para evitar que eso suceda, debes utilizar la directiva using:
Código (csharp) [Seleccionar]
// ...
using (FileStream fs = File.Create(@"C:\File.7z")) {
   tmp.CompressDirectory(folderToZip, fs);
}
// ...


...o en su defecto llamar al método FileStream.Close() en la referencia del objeto devuelto:
Código (csharp) [Seleccionar]
FileStream fs = File.Create(@"C:\File.bin");
tmp.CompressDirectory(folderToZip, fs);
fs.Close();


Por último déjame darte un consejo general: cuando trabajes con clases que no hayas usado antes, o clases con las que no tengas mucha experiencia, comprueba siempre si expone un método con nombre 'Close' o 'Dispose', y si lo tiene entonces sigue el ejemplo de uso que te acabo de indicar, ya que se trata de una clase que implementa la interfáz IDisposable, y esto significa que la instancia de dicha clase genera recursos no administrados que deben liberarse (aunque no todas las clases que implementan IDisposable requieren estrictamente que llames al méttodo Dispose, pero mejor hacerlo), de lo contrario ocurren problemas, en algunas ocasiones son problemas graves (como este, no liberar el handle/controlador de un archivo), y en otras ocasiones causan "simples" fugas de memoria...

Saludos!
#1112
¿Cómo determinar el porcentaje de escala de grises (a.k.a Grayscale ) en una imagen?

El siguiente algoritmo sirve para determinar el porcentaje de presencia de escala de grises en una imagen, y con ese pocertaje el programador puede tener la libertad de considerar si la imagen es en escala de grises o no lo es; por ejemplo si una imagen de 256x256px de compone de un 80% de píxeles con color en escala de grises (es decir ROJO = VERDE = AZUL), quizás queramos tratar ese tipo de imagen como una imagen en escala de grises, aunque solo lo sea parcialmente.

La necesidad de usar esta metodología basada en porcentajes tiene un buen motivo, y es que cualquier imagen desaturada probablemente la querramos considerar como una imagen en escala de grises, aunque por definición no lo sea, como por ejemplo estas imagenes de aquí abajo las cuales NO son en escala de grises (la paleta entera de colores)...





son imágenes desaturadas pero probablemente ese tipo de imágenes las querramos considerar como escala de grises en muchos escenarios para diferenciarlas del resto de imágenes...¿verdad?, es por ello que este tipo de metodología me pareció más útil y versatil para necesidades generales, aunque obviamente es un procedmiento más lento que otros al tener que analizar pixel por pixel para calcular un porcentaje de presencia de píxeles en escala de grises...

En fin, aquí abajo os dejo el código, pero debo avisar de que todavía NO está del todo acabado ni perfeccionado, me falta refactorizarlo y arreglar algunas pequeñas cosas, como por ejemplo aumentar la compatibilidad de formatos, analizar los píxeles del padding del stride ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa473780(v=vs.85).aspx ), y tener en cuenta imágenes GIF con múltiples dimensiones (que no frames). Pero por el momento este código es algo que funciona bien para obtener los resultados esperados dentro de un margen de error aceptable, así que es una solución más que suficiente para los escenarios más simples y comunes.

EDITO: código mejorado
Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Analyzes each pixel of the spcified image, counts all the pixels that are within the grayscale RGB range,
''' then calculates a percentage of the total grayscale presence in the image.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' For Each file As FileInfo In New DirectoryInfo("C:\Images").EnumerateFiles("*.gif", SearchOption.TopDirectoryOnly)
'''
'''     Using img As Image = Image.FromFile(file.FullName)
'''         Dim percent As Double = GetGrayScalePixelPercentOfImage(img)
'''         Dim strFormat As String = String.Format("[{0,6:F2} %]: {1}", percent, file.Name)
'''
'''         Console.WriteLine(strFormat)
'''     End Using
'''
''' Next file
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <param name="img">
''' The source image.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' The resulting percentage of grayscale pixels in the source image.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Shared Function GetGrayScalePixelPercentOfImage(ByVal img As Image) As Double
   Return GetGrayScalePixelPercentOfImage(img, dimensionIndex:=0)
End Function

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Analyzes each pixel of the spcified image, counts all the pixels that are within the grayscale RGB range,
''' then calculates a percentage of the total grayscale presence in the image.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' For Each file As FileInfo In New DirectoryInfo("C:\Images").EnumerateFiles("*.gif", SearchOption.TopDirectoryOnly)
'''
'''     Using img As Image = Image.FromFile(file.FullName)
'''         Dim percent As Double = GetGrayScalePixelPercentOfImage(img, dimensionIndex:=0)
'''         Dim strFormat As String = String.Format("[{0,6:F2} %]: {1}", percent, file.Name)
'''
'''         Console.WriteLine(strFormat)
'''     End Using
'''
''' Next file
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <param name="img">
''' The source image.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' The resulting percentage of grayscale pixels in the source image.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Shared Function GetGrayScalePixelPercentOfImage(ByVal img As Image, ByVal dimensionIndex As Integer) As Double

   Select Case img.PixelFormat

       Case Imaging.PixelFormat.Format16bppGrayScale
           Return 100.0R

       Case Else
           Dim bmp As Bitmap = DirectCast(img, Bitmap)

           Dim pixelFormat As Imaging.PixelFormat = Imaging.PixelFormat.Format32bppArgb
           Dim bytesPerPixel As Integer = 4 ' PixelFormat.Format32bppArgb
           Dim pixelCount As Integer = (bmp.Width * bmp.Height)

           Dim framesGrayscalePercents As New List(Of Double)

           Dim dimensionCount As Integer = bmp.FrameDimensionsList.Count
           If (dimensionIndex > (dimensionCount - 1))Then
               Throw New IndexOutOfRangeException("The specified 'dimensionIndex' value is greater than the dimension count in the source image.")
           End If

           Dim frameDimension As New FrameDimension(bmp.FrameDimensionsList(dimensionIndex))
           Dim frameCount As Integer = bmp.GetFrameCount(frameDimension)

           For frameIndex As Integer = 0 To (frameCount - 1)

               bmp.SelectActiveFrame(frameDimension, frameIndex)

               ' Lock the bitmap bits.
               Dim rect As New Rectangle(Point.Empty, bmp.Size)
               Dim bmpData As BitmapData = bmp.LockBits(rect, ImageLockMode.ReadOnly, pixelFormat)

               ' Get the address of the first row.
               Dim address As IntPtr = bmpData.Scan0

               ' Declare an array to hold the bytes of the bitmap.
               Dim numBytes As Integer = (Math.Abs(bmpData.Stride) * rect.Height)
               Dim rawImageData As Byte() = New Byte(numBytes - 1) {}

               ' Copy the RGB values into the array.
               Marshal.Copy(address, rawImageData, 0, numBytes)

               ' Unlock the bitmap bits.
               bmp.UnlockBits(bmpData)

               ' Iterate the pixels.
               Dim grayscalePixelCount As Long ' of current frame.
               For i As Integer = 0 To (rawImageData.Length - bytesPerPixel) Step bytesPerPixel

                   ' Dim alpha As Byte = rawImageData(i + 3)
                   Dim red As Byte = rawImageData(i + 2)
                   Dim green As Byte = rawImageData(i + 1)
                   Dim blue As Byte = rawImageData(i)

                   If (red = green) AndAlso (green = blue) AndAlso (blue = red) Then
                       grayscalePixelCount += 1
                   End If

               Next i

               Dim frameGrayscalePercent As Double = ((grayscalePixelCount / pixelCount) * 100)
               framesGrayscalePercents.Add(frameGrayscalePercent)

               grayscalePixelCount = 0
           Next frameIndex

           Return (framesGrayscalePercents.Sum() / frameCount)

   End Select

End Function


Ejemplo de uso:
Código (vbnet) [Seleccionar]
For Each file As FileInfo In New DirectoryInfo("C:\Images").EnumerateFiles("*.gif", SearchOption.TopDirectoryOnly)

   Using img As Image = Image.FromFile(file.FullName)
       Dim percent As Double = GetGrayScalePixelPercentOfImage(img)
       Dim strFormat As String = String.Format("[{0,6:F2} %]: {1}", percent, file.Name)

       Console.WriteLine(strFormat)
   End Using

Next file


Salida de ejecución:
Cita de: Visual Studio
...
[100.00%]: 3066279034_22e5cf9106_o.gif
[  0.00%]: 32.gif
[  3.30%]: 3680650203a3998289_f47a.gif
[  8.11%]: 3Gg9L8.gif
[100.00%]: 3mp3z4riv4.gif
[  1.14%]: 4291d5bb0f6574cdd24dfbf8962f2f28-p1.gif
[  2.22%]: 4e3149ff0114b_af0234434ffb9e48ce1edc3af6ce1a2c.gif
[ 13.42%]: 4e4d24314abf8_d4acae20ee9fe20f019927b098a8e8e6.gif
[ 28.13%]: 4e7b20c8d03fc_e93059b97d764b1681534f714c318ba7.gif
[  4.43%]: 4e92c46d124de_aa5135da3b32b8eee8a80aa2a2550f5d.gif
[  0.68%]: 5055.gif
[100.00%]: 506c602fd749e_a2c439e67bf77d03ba94a914d8927f4a.gif
[100.00%]: 511d0b2580b20_abd567e0d431dd00bb7bc162eb4d171c.gif
[  2.34%]: 520374123e3d3_285a501b39852024a053090a304647ca.gif
[  2.74%]: 543ea44def8f2_a3e09112b3710ce306ddf167991604e1.gif
...







¿Cómo determinar si una imagen está en escala de grises?

Si buscan una solución más sofisticada que la mia hecha en WinForms, recomiendo encarecidamente usar este código en WPF:


Su solución y la mia tienen distintos objetivos aunque a priori parezcan "lo mismo", su solución tiene como propósito determinar si una imagen es en escala de grises por definición, mientras que la mia lo que hace es determinar el porcentaje de presencia de píxeles en escala de grises de una imagen, y por ello su solución devolverá resultados "inesperados" según el tipo de imagen (imagen en blanco y negro, en colores vivos, escala de grises, o simples imagenes desaturadas), pero eso no quita que su solución sea EXCELENTE, de hecho, es mucho mejor que mi solución en el caso de que no deseamos considerar imágenes desaturadas como escala de grises sino que solo queramos trabajar con imágenes en escala de grises por definición técnica.

Saludos!
#1113
Cita de: Meta en 27 Marzo 2018, 21:46 PM¿Es posible hacer en modo consola o tiene que ser si o si con Windows Form?

Tanto en tu código como en el del ejemplo de MSDN faltaría por declarar el método 'pd_PrintPage' que controla el evento 'PrintDocument.PrintPage' para poder controlar la impresión de la página (la fuente de texto, tamaño, color, márgenes, etcétera):
Citar
Código (csharp) [Seleccionar]
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
...de lo contrario no haces nada.

Aquí tienes una solución reusable, adaptable, y muy sencilla de usar:

para saber como usar la clase, mira el ejemplo del 'modo de empleo' que escribí debajo de la clase PrintDocumentBasic en ese mmismo post.
no hace falta mencionar que puedes usar cualquier conversor de código VB.NET a C# para convertir la clase PrintDocumentBasic.

PD: recuerda que también puedes imprimir documentos con la librería de clases de WPF, lo cual sería mucho más sofisticado que usar los miembros de GDI+.

Saludos.
#1114
¿Cómo imprimir documentos de texto de forma sencilla?.

He hecho dos versiones, una básica, y la otra avanzada.

PrintDocumentBasic
Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Prints a text document.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <seealso cref="IDisposable" />
''' ----------------------------------------------------------------------------------------------------
Public Class PrintDocumentBasic : Implements IDisposable

#Region " Private Fields "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' A <see cref="StreamReader"/> instance that encapsulates the document data to be read and printed.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Protected documentStream As StreamReader

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' The <see cref="System.Drawing.Printing.PrintDocument"/> component to print the document.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Protected WithEvents PrintDocument As PrintDocument

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' The <see cref="System.Drawing.Printing.PrinterSettings"/> instance that specifies
   ''' information about how a document is printed, including the printer that prints it.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Protected PrinterSettings As PrinterSettings

#End Region

#Region " Properties "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets the document file path.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The document file path.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public ReadOnly Property Filepath As String

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the text encoding.
   ''' <para></para>
   ''' If no encoding is specified, the default system encoding will be used.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The text encoding.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property Encoding As Encoding

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the name of the printer device.
   ''' <para></para>
   ''' If no printer name is specified, the default printer device will be used.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The name of the printer device.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property PrinterName As String
       Get
           Return Me.printerNameB
       End Get
       Set(ByVal value As String)
           If Not String.IsNullOrEmpty(value) Then
               Me.PrinterSettings.PrinterName = Me.PrinterName
           Else
               ' Reset the 'PrinterSettings.PrinterName' property to avoid 'PrinterSettings.IsValid' return False.
               Me.PrinterSettings = New PrinterSettings()
           End If
       End Set
   End Property
   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' ( Backing Field )
   ''' <para></para>
   ''' The name of the printer device.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Private printerNameB As String

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the text font.
   ''' <para></para>
   ''' Default font is: [Font: Name=Arial, Size=10, Units=3, GdiCharSet=1, GdiVerticalFont=False]
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The text font.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property Font As Font

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the text color.
   ''' <para></para>
   ''' Default color is: <see cref="System.Drawing.Color.Black"/>
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The text color.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property Color As Color

#End Region

#Region " Constructors "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Prevents a default instance of the <see cref="PrintDocumentBasic"/> class from being created.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerNonUserCode>
   Private Sub New()
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Initializes a new instance of the <see cref="PrintDocumentBasic"/> class.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="filepath">
   ''' The document file path.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="FileNotFoundException">
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Sub New(ByVal filepath As String)
       Me.New(filepath, encoding:=Nothing)
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Initializes a new instance of the <see cref="PrintDocumentBasic"/> class.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="filepath">
   ''' The document file path.
   ''' </param>
   '''
   ''' <param name="encoding">
   ''' The text encoding.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="FileNotFoundException">
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Sub New(ByVal filepath As String, ByVal encoding As Encoding)
       Me.PrintDocument = New PrintDocument() With {
           .DocumentName = filepath
       }

       Me.Filepath = filepath
       Me.Color = Color.Black

       Me.PrinterName = ""

       If (encoding Is Nothing) Then
           Me.documentStream = New StreamReader(filepath, detectEncodingFromByteOrderMarks:=True)
           Me.Encoding = Me.documentStream.CurrentEncoding
       Else
           Me.Encoding = encoding
           Me.documentStream = New StreamReader(filepath, encoding, detectEncodingFromByteOrderMarks:=False)
       End If
   End Sub

#End Region

#Region " Public Methods "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Prints the current document.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="IOException">
   ''' No printer device is installed.
   ''' </exception>
   '''
   ''' <exception cref="ArgumentException">
   ''' Printer name is not valid.
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Overridable Sub Print()

       If (PrinterSettings.InstalledPrinters.Count = 0) Then
           Throw New IOException("No printer device is installed.")
       End If

       If Not String.IsNullOrEmpty(Me.PrinterSettings.PrinterName) AndAlso Not (Me.PrinterSettings.IsValid) Then
           Throw New Exception("Printer name is not valid.")
       End If

       Me.PrintDocument.PrinterSettings = Me.PrinterSettings
       Me.PrintDocument.Print()

   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Cancels the print job for the current document.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="Exception">
   ''' Print job not found.
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Overridable Sub CancelPrint()

       Dim scope As New ManagementScope("root\CIMV2")
       Dim query As New SelectQuery(String.Format("SELECT * FROM Win32_PrintJob WHERE Document = '{0}'", Me.PrintDocument.DocumentName))
       Dim options As New EnumerationOptions With {
               .ReturnImmediately = True,
               .Rewindable = False,
               .DirectRead = True,
               .EnumerateDeep = False
           }

       Using mos As New ManagementObjectSearcher(scope, query, options),
             moc As ManagementObjectCollection = mos.Get()

           If (moc.Count = 0) Then
               Throw New Exception("Print job not found.")
           End If

           For Each mo As ManagementObject In moc
               mo.Delete()
           Next mo

       End Using

   End Sub

#End Region

#Region " Event-Handlers "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Handles the <see cref="System.Drawing.Printing.PrintDocument.BeginPrint"/> event
   ''' of the <see cref="PrintDocumentBasic.PrintDocument"/> component.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="sender">
   ''' The source of the event.
   ''' </param>
   '''
   ''' <param name="e">
   ''' The <see cref="PrintEventArgs"/> instance containing the event data.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepperBoundary>
   Protected Overridable Sub PrintDocument_BeginPrint(ByVal sender As Object, ByVal e As PrintEventArgs) Handles PrintDocument.BeginPrint
       If (Me.Font Is Nothing) Then
           Me.Font = New Font("Arial", 10.0F, FontStyle.Regular)
       End If
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Handles the <see cref="System.Drawing.Printing.PrintDocument.QueryPageSettings"/> event
   ''' of the <see cref="PrintDocumentBasic.PrintDocument"/> component.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="sender">
   ''' The source of the event.
   ''' </param>
   '''
   ''' <param name="e">
   ''' The <see cref="QueryPageSettingsEventArgs"/> instance containing the event data.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepperBoundary>
   Protected Overridable Sub PrintDocument_QueryPageSettings(ByVal sender As Object, ByVal e As QueryPageSettingsEventArgs) Handles PrintDocument.QueryPageSettings

   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Handles the <see cref="System.Drawing.Printing.PrintDocument.PrintPage"/> event
   ''' of the <see cref="PrintDocumentBasic.PrintDocument"/> component.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="sender">
   ''' The source of the event.
   ''' </param>
   '''
   ''' <param name="e">
   ''' The <see cref="PrintPageEventArgs"/> instance containing the event data.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepperBoundary>
   Protected Overridable Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles PrintDocument.PrintPage

       ' Page settings.
       Dim brush As New SolidBrush(Me.Color)
       Dim stringFormat As New StringFormat()
       Dim leftMargin As Single = e.MarginBounds.Left
       Dim topMargin As Single = e.MarginBounds.Top

       ' Calculate the number of lines per page.
       Dim linesPerPage As Single = (e.MarginBounds.Height / Me.Font.GetHeight(e.Graphics))

       ' Iterate over the file, printing each line.
       Dim line As String = Nothing
       Dim count As Integer
       While (count < linesPerPage)
           line = Me.documentStream.ReadLine()
           If (line Is Nothing) Then
               Exit While
           End If
           Dim yPos As Single = (topMargin + count * Me.Font.GetHeight(e.Graphics))
           e.Graphics.DrawString(line, Me.Font, brush, leftMargin, yPos, stringFormat)
           count += 1
       End While

       brush.Dispose()
       stringFormat.Dispose()

       ' If more lines exist, print another page.
       e.HasMorePages = (line IsNot Nothing)

   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Handles the <see cref="System.Drawing.Printing.PrintDocument.EndPrint"/> event
   ''' of the <see cref="PrintDocumentBasic.PrintDocument"/> component.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="sender">
   ''' The source of the event.
   ''' </param>
   '''
   ''' <param name="e">
   ''' The <see cref="PrintEventArgs"/> instance containing the event data.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepperBoundary>
   Protected Overridable Sub PrintDocument_EndPrint(ByVal sender As Object, ByVal e As PrintEventArgs) Handles PrintDocument.EndPrint

   End Sub

#End Region

#Region " IDisposable Implementation "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Flag to detect redundant calls when disposing.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Private isDisposed As Boolean = False

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Releases all the resources used by this <see cref="PrintDocumentBasic"/> instance.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Sub Dispose() Implements IDisposable.Dispose
       Me.Dispose(isDisposing:=True)
       GC.SuppressFinalize(obj:=Me)
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="isDisposing">
   ''' <see langword="True"/>  to release both managed and unmanaged resources;
   ''' <see langword="False"/> to release only unmanaged resources.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Protected Overridable Sub Dispose(ByVal isDisposing As Boolean)

       If (Not Me.isDisposed) AndAlso (isDisposing) Then
           If (Me.PrintDocument IsNot Nothing) Then
               Me.PrintDocument.Dispose()
               Me.PrintDocument = Nothing
           End If

           If (Me.documentStream IsNot Nothing) Then
               Me.documentStream.Close()
               Me.documentStream = Nothing
           End If

           If (Me.Font IsNot Nothing) Then
               Me.Font.Dispose()
               Me.Font = Nothing
           End If

       End If

       Me.isDisposed = True

   End Sub

#End Region

End Class


MODO DE EMPLEO:
Código (vbnet) [Seleccionar]
Using printBasic As New PrintDocumentBasic("C:\Document.txt", Encoding.Default)
   printBasic.PrinterName = ""
   printBasic.Font = New Font("Arial", 10.0F, FontStyle.Regular)
   printBasic.Color = Color.Black

   printBasic.Print()
   ' printBasic.CancelPrint()
End Using





PrintDocumentExpert
Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Prints a text document.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <seealso cref="IDisposable" />
''' ----------------------------------------------------------------------------------------------------
Public Class PrintDocumentExpert : Implements IDisposable

#Region " Private Fields "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' The <see cref="System.Drawing.Printing.PrintDocument"/> component to print the document.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Protected WithEvents PrintDocument As PrintDocument

#End Region

#Region " Properties "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets the document file path.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The document file path.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public ReadOnly Property Filepath As String

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the text encoding.
   ''' <para></para>
   ''' If no encoding is specified, the default system encoding will be used.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The text encoding.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property Encoding As Encoding

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the <see cref="StreamReader"/> instance that encapsulates the document data to be read and printed.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The <see cref="StreamReader"/> instance that encapsulates the document data to be read and printed.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public ReadOnly Property DocumentStream As StreamReader

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the <see cref="System.Drawing.Printing.PrinterSettings"/> instance that specifies
   ''' information about how a document is printed, including the printer that prints it.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The <see cref="System.Drawing.Printing.PrinterSettings"/> instance that specifies
   ''' information about how a document is printed, including the printer that prints it.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property PrinterSettings As PrinterSettings

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the <see cref="System.Drawing.Printing.PrintEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.BeginPrint"/> event.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The <see cref="System.Drawing.Printing.PrintEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.BeginPrint"/> event.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property BeginPrintEventHandler As PrintEventHandler

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the <see cref="System.Drawing.Printing.QueryPageSettingsEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.BeginPrint"/> event.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The <see cref="System.Drawing.Printing.PrintEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.QueryPageSettings"/> event.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property QueryPageSettingsEventHandler As QueryPageSettingsEventHandler

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the <see cref="System.Drawing.Printing.PrintPageEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.PrintPage"/> event.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The <see cref="System.Drawing.Printing.PrintPageEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.PrintPage"/> event.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property PrintPageEventHandler As PrintPageEventHandler

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets or sets the <see cref="System.Drawing.Printing.PrintEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.BeginPrint"/> event.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <value>
   ''' The <see cref="System.Drawing.Printing.PrintEventHandler"/> delegate method to handle the
   ''' <see cref="System.Drawing.Printing.PrintDocument.EndPrint"/> event.
   ''' </value>
   ''' ----------------------------------------------------------------------------------------------------
   Public Property EndPrintEventHandler As PrintEventHandler

#End Region

#Region " Constructors "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Prevents a default instance of the <see cref="PrintDocumentExpert"/> class from being created.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerNonUserCode>
   Private Sub New()
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Initializes a new instance of the <see cref="PrintDocumentExpert"/> class.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="filepath">
   ''' The document file path.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="FileNotFoundException">
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Sub New(ByVal filepath As String)
       Me.New(filepath, encoding:=Nothing)
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Initializes a new instance of the <see cref="PrintDocumentExpert"/> class.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="filepath">
   ''' The document file path.
   ''' </param>
   '''
   ''' <param name="encoding">
   ''' The text encoding.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="FileNotFoundException">
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Sub New(ByVal filepath As String, ByVal encoding As Encoding)
       Me.PrintDocument = New PrintDocument() With {
           .DocumentName = filepath
       }

       Me.Filepath = filepath

       If (encoding Is Nothing) Then
           Me.DocumentStream = New StreamReader(filepath, detectEncodingFromByteOrderMarks:=True)
           Me.Encoding = Me.DocumentStream.CurrentEncoding
       Else
           Me.Encoding = encoding
           Me.DocumentStream = New StreamReader(filepath, encoding, detectEncodingFromByteOrderMarks:=False)
       End If
   End Sub

#End Region

#Region " Public Methods "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Prints the current document.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="IOException">
   ''' No printer device is installed.
   ''' </exception>
   '''
   ''' <exception cref="Exception">
   ''' Printer name is not valid.
   ''' </exception>
   '''
   ''' <exception cref="Exception">
   ''' The 'PrintDocumentExpert.PrintPageEventHandler' property must be set before calling the 'PrintDocumentExpert.Print()' method.
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Overridable Sub Print()

       If (PrinterSettings.InstalledPrinters.Count = 0) Then
           Throw New IOException("No printer device is installed.")
       End If

       If Not String.IsNullOrEmpty(Me.PrinterSettings.PrinterName) AndAlso Not (Me.PrinterSettings.IsValid) Then
           Throw New Exception("Printer name is not valid.")
       End If

       If (Me.PrintPageEventHandler Is Nothing) Then
           Throw New Exception("The 'PrintDocumentExpert.PrintPageEventHandler' property must be set before calling the 'PrintDocumentExpert.Print()' method.")
       End If

       AddHandler Me.PrintDocument.BeginPrint, Me.BeginPrintEventHandler
       AddHandler Me.PrintDocument.QueryPageSettings, Me.QueryPageSettingsEventHandler
       AddHandler Me.PrintDocument.PrintPage, Me.PrintPageEventHandler
       AddHandler Me.PrintDocument.EndPrint, Me.EndPrintEventHandler

       Me.PrintDocument.PrinterSettings = Me.PrinterSettings
       Me.PrintDocument.Print()

       RemoveHandler Me.PrintDocument.BeginPrint, Me.BeginPrintEventHandler
       RemoveHandler Me.PrintDocument.QueryPageSettings, Me.QueryPageSettingsEventHandler
       RemoveHandler Me.PrintDocument.PrintPage, Me.PrintPageEventHandler
       RemoveHandler Me.PrintDocument.EndPrint, Me.EndPrintEventHandler

   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Cancels the print job for the current document.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="Exception">
   ''' Print job not found.
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Overridable Sub CancelPrint()

       Dim scope As New ManagementScope("root\CIMV2")
       Dim query As New SelectQuery(String.Format("SELECT * FROM Win32_PrintJob WHERE Document = '{0}'", Me.PrintDocument.DocumentName))
       Dim options As New EnumerationOptions With {
               .ReturnImmediately = True,
               .Rewindable = False,
               .DirectRead = True,
               .EnumerateDeep = False
           }

       Using mos As New ManagementObjectSearcher(scope, query, options),
             moc As ManagementObjectCollection = mos.Get()

           If (moc.Count = 0) Then
               Throw New Exception("Print job not found.")
           End If

           For Each mo As ManagementObject In moc
               mo.Delete()
           Next mo

       End Using

   End Sub

#End Region

#Region " IDisposable Implementation "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Flag to detect redundant calls when disposing.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Private isDisposed As Boolean = False

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Releases all the resources used by this <see cref="PrintDocumentBasic"/> instance.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Sub Dispose() Implements IDisposable.Dispose
       Me.Dispose(isDisposing:=True)
       GC.SuppressFinalize(obj:=Me)
   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="isDisposing">
   ''' <see langword="True"/>  to release both managed and unmanaged resources;
   ''' <see langword="False"/> to release only unmanaged resources.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Protected Overridable Sub Dispose(ByVal isDisposing As Boolean)

       If (Not Me.isDisposed) AndAlso (isDisposing) Then

           If (Me.PrintDocument IsNot Nothing) Then
               Me.PrintDocument.Dispose()
               Me.PrintDocument = Nothing
           End If

           If (Me.DocumentStream IsNot Nothing) Then
               Me.DocumentStream.Close()
           End If

       End If

       Me.isDisposed = True

   End Sub

#End Region

End Class


MODO DE EMPLEO:
Código (vbnet) [Seleccionar]
Public Module Module1

   Private printExpert As PrintDocumentExpert

   Public Sub Main()

       printExpert = New PrintDocumentExpert("C:\Document.txt", Encoding.Default)

       Using printExpert
           printExpert.PrinterSettings = New PrinterSettings With {
                   .PrinterName = "My Printer Name"
               }

           printExpert.BeginPrintEventHandler = AddressOf PrintDocument_BeginPrint
           printExpert.QueryPageSettingsEventHandler = AddressOf PrintDocument_QueryPageSettings
           printExpert.PrintPageEventHandler = AddressOf PrintDocument_PrintPage
           printExpert.EndPrintEventHandler = AddressOf PrintDocument_EndPrint

           printExpert.Print()
       End Using

   End Sub

   Public Sub PrintDocument_BeginPrint(ByVal sender As Object, ByVal e As PrintEventArgs)
   End Sub

   Public Sub PrintDocument_QueryPageSettings(ByVal sender As Object, ByVal e As QueryPageSettingsEventArgs)
   End Sub

   Public Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
       ' Page settings.
       Dim font As New Font("Arial", 10.0F, FontStyle.Regular)
       Dim brush As New SolidBrush(Color.Green)
       Dim stringFormat As New StringFormat()
       Dim leftMargin As Single = e.MarginBounds.Left
       Dim topMargin As Single = e.MarginBounds.Top

       ' Calculate the number of lines per page.
       Dim linesPerPage As Single = (e.MarginBounds.Height / font.GetHeight(e.Graphics))

       ' Iterate over the file, printing each line.
       Dim line As String = Nothing
       Dim count As Integer
       While (count < linesPerPage)
           line = printExpert.DocumentStream.ReadLine()
           If (line Is Nothing) Then
               Exit While
           End If
           Dim yPos As Single = (topMargin + count * font.GetHeight(e.Graphics))
           e.Graphics.DrawString(line, font, brush, leftMargin, yPos, stringFormat)
           count += 1
       End While

       font.Dispose()
       brush.Dispose()
       stringFormat.Dispose()

       ' If more lines exist, print another page.
       e.HasMorePages = (line IsNot Nothing)
   End Sub

   Public Sub PrintDocument_EndPrint(ByVal sender As Object, ByVal e As PrintEventArgs)
   End Sub

End Module


MODO DE EMPLEO ALTERNATIVO:
Código (vbnet) [Seleccionar]
Public Sub Main()

   Dim printExpert As PrintDocumentExpert = Nothing

   Dim beginPrintEventHandler As PrintEventHandler =
       Sub(ByVal sender As Object, ByVal e As PrintEventArgs)
       End Sub

   Dim queryPageSettingsEventHandler As QueryPageSettingsEventHandler =
       Sub(ByVal sender As Object, ByVal e As QueryPageSettingsEventArgs)
       End Sub

   Dim printPageEventHandler As PrintPageEventHandler =
   Sub(ByVal sender As Object, ByVal e As PrintPageEventArgs)
       ' Page settings.
       Dim font As New Font("Arial", 10.0F, FontStyle.Regular)
       Dim brush As New SolidBrush(Color.Green)
       Dim stringFormat As New StringFormat()
       Dim leftMargin As Single = e.MarginBounds.Left
       Dim topMargin As Single = e.MarginBounds.Top

       ' Calculate the number of lines per page.
       Dim linesPerPage As Single = (e.MarginBounds.Height / font.GetHeight(e.Graphics))

       ' Iterate over the file, printing each line.
       Dim line As String = Nothing
       Dim count As Integer
       While (count < linesPerPage)
           line = printExpert.DocumentStream.ReadLine()
           If (line Is Nothing) Then
               Exit While
           End If
           Dim yPos As Single = (topMargin + count * font.GetHeight(e.Graphics))
           e.Graphics.DrawString(line, font, brush, leftMargin, yPos, stringFormat)
           count += 1
       End While

       font.Dispose()
       brush.Dispose()
       stringFormat.Dispose()

       ' If more lines exist, print another page.
       e.HasMorePages = (line IsNot Nothing)
   End Sub

   Dim endPrintEventHandler As PrintEventHandler =
       Sub(ByVal sender As Object, ByVal e As PrintEventArgs)
       End Sub

   printExpert = New PrintDocumentExpert("C:\Document.txt", Encoding.Default)
   Using printExpert
       printExpert.PrinterSettings = New PrinterSettings With {
           .PrinterName = "My Printer Name"
       }

       printExpert.BeginPrintEventHandler = beginPrintEventHandler
       printExpert.QueryPageSettingsEventHandler = queryPageSettingsEventHandler
       printExpert.PrintPageEventHandler = printPageEventHandler
       printExpert.EndPrintEventHandler = endPrintEventHandler

       printExpert.Print()
   End Using

End Sub
#1115
No es necesario seguir discutiendo entre nosotros, el enemigo está ahí fuera... camuflado en un captcha, detrás de un enlace, escondido en el código fuente de una página en la World Wide Web.

Yo lo único que opino es que se acontece un futuro muy negro para todo lo que concierne a las criptomonedas, ya que día si y día también no dejan de salir noticias y nuevas formas de llevar a cabo acciones perjudiciales contra los usuarios debido a la existencia de las criptomonedas y la codicia de las personas con su falta de moralidad. Yo considero que hoy por hoy y para las personas que no son millonarias, la existencia de las criptomonedas generan más males que bienes en general, más problemas que beneficios, más dolores de cabeza que comodidades, y algo así es dificil que prospere hacia un buen rumbo... más con las espectativas que suele tener la gente, ya sabeis, que las criptomonedas reemplacen a la moneda física y tal... eso no va a ocurrir mientras no dejen de salir noticias como esta, hasta que el sistema de minado y las criptomonedas sea más organizado, algo mejor para todos, que no sea considerado un peligro solo por existir como lo es ahora mismo para mucha gente, para muchas víctimas.

Saludos
#1116
Cita de: engel lex en 27 Marzo 2018, 20:03 PMesto es falso... es trabajo de todos... es decir, es facil quejarse y decir "no quiero que me hagan eso" y no hacer nada para evitarlo... durante los años aquí vi eso en su escala más pura y extrema, donde la gente dice "[x grupo social] debe salir a la calle!, cuando salgan verán como cae el regimen" y todos siempre echan la culpa a los demás y los unicos que activamente están actuando a su favor, son los que joden...

Tengo la sensación de que a lo mejor tu forma de analizar mis palabras podría estar acondicionada por la situación del país en el que vives (por que tú lo has puesto como ejemplo para compararme), pero Engel, creo que no se puede comparar a la gente que se sienta en el sofá y solo saben hacer que quejarse de su gobierno sin hacer nada, compararlo con las víctimas-internautas inocentes que sufren por la incompetente implementación de las criptomonedas, por la explotación maligna que existe a través de su modo más común de obtención: el software de minado. Me refiero, el ejemplo que tu has expuesto es un problema de MUCHA mayor gravedad que el problema de los inconvenientes que genera el sistema de las criptomonedas.

No creo que nadie tenga la obligación moral de intentar arreglar ni mejorar nada con respecto a este tema, a menos que esa persona sea responsable directo de dirigir el rumbo de de las criptomonedas, de lo contrario a menos que exista un beneficio personal o económico para ello...no tenemos la obligación moral.
Yo creo que por pensar así el mundo no se va a joder, aunque todos pensasemos de la misma manera en que yo lo pienso, por que NO estamos hablando de como podría afectar nuestro modo de pensar ni nuestra "pasividad" a la situación de un país ni a su economia, sino a la estabilidad de las criptomonedas y ya está, es algo incomparable en cuanto a la gravedad del asunto... por supuesto no discrepo en lo que has dicho, la gente debe hacer algo si quiere arreglar su país, con quejarse no es suficiente, pero es que eso es un tema de mayor gravedad y responsabilidad moral que las criptomonedas (siendo un simple usuario o un espectador).

Yo no he pedido que se inventen las criptomonedas, yo no he pedido que se invente el software de minado, yo no he participado en la decisión de nada de eso, así que democraticamente tengo el derecho a quejarme (y limitarme solo a quejarme) para que los responsables de su invención, implementación y de su difusión hagan algo por mejorar la seguridad en el sentido que sea, y que así deje de afectarnos mediante códigos maliciosos y etc.

Además, lo que dices es muy facil decirlo... lo de hacer algo al respecto y no solo quejarse, pero es muy dificil hacer algo o proponer una idea innovadora cuando para empezar la probabilidad de que la persona adecuada te escuche es del 0,000001% (igual que la probabilidad de que tu idea se acepte y al final se lleve a cabo), al final solo puedes acabar limitándote al derecho de quejarte, por que no vale la pena intentar proponer ideas cuando no hay nadie que pueda escucharte, o que quiera escucharte.

Saludos!
#1117
Cita de: engel lex en 27 Marzo 2018, 19:47 PM
estás en el lugar y capacidades de promover mejores formas que ya no hayan sido descartadas o hayan caído en la obsolescencia ...

Podría intentarlo, pero ese no es mi trabajo, solo me tengo que interesar por que DEJEN DE JODERNOS por la incompetencia y la incapacidad para desarrollar un sistema seguro, no perjudicial para los demás.

Supongo que estarás de acuerdo conmigo en que el sistema actual es muy tóxico para los usuarios, afecta perjudiciálmente a todas las víctimas por igual indiferentemente de si tienes una "cartera" o de si eres un simple usuario que usa su PC para cualquier cosa no relacionada con el mundo de las criptomonedas (eso es lo más odioso que ha conseguido generar la invención de las criptomonedas, que solo por existir y aunque tu no tengas ganancias, te quieren infectas para producir ganancias para otras personas), y este sistema actual de sofftware de minado debería pasar a formar parte de uno más de los tantos sistemas que ya hayan caido en esa obsolescencia de la que hablas... hay que dar el paso hacia algo mejor para todos, y si no se consigue entonces las criptomonedas tendrán los días contados, quizás pasarán muchos años antes de que eso suceda, pero... los días contados.

Saludos!
#1118
Vamos, que como a uno se le ocurra pinchar inocéntemente en un " "captcha" " como este:



algo parecido a este código de aquí abajo se pondría en ejecución para exprimir tu CPU, GPU y con ello vaciarte el bolsillo por el coste energético...



En fin. Maldita sea la hora en que se inventó el software de minado y las mil y una formas de explotarlo maliciosamente. A mi me tiene hasta los GÜEVOS este tema... creo que la forma en que un usuario puede obtener criptomonedas se debe reinventar por completo, por que de lo conrario vamos a estar sufriendo estos ataques e intrusiones durante "toda" la vida...
#1119
Cuando te ofrecen una solución ni siquiera respondes para decir si te ha servido o no. Esta vez por mi parte solo te diré: busca en Google.

Lo siento, pero realmente haces preguntas muy vagas. En Google puedes encontrar mil y un ejemplos de como utilizar varios algoritmos criptograficos expuestos en las clases de .NET para cifrar archivos mediante una clave. Lee sobre la clase base: System.Security.Cryptography.SymmetricAlgorithm, o bien las clases: AesCryptoServiceProvider, AesManaged, DESCryptoServiceProvider, TripleDESCryptoServiceProvider, RSACryptoServiceProvider, RC2CryptoServiceProvider o RijndaelManaged (todas ellas heredan de la clase SymmetricAlgorithm).

saludos!
#1120
Dices que no es un Déjà vu, pues entonces podría ser esto:


Si ese no es tu caso, entonces no descartes que pueda ser esto otro:

...a pesar de las burlas e incredulidad hacia los que hacemos este tipo de afirmaciones, el efecto mandela es bien real, y ya bastante tenemos nosotros con tener que aceptarlo, por que cuesta mucho aceptarlo para los que lo hemos vivido y no le encontramos otra explicación más "lógica". Mira esto si quieres:





Cita de: PalitroqueZlos recuerdos son memorias de situaciones vividas. no puedes tener un recuerdo de algo que no hayas vivido, de lo contrario sería un dejavu

La ciencia no opina no lo mismo....
Cita de: https://en.wikipedia.org/wiki/False_memory_syndrome"el principio de que los recuerdos pueden ser alterados por influencias externas es aceptado abrumadoramente por los científicos."

Si depositamos confianza en la veracidad y rigurosidad de las fuentes científicas del artículo de Wikipedia, esto demostraría que SI puedes tener recuerdos de algo que no hayas vivido, y sin ser considerado un Déjà vu, puesto que según la ciencia un Déjà vu es una anomalía "natural" de la memoria, mientras que por otro lado la comunidad cientifica acepta que los reuerdos pueden ser alterados por influencias externas para darse el caso de la 'Falsa Memoria'.

Saludos.