|
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 <requestedExecutionLevel level="asInvoker" uiAccess="false" />
quitas asInvoker y pones requireAdministratorte quedará así: <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
|
Eso es para archivos no para carpetas... si no me equivoco
Ahora lo miro a ver...
Pues lo que decía ese código es para cifrar el contenido de un archivo. Imports System.IO Imports System.Security Imports System.Security.Cryptography Imports System.Runtime.InteropServices Imports System.Text Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Must be 64 bits, 8 bytes. ' Distribute this key to the user who will decrypt this file. Dim sSecretKey As String sSecretKey = CSEncryptDecrypt.Class1.GenerateKey() ' Get the Key for the file to Encrypt. Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned) ' For additional security Pin the key. CSEncryptDecrypt.Class1.EncryptFile("C:\Prueba\Texto.txt", "C:\Prueba\TextoEncrypt.txt", sSecretKey) ' Encrypt the file. CSEncryptDecrypt.Class1.ZeroMemory(gch.AddrOfPinnedObject(), CType(sSecretKey.Length * 2, IntPtr)) gch.Free() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' Must be 64 bits, 8 bytes. ' Distribute this key to the user who will decrypt this file. Dim sSecretKey As String sSecretKey = CSEncryptDecrypt.Class1.GenerateKey() ' Get the Key for the file to Encrypt. Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned) CSEncryptDecrypt.Class1.DecryptFile("C:\Prueba\TextoEncrypt.txt", "C:\Prueba\Decrypt.txt", sSecretKey) ' Decrypt the file. CSEncryptDecrypt.Class1.ZeroMemory(gch.AddrOfPinnedObject(), CType(sSecretKey.Length * 2, IntPtr)) ' Remove the Key from memory. gch.Free() End Sub End Class Namespace CSEncryptDecrypt Class Class1 <DllImport("kernel32.dll")> _ Public Shared Sub ZeroMemory(ByVal addr As IntPtr, ByVal size As IntPtr) End Sub ' Call this function to remove the key from memory after use for security '<System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint:="RtlZeroMemory")> _ 'Public Shared Function ZeroMemory(Destination As IntPtr, Length As Integer) As Boolean 'End Function ' Function to Generate a 64 bits Key. Public Shared Function GenerateKey() As String ' Create an instance of Symetric Algorithm. Key and IV is generated automatically. Dim desCrypto As DESCryptoServiceProvider = DirectCast(DESCryptoServiceProvider.Create(), DESCryptoServiceProvider) ' Use the Automatically generated key for Encryption. Return ASCIIEncoding.ASCII.GetString(desCrypto.Key) End Function Public Shared Sub EncryptFile(sInputFilename As String, sOutputFilename As String, sKey As String) Dim fsInput As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read) Dim fsEncrypted As New FileStream(sOutputFilename, FileMode.Create, FileAccess.Write) Dim DES As New DESCryptoServiceProvider() DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey) DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey) Dim desencrypt As ICryptoTransform = DES.CreateEncryptor() Dim cryptostream As New CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write) Dim bytearrayinput As Byte() = New Byte(CInt(fsInput.Length - 1)) {} fsInput.Read(bytearrayinput, 0, bytearrayinput.Length) cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length) cryptostream.Close() fsInput.Close() fsEncrypted.Close() End Sub Public Shared Sub DecryptFile(sInputFilename As String, sOutputFilename As String, sKey As String) Dim DES As New DESCryptoServiceProvider() 'A 64 bit key and IV is required for this provider. 'Set secret key For DES algorithm. DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey) 'Set initialization vector. DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey) 'Create a file stream to read the encrypted file back. Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read) 'Create a DES decryptor from the DES instance. Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor() 'Create crypto stream set to read and do a 'DES decryption transform on incoming bytes. Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read) 'Print the contents of the decrypted file. Dim fsDecrypted As New StreamWriter(sOutputFilename) fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd()) fsDecrypted.Flush() fsDecrypted.Close() End Sub End Class End Namespace
Encontré este código lo he testado y funciona: Imports System.Security.AccessControl Imports System.IO Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim FolderBrowserDialog1 As New FolderBrowserDialog With FolderBrowserDialog1 If .ShowDialog() = DialogResult.OK Then TextBox1.Text = .SelectedPath End If End With End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim fs As FileSystemSecurity = File. GetAccessControl(TextBox1. Text) fs.AddAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny)) File. SetAccessControl(TextBox1. Text, CType(fs, FileSecurity )) End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim fs As FileSystemSecurity = File. GetAccessControl(TextBox1. Text) fs.RemoveAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny)) File. SetAccessControl(TextBox1. Text, CType(fs, FileSecurity )) End Sub 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 Public Shared Sub ViewModeIconDesktop(ByVal intValueView As Integer) Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager") Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) SendMessage(hDefView, WM_COMMAND, intValueView, &H0) End Sub
y luego desde un botón: 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 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: <DllImport("User32.dll", SetLastError:=True)> Friend Shared Function SendMessageTimeout(ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer, ByVal flags As Integer, ByVal timeout As Integer, <Out> ByRef refResult As Integer ) As IntPtr End Function Private Const WM_SETTINGCHANGE = &H1A Private Const HWND_BROADCAST = &HFFFF& Private Const SPI_SETNONCLIENTMETRICS = 42 Private Const SMTO_ABORTIFHUNG = &H2 Public Shared Sub RefreshWindows() SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, &H0, SMTO_ABORTIFHUNG, &H100, &H0) 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: Const WM_USER = &H400 Dim hProgman As IntPtr = FindWindow("Progman", "Program Manager") 'SendMessage(hProgman, &H460, &H0, WM_USER) SendMessage(hProgman, &H45A, &H0, WM_USER)
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... [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: Const WM_COMMAND = &H111 Const WP_REFRESH_DESKTOP = &H7103 Const WP_REFRESH_CABINET = &HA220 Const WP_REFRESH_EXPLORER = &H7FEF 'Refrescar Escritorio Dim hProgMan As IntPtr Dim hDefView As IntPtr hProgMan = FindWindow("Progman", "Program Manager") hDefView = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) SendMessage(hDefView, WM_COMMAND, WP_REFRESH_DESKTOP, &H0) 'Refrescar Explorer Dim hCabinetWClass As IntPtr hCabinetWClass = FindWindow("CabinetWClass", vbNullString) SendMessage(hCabinetWClass, WM_COMMAND, WP_REFRESH_CABINET, &H0) 'Refrescar explorer Windows XP 'Dim hExploreWClass As IntPtr ' hExploreWClass = FindWindow("ExploreWClass", vbNullString) 'SendMessage hExploreWClass, WM_COMMAND, WP_REFRESH_EXPLORER, &H0
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. <System.Security.SuppressUnmanagedCodeSecurity()> Friend NotInheritable Class NativeMethods Inherits Attribute Private Sub New() End Sub <DllImport("User32.dll", SetLastError:=True)> Friend Shared Function SendMessageTimeout(ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer, ByVal flags As Integer, ByVal timeout As Integer, <Out> ByRef refResult As Integer ) As IntPtr End Function <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _ Private Shared Function FindWindowEx( ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr End Function <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _ Private Shared Function FindWindow( <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr End Function <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _ Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Integer) As Boolean End Function <DllImport("User32.dll", SetLastError:=True)> Friend Shared Function SendMessageTimeout(ByVal hwnd As IntPtr, ByVal msg As WindowsMessages, ByVal wParam As IntPtr, ByVal lParam As IntPtr, ByVal flags As SendMessageTimeoutFlags, ByVal timeout As Integer, <Out> ByRef refResult As IntPtr ) As IntPtr End Function Friend Enum SendMessageTimeoutFlags As Integer Normal = &H0 Block = &H1 AbortIfHung = &H2 NoTimeoutIfNotHung = &H8 ErrorOnExit = &H20 End Enum Friend Enum WindowsMessages As Integer HWND_Broadcast = &HFFFF WM_SettingChange = &H1A End Enum Const WM_COMMAND = &H111 Const WP_REFRESH_DESKTOP = &H7103 Const WP_REFRESH_CABINET = &HA220 Const WP_REFRESH_EXPLORER = &H7FEF Public Shared Sub RefreshWindows() 'Refrescar escritorio Dim hProgMan As IntPtr Dim hDefView As IntPtr hProgMan = FindWindow("Progman", "Program Manager") hDefView = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) SendMessage(hDefView, WM_COMMAND, WP_REFRESH_DESKTOP, &H0) 'Refrescar Explorer Dim hCabinetWClass As IntPtr hCabinetWClass = FindWindow("CabinetWClass", vbNullString) SendMessage(hCabinetWClass, WM_COMMAND, WP_REFRESH_CABINET, &H0) 'Refrescar Explorer (Windows XP) 'Dim hExploreWClass As IntPtr 'hExploreWClass = FindWindow("ExploreWClass", vbNullString) 'SendMessage hExploreWClass, WM_COMMAND, WP_REFRESH_EXPLORER, &H0 'Refrescar los iconos SendMessageTimeout(New IntPtr(WindowsMessages.HWND_Broadcast), WindowsMessages.WM_SettingChange, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.AbortIfHung, 100, IntPtr.Zero) End Sub End Class
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-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 ARTEManifestació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. 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: ''' <summary> ''' Clase NativeMethods ''' </summary> ''' <remarks></remarks> <System.Security.SuppressUnmanagedCodeSecurity()> Friend NotInheritable Class NativeMethods Inherits Attribute Private Sub New() End Sub ''' <summary> ''' Función que devuelve el identificador de una ventana ''' </summary> ''' <param name="lpClassName">Nombre de la clase de la ventana</param> ''' <param name="lpWindowName">El nombre de la ventana (el título de la ventana)</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _ Private Shared Function FindWindow( <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr End Function ''' <summary> ''' Recupera un identificador a una ventana cuyo nombre de clase ''' y nombre de la ventana que coincida con las cadenas especificadas. ''' La función busca en ventanas secundarias, comenzando por la raíz de la ''' ventana secundaria especificada. Esta función no realiza una búsqueda ''' entre mayúsculas y minúsculas. ''' </summary> ''' <param name="hWnd1">Un identificador de la ventana padre cuyo hijo son ventanas que se debe buscar</param> ''' <param name="hWnd2">Un identificador de una ventana secundaria</param> ''' <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> ''' <param name="lpsz2">El nombre de la ventana (el título de la ventana)</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _ Private Shared Function FindWindowEx( ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr End Function ''' <summary> ''' Envía el mensaje especificado a una ventana o ventanas. ''' La función SendMessagellama al procedimiento de ventana de la ventana especificada ''' y no vuelve hasta que el procedimiento de la ventana ha procesado el mensaje. ''' </summary> ''' <param name="hwnd">Un identificador de la ventana</param> ''' <param name="wMsg">El mensaje que se enviará.</param> ''' <param name="wParam">Información adicional-mensaje específico.</param> ''' <param name="lParam">Información adicional-mensaje específico.</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _ Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Integer) As Boolean End Function Private Const WM_COMMAND = &H111 ''' <summary> ''' Valores wParam para SendMessage que cambia el estilo de visualización ''' del escritorio ''' </summary> ''' <remarks></remarks> Public Enum viewOptIcon As Integer vIconosMuyGrandes = &H704D vIconosGrandes = &H704F vIconosMedianos = &H704E vIconosPequeños = &H7050 vLista = &H7051 vDetalle = &H704B vContenido = &H7052 vMosaico = &H704C vOcultarIconos = &H7073 '(no bloquea el escritorio) vQuitarEtiquetas = &H7037 End Enum ''' <summary> ''' Cambia el estilo de visualización de los iconos del escritorio [by @Okik] ''' </summary> ''' <param name="intValueView">Valor wParam para SendMessage</param> ''' <remarks></remarks> Public Shared Sub ViewModeIconDesktop(ByVal intValueView As viewOptIcon) Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager") Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) SendMessage(hDefView, WM_COMMAND, intValueView, &H0) End Sub End Class
Para usarlo se realiza de la forma siguiente: NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vLista)
Aquí dejo un código completo de ejemplo para cambiar todas las vistas:Imports System.Runtime.InteropServices Public NotInheritable Class Form1 : Inherits Form Friend rdButton(7) As RadioButton Friend chkBox(1) As CheckBox Sub New() ' Llamada necesaria para el diseñador. InitializeComponent() ' Agregue cualquier inicialización después de la llamada a InitializeComponent(). Dim N As Integer = 10 For Index As Integer = 0 To 7 rdButton(Index) = New RadioButton With {.AutoSize = True, .Location = New Point(10, N)} N = N + 20 AddHandler rdButton(Index).Click, AddressOf rdButton_Click Next Index rdButton(0).Text = "Iconos Muy Grandes" rdButton(1).Text = "Iconos Grandes" rdButton(2).Text = "Iconos Medianos" rdButton(3).Text = "Iconos Pequeños" rdButton(4).Text = "Lista" rdButton(5).Text = "Detalle" rdButton(6).Text = "Mosaico" rdButton(7).Text = "Contenido" rdButton(3).Checked = True chkBox(0) = New CheckBox With { .Location = New Point(10, rdButton(7).Top + 30), .AutoSize = True, .Text = "Ocultar/Mostrar Etiquetas (Solo en modo Icono y Detalle)" } chkBox(1) = New CheckBox With { .Location = New Point(10, chkBox(0).Top + 25), .AutoSize = True, .Text = "Ocultar/Mostrar Iconos" } For Index As Integer = 0 To 1 AddHandler chkBox(Index).CheckedChanged, AddressOf chkBox_CheckedChanged Next End Sub Private Sub chkBox_CheckedChanged(sender As Object, e As EventArgs) Dim Index As Integer = Array.IndexOf(chkBox, sender) Select Case Index Case 0 If chkBox(1).Checked = True Then NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vQuitarEtiquetas) Else NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vQuitarEtiquetas) End If Case 1 If chkBox(0).Checked = True Then NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vOcultarIconos) Else NativeMethods.ViewModeIconDesktop(NativeMethods.viewOptIcon.vOcultarIconos) End If End Select 'NOTA: 'Ten en cuenta que esta aplicación no tiene medio para saber, al iniciarse, si el escritorio tiene 'los iconos ocultos o no, o sin etiquetas, para establecer el valor verdadero o falso de 'los objetos CheckBox End Sub Private Sub rdButton_Click(sender As Object, e As EventArgs) Dim Index As Integer = Array.IndexOf(rdButton, sender) Select Case Index Case 0 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosMuyGrandes) Case 1 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosGrandes) Case 2 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosMedianos) Case 3 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vIconosPequeños) Case 4 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vLista) Case 5 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vDetalle) Case 6 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vContenido) Case 7 : NativeMethods.ViewModeIconDesktop(intValueView:=NativeMethods.viewOptIcon.vMosaico) End Select End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load For Index As Integer = 0 To 7 Me.Controls.Add(Me.rdButton(Index)) Next For Index As Integer = 0 To 1 Me.Controls.Add(Me.chkBox(Index)) Next End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) End Sub End Class ''' <summary> ''' Clase NativeMethods ''' </summary> ''' <remarks></remarks> <System.Security.SuppressUnmanagedCodeSecurity()> Friend NotInheritable Class NativeMethods Inherits Attribute Private Sub New() End Sub ''' <summary> ''' Función que devuelve el identificador de una ventana ''' </summary> ''' <param name="lpClassName">Nombre de la clase de la ventana</param> ''' <param name="lpWindowName">El nombre de la ventana (el título de la ventana)</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _ Private Shared Function FindWindow( <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr End Function ''' <summary> ''' Recupera un identificador a una ventana cuyo nombre de clase ''' y nombre de la ventana que coincida con las cadenas especificadas. ''' La función busca en ventanas secundarias, comenzando por la raíz de la ''' ventana secundaria especificada. Esta función no realiza una búsqueda ''' entre mayúsculas y minúsculas. ''' </summary> ''' <param name="hWnd1">Un identificador de la ventana padre cuyo hijo son ventanas que se debe buscar</param> ''' <param name="hWnd2">Un identificador de una ventana secundaria</param> ''' <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> ''' <param name="lpsz2">El nombre de la ventana (el título de la ventana)</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _ Private Shared Function FindWindowEx( ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr End Function ''' <summary> ''' Envía el mensaje especificado a una ventana o ventanas. ''' La función SendMessagellama al procedimiento de ventana de la ventana especificada ''' y no vuelve hasta que el procedimiento de la ventana ha procesado el mensaje. ''' </summary> ''' <param name="hwnd">Un identificador de la ventana</param> ''' <param name="wMsg">El mensaje que se enviará.</param> ''' <param name="wParam">Información adicional-mensaje específico.</param> ''' <param name="lParam">Información adicional-mensaje específico.</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _ Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Integer) As Boolean End Function Private Const WM_COMMAND = &H111 ''' <summary> ''' Valores wParam para SendMessage que cambia el estilo de visualización ''' del escritorio ''' </summary> ''' <remarks></remarks> Public Enum viewOptIcon As Integer vIconosMuyGrandes = &H704D vIconosGrandes = &H704F vIconosMedianos = &H704E vIconosPequeños = &H7050 vLista = &H7051 vDetalle = &H704B vContenido = &H7052 vMosaico = &H704C vOcultarIconos = &H7073 '(no bloquea el escritorio) vQuitarEtiquetas = &H7037 End Enum ''' <summary> ''' Cambia el estilo de visualización de los iconos del escritorio [by @Okik] ''' </summary> ''' <param name="intValueView">Valor wParam para SendMessage</param> ''' <remarks></remarks> Public Shared Sub ViewModeIconDesktop(ByVal intValueView As viewOptIcon) Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager") Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) SendMessage(hDefView, WM_COMMAND, intValueView, &H0) End Sub End Class
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: ''' <summary> ''' Oculta la cabecera del modo 'Detalle' del escritorio ''' </summary> ''' <param name="sH32State">Valor ncmdShow para ShowWindow// True=Hide, False=Normal </param> ''' <remarks></remarks> Public Shared Sub HideHeaderListView(ByVal sH32State As Boolean) Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager") Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) Dim hSysListView32 As IntPtr = FindWindowEx(hDefView, IntPtr.Zero, "SysListView32", vbNullString) Dim hSysHeader32 As IntPtr = FindWindowEx(hSysListView32, IntPtr.Zero, "SysHeader32", vbNullString) ShowWindow(hSysHeader32, Convert.ToInt32(sH32State)) End Sub
para ocultar se llamaría así 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 WorkerWHoy 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 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. ''' <summary> ''' Obtiene el identificador de WorkerW del escritorio ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Shared Function GetHWorkerW() As IntPtr Dim ClassNameChild As New System.Text.StringBuilder(255) Dim hWorkerW As IntPtr Dim hwnd As IntPtr = FindWindow(Nothing, Nothing) Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView") hwnd = GetNextWindow(hwnd, GW_Const.GW_HWNDNEXT) hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD) GetClassName(hWorkerW, ClassNameChild, 260) Loop Return hwnd End Function '//Otra forma de obtener el handle de WorkerW ' ''' <summary> ' ''' Obtiene el identificador de WorkerW del escritorio ' ''' </summary> ' ''' <returns></returns> ' ''' <remarks></remarks> 'Public Shared Function GetHWorkerW() As IntPtr ' Dim ClassNameChild As New System.Text.StringBuilder(255) ' Dim hWorkerW As IntPtr ' Dim hwnd As IntPtr = FindWindow("Progman", Nothing) ' Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView") ' hwnd = GetWindow(hwnd, GW_Const.GW_HWNDPREV) ' hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD) ' GetClassName(hWorkerW, ClassNameChild, 260) ' Loop ' Return hwnd 'End Function
Modificando el código quedaría así .''' <summary> ''' Clase NativeMethods ''' </summary> ''' <remarks></remarks> <System.Security.SuppressUnmanagedCodeSecurity()> Friend NotInheritable Class NativeMethods Inherits Attribute Private Sub New() End Sub ''' <summary> ''' Función que devuelve el identificador de una ventana ''' </summary> ''' <param name="lpClassName">Nombre de la clase de la ventana</param> ''' <param name="lpWindowName">El nombre de la ventana (el título de la ventana)</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="FindWindowA", SetLastError:=True)> _ Private Shared Function FindWindow( <MarshalAs(UnmanagedType.LPStr)> ByVal lpClassName As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpWindowName As String) As IntPtr End Function ''' <summary> ''' Recupera un identificador a una ventana cuyo nombre de clase ''' y nombre de la ventana que coincida con las cadenas especificadas. ''' La función busca en ventanas secundarias, comenzando por la raíz de la ''' ventana secundaria especificada. Esta función no realiza una búsqueda ''' entre mayúsculas y minúsculas. ''' </summary> ''' <param name="hWnd1">Un identificador de la ventana padre cuyo hijo son ventanas que se debe buscar</param> ''' <param name="hWnd2">Un identificador de una ventana secundaria</param> ''' <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> ''' <param name="lpsz2">El nombre de la ventana (el título de la ventana)</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="FindWindowExA", SetLastError:=True)> _ Private Shared Function FindWindowEx( ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz1 As String, <MarshalAs(UnmanagedType.LPStr)> ByVal lpsz2 As String) As IntPtr End Function ''' <summary> ''' Envía el mensaje especificado a una ventana o ventanas. ''' La función SendMessagellama al procedimiento de ventana de la ventana especificada ''' y no vuelve hasta que el procedimiento de la ventana ha procesado el mensaje. ''' </summary> ''' <param name="hwnd">Un identificador de la ventana</param> ''' <param name="wMsg">El mensaje que se enviará.</param> ''' <param name="wParam">Información adicional-mensaje específico.</param> ''' <param name="lParam">Información adicional-mensaje específico.</param> ''' <returns></returns> ''' <remarks></remarks> <DllImport("user32", EntryPoint:="SendMessageA", SetLastError:=True)> _ Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Integer) As Boolean End Function <DllImport("user32.dll")> _ Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean End Function Private Const WM_COMMAND = &H111 ''' <summary> ''' Valores wParam para SendMessage que cambia el estilo de visualización ''' del escritorio ''' </summary> ''' <remarks></remarks> Public Enum viewOptIcon As Integer vIconosMuyGrandes = &H704D vIconosGrandes = &H704F vIconosMedianos = &H704E vIconosPequeños = &H7050 vLista = &H7051 vDetalle = &H704B vContenido = &H7052 vMosaico = &H704C vOcultarIconos = &H7073 '(no bloquea el escritorio) vQuitarEtiquetas = &H7037 End Enum Public Const GW_HWNDNEXT = 2 <DllImport("user32", EntryPoint:="GetWindow", SetLastError:=True)> _ Public Shared Function GetNextWindow(ByVal hwnd As IntPtr, ByVal wFlag As Integer) As IntPtr End Function <DllImport("user32", SetLastError:=True)> _ Private Shared Function GetWindow(ByVal hwnd As IntPtr, ByVal wCmd As Integer) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function GetClassName(ByVal hWnd As System.IntPtr, _ ByVal lpClassName As System.Text.StringBuilder, _ ByVal nMaxCount As Integer) As Integer End Function Public Enum GW_Const GW_CHILD = 5 GW_HWNDFIRST = 0 GW_HWNDLAST = 1 GW_HWNDNEXT = 2 GW_HWNDPREV = 3 GW_MAX = 5 GW_OWNER = 4 End Enum ''' <summary> ''' Cambia el estilo de visualización de los iconos del escritorio [by @Okik] ''' </summary> ''' <param name="intValueView">Valor wParam para SendMessage</param> ''' <remarks></remarks> Public Shared Sub ViewModeIconDesktop(ByVal intValueView As viewOptIcon) Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager") Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", Nothing) If hDefView = IntPtr.Zero Then Dim hWorkerW As IntPtr = GetHWorkerW() hDefView = FindWindowEx(hWorkerW, IntPtr.Zero, "SHELLDLL_DefView", Nothing) End If SendMessage(hDefView, WM_COMMAND, intValueView, &H0) End Sub ''' <summary> ''' Oculta las cabeceras de modo 'detalle' del escritorio ''' </summary> ''' <param name="sH32State">Valor ncmdShow para ShowWindow// True=Hide, False=Normal </param> ''' <remarks></remarks> Public Shared Sub HideHeaderListView(ByVal sH32State As Boolean) Dim hProgMan As IntPtr = FindWindow("Progman", "Program Manager") Dim hDefView As IntPtr = FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", Nothing) If hDefView = IntPtr.Zero Then Dim hWorkerW As IntPtr = GetHWorkerW() hDefView = FindWindowEx(hWorkerW, IntPtr.Zero, "SHELLDLL_DefView", Nothing) End If Dim hSysListView32 As IntPtr = FindWindowEx(hDefView, IntPtr.Zero, "SysListView32", Nothing) Dim hSysHeader32 As IntPtr = FindWindowEx(hSysListView32, IntPtr.Zero, "SysHeader32", Nothing) ShowWindow(hSysHeader32, Convert.ToInt32(sH32State)) End Sub ''' <summary> ''' Obtiene el identificador de WorkerW del escritorio ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Shared Function GetHWorkerW() As IntPtr Dim ClassNameChild As New System.Text.StringBuilder(255) Dim hWorkerW As IntPtr Dim hwnd As IntPtr = FindWindow(Nothing, Nothing) Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView") hwnd = GetNextWindow(hwnd, GW_Const.GW_HWNDNEXT) hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD) GetClassName(hWorkerW, ClassNameChild, 260) Loop Return hwnd End Function '//Otra forma de obtener el handle de WorkerW ' ''' <summary> ' ''' Obtiene el identificador de WorkerW del escritorio ' ''' </summary> ' ''' <returns></returns> ' ''' <remarks></remarks> 'Public Shared Function GetHWorkerW() As IntPtr ' Dim ClassNameChild As New System.Text.StringBuilder(255) ' Dim hWorkerW As IntPtr ' Dim hwnd As IntPtr = FindWindow("Progman", Nothing) ' Do While Not ClassNameChild.ToString.Equals("SHELLDLL_DefView") ' hwnd = GetWindow(hwnd, GW_Const.GW_HWNDPREV) ' hWorkerW = GetWindow(hwnd, GW_Const.GW_CHILD) ' GetClassName(hWorkerW, ClassNameChild, 260) ' Loop ' Return hwnd 'End Function 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 11Si vais a usar este enlace: http://difundeconocimiento.esy.es/libros/fp/libros-de-fp/o este otro: http://adf.ly/1dxceZtotal 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. 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
|
|
|
|
|
|
|