DLL per Kontextmenü registrieren – regsvr32.exe und regasm.exe

Jeder Entwickler kennt das lästige Registrieren von z.B. COM-Komponenten oder in .NET erstellten Programmbibliotheken (*.dll) welche evtl. als COM-Komponenten registriert werden müssen.

Dies kann man sich erleichtern in dem man in der Windows-Registry Einträge unter den benötigten Dateitypen erstellt. Diese sorgen, dann für z.B. einen neuen Menüpunkt im Kontextmenü des gewünschten Dateitypen.

Folgenderweise sieht ein Beispiel für einen Aufruf der „RegSvr32.exe“ aus. Dem Befehl wird die Datei mit dem „%1“ übergeben.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\dllfile\Shell\RegisterRegSvr32]
@="Register by RegSvr32"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegisterRegSvr32\command]
@="regsvr32.exe \"%1\""

[HKEY_CLASSES_ROOT\dllfile\Shell\UnRegisterRegSvr32]
@="Unregister by RegSvr32"

[HKEY_CLASSES_ROOT\dllfile\Shell\UnRegisterRegSvr32\command]
@="regsvr32.exe /u \"%1\""

Speichert einfach den oben stehenden Text in eine Textdatei und ändert die Dateiendung von z.B. „.txt“ auf „.reg“ und öffnet diese. Alternativ habe ich eine Version mit noch weiteren Befehlen als Download angehangen.

DLNA Transcoding, mal unkompliziert

Titelbild - DLNA - MKV zu AVI umbennenIch weiß nicht, ob ich mich ärgern oder freuen soll. Endlich habe ich eine nette Lösung für das Abspielen von .MKV-Dateien gefunden.

Getestet habe ich bereits mehrere Programme, wobei ich zum Schluss bei Serviio gelandet bin. Eigentlich war ich von der Anwendung begeistert, allerdings gab es immer wieder nervige Probleme beim Starten bzw. Aktualisieren der Bibliothek.

Als DLNA-Renderer nutze ich meinen Sony BD-Player. (Wenn ich ein Medium über USB anschließe, konnten bisher alle .MKV-Dateien problemlos wiedergegeben werden.)

Nun gut, zurück zum DLNA. Da ich Windows 7 einsetze, nutze ich selbstverständlich ebenfalls den WindowsMediaPlayer 12 zum wiedergeben von Fotos und .AVI-Dateien über DLNA. Dies funktioniert sehr einfach über das Kontextmenü (Rechtsklick auf die Datei) und den Menüpunkt „Wiedergeben auf“. Leider wird diese Menü bei .MKV-Dateien nicht bereitgestellt.

Nun der Tipp, mit dem ich diesen Artikel zu rechtfertigen versuche. 😉

Einfach die Dateiendung der .MKV-Datei in „.avi“ umbenennen, den Warnhinweis bestätigen und mit rechts auf die Datei klicken. Und siehe da, der gewünschte Menüpunkt „Wiedergeben auf“ ist nun auch für diese Datei verfügbar.

Bisher konnte ich so mein HD-Material problemlos an meinen BD-Player streamen.

DataGridView – Einträge manuell sortieren/verschieben

Heute stand ich vor der Aufgabe es zu ermöglichen, einzelne Zeilen eines DataGridViews manuell sortieren zu können bzw. die einzelnen Zeilen verschieben zu können. Da allerdings die Rows eines DataGridView Steuerelements schreibgeschützt sind habe ich mir einen kleinen Workaround geschrieben.

Beispiel für das Verschieben nach unten:

private void toolStripButtonStationStockDown_Click(object sender, EventArgs e)
{
	// Es darf nur eine Zeile selektiert sein
	if (this.dataGridViewStationen.SelectedRows.Count == 1)
	{
		// Wenn nach unten verschoben werden soll, darf das zu verschiebene Objekt nicht das Letzte sein
		if (this.dataGridViewStationen.SelectedRows[0].Index != (this.dataGridViewStationen.Rows.Count - 1))
		{
			// Gleichgroßes Array erstellen
			DataGridViewRow[] rows = new DataGridViewRow[this.dataGridViewStationen.Rows.Count];
			// Selektierten Index merken
			int selectedIndex = this.dataGridViewStationen.SelectedRows[0].Index;

			// Jede Zeile des Grids durchlaufen
			for (int i = 0; i < this.dataGridViewStationen.Rows.Count; i++)
			{
				// Ist diese Zeile vor der selektierten?
				if (i == selectedIndex + 1)
				{
					// Einen nach unten verschoben eintragen
					rows[i - 1] = this.dataGridViewStationen.Rows[i];
				}
				else if (i == selectedIndex) // Ist diese Zeile die selektierte?
				{
					// Einen nach oben verschoben eintragen
					rows[i + 1] = this.dataGridViewStationen.Rows[i];
				}
				else // Sonst
				{
					// An gleicher Stelle eintragen
					rows[i] = this.dataGridViewStationen.Rows[i];
				}
			}

			// Das Grid leeren
			this.dataGridViewStationen.Rows.Clear();

			// Das sortierte Array in das Grid schreiben
			for (int i = 0; i < rows.Length; i++)
			{
				this.dataGridViewStationen.Rows.Add(rows[i]);
			}

			// Selektion löschen
			this.dataGridViewStationen.ClearSelection();
			// Das verschobene Objekt an der neuen Stelle selektieren
			this.dataGridViewStationen.Rows[selectedIndex + 1].Selected = true;
		}
	}
}