Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Drag & Drop en Vista (https://www.clubdelphi.com/foros/showthread.php?t=49593)

German 25-10-2007 01:10:26

Drag & Drop en Vista
 
Después de probar en Vista una aplicación inicialmente enfocada a XP, me he dado cuenta de que el mensaje WM_DROPFILES no funciona. Por ejemplo, al arrastrar un archivo sobre una ventana, este mensaje no es recibido. Parece ser que ha sido desactivado en Vista "por razones de seguridad". Me pregunto yo que razones de seguridad pueden existir para impedir decidir a una aplicación aceptar o no un archivo... ¿Sera por si algún programador con solo 2 neuronas decide aceptar cualquier archivo que arrastren a su aplicacion?. :confused:

En fin...

¿Alguien se ha topado con este problema y ha encontrado algún método para poder "detectar el drop" sobre una ventana?

Salu2.

Chris 25-10-2007 17:55:32

Tienes razón, el mensaje se ha bloqueado por cuentiones de seguridad. Ahora, solo pueden recivir este mensaje las aplicaciones que tengan el mismo nivel de seguridad que la que ha enviado el mensaje.

No puedo pornerme al 100 en este momento para buscarle una solución a este problema, porque estoy en otro proyecto por el momento, pero me interesa muchísimo, que una aplicación en la que trabajo hace un del drag & drop de archivos. Creo que si no lo hubieras posteado no me hubiera dado cuenta.

Revisa este Hilo en los foros de MSDN, ahí hablan al respecto.

P.D: Parece que el nivel de seguridad que requiere una aplicación en vista se especifican por medio del manifiest del EXE, el mismo que se utiliza en XP para utilizar los temas visuales.

German 25-10-2007 18:05:41

Si, encontre ese post tras dar de alta el tema aqui. Tengo que hacer pruebas sobre ello. Ya comentare...

Gracias.
Salu2.

German 26-10-2007 21:57:37

Bueno, realmente se soluciona el problema con un manifest. La manera más cómoda es crear un archivo de texto que contenga el siguiente código:

Código:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
        <dependency>
                <dependentAssembly>
                        <assemblyIdentity
                                type="win32"
                                name="Microsoft.Windows.Common-Controls"
                                version="6.0.0.0"
                                processorArchitecture="X86"
                                publicKeyToken="6595b64144ccf1df"
                                language="*"
                        />
                </dependentAssembly>
        </dependency>
        <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
                <security>
                        <requestedPrivileges>
                                <requestedExecutionLevel
                                      level="requireAdministrator"
                                      uiAccess="false"/>
                        </requestedPrivileges>
                </security>
        </trustInfo>
</assembly>

Este archivo lo guardas en la misma carpeta donde se encuentre el ejecutable y con el mismo nombre, añadiendole ".manifest". Por ejemplo, si el ejecutable se llama "QuememosVista.exe" el archivo deberia llamarse "QuememosVista.exe.manifest".

También decir que es necesario reiniciar Vista despues del proceso de instalación del programa y el manifest. Hasta entonces no funciona el "drop".

Nota: Deberia funcionar igual añadiendo el archivo como recurso al ejecutable, aunque no lo he probado.

Salu2.

Chris 27-10-2007 00:53:38

Según leí

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>

</assembly>




Según leí en varios post ese "v3" puede darnos problemas al ejecutar la aplicación en XP, es mejor cambiarlo a v2.

Además, no es tan simple, talvez con ese level="requireAdministrator" no estaría pidiendo elevar el nivel de seguridad cada vez que ejecutemos la aplicación.

German 27-10-2007 02:09:54

En cuanto al v3, quizás tengas razón. Yo no he probado la aplicación en XP con el manifest, ya que el instalador que he preparado no añade el archivo manifest si no detecta Vista.

En cuanto a la parte level="requireAdministrator", quizá fuera mejor poner level="highestAvailable" (en principio el drop necesita del mismo nivel que el "origen", por lo que en teoría de esta manera serviría tanto para un administrador como para un usuario normal).

De todas formas, aun me queda por realizar bastantes pruebas en este sentido, por que también he detectado que después de reiniciar Vista, la aplicación no tiene permisos ni siquiera para cambiar archivos en su propia carpeta... y también he detectado que no permite añadir parámetros a accesos directos creados en según que parte del menú de inicio... me tiene contento Vista.

Salu2.

dec 27-10-2007 02:17:55

Hola,

Cita:

Empezado por Germán
De todas formas, aun me queda por realizar bastantes pruebas en este sentido, por que también he detectado que después de reiniciar Vista, la aplicación no tiene permisos ni siquiera para cambiar archivos en su propia carpeta... y también he detectado que no permite añadir parámetros a accesos directos creados en según que parte del menú de inicio... me tiene contento Vista.

No me extraña... pero terminarás haciéndote con ello Germán. :confused: :rolleyes: :cool:

German 27-10-2007 02:50:43

Cita:

Empezado por dec (Mensaje 241619)
No me extraña... pero terminarás haciéndote con ello Germán. :confused: :rolleyes: :cool:

Quizás si me haga con ello, pero tal y como están las cosas, con el bajo porcentaje de usuarios que utilizan Vista, y no viéndome en la necesidad de construir aplicaciones que funcionen bajo este sistema, siempre termino por dejar aparcados estos temas por falta de interés...

Salu2.


La franja horaria es GMT +2. Ahora son las 22:39:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi