Laden...

KExtensions v1.4 (Visual Studio Package) inkl. Sourcen

Erstellt von Khalid vor 15 Jahren Letzter Beitrag vor 14 Jahren 47.190 Views
T
415 Beiträge seit 2007
vor 14 Jahren

Hallo Khalid,

danke für deine Antwort. Ich bin gespannt auf eine neue Version, bis es soweit ist werde ich mir das auch nochmal näher anschauen und anhand deiner Tipps gucken, ob ich selber schon was implementieren kann.
Btw: Den Vorschlag der es "Back"-Buttons von TBR finde ich auch sehr interessant.

390 Beiträge seit 2008
vor 14 Jahren

Hallo Khalid

Wie sieht es eigentlich mit der Veröffentlichung auf CodePlex aus?
Gedenkst du das Package unter einer GPL zu veröffentlichen o.Ä. ?

Ich würde nämlich gerne geschäftlich davon Gebrauch machen, unsere EDV Abteilung stellt sich natürlich (und teilweise berechtigt) quer, wenn sie keine unlizenzierte Software von einem "Unbekannten Hersteller" installieren will.

Gruss

using Skill

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hi,

veröffentlichen auf CodePlex will ich das ganze auf jeden Fall noch. Zur Lizenz habe ich mir an sich noch keine wirklichen Gedanken gemacht, wird aber wahrscheinlich in Richtung GPL gehen. Aber dazu werde ich dann noch eine Frage hier im Forum absetzen 😃

Noch was zur neuen Version:
Die zieht sich leider noch etwas, da ich beruflich momentan sehr eingespannt bin und komm aus dem Grund nicht wirklich weiter vorwärts.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

42 Beiträge seit 2008
vor 14 Jahren

Hi,

Super sache dein Addin, habs gerade runtergeladen und getestet und dabei ist mir aufgefallen das die Sprache von VS2008 auf "Wie Microsoft Windows" eingestellt wird.

Ist jetzt nicht tragisch aber wäre net wenn die Sprachkonfigurationen so bleiben wie vorher. 😉

Gruß Lisko

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo,

die neue Version dauert noch ein paar Tage, da ich das komplette Drag & Drop neu implementiere, damit dieses die hübschen Darg & Drop Images ab Vista unterstützt. Zusätzlich mit den neuen Drop Descriptions (der Hinweistext beim Drag & Drop unter dem Image).

Der Screenshot in diesem Beitrag zeigt ein Drag & Drop Image, welches aus meiner Komponente erzeugt wird. Obwohl "aus meiner Komponente erzeugt" etwas zuviel gesagt ist, denn das Image wird von der Shell erzeugt und ich zeige es einfach nur an 😃

Der andere Ausschnitt zeigt, das auch die Anzahl der gesamten Dateien/Ordner mit angezeigt wird. Auch das macht freundlicherweise das System für ein 😃

@Lisko34:
Hab nochmal mein Code durchgeschaut und an den VS Einstellungen selber schraube ich nicht rum. Ich werde das aber nochmal durchtesten.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

In der TreeView Ansicht innerhalb vom VS, werden ja die Dateien mit angezeigt. Da diese in den Drag & Drop Prozess anders behandelt werden, überschreibe ich bei Dateien die Drop Description.

Zusätzlich will ich ein Event auf beiden Seiten anbieten (TreeView, ListView), in dem man selber bestimmen kann, was für eine Description angezeigt werden soll.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

S
21 Beiträge seit 2009
vor 14 Jahren

Error 1001
Die Objectinstanz wurde nicht auf ein Object festgelegt (oder ähnlich)

windows 7 32bit ultimate

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo Sekkiy

Schade, das du einen Fehler hast. Leider hilft mir nur der Fehlertext nicht weiter. Kannst du mir schrittweise beschreiben, wie der Fehler aufgetreten ist?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

S
21 Beiträge seit 2009
vor 14 Jahren

Hallo Khalid,

schön, dass du so schnell antwortest.
Also ich starte das Setup, und dann auf weiter, bis die installation beginnt. Dann startet die Progressbar fast nicht, also bewegt sich nicht wirklich. Danach kommt das Popup(von KExtensions):
Error 1001. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
OK(button)

so weit ich mich erinnere, ist das setup immer erst nach dem öffnen von visual studio gestart, aber jetzt hat es sich sofort gestartet(ohne visual studio).

mfg Sekkiy

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hi,

sorry das ich diesmal so spät antworte. Der User SeeQuark hatte das gleiche Problem wie du. Da lag es an der Express Edition. Das Package funktioniert nicht! mit der Express Edition. Oder hast du doch eine höhere Version?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

S
21 Beiträge seit 2009
vor 14 Jahren

nein, ich habe nur die express edition 😦

309 Beiträge seit 2008
vor 14 Jahren

Hallo,

super Sache das Plugin..

Eine Sache ist mit aufgefallen: Im Kontextmenü des Explorer wirden z.B. die Erwiterungen von WinRAR oder meines Virenscanners angezeigt, nicht aber das von TortoiseSVN.
So könnt man sich ein extra SVN Plugin sparen.

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo Scavanger,

ich habe jetzt noch mal meinen Code angeschaut und bin ziemlich fest der Meinung, das ich exakt die Kontextmenüeinträge erzeuge, die auch Windows erzeugt bei einem Rechtsklick.

Das TortoiseSVN jetzt trotzdem welche anzeigt, kann jetzt mehrere Gründe haben:
a)
TortoiseSVN liefert eine eigene ShellExtension mit, die die Menüeinträge dynamisch erzeugt bei einem Rechtsklick auf eine Datei. Möglichweise habe ich hier vergessen auf irgendwelche Events zu horchen, die vom System aus kommen.
b)
TortoiseSVN liefert gar einen eigenen Treiber mit, der sich zwischen Shell und Dateisystem hängt und dynamisch die Einträge erzeugt. Was aber echt der Hammer wär 🙂
c)
Die schaffen es irgendwie anders 😉

Du könntest mir vielleicht ein wenig helfen. Schau mal bitte in der Registry nach, ob TortoiseSVN unter dem Schlüssel HKCR Einträge abgelegt hat, und wenn ja wo genau. Denn das "normale" Shellkontextmenü wird rein über die Registry erzeugt. Also alles was in der Registry steht, wird auch angezeigt.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

1.820 Beiträge seit 2005
vor 14 Jahren

Hallo!

@Khalid:
Ich hab' mal nachgeschaut: In HKCR nistet sich TortoiseSVN unter den folgenden Pfaden ein:HKCR//shellex/ContextMenuHandlers HKCR//shellex/PropertySheetHandlers *HKCR/CLSID/{30351346-7B7D-4FCC-81B4-1E394CA267EB} (+8 weitere) *HKCR/Directory/Background/... *HKCR/Directory/shellex/... *HKCR/Folder/Background/... *HKCR/Folder/shellex/...

Hab' bestimmt noch ein paar übersehen.

Hoffe, das hilft dir weiter.

Kommentar: Mein 1.000 Post 😁

Nobody is perfect. I'm sad, i'm not nobody 🙁

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hi,

danke sehr.

Auf den habe ich gehofft:


• HKCR/*/shellex/ContextMenuHandlers
• HKCR/Folder/shellex/...

Wenn unter den Einträgen bei "ContextMenuHandlers" das TortoiseSVN auftaucht, sollte es sich ganz normal in das Shell Contextmenü einklinken.

Scheint ja aber irgendwie nicht der Fall zu sein 😦
Bleibt mir wohl nichts anderes übrig, als mal ein Tortoise zu installieren und zu schauen, was von der Shell direkt übergeben wird, wenn ich das Menü abfrage.

Das wird allerdings ein paar Tage dauern, bis ich dazu komme...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo,

wollt nur mitteilen, das es voran geht. Die Version die ich jetzt demnächst rausgebe, kann dann mit sämtlichen Shell Erweiterungen umgehen (z.B. Context Menu Handler, Shell Icon Handler, usw...).

Im Anhang befindet sich ein Screenshot, in dem man TortoiseSVN in Aktion mit meinen Komponenten sieht. Ebenso ganz unten im Menu auch WinMerge (wurde vorher auch nie angezeigt).

Dadurch, das das ein wenig Änderungen bedeutet hat, muss ich jetzt einiges umstrukturieren. Deswegen dauert die Version leider noch etwas. Aber ich bemühe mich, das die Version vor Weihnachten da ist.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

U
1.688 Beiträge seit 2007
vor 14 Jahren

wollt nur mitteilen, das es voran geht. Die Version die ich jetzt demnächst rausgebe, kann dann mit sämtlichen Shell Erweiterungen umgehen (z.B. Context Menu Handler, Shell Icon Handler, usw...).

Mir wird jetzt schon TortoiseSVN angezeigt - XP SP3. Was noch fehlt, sind die Icon-Overlays.

Edit: auch WinMerge hab ich...

T
415 Beiträge seit 2007
vor 14 Jahren

[...] Deswegen dauert die Version leider noch etwas. Aber ich bemühe mich, das die Version vor Weihnachten da ist.

Das klingt sehr gut. Ich verfolge die Änderungen an diesem Projekt immer sehr gespannt. Werden eigentlich auch die Punkte berücksichtigt, die ich mal am 27.08. gepostet hatte?

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hi,

Werden eigentlich auch die Punkte berücksichtigt, die ich mal am 27.08. gepostet hatte?

Ja, wurden sogar schon umgesetzt 😃. Ich habe dazu das komplette Drag & Drop neu schreiben müssen, damit dieses jetzt besser mit der Shell interagiert und auch mit sich selber besser interagiert. In der jetztigen öffentlichen Version ist das ein wenig "Misch-Masch" zwischen Shell D&D und eigenes D&D. In der neuen Version geht dann alles über die Shell. Was die Sache sogar wesentlich vereinfacht in Hinblick auf verschiedene OS Versionen (XP/V/W7). Jetzt erledigt alles die Shell und ich muss nur noch auf die Events horchen 😃

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Klingt sehr geil. Ein Grund mehr mich auf das neue Release zu freuen ;o)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo,

dank ujr konnte ich die Version doch jetzt schon fertig machen. Hat sich im Prinzip nicht viel getan (viele interne Änderungen und Umstrukturierungen). Siehe erster Beitrag.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Hallo Khalid,

hast du auch die Sourcen der Version 1.4 veröffentlicht? Ich konnte auf deinem Blog nur die der 1.3 finden.

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hi,

sorry das hab ich voll verpennt. Die Sourcen auf meinem Blog habe ich aktualisiert. Sind jetzt die Neuesten.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Super. Vielen Dank! Dann mach ich mich mal demnächst ans testen der neuen Version ;o)

T
415 Beiträge seit 2007
vor 14 Jahren

Hallo Khalid,

ich hab nun die neue Komponente eingehens getestet. Vorweg erstmal: super Arbeit. Wie schon die Version 1 mit der ich sehr zufrienden war, konnte dieses Update einiges neues rausholen. Dennoch sind mir einige Punkte aufgefallen, an denen ich teilweise mich auch schon versucht habe. Daher hier ein Feedback von mir:
*Ich nutze Win XP und mir ist aufgefallen, dass die ShellMethods.SHGetFileInfo äußerst unperformant läuft. Ich habe das gegen die ursprünglichen Einstellungen der Version 1 deines ShellListViews verglichen und dann einfach die selben Flags aus Version 1 ausprobiert. Siehe da, die Perfomance verzehnfachte sich in etwa:

Ich habe dies:


ShellMethods.SHGetFileInfo(fullPidl.Ptr, 0, ref info, Marshal.SizeOf(typeof(SHFILEINFO)),
          SHGFI.PIDL | 
          SHGFI.TYPENAME |
          SHGFI.SYSICONINDEX |
          SHGFI.ICON |
          SHGFI.OVERLAYINDEX);

gegen dies ausgetauscht:


ShellMethods.SHGetFileInfo(fullPidl.Ptr, 0, ref info, Marshal.SizeOf(typeof(SHFILEINFO)),
            SHGFI.PIDL | SHGFI.TYPENAME | SHGFI.SYSICONINDEX);

Lag das daran, dass diese Einstellungen für Win 7 gedacht sind?

*Das Drag & Drop funktioniert nicht wie im normalen Win Explorer. Ein äußerst unangenehmer Effekt tritt auf, wenn man eine oder mehrere Dateien nur kurz zieht, die Maus dann aber im selben Ordner wieder los lässt. Die ShellListView (ich glaub auch die ShellTreeView) interpretieren diese Aktion als Kopie. Was aber falsch ist, der normale Explorer macht in diesem Fall garnichts. Kopiert werden dürfte innerhalb des gleichen Ordners nur mit gedrückter STRG Taste. Ich bin nicht zu 100% durch deine eingesetzte Drag&Drop Funktionalität gestiegen. Soweit ich das erkennen kann, wird alles im ShellBaseListView behandelt, obwohl auch die ShellListView noch Implementierungen dazu hat, die aber nie in Kraft treten. Ich hab mich nun mit einem wahrscheinlich recht unschönen Workaround beholfen. Dazu habe ich insbesondere die GetDragDropsEffects Funktion erweitert:


private DragDropEffects GetDragDropEffects(MK keyState, ShellListViewItem lvi)
{
	if (keyState == (keyState | MK.CONTROL))
	{
		return DragDropEffects.Copy;
	}
		else if (keyState == (keyState | MK.ALT))
	{
	r	eturn DragDropEffects.Link;
	}
		else if (keyState == (keyState | MK.SHIFT))
	{
		return DragDropEffects.Move;
	}
	else
	{
		if ((lvi != null && lvi.ShellItem.IsFolder) || !_listViewDropAction)
			return DragDropEffects.Copy;
		else
			return DragDropEffects.None;
	} 
}

Jetzt wird nur kopiert, wenn das Ziel auf das gezogen wird ein Ordner ist. Oder die DragDrop Aktion nicht aus dem ShellListView gestartet wurde, sondern z.B. aus dem echten Win Explorer. Dazu habe ich einfach eine boolsche Klassenvariable _listViewDropAction eingeführt, die im OnItemDrag auf true gesetzt wird (da es sich um eine DragDrop Aktion innerhalb des Steuerelements handelt) und im KControls.WinForms.Shell.IDropTarget.DragDrop wieder auf false gesetzt wird, wenn die Aktion innhalb des Steuerelements beendet wurde.

*Wenn man ein ShellListViewItem anklickt und die Taste F2 zum unbennen drückt, wird trotzdem noch auf alle weiteren Tastenanschläge reagiert. Das bedeutet z.B. wenn man den Dateinamen editieren möchte und dabei die Entf Taste drückt, erscheint der Dialog zum löschen der Datei. Dies hab ich auch einfach mit einer boolschen Klassenvariable gelöst, die beim editieren eines Items gesetzt wird und somit die anderen Tastenanschläge verhindert.

*Nun zu dem Problem was ich selber noch nicht zufriedenstellend hab lösen können, was daran liegen mag, dass ich nicht ganz verstanden habe wie du auf die Windowsnachrichten reagierst und diese dann verarbeitest. Auf jedenfall scheint da noch der Wurm drin zu sein. Wenn man z.B. eine etwas größere Anzahl von Dateien markiert, und diese löscht wird die Aktion korrekt ausgeführt, nur wird die ShellListView nicht korrekt aktualisierst. Meistens verschwinden dann nur ein paar der gelöschten ListViewItem, die restlichen bleiben stehen, obwohl das Dateisystem sie schon gelöscht hat. Das selbe tritt bei verschiebe Aktionen auf, oder auch wenn man eine Datei über den normalen Win Explorer umbenennt kriegt die ShellListView das nicht immer "on-the-fly" mit, sondern man muss teilweise erst den Ordner refreshen. Hast du ne Ahnung woran das liegen kann und wie man das fixxen könnte? Denn soweit ich das jetzt sehe wären dann fast alle wichtigen Explorer Eigenschaften fehlerfrei implementiert.

Ich hoffe dieses Feedback hilft dir und vielleicht hast du ja auch ne Lösung für den letzten Punkt oder Ideen, wie man meine Ansätze eleganter verbessern kann.

T
154 Beiträge seit 2009
vor 14 Jahren

Ich hab hier mal noch 2 Fehler und ein Verbesserungsvorschlag:

Fehler*Man kann in der ListView im "Windows Explorer" nicht per "Rücktaste" o.ä. eine Ebene nach oben *Die TreeView im Windows Explorer geht nicht automatisch mit, wenn man in der ListView in einen Ordner weiterklickt

Verbesserung*"Favoriten" im Windows Explorer: Man kann Ordner in eine Liste einfügen, damit man diese schneller erreichen kann

Und: Echt klasse das Ding 😉 Kann ich immer wieder brauchen 😃

MfG
TBR

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 14 Jahren

Hallo,

danke für euer Feedback.

Ich geh die Liste mal durch 😃
@t2t:
a)
Was die Performance wahrscheinlich ausbremst, ist die Kombination SHGFI.ICON | SHGFI.OVERLAYINDEX. Diese ermittelt das Icon, welches über dem eigentlichen Icon gezeichnet werden soll (z.B. Freigaben, Tortoise SVN und andere). Dadurch das das System zusätzlich eine Abfrage gegen die Registry, bzw. den lokalen Icon Cache, setzt, kommt es hier wahrscheinlich zu den Performanceeinbußen.

Dies ist jetzt momentan nur eine Vermutung. Muss ich aber selber nochmal prüfen.

b)
Ist mir so direkt noch gar nicht aufgefallen 😃
Das Problem ist nur, das auch bestimmte Dateien als "Container" angesehen werden (z.B. ZIP, MSI Dateien). Die Prüfung müsste also dementsprechend in das DragDrop verlegt werden. Da guck ich mir mal eine Lösung aus 😃

c)
Würde ich jetzt genauso machen.

d)
Tja, den kann ich mir auf anhieb überhaupt nicht erklären. Da muss ich mal den gesamten Nachrichtenverkehr überwachen und schauen was da schief gehen könnte. Auf meiner Seite, könnte es vielleicht ein Problem mit der synchronisation sein.

Aber die Fehlersuche wird interessant 😃

@TBR
a)
Das mit der Rücktaste steht schon länger auf meinem ToDo. Irgendwie verpenn ich das jedesmal. Hab es jetzt von der Priorität mal höher geschoben, sonst überseh ich den immer 😃

b)
Da schau ich mal nach.

Zu deinem Verbesserungsvorschlag:
Diese Idee hatte ich auch schonmal. Nur dann hatte ich W7 installiert und bin zu dem Schluss gekommen, das es ab W7 kein Sinn mehr macht, da es jetzt die Bibliotheksordner gibt.

Darum geh ich jetzt mal davon aus, das du noch nicht mit W7 gearbeitet hast, oder du dieses Feature bis jetzt übersehen hast (ist mir auch passiert).

Order meinst du was anderes?

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

T
415 Beiträge seit 2007
vor 14 Jahren

Moin,

dann bin ich mal gespannt was du rausfinden wirst ;o) Hier schonmal ne kleine Unterstützung für die ProcessCmdKey Funktion, um die Tasten besser zu unterstützen, u.a. auch die Rücktaste:


case Keys.F5: // Refresh
{
	RefreshCurrentFolder();

	break;
}
case Keys.Back: // Rücktaste
{
	if (this.CurrentShellItem.Parent != null)
		ChangeFolder(this.CurrentShellItem.Parent);

	break;
}
case Keys.Enter: // Ausführen
{
	if (SelectedItems.Count > 0)
	{
		ShellListViewItem lvi = SelectedItems[0];

		ShellItem item = lvi.ShellItem;

		if (item.IsFolder)
		{
			// Bei einem Ordner, wird der Ordner geöffnet
			if (OnFolderChanging(item))
			{
				ChangeFolder(item);
				OnFolderChanged(item);
			}
		}
		else
		{
			// Bei jedem anderen ShellItem, wird die Defaultaktion ausgelöst
			if (OnItemExecuting(item))
			{
			  ShellContextMenu.ExecuteDefaultAction(item);
			  OnItemExecuted(item);
			}
		}
	}
	
	break;
}