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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [47] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ... 80
461  Programación / .NET (C#, VB.NET, ASP) / Re: cifrar Carpetas en: 5 Octubre 2016, 19:43 pm
El código esta muy bueno, pero cuando trato de proteger la carpeta ubicada en una memoria, no me funciona...  

Ejecuta como administrador

Imagino que lo sabes pero por si acaso te lo comento.

Para hacer que el programa se ejecute como administrador por defecto. Vas a propiedades del proyecto y clicas en Ver configuración de Windows.

se te abrirá el App.manifest y verás un código XML:
Donde pone
Código
  1. <requestedExecutionLevel level="asInvoker" uiAccess="false" />

quitas asInvoker y pones requireAdministrator

te quedará así:
Código
  1. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Guarda y cuando inicies el programa dentro del entorno de programación (f5) Visual studio te preguntará si deseas reiniciar con nuevas credenciales, le dices que sí.  y ahora VS iniciará el programa como administrador, además que el programa quedará compilado con el nuevo manifiesto y cuando lo inicies se iniciará con privilegios de administrador.

Ahora aunque la carpeta esté abierta se podrá cambiar el atributo.





462  Programación / .NET (C#, VB.NET, ASP) / Re: cifrar Carpetas en: 5 Octubre 2016, 15:43 pm
Seguro que haz buscado bien? Porque me sale ésto en el 3er resultado de Google How to encrypt and decrypt a file by using Visual C#

Saludos!

PD: Mi búsqueda.

Eso es para archivos no para carpetas... si no me equivoco


Ahora lo miro a ver...  :P



Pues lo que decía ese código es para cifrar el contenido de un archivo.

Código
  1. Imports System.IO
  2. Imports System.Security
  3. Imports System.Security.Cryptography
  4. Imports System.Runtime.InteropServices
  5. Imports System.Text
  6. Public Class Form1
  7.  
  8.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  9.  
  10.    End Sub
  11.  
  12.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  13.        ' Must be 64 bits, 8 bytes.
  14.        ' Distribute this key to the user who will decrypt this file.
  15.        Dim sSecretKey As String
  16.        sSecretKey = CSEncryptDecrypt.Class1.GenerateKey() ' Get the Key for the file to Encrypt.
  17.        Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)                       ' For additional security Pin the key.
  18.        CSEncryptDecrypt.Class1.EncryptFile("C:\Prueba\Texto.txt", "C:\Prueba\TextoEncrypt.txt", sSecretKey)        ' Encrypt the file.        
  19.        CSEncryptDecrypt.Class1.ZeroMemory(gch.AddrOfPinnedObject(), CType(sSecretKey.Length * 2, IntPtr))
  20.        gch.Free()
  21.    End Sub
  22.  
  23.    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  24.        ' Must be 64 bits, 8 bytes.
  25.        ' Distribute this key to the user who will decrypt this file.
  26.        Dim sSecretKey As String
  27.        sSecretKey = CSEncryptDecrypt.Class1.GenerateKey() ' Get the Key for the file to Encrypt.
  28.        Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)
  29.        CSEncryptDecrypt.Class1.DecryptFile("C:\Prueba\TextoEncrypt.txt", "C:\Prueba\Decrypt.txt", sSecretKey)    ' Decrypt the file.
  30.        CSEncryptDecrypt.Class1.ZeroMemory(gch.AddrOfPinnedObject(), CType(sSecretKey.Length * 2, IntPtr)) ' Remove the Key from memory.
  31.        gch.Free()
  32.    End Sub
  33. End Class
  34.  
  35.  
  36. Namespace CSEncryptDecrypt
  37.  
  38.    Class Class1
  39.        <DllImport("kernel32.dll")> _
  40.        Public Shared Sub ZeroMemory(ByVal addr As IntPtr, ByVal size As IntPtr)
  41.        End Sub
  42.        '  Call this function to remove the key from memory after use for security
  43.        '<System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint:="RtlZeroMemory")> _
  44.        'Public Shared Function ZeroMemory(Destination As IntPtr, Length As Integer) As Boolean
  45.        'End Function
  46.  
  47.        ' Function to Generate a 64 bits Key.
  48.        Public Shared Function GenerateKey() As String
  49.            ' Create an instance of Symetric Algorithm. Key and IV is generated automatically.
  50.            Dim desCrypto As DESCryptoServiceProvider = DirectCast(DESCryptoServiceProvider.Create(), DESCryptoServiceProvider)
  51.  
  52.            ' Use the Automatically generated key for Encryption.
  53.            Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)
  54.        End Function
  55.  
  56.        Public Shared Sub EncryptFile(sInputFilename As String, sOutputFilename As String, sKey As String)
  57.            Dim fsInput As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
  58.  
  59.            Dim fsEncrypted As New FileStream(sOutputFilename, FileMode.Create, FileAccess.Write)
  60.            Dim DES As New DESCryptoServiceProvider()
  61.            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
  62.            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
  63.            Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()
  64.            Dim cryptostream As New CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write)
  65.  
  66.            Dim bytearrayinput As Byte() = New Byte(CInt(fsInput.Length - 1)) {}
  67.            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
  68.            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
  69.            cryptostream.Close()
  70.            fsInput.Close()
  71.            fsEncrypted.Close()
  72.        End Sub
  73.  
  74.        Public Shared Sub DecryptFile(sInputFilename As String, sOutputFilename As String, sKey As String)
  75.            Dim DES As New DESCryptoServiceProvider()
  76.            'A 64 bit key and IV is required for this provider.
  77.            'Set secret key For DES algorithm.
  78.            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
  79.            'Set initialization vector.
  80.            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
  81.  
  82.            'Create a file stream to read the encrypted file back.
  83.            Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
  84.            'Create a DES decryptor from the DES instance.
  85.            Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
  86.            'Create crypto stream set to read and do a
  87.            'DES decryption transform on incoming bytes.
  88.            Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
  89.            'Print the contents of the decrypted file.
  90.            Dim fsDecrypted As New StreamWriter(sOutputFilename)
  91.            fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd())
  92.            fsDecrypted.Flush()
  93.            fsDecrypted.Close()
  94.        End Sub
  95.  
  96.  
  97.    End Class
  98. End Namespace


Encontré este código lo he testado y funciona:
Código
  1. Imports System.Security.AccessControl
  2. Imports System.IO
  3.  
  4.  
  5. Public Class Form1
  6.  
  7.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  8.  
  9.  
  10.    End Sub
  11.  
  12.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  13.        Dim FolderBrowserDialog1 As New FolderBrowserDialog
  14.        With FolderBrowserDialog1
  15.            If .ShowDialog() = DialogResult.OK Then
  16.                TextBox1.Text = .SelectedPath
  17.            End If
  18.        End With
  19.  
  20.    End Sub
  21.  
  22.    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  23.        Dim fs As FileSystemSecurity = File.GetAccessControl(TextBox1.Text)
  24.        fs.AddAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny))
  25.        File.SetAccessControl(TextBox1.Text, CType(fs, FileSecurity))
  26.    End Sub
  27.  
  28.    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  29.        Dim fs As FileSystemSecurity = File.GetAccessControl(TextBox1.Text)
  30.        fs.RemoveAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny))
  31.        File.SetAccessControl(TextBox1.Text, CType(fs, FileSecurity))
  32.    End Sub
  33. End Class

FUENTE:
http://burnignorance.com/vb-net-tricks/how-to-lock-and-unlock-a-folder-through-code-in-vb-net/

Esto bloquea el acceso a la carpeta. Lo que no se es si será accesible desde un Linxu Live por ejemplo o algún programa de arranque, o quizás desde el modo seguro.




Lo se la contraseña se me ocurre que la metas cifrada, con el código de arriba por ejemplo dentro de la misma carpeta, desde el programa cuando se quiera desbloquear, el programa desbloquearía la carpeta el tiempo justo para poder acceder a la contraseña descifrarla y compararla con la que introduce el usuario. Se ve un poco, chapuza pero es lo que se me ocurre ahora. Podrías mirarte en ingeniería inversa, a ver.



463  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar vistas de iconos del escritorio en Windows en: 5 Octubre 2016, 15:23 pm
Sería mucho más facil intentar proporcionarte ayuda si en la documentación Xml hubieses incluido la url de MSDN (o el archivo de cabeceras de C++) de donde sacaste los valores de la enumeración "viewOptIcon", o si lo hubieses especificado al describir el problema...

Respecto a viewOptIcon no hay documentación, al menos que yo sepa. Lo obtuve a la cuenta de la vieja.

Haces esto


Código
  1.    Public Shared Sub ViewModeIconDesktop(ByVal intValueView As Integer)
  2.        Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager")
  3.        Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString)
  4.        SendMessage(hDefView, WM_COMMAND, intValueView, &H0)
  5.    End Sub

y luego desde un botón:
Código:
num+=1
Dim newValue As Integer= 28700 + num
ViewModeIconDesktop (newValue )
Me.text = CStr(newValue)

Ahí le vas dando al botón esperando algún resultado jeje. Te saldrán incluso cuadros de diálogo, o se te seleccionarán todos los iconos de golpe.

Al usar este método con Progman puede producirse un resultado inesperado, sobre todo si es diréctamente a Progman y no a  SHELLDLL_DefView. Si pruebas con SHELLDLL_DefView creo recordar que hay un valor que cierra explorer y lo vuelve a abrir pero se cerrará todo lo que estabas trabajando. El equivalente a cerrar sesión pero de golpe. Creo que era con este código pero no estoy seguro. Así que ojo con eso.

También recuerdo que usando este método con Progman u otra ventana de windows se me produjo un cambio que luego no  supe como restaurarlo. Así que es más seguro usarlo en una máquina virtual por ejemplo.

En cuanto a usar
Código:
SendMessageTimeOut
he probado pero tras cerrar sesión sigue mostrandose igual. No se qué valor darle WM_SettingChange o si me dices que tengo que cambiarlo.

Este código ya lo tenía y lo usaba para actualizar los iconos.  Pero no lo usaba así, no se si será correcto como lo tenía. Era con todos los valores Integer:

Código
  1.    <DllImport("User32.dll", SetLastError:=True)>
  2.    Friend Shared Function SendMessageTimeout(ByVal hwnd As Integer,
  3.                                         ByVal msg As Integer,
  4.                                         ByVal wParam As Integer,
  5.                                        ByVal lParam As Integer,
  6.                                         ByVal flags As Integer,
  7.                                          ByVal timeout As Integer,
  8.                                   <Out> ByRef refResult As Integer
  9. ) As IntPtr
  10.    End Function
  11.    Private Const WM_SETTINGCHANGE = &H1A
  12.    Private Const HWND_BROADCAST = &HFFFF&
  13.    Private Const SPI_SETNONCLIENTMETRICS = 42
  14.    Private Const SMTO_ABORTIFHUNG = &H2
  15.    Public Shared Sub RefreshWindows()
  16.        SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, &H0, SMTO_ABORTIFHUNG, &H100, &H0)
  17.    End Sub


Como he dicho este código solo refresca el aspecto gráfico, como lo iconos. Si por ejemplo, en el registro de windows cambio el icono asociado de una extensión, y ejecuto este código, el icono se actualiza al que he cambiado.

Otra forma que encontré también usando el método anterior fue este. Hace lo mismo tanto con el escritorio como con explorer.exe:
Código
  1.        Const WM_USER = &H400
  2.        Dim hProgman As IntPtr = FindWindow("Progman", "Program Manager")
  3.        'SendMessage(hProgman, &H460, &H0, WM_USER)
  4.        SendMessage(hProgman, &H45A, &H0, WM_USER)
  5.  


Pero si establezco mostrar todos los archivos ocultos aunque refresque no se verán, ni con tu forma de implementarlo ¿debo cambiar el WM_SettingChange según lo que quiera actualizar?:

Este cambio en el registro mostraría los archivos ocultos...
Código:
[HKEY_USERS\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"Hidden"=dword:000001

[HKEY_USERS\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"ShowSuperHidden"=dword:000001

Para refrescar de modo que se apliquen ajustes del registro, como mostrar/ocultar archivos ocultos, de windows sin necesidad de reiniciar  y usuando el método que expliqué antes,  encontré esta forma:
Código
  1.    Const WM_COMMAND = &H111
  2.    Const WP_REFRESH_DESKTOP = &H7103
  3.    Const WP_REFRESH_CABINET = &HA220
  4.    Const WP_REFRESH_EXPLORER = &H7FEF
  5.  
  6.       'Refrescar Escritorio
  7.        Dim hProgMan As IntPtr
  8.        Dim hDefView As IntPtr
  9.        hProgMan = FindWindow("Progman", "Program Manager")
  10.        hDefView = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString)
  11.        SendMessage(hDefView, WM_COMMAND, WP_REFRESH_DESKTOP, &H0)
  12.  
  13.        'Refrescar Explorer
  14.        Dim hCabinetWClass As IntPtr
  15.        hCabinetWClass = FindWindow("CabinetWClass", vbNullString)
  16.        SendMessage(hCabinetWClass, WM_COMMAND, WP_REFRESH_CABINET, &H0)
  17.  
  18.        'Refrescar explorer Windows XP
  19.        'Dim hExploreWClass As IntPtr
  20.        ' hExploreWClass = FindWindow("ExploreWClass", vbNullString)
  21.        'SendMessage hExploreWClass, WM_COMMAND, WP_REFRESH_EXPLORER, &H0
  22.  
  23.  
Tengo que enviar los mensajes por separado uno a Progman (Escritorio) y otro a CabinetWClass (Explorer.exe).

Entonces para refrescar windows al completo, personalmente yo uso este método, y  ahora cambio mi "SendMessageTimeOut" por el modo que lo has puesto tú. Está mejor.

Código
  1. <System.Security.SuppressUnmanagedCodeSecurity()>
  2. Friend NotInheritable Class NativeMethods
  3.    Inherits Attribute
  4.    Private Sub New()
  5.    End Sub
  6.    <DllImport("User32.dll", SetLastError:=True)>
  7.    Friend Shared Function SendMessageTimeout(ByVal hwnd As Integer,
  8.                                         ByVal msg As Integer,
  9.                                         ByVal wParam As Integer,
  10.                                        ByVal lParam As Integer,
  11.                                         ByVal flags As Integer,
  12.                                          ByVal timeout As Integer,
  13.                                   <Out> ByRef refResult As Integer
  14. ) As IntPtr
  15.    End Function
  16.    <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _
  17.    Private Shared Function FindWindowEx(
  18.                                        ByVal hWnd1 As IntPtr,
  19.                                        ByVal hWnd2 As IntPtr,
  20.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String,
  21.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr
  22.  
  23.    End Function
  24.    <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _
  25.    Private Shared Function FindWindow(
  26.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String,
  27.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr
  28.    End Function
  29.    <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _
  30.    Private Shared Function SendMessage(ByVal hwnd As IntPtr,
  31.                                        ByVal wMsg As Integer,
  32.                                        ByVal wParam As Integer,
  33.                                        lParam As Integer) As Boolean
  34.    End Function
  35.  
  36.    <DllImport("User32.dll", SetLastError:=True)>
  37.    Friend Shared Function SendMessageTimeout(ByVal hwnd As IntPtr,
  38.                                         ByVal msg As WindowsMessages,
  39.                                         ByVal wParam As IntPtr,
  40.                                        ByVal lParam As IntPtr,
  41.                                         ByVal flags As SendMessageTimeoutFlags,
  42.                                          ByVal timeout As Integer,
  43.                                   <Out> ByRef refResult As IntPtr
  44. ) As IntPtr
  45.    End Function
  46.    Friend Enum SendMessageTimeoutFlags As Integer
  47.        Normal = &H0
  48.        Block = &H1
  49.        AbortIfHung = &H2
  50.        NoTimeoutIfNotHung = &H8
  51.        ErrorOnExit = &H20
  52.    End Enum
  53.    Friend Enum WindowsMessages As Integer
  54.        HWND_Broadcast = &HFFFF
  55.        WM_SettingChange = &H1A
  56.    End Enum
  57.  
  58.    Const WM_COMMAND = &H111
  59.    Const WP_REFRESH_DESKTOP = &H7103
  60.    Const WP_REFRESH_CABINET = &HA220
  61.    Const WP_REFRESH_EXPLORER = &H7FEF
  62.  
  63.    Public Shared Sub RefreshWindows()
  64.  
  65.        'Refrescar escritorio
  66.        Dim hProgMan As IntPtr
  67.        Dim hDefView As IntPtr
  68.        hProgMan = FindWindow("Progman", "Program Manager")
  69.        hDefView = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString)
  70.        SendMessage(hDefView, WM_COMMAND, WP_REFRESH_DESKTOP, &H0)
  71.  
  72.        'Refrescar Explorer
  73.        Dim hCabinetWClass As IntPtr
  74.        hCabinetWClass = FindWindow("CabinetWClass", vbNullString)
  75.        SendMessage(hCabinetWClass, WM_COMMAND, WP_REFRESH_CABINET, &H0)
  76.  
  77.        'Refrescar Explorer (Windows XP)
  78.        'Dim hExploreWClass As IntPtr
  79.        'hExploreWClass = FindWindow("ExploreWClass", vbNullString)
  80.        'SendMessage hExploreWClass, WM_COMMAND, WP_REFRESH_EXPLORER, &H0
  81.  
  82.  
  83.        'Refrescar los iconos
  84.        SendMessageTimeout(New IntPtr(WindowsMessages.HWND_Broadcast), WindowsMessages.WM_SettingChange, IntPtr.Zero, IntPtr.Zero,
  85.   SendMessageTimeoutFlags.AbortIfHung, 100, IntPtr.Zero)
  86.    End Sub
  87. End Class
  88.  

Esto lo hace actualiza en general sea cual sea el cambio que se haga en el registro.
464  Foros Generales / Foro Libre / Re: mejores bandas de rock en: 3 Octubre 2016, 22:22 pm
@Lekim la lista que has puesto si no me equivoco es la de Rock FM, es digamos los más conocidos, grandes éxitos, lo mejor del rock, pero es un lista diseñada por la censura española.

Es como decir, - ¿quieres escuchar rock? esto es lo que debes escuchar, pero solo esto. La razón es que el alma del rock, en mi opinión es la protesta. Si, el rock es para quejarse para que se me entienda. ¿Y que es lo que en España no hay? ¿Qué es lo que se veta? justamente la canción protesta.

Un grupo de  rock desconocido en España prácticamente tiene o tiene que pagar para poder tocar en alguna parte. Y si te dejan, tienen la cara dura de decirte esto no lo puedes decir, esto no lo puedes cantar. Claro aquí todo tiene que ser cien por cien canciones de amor o baile, si no nada.

Fíjate los principales cantantes, del pop y "rock" entre comillas el 100% de sus discos son de amor (o puede que el 99,9% XD). Aquí todo es canción de amor, desamor, relaciones o baile. ¿Cómo es posible? ¿No hay otra cosa que cantar en una canción?


Alejandro Sanz -Sirope-

Código:
A Que No Me Dejas
Un Zombie a la Intemperie
Capitán Tapón
Pero Tú
A Mí No Me Importa
Suena La Pelota
Tú La Necesitas
No Madura El Coco
El Club De La Verdad
El Silencio De Los Cuervos
La Vida Que Respira
Todo Huele A Ti
Un Zombie a la Intemperie (Salsa)
La Guarida Del Calor

Todas estas canciones, he estado mirando parece más de lo mismo.  Puede que alguna se refiera al amor a un hijo, u otra se de otro tema, pero la mayoría viene a ser lo mismo. Por qué, porque es lo que vende. Lo siento por nombrar a Alejandro que me cae bien, pero lo pongo por poner un ejemplo entre tantos y tantas, en España.


Vamos a ver la definición de ARTE
Código:
Manifestación de la actividad humana mediante la cual se expresa una visión personal y desinteresada que interpreta lo real o imaginado con 
recursos plásticos, lingüísticos o sonoros.

El arte es una forma de expresión. ¿Qué clase de artista expresa siempre lo mismo? Aquí todo es monotemático, amor y amor. Hace unas semanas estaba haciendo zapping y vi a Nuria Fergó que había vuelto a cantar y ¿qué cantó? pues una canción que si no me equivoco, había roto con su pareja y se sentía feliz. Los "triunfitos" todo lo mismo. Es increíble.

Es como si todos los pintores españoles se dedicaran a pintar corazones. Unos abstractos, otros realistas, etc. Pero siempre lo mismo. Sería absurdo.

Por decir alguno actual que se salve, de los más comerciales y famosillos diría Estopa o Sabina. Porque hay variedad de expresividad en sus canciones y no se apuntan cien por cien a lo que saben que se vende, canciones de amor.

No se si se entiendo lo que quiero decir. Básicamente que la música actual en España, por lo menos la comercial, la que se ve, es una auténtica basura. Dedican cero tiempo a composición y a muchos les hacen las canciones. Si algo me gusta del rock es que la música, la composición, es tan protagonista o más incluso que el cantante, la voz. ¿Por qué esos que salen en los concursos parecen tan buenos cantando y luego cuando salen hacen música que parece la que le toca el gitano a la cabra? Por que las canciones que les ponen son buenas, buena música y buenas composiciones. No todo es tener buena voz, ser guapo, guapa o cantar chorradas del tipo...- te hecho de menos.... no puedo vivir si ti..., bla, bla - ya sea aflamencado o no. Hay que componer. Hagan música señores, buen música.

Así que tu lista @Lekim, no es que esté mal, pero hay mucho más que eso. No es lo mismo decir me gusta Nothing else matters que gustarte Metallica. Y si no sabes inglés te sugiero que leas sus letras traducidas, las de muchas de las canciones de las bandas y artistas que has nombrado. Muchas de las letras no las verás en autores españoles ni harto de vino.

Y para acabar, estoy harto de ver pampinflas con guitarras vestidos de cuero y cuando pones oído, dices ¿pero donde están las guitarras? XD, son solo de adorno, no saben hacer riffs, ni dar personalidad al acompañamiento, todo es un runrún de fondo para dar telón al cantante. Aquí no saben componer. O quizás el miedo a que suene heavy y les veten.

Chiquilla de Seguridad Social, bueno, ahí si que se escucha la guitarra, tiene buenos riffs, están bien metidos, pero ya ves el tema.







465  Programación / .NET (C#, VB.NET, ASP) / Cambiar vistas de iconos del escritorio en Windows en: 3 Octubre 2016, 16:06 pm
Ayer estuve repasando mis códigos y encontré uno viejo que tenía de ejemplo para enviar mensajes a una ventana y lo he pasado a NET. Consiste en cambiar las vistas a de los iconos del escritorio, quitar las etiquetas y ocultar.

Código:
     
Iconos Muy Grandes
Iconos Grandes
Iconos Medianos
Iconos Pequeños
Lista
Detalle
Mosaico
Contenido

Si eres de es@s que les gusta llenar el escritorio de iconos esto te vendrá de lujo, porque puedes ponerlo en modo Lista o detalle, permitiendo una forma ordenada y reduciendo notablemente el espacio y tamaño de los iconos. Esto es posible porque el lugar donde se encuentran los iconos del escritorio es en realidad el equivalente a un ListView cuyo nombre de clase es SHELLDLL_DefView.


El 'snippet' que permite esta acción es el siguiente:
Código
  1. ''' <summary>
  2. ''' Clase NativeMethods
  3. ''' </summary>
  4. ''' <remarks></remarks>
  5. <System.Security.SuppressUnmanagedCodeSecurity()>
  6. Friend NotInheritable Class NativeMethods
  7.    Inherits Attribute
  8.    Private Sub New()
  9.    End Sub
  10.    ''' <summary>
  11.    ''' Función que devuelve el identificador de una ventana
  12.    ''' </summary>
  13.    ''' <param name="lpClassName">Nombre de la clase de la ventana</param>
  14.    ''' <param name="lpWindowName">El nombre de la ventana (el título de la ventana)</param>
  15.    ''' <returns></returns>
  16.    ''' <remarks></remarks>
  17.    <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _
  18.    Private Shared Function FindWindow(
  19.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String,
  20.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr
  21.    End Function
  22.  
  23.    ''' <summary>
  24.    ''' Recupera un identificador a una ventana cuyo nombre de clase
  25.    ''' y nombre de la ventana que coincida con las cadenas especificadas.
  26.    ''' La función busca en ventanas secundarias, comenzando por la raíz de la
  27.    ''' ventana secundaria especificada. Esta función no realiza una búsqueda
  28.    ''' entre mayúsculas y minúsculas.
  29.    ''' </summary>
  30.    ''' <param name="hWnd1">Un identificador de la ventana padre cuyo hijo son ventanas que se debe buscar</param>
  31.    ''' <param name="hWnd2">Un identificador de una ventana secundaria</param>
  32.    ''' <param name="lpsz1">El nombre de la clase o un átomo de clase creada por una llamada previa a la RegisterClass o RegisterClassEx función</param>
  33.    ''' <param name="lpsz2">El nombre de la ventana (el título de la ventana)</param>
  34.    ''' <returns></returns>
  35.    ''' <remarks></remarks>
  36.    <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _
  37.    Private Shared Function FindWindowEx(
  38.                                        ByVal hWnd1 As IntPtr,
  39.                                        ByVal hWnd2 As IntPtr,
  40.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String,
  41.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr
  42.  
  43.    End Function
  44.    ''' <summary>
  45.    ''' Envía el mensaje especificado a una ventana o ventanas.
  46.    ''' La función SendMessagellama al procedimiento de ventana de la ventana especificada
  47.    ''' y no vuelve hasta que el procedimiento de la ventana ha procesado el mensaje.
  48.    ''' </summary>
  49.    ''' <param name="hwnd">Un identificador de la ventana</param>
  50.    ''' <param name="wMsg">El mensaje que se enviará.</param>
  51.    ''' <param name="wParam">Información adicional-mensaje específico.</param>
  52.    ''' <param name="lParam">Información adicional-mensaje específico.</param>
  53.    ''' <returns></returns>
  54.    ''' <remarks></remarks>
  55.    <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _
  56.    Private Shared Function SendMessage(ByVal hwnd As IntPtr,
  57.                                        ByVal wMsg As Integer,
  58.                                        ByVal wParam As Integer,
  59.                                        lParam As Integer) As Boolean
  60.    End Function
  61.  
  62.    Private Const WM_COMMAND = &H111
  63.    ''' <summary>
  64.    ''' Valores wParam para SendMessage que cambia el estilo de visualización
  65.    ''' del escritorio
  66.    ''' </summary>
  67.    ''' <remarks></remarks>
  68.    Public Enum viewOptIcon As Integer
  69.        vIconosMuyGrandes = &H704D
  70.        vIconosGrandes = &H704F
  71.        vIconosMedianos = &H704E
  72.        vIconosPequeños = &H7050
  73.        vLista = &H7051
  74.        vDetalle = &H704B
  75.        vContenido = &H7052
  76.        vMosaico = &H704C
  77.        vOcultarIconos = &H7073 '(no bloquea el escritorio)
  78.        vQuitarEtiquetas = &H7037
  79.    End Enum
  80.  
  81.    ''' <summary>
  82.    ''' Cambia el estilo de visualización de los iconos del escritorio [by @Okik]
  83.    ''' </summary>
  84.    ''' <param name="intValueView">Valor wParam para SendMessage</param>
  85.    ''' <remarks></remarks>
  86.    Public Shared Sub ViewModeIconDesktop(ByVal intValueView As viewOptIcon)
  87.        Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager")
  88.        Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString)
  89.        SendMessage(hDefView, WM_COMMAND, intValueView, &H0)
  90.    End Sub
  91.  
  92. End Class
  93.  

Para usarlo se realiza de la forma siguiente:
Código
  1. NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vLista)


Aquí dejo un código completo de ejemplo para cambiar todas las vistas:


Código
  1. Imports System.Runtime.InteropServices
  2.  
  3. Public NotInheritable Class Form1 : Inherits Form
  4.    Friend rdButton(7) As RadioButton
  5.    Friend chkBox(1) As CheckBox
  6.    Sub New()
  7.  
  8.        ' Llamada necesaria para el diseñador.
  9.        InitializeComponent()
  10.  
  11.        ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
  12.        Dim N As Integer = 10
  13.        For Index As Integer = 0 To 7
  14.            rdButton(Index) = New RadioButton With {.AutoSize = True, .Location = New Point(10, N)}
  15.            N = N + 20
  16.            AddHandler rdButton(Index).Click, AddressOf rdButton_Click
  17.        Next Index
  18.        rdButton(0).Text = "Iconos Muy Grandes"
  19.        rdButton(1).Text = "Iconos Grandes"
  20.        rdButton(2).Text = "Iconos Medianos"
  21.        rdButton(3).Text = "Iconos Pequeños"
  22.        rdButton(4).Text = "Lista"
  23.        rdButton(5).Text = "Detalle"
  24.        rdButton(6).Text = "Mosaico"
  25.        rdButton(7).Text = "Contenido"
  26.        rdButton(3).Checked = True
  27.  
  28.        chkBox(0) = New CheckBox With {
  29.            .Location = New Point(10, rdButton(7).Top + 30), .AutoSize = True,
  30.            .Text = "Ocultar/Mostrar Etiquetas (Solo en modo Icono y Detalle)"
  31.        }
  32.        chkBox(1) = New CheckBox With {
  33.            .Location = New Point(10, chkBox(0).Top + 25), .AutoSize = True,
  34.            .Text = "Ocultar/Mostrar Iconos"
  35.        }
  36.        For Index As Integer = 0 To 1
  37.            AddHandler chkBox(Index).CheckedChanged, AddressOf chkBox_CheckedChanged
  38.        Next
  39.  
  40.  
  41.    End Sub
  42.    Private Sub chkBox_CheckedChanged(sender As Object, e As EventArgs)
  43.        Dim Index As Integer = Array.IndexOf(chkBox, sender)
  44.        Select Case Index
  45.            Case 0
  46.                If chkBox(1).Checked = True Then
  47.                    NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vQuitarEtiquetas)
  48.                Else
  49.                    NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vQuitarEtiquetas)
  50.                End If
  51.  
  52.            Case 1
  53.                If chkBox(0).Checked = True Then
  54.                    NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vOcultarIconos)
  55.                Else
  56.                    NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vOcultarIconos)
  57.                End If
  58.        End Select
  59.  
  60.  
  61.        'NOTA:
  62.        'Ten en cuenta que esta aplicación no tiene medio para saber, al iniciarse, si el escritorio tiene
  63.        'los iconos ocultos o no, o sin etiquetas, para establecer el valor verdadero o falso de
  64.        'los objetos CheckBox
  65.    End Sub
  66.    Private Sub rdButton_Click(sender As Object, e As EventArgs)
  67.        Dim Index As Integer = Array.IndexOf(rdButton, sender)
  68.        Select Case Index
  69.            Case 0 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosMuyGrandes)
  70.            Case 1 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosGrandes)
  71.            Case 2 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosMedianos)
  72.            Case 3 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosPequeños)
  73.            Case 4 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vLista)
  74.            Case 5 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vDetalle)
  75.            Case 6 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vContenido)
  76.            Case 7 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vMosaico)
  77.  
  78.        End Select
  79.  
  80.  
  81.  
  82.    End Sub
  83.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  84.        For Index As Integer = 0 To 7
  85.            Me.Controls.Add(Me.rdButton(Index))
  86.        Next
  87.        For Index As Integer = 0 To 1
  88.            Me.Controls.Add(Me.chkBox(Index))
  89.        Next
  90.    End Sub
  91.  
  92.    Private Sub Button1_Click(sender As Object, e As EventArgs)
  93.  
  94.    End Sub
  95. End Class
  96. ''' <summary>
  97. ''' Clase NativeMethods
  98. ''' </summary>
  99. ''' <remarks></remarks>
  100. <System.Security.SuppressUnmanagedCodeSecurity()>
  101. Friend NotInheritable Class NativeMethods
  102.    Inherits Attribute
  103.    Private Sub New()
  104.    End Sub
  105.    ''' <summary>
  106.    ''' Función que devuelve el identificador de una ventana
  107.    ''' </summary>
  108.    ''' <param name="lpClassName">Nombre de la clase de la ventana</param>
  109.    ''' <param name="lpWindowName">El nombre de la ventana (el título de la ventana)</param>
  110.    ''' <returns></returns>
  111.    ''' <remarks></remarks>
  112.    <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _
  113.    Private Shared Function FindWindow(
  114.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String,
  115.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr
  116.    End Function
  117.  
  118.    ''' <summary>
  119.    ''' Recupera un identificador a una ventana cuyo nombre de clase
  120.    ''' y nombre de la ventana que coincida con las cadenas especificadas.
  121.    ''' La función busca en ventanas secundarias, comenzando por la raíz de la
  122.    ''' ventana secundaria especificada. Esta función no realiza una búsqueda
  123.    ''' entre mayúsculas y minúsculas.
  124.    ''' </summary>
  125.    ''' <param name="hWnd1">Un identificador de la ventana padre cuyo hijo son ventanas que se debe buscar</param>
  126.    ''' <param name="hWnd2">Un identificador de una ventana secundaria</param>
  127.    ''' <param name="lpsz1">El nombre de la clase o un átomo de clase creada por una llamada previa a la RegisterClass o RegisterClassEx función</param>
  128.    ''' <param name="lpsz2">El nombre de la ventana (el título de la ventana)</param>
  129.    ''' <returns></returns>
  130.    ''' <remarks></remarks>
  131.    <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _
  132.    Private Shared Function FindWindowEx(
  133.                                        ByVal hWnd1 As IntPtr,
  134.                                        ByVal hWnd2 As IntPtr,
  135.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String,
  136.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr
  137.  
  138.    End Function
  139.    ''' <summary>
  140.    ''' Envía el mensaje especificado a una ventana o ventanas.
  141.    ''' La función SendMessagellama al procedimiento de ventana de la ventana especificada
  142.    ''' y no vuelve hasta que el procedimiento de la ventana ha procesado el mensaje.
  143.    ''' </summary>
  144.    ''' <param name="hwnd">Un identificador de la ventana</param>
  145.    ''' <param name="wMsg">El mensaje que se enviará.</param>
  146.    ''' <param name="wParam">Información adicional-mensaje específico.</param>
  147.    ''' <param name="lParam">Información adicional-mensaje específico.</param>
  148.    ''' <returns></returns>
  149.    ''' <remarks></remarks>
  150.    <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _
  151.    Private Shared Function SendMessage(ByVal hwnd As IntPtr,
  152.                                        ByVal wMsg As Integer,
  153.                                        ByVal wParam As Integer,
  154.                                        lParam As Integer) As Boolean
  155.    End Function
  156.  
  157.    Private Const WM_COMMAND = &H111
  158.    ''' <summary>
  159.    ''' Valores wParam para SendMessage que cambia el estilo de visualización
  160.    ''' del escritorio
  161.    ''' </summary>
  162.    ''' <remarks></remarks>
  163.    Public Enum viewOptIcon As Integer
  164.        vIconosMuyGrandes = &H704D
  165.        vIconosGrandes = &H704F
  166.        vIconosMedianos = &H704E
  167.        vIconosPequeños = &H7050
  168.        vLista = &H7051
  169.        vDetalle = &H704B
  170.        vContenido = &H7052
  171.        vMosaico = &H704C
  172.        vOcultarIconos = &H7073 '(no bloquea el escritorio)
  173.        vQuitarEtiquetas = &H7037
  174.    End Enum
  175.  
  176.    ''' <summary>
  177.    ''' Cambia el estilo de visualización de los iconos del escritorio [by @Okik]
  178.    ''' </summary>
  179.    ''' <param name="intValueView">Valor wParam para SendMessage</param>
  180.    ''' <remarks></remarks>
  181.    Public Shared Sub ViewModeIconDesktop(ByVal intValueView As viewOptIcon)
  182.        Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager")
  183.        Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString)
  184.        SendMessage(hDefView, WM_COMMAND, intValueView, &H0)
  185.    End Sub
  186.  
  187. End Class
  188.  




se me olvidaba, tiene un pero y es que si se deja en modo Lista en un principio la lista se ve en modo vertical, pero  al reiniciar o cerrar sesión, la lista se extiende horizontalmente, y claro ya no queda bien. La manera de volver a conseguir la lista vertical es cambiar a modo icono, cerrar sesión y volver a establecer modo lista.

No se si alguien sabrá porque ocurre esto y si hay forma de solventarlo.

chau



Como  el estado de modo detalle no se ve alterado al reiniciar o cerrar sesión de windows, se me ha ocurrido ocultar/mostrar la barra cabecera de columnas a mi antojo, de la siguiente manera:
Código
  1.   ''' <summary>
  2.    ''' Oculta la cabecera del modo 'Detalle' del escritorio
  3.    ''' </summary>
  4.    ''' <param name="sH32State">Valor ncmdShow para ShowWindow// True=Hide, False=Normal </param>
  5.    ''' <remarks></remarks>
  6.    Public Shared Sub HideHeaderListView(ByVal sH32State As Boolean)
  7.        Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager")
  8.        Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString)
  9.        Dim hSysListView32 As IntPtr = FindWindowEx(hDefView, IntPtr.Zero, "SysListView32", vbNullString)
  10.        Dim hSysHeader32 As IntPtr = FindWindowEx(hSysListView32, IntPtr.Zero, "SysHeader32", vbNullString)
  11.        ShowWindow(hSysHeader32, Convert.ToInt32(sH32State))
  12.    End Sub
  13.  

para ocultar se llamaría así

Código
  1. HideHeaderListView(True)


hoy he cambiado HideColumnListView por HideHeaderListView para evitar confusión. Ya que en realidad oculta la cabecera no la columna.

chau


6 Octubre 2016, 17:50

WorkerW
Hoy he ejecutado el código en otro ordenador con W764bits, y se me ha planteado un problema y es que este ordenador tiene el objeto Listview de nombre de clase SHELLDLL_DefView en WorkerW, y Progman no tiene ventanas "hijo".  Como resultado el snippet no funciona  :P

Resulta que hay más de una ventana con nombre de clase WorkerW. Me he tirado un buen rato intentado encontrar la manera de encontrar el correcto.  

En realidad es simple vas rastreando  en un bucle todos las ventanas hasta que des con una con hijo que tenga nombre de clase SHELLDLL_DefView.

Código
  1.  ''' <summary>
  2.    ''' Obtiene el identificador de WorkerW del escritorio
  3.    ''' </summary>
  4.    ''' <returns></returns>
  5.    ''' <remarks></remarks>
  6.    Public Shared Function GetHWorkerW() As IntPtr
  7.        Dim ClassNameChild As New System.Text.StringBuilder(255)
  8.        Dim hWorkerW As IntPtr
  9.        Dim hwnd As IntPtr = FindWindow(Nothing, Nothing)
  10.        Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView")
  11.            hwnd = GetNextWindow(hwnd, GW_Const.GW_HWNDNEXT)
  12.            hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD)
  13.            GetClassName(hWorkerW, ClassNameChild, 260)
  14.        Loop
  15.        Return hwnd
  16.    End Function
  17.    '//Otra forma de obtener el handle de WorkerW
  18.    ' ''' <summary>
  19.    ' ''' Obtiene el identificador de WorkerW del escritorio
  20.    ' ''' </summary>
  21.    ' ''' <returns></returns>
  22.    ' ''' <remarks></remarks>
  23.    'Public Shared Function GetHWorkerW() As IntPtr
  24.    '    Dim ClassNameChild As New System.Text.StringBuilder(255)
  25.    '    Dim hWorkerW As IntPtr
  26.    '    Dim hwnd As IntPtr = FindWindow("Progman", Nothing)
  27.    '    Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView")
  28.    '        hwnd = GetWindow(hwnd, GW_Const.GW_HWNDPREV)
  29.    '        hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD)
  30.    '        GetClassName(hWorkerW, ClassNameChild, 260)
  31.    '    Loop
  32.    '    Return hwnd
  33.    'End Function


Modificando el  código quedaría así .

Código
  1. ''' <summary>
  2. ''' Clase NativeMethods
  3. ''' </summary>
  4. ''' <remarks></remarks>
  5. <System.Security.SuppressUnmanagedCodeSecurity()>
  6. Friend NotInheritable Class NativeMethods
  7.    Inherits Attribute
  8.    Private Sub New()
  9.    End Sub
  10.    ''' <summary>
  11.    ''' Función que devuelve el identificador de una ventana
  12.    ''' </summary>
  13.    ''' <param name="lpClassName">Nombre de la clase de la ventana</param>
  14.    ''' <param name="lpWindowName">El nombre de la ventana (el título de la ventana)</param>
  15.    ''' <returns></returns>
  16.    ''' <remarks></remarks>
  17.    <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _
  18.    Private Shared Function FindWindow(
  19.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String,
  20.                                      <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr
  21.    End Function
  22.  
  23.    ''' <summary>
  24.    ''' Recupera un identificador a una ventana cuyo nombre de clase
  25.    ''' y nombre de la ventana que coincida con las cadenas especificadas.
  26.    ''' La función busca en ventanas secundarias, comenzando por la raíz de la
  27.    ''' ventana secundaria especificada. Esta función no realiza una búsqueda
  28.    ''' entre mayúsculas y minúsculas.
  29.    ''' </summary>
  30.    ''' <param name="hWnd1">Un identificador de la ventana padre cuyo hijo son ventanas que se debe buscar</param>
  31.    ''' <param name="hWnd2">Un identificador de una ventana secundaria</param>
  32.    ''' <param name="lpsz1">El nombre de la clase o un átomo de clase creada por una llamada previa a la RegisterClass o RegisterClassEx función</param>
  33.    ''' <param name="lpsz2">El nombre de la ventana (el título de la ventana)</param>
  34.    ''' <returns></returns>
  35.    ''' <remarks></remarks>
  36.    <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _
  37.    Private Shared Function FindWindowEx(
  38.                                        ByVal hWnd1 As IntPtr,
  39.                                        ByVal hWnd2 As IntPtr,
  40.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String,
  41.                                        <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr
  42.  
  43.    End Function
  44.    ''' <summary>
  45.    ''' Envía el mensaje especificado a una ventana o ventanas.
  46.    ''' La función SendMessagellama al procedimiento de ventana de la ventana especificada
  47.    ''' y no vuelve hasta que el procedimiento de la ventana ha procesado el mensaje.
  48.    ''' </summary>
  49.    ''' <param name="hwnd">Un identificador de la ventana</param>
  50.    ''' <param name="wMsg">El mensaje que se enviará.</param>
  51.    ''' <param name="wParam">Información adicional-mensaje específico.</param>
  52.    ''' <param name="lParam">Información adicional-mensaje específico.</param>
  53.    ''' <returns></returns>
  54.    ''' <remarks></remarks>
  55.    <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _
  56.    Private Shared Function SendMessage(ByVal hwnd As IntPtr,
  57.                                        ByVal wMsg As Integer,
  58.                                        ByVal wParam As Integer,
  59.                                        lParam As Integer) As Boolean
  60.    End Function
  61.  
  62.    <DllImport("user32.dll")> _
  63.    Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
  64.    End Function
  65.  
  66.    Private Const WM_COMMAND = &H111
  67.    ''' <summary>
  68.    ''' Valores wParam para SendMessage que cambia el estilo de visualización
  69.    ''' del escritorio
  70.    ''' </summary>
  71.    ''' <remarks></remarks>
  72.    Public Enum viewOptIcon As Integer
  73.        vIconosMuyGrandes = &H704D
  74.        vIconosGrandes = &H704F
  75.        vIconosMedianos = &H704E
  76.        vIconosPequeños = &H7050
  77.        vLista = &H7051
  78.        vDetalle = &H704B
  79.        vContenido = &H7052
  80.        vMosaico = &H704C
  81.        vOcultarIconos = &H7073 '(no bloquea el escritorio)
  82.        vQuitarEtiquetas = &H7037
  83.    End Enum
  84.    Public Const GW_HWNDNEXT = 2
  85.  
  86.    <DllImport("user32", EntryPoint:="GetWindow", SetLastError:=True)> _
  87.    Public Shared Function GetNextWindow(ByVal hwnd As IntPtr, ByVal wFlag As Integer) As IntPtr
  88.    End Function
  89.    <DllImport("user32", SetLastError:=True)> _
  90.    Private Shared Function GetWindow(ByVal hwnd As IntPtr, ByVal wCmd As Integer) As IntPtr
  91.    End Function
  92.  
  93.    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
  94.    Private Shared Function GetClassName(ByVal hWnd As System.IntPtr, _
  95.   ByVal lpClassName As System.Text.StringBuilder, _
  96.   ByVal nMaxCount As Integer) As Integer
  97.    End Function
  98.  
  99.    Public Enum GW_Const
  100.        GW_CHILD = 5
  101.        GW_HWNDFIRST = 0
  102.        GW_HWNDLAST = 1
  103.        GW_HWNDNEXT = 2
  104.        GW_HWNDPREV = 3
  105.        GW_MAX = 5
  106.        GW_OWNER = 4
  107.    End Enum
  108.    ''' <summary>
  109.    ''' Cambia el estilo de visualización de los iconos del escritorio [by @Okik]
  110.    ''' </summary>
  111.    ''' <param name="intValueView">Valor wParam para SendMessage</param>
  112.    ''' <remarks></remarks>
  113.    Public Shared Sub ViewModeIconDesktop(ByVal intValueView As viewOptIcon)
  114.        Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager")
  115.        Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", Nothing)
  116.  
  117.        If hDefView = IntPtr.Zero Then
  118.            Dim hWorkerW As IntPtr = GetHWorkerW()
  119.            hDefView = FindWindowEx(hWorkerW, IntPtr.Zero, "SHELLDLL_DefView", Nothing)
  120.        End If
  121.        SendMessage(hDefView, WM_COMMAND, intValueView, &H0)
  122.    End Sub
  123.  
  124.    ''' <summary>
  125.    ''' Oculta las cabeceras de modo 'detalle' del escritorio
  126.    ''' </summary>
  127.    ''' <param name="sH32State">Valor ncmdShow para ShowWindow// True=Hide, False=Normal </param>
  128.    ''' <remarks></remarks>
  129.    Public Shared Sub HideHeaderListView(ByVal sH32State As Boolean)
  130.        Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager")
  131.        Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", Nothing)
  132.        If hDefView = IntPtr.Zero Then
  133.            Dim hWorkerW As IntPtr = GetHWorkerW()
  134.            hDefView = FindWindowEx(hWorkerW, IntPtr.Zero, "SHELLDLL_DefView", Nothing)
  135.        End If
  136.        Dim hSysListView32 As IntPtr = FindWindowEx(hDefView, IntPtr.Zero, "SysListView32", Nothing)
  137.        Dim hSysHeader32 As IntPtr = FindWindowEx(hSysListView32, IntPtr.Zero, "SysHeader32", Nothing)
  138.        ShowWindow(hSysHeader32, Convert.ToInt32(sH32State))
  139.    End Sub
  140.  
  141.    ''' <summary>
  142.    ''' Obtiene el identificador de WorkerW del escritorio
  143.    ''' </summary>
  144.    ''' <returns></returns>
  145.    ''' <remarks></remarks>
  146.    Public Shared Function GetHWorkerW() As IntPtr
  147.        Dim ClassNameChild As New System.Text.StringBuilder(255)
  148.        Dim hWorkerW As IntPtr
  149.        Dim hwnd As IntPtr = FindWindow(Nothing, Nothing)
  150.        Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView")
  151.            hwnd = GetNextWindow(hwnd, GW_Const.GW_HWNDNEXT)
  152.            hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD)
  153.             GetClassName(hWorkerW, ClassNameChild, 260)
  154.        Loop
  155.        Return hwnd
  156.    End Function
  157.    '//Otra forma de obtener el handle de WorkerW
  158.    ' ''' <summary>
  159.    ' ''' Obtiene el identificador de WorkerW del escritorio
  160.    ' ''' </summary>
  161.    ' ''' <returns></returns>
  162.    ' ''' <remarks></remarks>
  163.    'Public Shared Function GetHWorkerW() As IntPtr
  164.    '    Dim ClassNameChild As New System.Text.StringBuilder(255)
  165.    '    Dim hWorkerW As IntPtr
  166.    '    Dim hwnd As IntPtr = FindWindow("Progman", Nothing)
  167.    '    Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView")
  168.    '        hwnd = GetWindow(hwnd, GW_Const.GW_HWNDPREV)
  169.    '        hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD)
  170.    '        GetClassName(hWorkerW, ClassNameChild, 260)
  171.    '    Loop
  172.    '    Return hwnd
  173.    'End Function
  174. End Class


En GetHWorkerW podría devolver directamente el handle de 'SHELLDLL_DefView' y ahorrarme alguna línea. Pero lo dejo así.




466  Foros Generales / Foro Libre / Re: Descarga de libros en pdf en: 30 Septiembre 2016, 10:40 am
Esque creo qe lo quete pasa es que no entiendes como funciona adfly. Adfly es un acortador de urls, donde tu pones tu link te hace la url mas corta y ademas pasa por su web donde hay anuncios, por cada x personas pasadas por esa url te da x dinero. Es decir adfly es un sitio seguro si no le das a ningun anuncio.
Si te fijas cuando clicas en el link te redirige a adfly. Una vez alli te pone una cuenta atras de 5s y una vez termina le das a saltar publicidad y te lleva al link original ( en este caso te lleva a otro acortador parecido a adfly y luego al link original) hazme caso, dale a saltar publicidad y no le des a ninguno de los anuncios que te aparecen
De todos modos mi propuesta sigue en pie

Si algo me toca las narices es que me hablen como si fuera tonto de culo. Y perdome mi mal carácter pero es que estas cosas me cabrean que no veas.


¿Tengo que grabar un vídeo para demostrar lo que digo? LE HE DADO  UNA DECENA DE VECES A "SALTAR PUBLICIDAD" tras los segundos. No soy tonto se leer y he visto las instrucciones.

Te diré lo que pasa. Esa ***** ventanas estafa que han puesto los piratas ... esos solo funciona con IE11, y pongo puntos suspensivos por no decir otra cosa. IE11 es lo que usé ayer por razones que no necesito comentar. Mientras intentaba dormir caí en la cuenta y hoy lo primero que he hecho ha sido probar con el XP en virtual, con IE8 no ocurre, te redirecciona correctamente.

 Y con Chrome independientemente del OS te redirecciona también correctamente y te sale la barrita verde. Sin embargo abajo de la barra [verde] otra basura de esas "Estimado usuario de Chrome- ¿Felicidades usted es el afortunado usuario de Chrome del día....". Si ahí está el enlace hacia mega, pero no exime que te salga abajo otro anuncio basura.

Por eso a ti y a otros amigo, no le ocurre lo que a mí. Porque habéis usado Firefox, Chrome o un IE8 quizás posterior al 8 y anterior al 11 porque no se si solo es con el 11


Si vais a usar este enlace:
http://difundeconocimiento.esy.es/libros/fp/libros-de-fp/

o este otro:
http://adf.ly/1dxceZ

total el primero te va a mandar al segundo...
NO USEIS Internet Explorer 11


¿que como lo se? lo he testado así de simple.  ¿lo entiendes ahora?
467  Foros Generales / Foro Libre / Re: Descarga de libros en pdf en: 29 Septiembre 2016, 22:10 pm
gracias  haré desde el virtual. Hasta que me salga el dichoso enlace verde.

pero vamos que 'libre de bichos' y de estafas, robo de contraseñas y porquerías de esas no me parece que esté. Por lo menos en el transcurso de conseguir el comprimido.

Supongo que si tienes algún plugin o extensión que bloquee este tipo de cosas no te sale.

468  Foros Generales / Foro Libre / Re: Descarga de libros en pdf en: 29 Septiembre 2016, 21:41 pm
Creo q no le das a "saltar publicidad" en adfly, sino, no te entiendo...

jaja, dale tu a ver que pasa

ahora mismo le acabo de dar otra vez y me sale entrar en Facebook, q hp. Ahora tendré que cambiar la contraseña porque tengo indentity safe que lo mete de automáticamente, gracias hombre.
469  Foros Generales / Foro Libre / Re: Descarga de libros en pdf en: 29 Septiembre 2016, 21:33 pm
A eso es obvio que no le tienes que dar, andaluz se referia dentro de los .rar

Yo me he descargado varios y sin ningun problema

Que rars. porque cada enlace que le doy me manda a esa ***** de página


Encima te dicen que le des para descargar le des justamente esos enlaces puñeteros por no decir otra cosa

http://difundeconocimiento.esy.es/como-descargar/

El enlace de descarga es una lotería unas veces te sale y otras no. Y siempre habrá algún tontainas que cae en el engaño y le da a "Reparar"
470  Foros Generales / Foro Libre / Re: Descarga de libros en pdf en: 29 Septiembre 2016, 21:22 pm

Confirmo que esta totalmente libre de virus me lo acabo de descargar y están completos los libros es un aporte buenísimo sobre todo para los que estamos pelado de dinero y quieren estudiar. ;-) ;-) ;-)

Que pena que no se puedan dar puntos a la gente que aportan a este foro si no por mi te daba infinitos. :xD

Me ha servido de gran ayuda, muchas gracias.



¿Libre de virus?
Nada mas darle a uno de sus enlaces me manda a http://adf.ly/1dxceZ y al darle a unos de sus enlaces me sale una página de Advertencia de seguridad con apariencia de 'Microsoft' más  falsa que un billete de tres euros. De hecho cada vez que le doy me  redirecciona a otra página del mismo tipo de esas que te obligan a hacer clic en un cuadro de diálogo si o si.

Me dice que tengo daños en el equpo bla, bla, dale a aquí para reparar XD que hp.


... y otra falsa de flash player también con su diálogo de los cojones
Páginas: 1 ... 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [47] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ... 80
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines