Drag&Drop funktioniert unter Vista nicht!
-
Hallo alle zusammen,
ich habe ein Problem mit der Drag&Drop Funktion unter Windows Vista!
Unten stehende Funktion ist die Drag&Drop Funktion um die Files in den ListBox "lb1" reinzuziehen.
Unter früheren Windows Versionen funktioniert es.Im header steht folgendes Makro (protected decklariert):
BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles) END_MESSAGE_MAP(TForm);In cpp Datei:
void __fastcall THauptF::WMDropFiles(TWMDropFiles &Message) { int flag = 0; int datei_anzahl, filelaenge; char FileName[MAX_PATH]; datei_anzahl = DragQueryFile((HDROP)Message.Drop,-1,NULL,0); for(int i=0; i < datei_anzahl; i++) { filelaenge = DragQueryFile((HDROP)Message.Drop,i,NULL,0); DragQueryFile((HDROP)Message.Drop,i,FileName,filelaenge+1); switch (GetDriveType(FileName)) { case DRIVE_CDROM: flag = 1; } if(flag == 0) lb1->Items->Add(FileName); } //Anzeige aktualisieren Label2->Caption = lb1->Count; zuordnung(); scrollbar(lb1); }Ich habe den Vista Manifest für die Adminrechte auch Implementiert.
Aber mit oder ohne Funktioniert Drag&Drop nach wie vor unter Vista nicht.Hat jemand ein Tip wie man die Funktion anpassen kann?
Was muss man tun um die korrekte Austausch von Nachrichten unter Vista zu ermöglichen?
-
Wenn Dein Programm elevated (als Admin läuft) ist ein Drop aus Programmen, die nicht elevated (Explorer) laufen nicht möglich.
Dies gehört zur Session Isolation!
Nur Programme im selben SIcherheits Kontext können Drag&Drop durchführen.
-
Wenn ich mein Programm unter WindowsXP ohne jeglicher Manifest kompiliere (BDS2006),
bedeutet es das die Anwendung trotzdem mit Adminrechten ausgestatet wird?
-
Unter XP läuft ein Programm in dem Kontext in dem Du angemeldet bist. Bist Du also Admin, dann läuft es als Admin.
Die UAC Manifeste spielen in XP keine Rolle und werden ignoriert.
-
Nehmen wir an ein Programm nicht mit Adminrechten läuft, aber es muss aus dem Programm in die Registry oder Prgrammverzeichnis geschrieben werden, wie kann man das dann realisieren? Wenn mit einem neuen Process, dann muss für diesen Process explizit eine ausführbare Datei compiliert werden oder wie?
-
Warum muss ein normales Programm in das Programnmverzeihcnis schreiben. Lass es bleiben.
In die Registry kannst Du schreiben, aber eben nicht nach HKLM!Oder das Programm läuft eben elevated.... dann kannst Du beides.
-
Im Programmverzeichnis wird bei mir eine *.ini Datei abgelegt.
Soll sie besser im Profilverzeichnis abgelegt werden?In die Registry wird in Autostart geschrieben, um einen Modul beim hochfahren zu starten. Was würdest Du in diese Sitiation mir empfehlen?
-
Viele Lösungsansätze.
1. Run/Autostart gibt es für jeden User unter HKCU undin jedem Profil der Nutzer!
2. Für solche ini Dateien gibt es schon seit Windows 2000 CSIDL_COMMON_APPDATA!
3. Wenn Du HKLM und die INI Datei in einem "Setup-Modus" bearbeiten möchtest kann man dies in eine eigene EXE auslagern, die requireAdministrator verwendet, oder dies durch das Setup selber erledigen lassen.
4. Oder man lässt das Programm selbst als Admin starten und hat dann Zugriff auf die entsprechenden Bereiche.
-
Danke für die Lösingsansätze!
Noch ne Frage habe Ich! Welcher Pfad hat RUN Schlüssel für User unter HKCU?
-
Den gleichen wie unter HKLM!
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run