AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi windows eigenschaften-dialog für datenträger anzeigen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

windows eigenschaften-dialog für datenträger anzeigen lassen

Ein Thema von KodeZwerg · begonnen am 4. Jun 2020 · letzter Beitrag vom 22. Jul 2020
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 07:24
*stubs an, falls jemand eine Idee hat bitte melden...*
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 08:01
Für mich sind deine Ausführungen leider verwirrend. Geht es um das Kontextmenü oder um den Eigenschaften-Dialog? In deinem Code kommen beide Dinge vor. Was genau willst du erreichen? Warum das Kontextmenü, wenn der Weg über ShellExecuteEx mit dem Verb properties laut deinem Code einwandfrei funktioniert?

Hast du mal versucht, den Backslash zu belassen?

Delphi-Quellcode:
S := LeftShellItem(LeftView.Selected.Index).FullPath;
if S[Length(S)] = '\then
    S := Copy(S, 1, Length(S) - 1);
kann man übrigens auch viel einfacher schreiben:S := ExcludeTrailingPathDelimiter(LeftShellItem(LeftView.Selected.Index).FullPath); Aber wie gesagt: ich würd's mal ohne Wegschneiden des Backslashs probieren bzw. mit dem Pfad in deiner Funktion ShellExec vergleichen.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 08:11
Also, mein Problem sitzt im Kontextmenu.
Es ist ein Teil eines Dateimanagers.
Der "F9" Code bezieht sich auf's ShellExec, klappt super.
Was wiederum nicht funktioniert ist, wenn ich das Kontextmenu darstellen lasse, ausgehend eines Laufwerks (nicht Datei oder Ordner, da klappt alles), wenn man nun "Eigenschaften" auswählt.
Erwartet war das im Endeffekt der "F9" Dialog dargestellt wird, momentan wird nur mein Fallback aufgerufen wo man sich sein System anzeigen lassen kann.

Um es nachvollziehen zu können, den Manager starten, rechtsklick auf ein Laufwerk, Eigenschaften auswählen = das von mir beschriebene Problem.

ps: Ich hatte es anfangs mit "\" am ende, das mochte das kontextmenu irgendwie nicht.
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Jun 2020 um 08:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#4

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 08:50
So langsam verstehe ich. Weil du Teile des Windows-Kontextmenüs anzeigst, musst du dessen Kram benutzen und kannst nicht stattdessen einfach ShellExecuteEx rufen. Es wäre gut gewesen, wenn das aus deinen bisherigen Ausführungen klar(er) hervorgegangen wäre. Ja, ich weiß, hätte hätte .

Bei mir öffnet sich beim Klick auf Eigenschaften im Kontextmenü das Fenster mit den Systemeigenschaften.

Eine wichtige Sache: Ich rate dir dringend, davon Abstand zu nehmen, Benutzereinstellungen zu ändern! Bei Ausführung deiner EXE hab ich mich sofort gewundert, warum auf einmal die Animation beim Minimieren/Maximieren von Fenstern wieder aktiv ist, und das ist eindeutig auf dein Kompilat zurückzuführen. Es hat seinen Grund, warum ein Nutzer Einstellungen so tätigt, und Programme haben das zu respektieren und nicht daran rumzufummeln - das gilt für (so ziemlich) alle Einstellungen.

Zurück zum Thema. Du schriebst, du hast aktuell einen Failsafe eingebaut. Wird denn eine Exception durch das OleCheck ausgelöst oder wird das InvokeCommand des Kontextmenü sauber gerufen? Oder ist das Öffnen der Systemeigenschaften der Failsafe?

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 09:25
So langsam verstehe ich. Weil du Teile des Windows-Kontextmenüs anzeigst, musst du dessen Kram benutzen und kannst nicht stattdessen einfach ShellExecuteEx rufen. Es wäre gut gewesen, wenn das aus deinen bisherigen Ausführungen klar(er) hervorgegangen wäre. Ja, ich weiß, hätte hätte .
Es tut mir leid, der erste Post war völlig falsch. Ich dachte danach wäre es eindeutiger zuzuordnen. Sorry again!

Bei mir öffnet sich beim Klick auf Eigenschaften im Kontextmenü das Fenster mit den Systemeigenschaften.
Genau das ist mein Failsafe, da beziehe ich mich nicht auf die ItemPIDL sondern auf die FolderPIDL damit er überhaupt etwas darstellen kann. Im aktuellen Fall halt die Systemeigenschaften wo ich wiederum das tatsächliche Eigenschaften-Fenster erwarten würde.
Es fehlt meinerseits auch noch eine Integration das dieses Menu auch gemalt wird wenn man nicht auf ein Item klickst, kommt noch rein damit es Windows-konformer ist.

Eine wichtige Sache: Ich rate dir dringend, davon Abstand zu nehmen, Benutzereinstellungen zu ändern! Bei Ausführung deiner EXE hab ich mich sofort gewundert, warum auf einmal die Animation beim Minimieren/Maximieren von Fenstern wieder aktiv ist, und das ist eindeutig auf dein Kompilat zurückzuführen. Es hat seinen Grund, warum ein Nutzer Einstellungen so tätigt, und Programme haben das zu respektieren und nicht daran rumzufummeln - das gilt für (so ziemlich) alle Einstellungen.
Puh.... Danke für diese Erkenntnis, ich bin tatsächlich davon ausgegangen das ein aktivieren der Animation nur für mein Programm gilt, auch nur solange es läuft und nicht das dadurch Systemeinstellungen gesetzt werden.
Diese Zeile Code wird nun definitiv entfernt!!
//offtopic
Schatteneffekte habe ich auch aktiviert, gilt das auch als Systemeinstellung?

Ich hoffe mich so ausgedrückt zu haben das es verständlich(er) ist, ich werde an meiner Formulierung noch arbeiten müssen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#6

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 10:04
Genau das ist mein Failsafe, da beziehe ich mich nicht auf die ItemPIDL sondern auf die FolderPIDL damit er überhaupt etwas darstellen kann.
Löst OleCheck denn eine Exception aus, wenn du den Failsafe weglässt? Wenn ja, was sagt diese? Irgendwas muss ja falsch sein, wenn es nicht funktioniert. Wobei es denkbar ist, dass es auf diesem Weg gar nicht geht, aber das kann ich nicht beurteilen, denn dafür hab ich zu wenig Ahnung von Windows-Kontextmenüs (nahe Null).

Wie groß ist denn Cmd bzw. Cmd-1, wenn das Eigenschaften-Item gerufen wird?

Ich glaube, du solltest das Flag CMIC_MASK_UNICODE nicht setzen. MS schreibt:
Zitat:
CMIC_MASK_UNICODE

The shortcut menu handler should use lpVerbW, lpParametersW, lpDirectoryW, and lpTitleW members instead of their ANSI equivalents.
Die setzt du aber gar nicht. Alternativ kannst du das Flag auch belassen und zusätzlich die angegebenen W-Parameter füllen, solltest dann aber die Struktur TCMInvokeCommandInfoEx statt TCMInvokeCommandInfo nutzen (in der Doku zu letzterem steht nix zum Flag CMIC_MASK_UNICODE).

Zitat:
Puh.... Danke für diese Erkenntnis, ich bin tatsächlich davon ausgegangen das ein aktivieren der Animation nur für mein Programm gilt, auch nur solange es läuft und nicht das dadurch Systemeinstellungen gesetzt werden.
Nun, die Funktion heißt SystemParametersInfo, nicht ProgramParametersInfo.

Zitat:
Schatteneffekte habe ich auch aktiviert, gilt das auch als Systemeinstellung?
Hier gilt dasselbe. Ist mir nur nicht aufgefallen, weil die bei mir eh aktiviert sind. Wäre das nicht so, hätte ich das ebenfalls angemerkt.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: windows eigenschaften-dialog für datenträger anzeigen lassen

  Alt 29. Jun 2020, 11:35
Danke für die Anregung mit dem Unicode Flag, das werde ich nachher mal testen und erstelle auch ein paar Photos (bevor ich mich falsch Ausdrücke) was passiert wenn man ohne Failsafe arbeitet.
Ich werde erst morgen die offenen Fragen beantworten können, bitte sei mir nicht böse und Dankeschön nochmal!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz