elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 1002
31  Foros Generales / Foro Libre / Re: Qué canción estás escuchando ahora ? en: 19 Julio 2017, 20:02
Lo que estoy escuchando ahora mismo, se me está pegando el tema  :silbar:

Youth Killed It - (Jean-Claude) Van Mann
32  Foros Generales / Foro Libre / Re: Ante un evento mundial... en: 19 Julio 2017, 18:19
Randomize, ¿la próxima vez por que no preguntas algo más positivo?, como por ejemplo: "¿Qué hariais si acabais por accidente en una isla tropical desierta con 100 mujeres (Amazonas) que nunca han visto, tocado ni conocido a un hombre, y están todas dispuestas a satisfacer todas tus fantasias sexuales?" (ahora vendrá el gracioso de turno que dirá: "si habian 100 mujeres entonces ya no es una isla desierta"  :¬¬).

Me da mucha grima este thread, en serio, estos temas solo consiguen sacar lo peor del ser humano, y yo prefiero dejarlo en manos de los Illuminatis...

Saludos!
33  Programación / Scripting / Re: Problemas al firmar un exe creado con py2exe en: 19 Julio 2017, 17:33
Quizás no te has fijado que en los enlaces que me indicas hace referencia expresa a:

zipfile='mifichero.lib', en lugar de zipfile=None.

Al ponerlo en None, consigo que esa librería se incorpore al EXE y, aunque engorde el ejecutable, provoca una mejora muy muy sustancial de velocidad.

Por favor, lee en profundidad los artículos que he compartido en esos enlaces, sobre todo esta parte:

Create the executable

Without going too much into detail, the exe created by py2exe is a simple loader that loads the Python interpreter plus your Python code. The Python code can either be bundled inside the exe or be detached from the exe loader as a separate library.

In order to apply a sign certificate, we need to detach the library from the exe loader. This is done by specifying the zipfile property on the setup dictionary

setup(name="name",
      console=[],
      windows=[app],
      ...
      # py2exe options
      zipfile = "app.lib", # detached zip library
      data_files = [],
      options={"py2exe": py2exe_options},
)

Si además lees la documentación oficial de py2exe, comprenderás en base al texto citado arriba, que al especificar zipfile = None estás impidiendo (al menos en teoría) la posibilidad de firmar digitálmente el archivo autoextraible/SFX generado con py2exe:

zipfile - name of shared zipfile to generate; may specify a subdirectory; defaults to 'library.zip'. If zipfile is set to None, the files will be bundled within the executable instead of 'library.zip'.

En resumen, dependiendo de como configures el parámetro "zipfile", si especificas el valor "none" entonces los archivos.py que componen a tu programa de Python serán incluidos tal cual dentro del exe generado, y si por lo contrario especificas un nombre de archivo entonces los archivos.py se incluiran dentro de un archivo comprimido/zip aislado dentro del exe generado, y para hacer lo que quieres, es decir, firmar el exe, en teoría necesitas crear dicho archivo comprimido como se explica en aquél artículo, por ende, la solución al problema ya se te ha ofrecido...

EDITO:
...Otra cosa bien distinta es que la solución no te guste por las desventajas que supone xD, lamentablemente al parecer py2exe no permite la modificación del nivel de compressión del archivo zip resultante dentro del SFX, de poder hacerlo eso solventaría el inconveniente del impacto negativo al que haces referencia en la velocidad de descomprensión e inicio del intérprete/script, pero no, al parecer no se puede modificar (al menos no diréctamente, pero supongo que en el código fuente si).

De todas formas py2exe está muy sobrevalorado... a pesar de ser una herramienta obsoleta (última release en sourceforge: año 2008, y en la web de PyPI: año 2014, es un proyecto descontinuado). Como alternativa siempre puedes probar a generar el SFX con la librería cx_Freeze, y comprobar por ti mismo si el exe generado puedes firmarlo o tampoco se puede...


Saludos!
34  Programación / Scripting / Re: Problemas al firmar un exe creado con py2exe en: 19 Julio 2017, 16:43
Hola. Con solo realizar una simple búsqueda en Google habrías encontrado la solución a tu problema:

+

Saludos
35  Foros Generales / Foro Libre / Re: Qué canción estás escuchando ahora ? en: 19 Julio 2017, 10:04
. . . :rolleyes:

36  Programación / Scripting / Re: Script que deje apretado tecla Shift en: 19 Julio 2017, 01:14
El método SendKeys() es muy limitado, igual que el lenguaje VBS, donde ni tan siquiera se puede llamar a la API de Windows sin recurrir a la instalación de componentes de terceros.

Tengamos presente que Windows no es solo Batch y VBS, hay otros lenguajes soportados de forma nativa y son mucho más potentes/completos, como JS, y PowerShell.

En este último lenguaje podemos simplificar muchas tareas, pero para intentar demostrar el potencial de este lenguaje yo he optado por compilar una clase escrita en otro lenguaje adicional, VB.NET (aunque también podría haber sido C#, F# o VC++), con una clase donde he implementado los métodos necesarios y los P/Invokes para hacer lo que pides (ejecutar el notepad y activar el foco de ventana, y luego mantener pulsada una tecla). No es necesario conocer el lenguaje VB.NET, tan solo debes fijarte en las 3 últimas lineas al final de este código:

Script.ps1
Código
  1. $vbCode = @'
  2. Imports Microsoft.VisualBasic
  3. Imports System
  4. Imports System.ComponentModel
  5. Imports System.Diagnostics
  6. Imports System.Runtime.InteropServices
  7. Imports System.Threading
  8. Imports System.Windows.Forms
  9.  
  10. Namespace Elektro
  11.  
  12.    Public NotInheritable Class NativeMethods
  13.  
  14.        Friend Const KEYEVENTF_KEYUP As UInteger = 2UI
  15.  
  16.        <DllImport("User32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
  17.        Friend Shared Sub keybd_event(ByVal vkey As Byte,
  18.                                      ByVal scanCode As Byte,
  19.                                      ByVal flags As UInteger,
  20.                                      ByVal extraInfo As UInteger)
  21.        End Sub
  22.  
  23.        <DllImport("User32.dll", SetLastError:=True)>
  24.        Friend Shared Function GetForegroundWindow() As IntPtr
  25.        End Function
  26.  
  27.        <DllImport("User32.dll", SetLastError:=True)>
  28.        Friend Shared Function SetForegroundWindow(ByVal hwnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
  29.        End Function
  30.  
  31.    End Class
  32.  
  33.    Public NotInheritable Class ProcessTools
  34.  
  35.        ''' <summary>
  36.        ''' Runs and activates Notepad process.
  37.        ''' </summary>
  38.        Public Shared Sub RunNotepad()
  39.  
  40.            Using p As New Process() With {
  41.                    .StartInfo = New ProcessStartInfo("notepad.exe") With {
  42.                        .UseShellExecute = True
  43.                    }
  44.                }
  45.  
  46.                p.Start()
  47.                p.WaitForInputIdle(Timeout.Infinite)
  48.  
  49.                Dim hwnd As IntPtr = IntPtr.Zero
  50.                Do While (hwnd = IntPtr.Zero)
  51.                    hwnd = p.MainWindowHandle
  52.                Loop
  53.                Debug.WriteLine("Window Handle: " & hwnd.ToInt32())
  54.  
  55.                Do Until (NativeMethods.GetForegroundWindow() = hwnd)
  56.                    Dim result As Boolean = NativeMethods.SetForegroundWindow(hwnd)
  57.                Loop
  58.                '' Alternativa administrada:
  59.                ' Interaction.AppActivate(p.Id)
  60.  
  61.            End Using
  62.  
  63.        End Sub
  64.  
  65.    End Class
  66.  
  67.    Public NotInheritable Class KeyboardTools
  68.  
  69.        ' Press and holds the specified key.
  70.        Public Shared Sub PressKey(ByVal key As Keys)
  71.            NativeMethods.keybd_event(CByte(key), 0, 0UI, 0UI)
  72.        End Sub
  73.  
  74.        ' Releases a previous hold key.
  75.        Public Shared Sub ReleaseKey(ByVal key As Keys)
  76.            NativeMethods.keybd_event(CByte(key), 0, NativeMethods.KEYEVENTF_KEYUP, 0UI)
  77.        End Sub
  78.  
  79.    End Class
  80.  
  81. End Namespace
  82. '@
  83. $vbType = Add-Type -TypeDefinition $vbCode `
  84.                   -CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
  85.                   -PassThru `
  86.                   -ReferencedAssemblies "Microsoft.VisualBasic.dll", `
  87.                                         "System.dll", `
  88.                                         "System.ComponentModel.dll", `
  89.                                         "System.Runtime.InteropServices.dll", `
  90.                                         "System.Threading.dll", `
  91.                                         "System.Windows.Forms.dll" `
  92. | where { $_.IsPublic }
  93.  
  94. # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  95. # End of VB.NET CodeDom Provider Compiler Services Sample
  96. # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  97.  
  98. Add-Type -AssemblyName "System.Windows.Forms"
  99. $Keys = [System.Windows.Forms.Keys]
  100.  
  101. [Elektro.ProcessTools]::RunNotepad()
  102. [Elektro.KeyboardTools]::PressKey($Keys::ShiftKey)
  103. # [Elektro.KeyboardTools]::ReleaseKey($Keys::ShiftKey)

El modo de empleo es muy sencillo, abstraido de cualquier complejidad. Con el método Elektro.ProcessTools.RunNotepad() se ejecuta una nueva instancia del proceso Notepad.exe (o el hijack correspondiente que haya definido en el sistema) y se activa el foco de ventana. Con el método Elektro.KeyboardTools.PressKey(Keys) se simula una pulsación del teclado de la tecla que deseemos (la tecla se mantendrá pulsada), y con el método Elektro.KeyboardTools.ReleaseKey(Keys) liberamos la tecla que previamente habiamos pulsado.

Espero que te sirva de ayuda.

PD: Nótese que el miembro keybd_event de la API de Windows está considerado obsoleto, esto en realidad debería reemplazarse por la utilización de la infraestructura SENDINPUT, sin embargo la implementación de los miembros necesarios habría extendido el código de ejemplo en varios cientos de lineas, así que simplemente lo he preferido hacer así como una decisión de diseño y simplificación; esto es tan solo un ejemplo ordinario y funcional, no una solución optimizada.

Saludos
37  Foros Generales / Foro Libre / Re: Ante un evento mundial... en: 18 Julio 2017, 22:25
Pues a mi la idea de bromear y/o fantasear con dominar el mundo me parece algo extremadamente horrendo, digno de la mente pensante más aberrante: el ser humano (todos, y yo incluido... por naturaleza).

Creo que para eso ya están los Illuminati, en caso de que existan, claro, de lo contrario pues... los gobiernos y los jefazos de las corporaciones multinacionales en general.

Saludos
38  Foros Generales / Foro Libre / Re: Qué canción estás escuchando ahora ? en: 18 Julio 2017, 10:20
Comparto unos temitas del género Post-hardcore Rock con vocalistas femeninas:

Dream State - Rebuild, Recreate


Conquer Divide - Nightmares


Tonight Alive - Showcase (en directo)






Más temazos de Rock vocal femenino:

The Strangers - Madness


Halocene - Sometimes


Stateside - The Way We Were


Stitched up heart - Finally Free


Eclipses For Eyes - Left Of You






Y un poco de Post-hardcore masculino!:

Annisokay - What's Wrong


The Plot In You - Feel Nothing


I see stars - Till The World Ends


Saint Asonia - Fairytale


39  Foros Generales / Foro Libre / Re: ¿Páginas actualizadas para descargar libros? Busco Patterns Design de Gamma en: 17 Julio 2017, 22:22
Aparte de Scribd.com, siempre puedes recurrir a Archive.org.

Saludos
40  Programación / .NET / Re: Guardar informacion en una pila en: 17 Julio 2017, 19:54
PD.: Si no quieren mostrarme el codigo no importa. Pueden hacerme preguntas como: "Te fijaste lo que hiciste ahi o ahi" o "Te acuerdas que esto es asi y asi?"

Ese comentario creo que está de más, sinceramente. Me habría gustado profundizar en el concepto "comandos" y por qué carece de sentido su utilización en una GUI ...al menos a simple vista sin que expliques más sobre tus intenciones.



El compañero @NEBIRE está claro que pretende que trabajes mucho en implementar las cosas por ti mismo para que vayas aprendiendo conceptos y de todo un poco en general, jeje, pero tampoco sería un delito hacerte saber que la librería de clases de .NET Framework ya expone una representación abstracta de una Pila, mediante la colección LIFO genérica System.Collections.Generic.Stack<T> (o la no genérica: System.Collections.Stack), y una representación de una Cola, la colección FIFO genérica System.Collections.Generic.Queue<T> (o la no genérica: System.Collections.Queue):

Código
  1. Stack<string> pila = new Stack<string>(capacidad);
  2. Queue<string> cola = new Queue<string>(capacidad);

Eso es en esencia todo lo que necesitarías para empezar a administrar el uso de una Pila (y de una Cola); ahora, y gracias al concepto de herencias, puedes tomar la clase Stack<T> y extenderla (para añadirle nuevos miembros/métodos/características) según las necesidades que tuvieses:

Código
  1. [ComVisible(false)]
  2. [DebuggerDisplay("Count = {Count}")]
  3. [DebuggerStepThrough()]
  4. public class ExtendedStack<T> : Stack<T> {
  5.  
  6.    [DebuggerNonUserCode()]
  7.    public ExtendedStack() : base() {}
  8.    public ExtendedStack(int capacity) : base(capacity) {}
  9.    public ExtendedStack(IEnumerable<T> collection) : base(collection) {}
  10.  
  11.    [EditorBrowsable(EditorBrowsableState.Always)]
  12.    public void PushRange(IEnumerable<T> items) {
  13.        foreach (T item in items) {
  14.            this.Push(item);
  15.        }
  16.    }
  17.  
  18.    [EditorBrowsable(EditorBrowsableState.Always)]
  19.    public T[] Pop(int amount) {
  20.        if (this.Count < amount) {
  21.            throw new ArgumentOutOfRangeException(paramName: "amount");
  22.        }
  23.        List<T> list = new List<T>();
  24.        for (int x = 0; x <= (amount - 1); x++) {
  25.            list.Add(this.Pop());
  26.        }
  27.        return list.ToArray();
  28.    }
  29.  
  30.    [EditorBrowsable(EditorBrowsableState.Always)]
  31.    public T[] Peek(int amount) {
  32.        if (this.Count < amount) {
  33.            throw new ArgumentOutOfRangeException(paramName: "amount");
  34.        }
  35.        Stack<T> tmpStack = new Stack<T>(Enumerable.Reverse(this));
  36.        List<T> list = new List<T>();
  37.        for (int x = 0; x <= (amount - 1); x++) {
  38.            list.Add(tmpStack.Pop());
  39.        }
  40.        tmpStack.Clear();
  41.        return list.ToArray();
  42.    }
  43.  
  44.    [EditorBrowsable(EditorBrowsableState.Always)]
  45.    public void Reverse() {
  46.        Stack<T> tmpStack = new Stack<T>(Enumerable.Reverse(this));
  47.        this.Clear();
  48.        this.PushRange(tmpStack);
  49.        tmpStack.Clear();
  50.    }
  51.  
  52. }

...El código de arriba es tan solo un ejemplo demostrativo y escrito al vuelo (no del todo optimizado), lo cierto es que nada de eso te debería resultar necesario hacerlo, pero no está de más enseñarte un poco el abanico de posibilidades que tienes a tu alcance...

Sencillamente limítate a usar la clase Stack<T> tal cual para representar una pila de objetos, o el ejercicio en pseudo-code que te ha indicado @NEBIRE para poner en práctica los conocimientos que lleves aprendidos...

Saludos.
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 1002
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines