Laden...

Forenbeiträge von fusionwedge Ingesamt 27 Beiträge

27.01.2009 - 15:17 Uhr

Kann das Problem daran liegen, dass in der Struct Pointer sind?
Komisch ist ja, dass nur die Anfangs-Byte-Sequenz anders ist, obwohl sie doch eigentlich garnichts mit dem Inhalt zu tun hat.
Hat keine eine Idee?

25.01.2009 - 03:23 Uhr

Je nachdem wie du es willst:

StreamReader sr = new StreamReader("@'"+pfad+"'");

oder

StreamReader sr = new StreamReader("@\\'"+pfad+"'");

Das Backsplash-Zeichen muss maskiert werden!

25.01.2009 - 00:55 Uhr

Okay, ich habe immerhin nun herausgefunden, dass diese 17 Bytes immer folgendes Muster ergeben:

_A _B _C 02 10 _D _B _C 02 _E _F 00 00 _x _B _C 02

Von diesen 17 Bytes sind 6 also immer gleich, und zwei (_B und _C) wiederholen sich jeweils drei mal.
Es gibt also nur 10 variable Bytes. Woher kommen die also?

Hier nun nocheinmal zur Verdeutlichung die 17 Bytes, die meiner Ansicht nach nicht zur Structure gehören, bei sechsmaligen Abspeichern des Byte-Array-Attributs:

A9 A2 91 02 10 C0 A2 91 02 75 12 00 00 DE A2 91 02
1D 87 AE 02 10 34 87 AE 02 75 12 00 00 52 87 AE 02
B9 67 B0 02 10 D0 67 B0 02 32 18 00 00 EE 67 B0 02
D5 A0 B2 02 10 EC A0 B2 02 6D 25 00 00 0A A1 B2 02
31 DB B9 02 10 47 DB B9 02 E8 17 00 00 61 DB B9 02
3D DA 93 02 10 54 DA 93 02 75 12 00 00 72 DA 93 02

24.01.2009 - 13:29 Uhr

Eine schönen guten Tag.

Einige wissen vielleicht von euch, dass im Windows ASF-Container Meta-Daten von Videos, Musik etc vorhanden sind, die man allesamt über Interfaces auslesen kann, was auch wunderbar klappt.
Jetzt möchte ich aber das angezeigte Thumbnail eines Videos ändern. In den Metadaten des Videos ist das Thumbnail allerdings nicht als reines Byte[]-Array gespeichert, sonder so:
MSDN: WM_PICTURE

Lese ich das Attribut aus und nutze Marshal.PtrToStructure() kann ich mir alles vernünftig auslesen und auch das Bild abspeichern.

Speichere ich das Byte-Array, dass ich per GetAttribute() erhalte direkt in eine Datei und vergleiche diese mit der Datei, die ich erhalte, wenn ich dieses Byte-Array per Marshal.PtrToStructure() umwandle und jedes Attribut einzeln in der richten Reihenfolge wieder zurück als Byte[]-Array abspeichere, dann fehlen am Beginn der neuen Datei immer 17 Bytes.
Nur leider habe ich keine Ahnung, was das für Bytes sind, da sich diese jedesmal, wenn ich GetAttribute() aufrufe ändern. Die Metadaten ändern sich aber nicht.
Ansonsten stimmen alle andern Bytes der beiden Dateien komplett überein (sind ca. 17KB).

Versuche ich, aus dem neuen Byte-Array per PtrToStructure (zuvor per Marshal.Copy in den RAM gespeichert) ein WM_Picture zu machen, bekomme ich zwar keine Fehlermeldung, aber die Attribute haben keinen Vernünftige Inhalte mehr.
Speichere ich in das neue Byte-Array die ersten 17 Bytes des Ur-Arrays ab, habe ich zwei komplett identische Arrays.
Wandle ich nun das neue Byte-Array inkl. den 17 Bytes per Marshal.PtrToStructure() um, habe ich wieder ein valides WM_Picture.
Woher die 17 Bytes kommen und wieso diese sich nun permanent ändern weiß ich jetzt aber immer noch nicht. Ansonsten klappt aber so die Umwandlung Struct->Byte[].
Leider bringt mir das so nichts, wenn ich später eigene Thumbnails speichern möchte, bevor überhaupt eines in einem ASF-Container existiert hat.

Jetzt aber das Hauptproblem:
Starte ich meine Anwendung neu, erstelle einen Pointer auf das ausgelesene Byte-Array aus der Datei und rufe Marshal.PtrToStructure() auf, bekomme ich erneut kein gültiges WM_Picture.

Wieso das nicht?
Ich bin am verzweifeln, da ich schon seit Tagen versuche, das Problem lösen zu können.

23.11.2008 - 15:36 Uhr

Kann mir wirklich niemand helfen?

Oder wenn ich das Problem tatsächlich über die COM-Objekte lösen möchte: Wieso kann ich dann die Objekte nicht instanzieren?
Ich habe die DLL und die Eintragungen in der Registry. Trotzdem die Fehlermeldung

20.11.2008 - 19:25 Uhr

Guten Abend allerseits,

ich nutze DirectShowLib-2005 und lade meine TV-Aufnahme (Video: Windows Media Centers neue WTV-Format). Alles klappt super, nur leider kann ich die Audiosprache nicht wählen.
Unter Windows Media Center klappt alles wunderbar:
Stereo, DTS, Englisch (falls vorhanden), Französisch (falls vorhanden, wie zB bei Arte) sind auswählbar.
Doch wie kann ich das in meinem IBaseFilter (IStreamBufferSource) ändern?
Unter MSDN finde ich hier nichts, da das Format zu neu ist, aber es muss doch eine Möglichkeit geben, da das Problem so neu auch nicht ist (DVDs haben ja auch mehrere Audio-Spuren).

In den Anhang packe ich noch einen Screenshot, wie GraphStudio meine Aufnahme rendert. Der Film ist eine Aufnahme von Euronews und enthält an sich mindestens ein Duzend verschiederen Audio-Sprachen.
Irgendwie müsste ich doch nach dem ersten PBDA-Filter eine Art Audio-Selektor einfügen. Ach, wenn es soetwas doch nur gäbe.
Out-Pin 1 ist Audio, Out-Pin 2 ist Video.
Der Rest sind Untertitel, Teletext etc.

Vielen Dank schoneinmal für eure Antworten:

Edit:
Ich habe es auch schon mit dem DVRPlayer-Interface der ehiplayer.dll von MediaCenter versucht. Aber ich kann fast kein Interface der DLL laden, obwohl alle GUIDs in der Registry vorhanden sind.

System.Runtime.InteropServices.COMException: Die COM-Klassenfactory für die Komponente mit CLSID {96EFF869-1551-4C34-9AAB-D175FFCB06C0} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154.
bei WTVPlayer.MainForm..ctor() in e:\Documents\SharpDevelop Projects\WTVPlayer\WTVPlayer\MainForm.cs:Zeile 38.
bei WTVPlayer.Program.Main(String[] args) in e:\Documents\SharpDevelop Projects\WTVPlayer\WTVPlayer\Program.cs:Zeile 27.

10.04.2008 - 10:51 Uhr

Hmm.
Ich habs gerade mit meinem Handy versucht, dafür habe ich dann meinen Server an Port 80 lauschen lassen.
Also wenn der Server an seiner lokalen IP an Port 80 lauscht, und der Client am selben Router hängt, dann geht es nicht. Ist der Client an einem anderen Router, oder was auch immer, wie mein Handy, dann gehts.

Das ist Mist.
Will ich also an meinem Rechner testen, muss ich mit den lokalen IPs testen >_<
Da habe ich stundenlang den Fehler gesucht und die Lösung in Xynratrons Kommentar gefuden 👍

10.04.2008 - 10:43 Uhr

BTW: Beim lokalen testen kann dir dein Router einen Strich durch die Rechnung machen, da bei einigen Modellen Pakete aus dem Internen Netz an die öffentliche Adresse des Routers nicht mehr korrekt zum internen Netz zurückgeliefert werden.

Hierzu habe ich eine Frage:

Ich versuche gerade eine Client/Server Application zu entwickeln.
Den Client sowohl auch den Server entwickle ich an einem einzelnen Computer - müsste ja auch gehen. Tut es auch, aber nur solange ich die lokale IP meines Computers übergebe.

Doch wenn ich nun jemanden anderen den Client schicke, welche IP muss er dann angeben? Die des Routers?

Muss ich dann dem Server die lokale IP geben

TcpListener tl = new TcpListener(new IPEndPoint("128.x.x.x", 81));

nnd beim Client dann die Router-IP des Servers

TcpListener tl = new TcpListener(new IPEndPoint("77.x.x.x", 81));

?
Der Port wird weitergeleitet.
Probiere ich das jetzt an einem Recher (also der Server hat die lokale IP und der Client die Router-IP), dann bekomme ich diese schöne Fehlermeldung:

Ausnahme System.Net.Sockets.SocketException wurde im ausgeführten Programm ausgelöst:
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte .

Liegt das jetzt nur daran, weil ich von lokal auf die Router-IP Adresse zugreife, so wie du das oben beschrieben hast?
Oder mache ich was falsch?

15.03.2008 - 10:43 Uhr

try
{
 ServiceController sc = new ServiceController("universal bda receiver service");
				
 if(sc.Status != ServiceControllerStatus.Stopped)
 {
  sc.Stop();
  sc.WaitForStatus(ServiceControllerStatus.Stopped);
  }
}
catch(Exception e)
 {
 System.IO.FileStream ts = System.IO.File.Create("D:\\Documents\\SharpDevelop Projects\\Standby Vista - Service\\Standby Vista - Service\\bin\\Debug\\Mistake.txt");
 System.IO.StreamWriter sw = new System.IO.StreamWriter(ts);
 sw.WriteLine(e.ToString());
 sw.Close();
}


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
   <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    <requestedExecutionLevel level="requireAdministrator" uiAccess="TRUE"/>
   </requestedPrivileges>
  </security>
 </trustInfo>
</assembly>

Und ich bekomme immer folgendes in die die Mistake.txt

System.InvalidOperationException: Der Dienst UniversalBDASvc kann nicht auf dem Computer . geöffnet werden. ---> System.ComponentModel.Win32Exception: Zugriff verweigert
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
bei System.ServiceProcess.ServiceController.Stop()
bei Standby_Vista___Service.Standby_Vista___Service.UDRReset() in d:\Documents\SharpDevelop Projects\Standby Vista - Service\Standby Vista - Service\Standby Vista - Service.cs:Zeile 67.

Wo liegt denn der Fehler? X(

13.03.2008 - 17:15 Uhr

Irgendjemand muss doch eine Antwort wissen 🙁

10.03.2008 - 19:19 Uhr

Unter einem Administratoraccount, aber mit eingeschalteter Benutzerkontensteuerung.
Ich hätte gedacht, dass man mit der Installation eines Dienstes, diesem permanent höhere Rechte geben kann.
Das muss doch möglich sein.
Also mit "HighestAvailable"-Rechten in der Manifest klappt das nicht

10.03.2008 - 17:50 Uhr

Weiß denn wirklich niemand, wie ich einem Dienst (vor allem unter Vista) mehr Rechte geben kann?

09.03.2008 - 23:31 Uhr

Perfekt!
Klappt alles. Also danke Dir!

Ich habe mir die neue 3.0 Sharp Develop-Version installiert (leider ne Beta).
Hier ist die Option für die Manifest-Datei vorhanden.

Jetzt gibts keine Probleme mehr mit einer normalen Form-Anwendung.

Beim Dienst haperts aber leider immer noch.
Ich habs hier auch mit einer Manifest-Datei versucht.
Der Dienst lädt auch, hat aber immer noch nicht genug Rechte, einen andern Dienst zu beenden.
Gibt es hierfür auch eine Möglichkeit?

08.03.2008 - 18:05 Uhr

Ich benutze Sharp Develop

Laut diesem Screenshot http://laputa.sharpdevelop.net/content/binary/ManifestCreation.png gibt es die Möglichkeit, ein Manifest zu erstellen, aber in meiner Version 2.2.1.2648 gibts das Feld überhaupt nicht 8o
Also nur "Application manifest" fehlt bei mir.

Gibt es noch eine ander Möglichkeit, eines zu erstellen?

08.03.2008 - 17:04 Uhr

Guten Tag,

mein C# Programm benötigt mehr Rechte, weil ich mit diesem einen Dienst neustarten möchte.

Das Betriebssystem ist Vista.
Starte ich hier zB Regedit kommt ja der geliebte Dialog für die Benutzerkontensteuerung, ich drücke okay und kann nun die Registry verändern.
Ähnliches bei einer Setup-Datei.

Und genau DAS hätte ich auch gerne für mein Programm, damit ich Dienste beenden kann.

Gibt es in Net (Ich habe 3.5) eine Möglichkeit, diesen Dialog aufrufen zu lassen, der dem Programm mehr Rechte verleiht?

Das Programm funktioniert mit ausgeschalteter Kontrolle, also am Code liegt es nicht.

Danke schonmal

PS:
Ich habs auch schon mit einem eigenen Service probiert, weil ich dachte, der hätte mehr Rechte -> Pustekuchen.

PPS:
Ich suche schon seit Stunden nach einer Lösung, aber Google und die SuFu helfen einfach nicht weiter. Ich zähle auf Euch!

19.02.2008 - 14:28 Uhr

Hmm,
das hat mir jetzt leider nicht geholfen.
Ich habe das Problem jetzt gelöst, indem ich nicht überprüfe, ob das Icon im
Infobereich ist, sondern indem ich prüfe, ob temporäre Aufnahmedateien im
Aufnahmeordner vorhanden sind.

Danke trotzdem 🙂

18.02.2008 - 12:51 Uhr

Solche Methoden gibt es? Wunderbar, wie heißen die? 🙂
Ich finde einfach nichts.
Ich verwende als Suchbegriffe Notification oder Notify Area oder Notification Area.

Mein Hauptproblem ist, dass der Prozess IMMER aktiv ist, aber halt nur bedingt ein Notifyicon anzeigt.
Auch über ThreadState bekomme ich nicht brauchbares.
Alle 35!!! Threads des Prozesses sind permanent auf WAIT, auch während der Aufnahme.
Nur die CPU-Auslastung variiert (was ich seltsam finde), ich weiß aber nicht, wie ich die auslese.
Sicherer ist für mich allerdings, herauszufinden, ob das Icon im Infobereich ist, oder nicht.

Aber danke schon einmal

Edit:
Sieht so aus, als sei Dein Link doch brauchbarer, als ich zuerst angenommen habe.
Ich lese mir das später durch und melde mich dann nochmal! 👍

17.02.2008 - 11:47 Uhr

Hallo,

Meine Frage ist recht simpel:
Wie bekomme ich heraus, ob ein Prozess ein Notifyicon im Windows-Infobereich darstellt?
Reicht da die Klasse System.Diagnostics.Process? Brauche ich einen DLL-Import?

Je nachdem, ob Vistas Media Center einen Film aufnimmt, muss mein Programm nämlich anders reagieren.

Vielen Dank schonmal

05.03.2005 - 15:05 Uhr

Danke, die ist ja von "herbivore" (danke noch mal).

Hoffe, ich konnte dir helfen.

05.03.2005 - 11:06 Uhr

using Microsoft.Win32;

// IntPtr ist ein Handle des Icons
// GetIcons()[0] gibt das große Symbol zurück und GetIcons()[1] das kleine
// Z.B. so: Icon tmp = Icon.FromHandle(GetIcons("txt", "C:\\Test\\", TestItem)[0]);
// Sonst bei fragen bitte melden. Ich hab das jetzt nämlich nicht alles umgeschrieben...

protected IntPtr[] GetIcons(string endung, string pfad, ListViewItem item)
		{
			RegistryKey key;
			
			IntPtr[] Icos	= new IntPtr[2];
			
			IntPtr[] Symbolgross	= new IntPtr[1];
			IntPtr[] Symbolklein	= new IntPtr[1];
			
/* Wenn es keinen Eintrag in der Registry für die Endung gibt, kommt catch ins Spiel (z.b.: bei .EXE und .LNK Dateien)*/
			try{
				key	= Registry.ClassesRoot.OpenSubKey(endung, true);
				
				string str		= key.GetValue(null).ToString();
				key				= Registry.ClassesRoot.OpenSubKey(str + "\\DefaultIcon", true);
				str				= key.GetValue(null).ToString();
				string temp		= str;
				int index2		= 1;
				
				while(true)
				{
					temp	= temp.Remove(0, temp.Length - index2);
					temp	= temp.Remove(1, index2 - 1);
					if(temp	== ",")
					{
						break;
						// Ende if
					}
					temp	= str;
					index2++;
					// Ende while
				}
				temp = str.Remove(0, str.Length - index2 + 1);
				
				ExtractIconEx(str.Remove(str.Length - index2, index2), Int32.Parse(str.Remove(0, str.Length + 1 - index2)), Symbolgross, Symbolklein, 1);
				Icos[0]	= Symbolgross[0];
				Icos[1]	= Symbolklein[0];
				// Ende try
			}
			catch(Exception)
			{
				if((endung.ToUpper() == ".EXE") || (endung.ToUpper() == ".LNK"))
				{
					if(ExtractIconEx(pfad + "\\" + item.Text + endung, 0, Symbolgross, Symbolklein, 1) == 0)
					{
						ExtractIconEx(Environment.SystemDirectory + "\\System32\\Shell32.dll", 0, Symbolgross, Symbolklein, 1);
						// Ende if
					}
					// Ende if
				}
				else
				{
/* Wenn es sich um eine unbekannte Endung handelt, dann wähle ein Standarticon*/
					ExtractIconEx(Environment.SystemDirectory + "\\System32\\Shell32.dll", 0, Symbolgross, Symbolklein, 1);
					// Ende else
				}
				Icos[0]	= Symbolgross[0];
				Icos[1]	= Symbolklein[0];
				// Ende catch
			}
			 return Icos;
			// Ende GetIcons()
		}

04.03.2005 - 20:42 Uhr

Wenn ich das richtig verstehe, dann musst du beim Aufruf von

GetIcon(string FilePath ,bool Small)

für den Wert Small "false" eingeben. Dann wird das große Bild zurückgegeben und du hast ne bessere Auflösung:

also so

GetIcon("C:\BlaBlaBla\Bla.txt", false);

Kann aber auch sein, dass du ein kleines Bild haben willst, dann musst du "true" eingeben:

GetIcon("C:\BlaBlaBla\Bla.txt", false);

Hoffe, dass das dein Problem ist (was ich aber nicht glaube, weil das zu offensichtlich wäre... 😄)

04.03.2005 - 20:23 Uhr

Gut.
Was ist denn genau dein Problem?
Hast du schon eine ListView und brauchst nur noch die Symbole, oder brauchst du noch eine Art Explorer, um die Dateien zu finden?

Fusionwedge

03.03.2005 - 20:01 Uhr

Sorry, bin leider nicht oft hier.
Wenn du dich hier noch mal meldest (dann weiß ich ja, dass du das liest), dann erklär ichs dir.

14.02.2005 - 21:18 Uhr

Super, danke.

Ich würde euch gerne bewerten, aber das ist ja scheinbar nicht möglich!

Wo finde ich eine Dokumentation zur API?

14.02.2005 - 15:20 Uhr

Danke für die Antworten.
Wo gibt es denn eine Libary über alle API-Funktionen?
ExtractIconEx habe ich übrigens noch in meiner Visual C++6.0 Dokumentation gefunden, aber halt ohne DLL-Namen.

Ich meinte Nummer 3.

Ich wollte direkt von jeder Datei das im Explorer angezeigte Icon sehen. Und wie bekomme ich die Symbole der anderen Dateien (z.B. Txt, Doc, etc).
Ich dachte, ich finde die Pfadangaben der Bilder in der Registry, aber ich finde den (theoretisch) passenden Schlüssel nicht.
Ich wollte nämlich gerne eine Anzeige aller Ordner und Daten samt Icons haben.

13.02.2005 - 10:44 Uhr

Danke.

Aber das wird bei mir in der Dokumentation nicht angezeigt (ich habe vom Framework nur die Dokumentation von 1.0, liegt es daran?).
In welchem Namespace liegt diese Methode, was ist der Rückgabewert und womit Überlade ich sie?

12.02.2005 - 17:08 Uhr

Hallo,

wie erhalte ich bitte aus einer DLL-, einer EXE-, oder einer anderen Datei ein Symbol, um es in

meinem TreeView anzeigen lassen zu können?
Ich habs mit dem Icon-Konstruktor versucht, der akzeptiert aber nur ".ico"-dateien.