Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von userid12392
Thema: [gelöst] bin- und obj-Verzeichnisse werden im Projektmappenexplorer angezeigt
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Jou, das war's.

Danke für die schnelle Antwort.

Michael Schmitz

Thema: [gelöst] bin- und obj-Verzeichnisse werden im Projektmappenexplorer angezeigt
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

neuerdings werden bei mir im Projektmappenexplorer auch bin- und obj-Verzeichnisse angezeigt( siehe Bild als Dateianhang ). Das nervt. Kennt einer von Euch dieses Problem und weiß, wie man das abstellt ?

Entwicklungsumgebung : Visual Studio 2010 Express Edition / C#

Gruß

Michael Schmitz

Thema: Zusammenfügen von Assemblies (exe, dll) mit ILMerge im Visual Studio-Postbuild
Am im Forum: Projekte

Hallo,

die nähere Untersuchung hat ergeben :

die "kernel32.dll" unter XP hat nicht alle Funktionen, die das Programm braucht.

Das Programm läuft also nicht unter XP, auch wenn .NET-Framework 3.5 oder 4.0 auf dem Rechner installiert ist !

Gruß

Michael Schmitz

Thema: [gelöst] Registry-Pfade zu den Visual-Studio-External-Tools ?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich programmiere gerade einen Installer, der ein Tool in Visual Studio unter den "External Tools" eintragen soll.

Ich selber benutze "Visual C# 2008 Express Edition" und "Visual C# 2010 Express Edition".

Dort lauten die Registry-Pfade wie folgt :

Visual C# 2008 Express Edition:
HKEY_CURRENT_USER\Software\Microsoft\VCSExpress\9.0\External Tools

Visual C# 2010 Express Edition:
HKEY_CURRENT_USER\Software\Microsoft\VCSExpress\10.0\External Tools

Wie ist das bei den Vollversionen von Visual Studio die Ihr benutzt ?
Wie lauten da die Pfade ?

Mich interessieren die Pfade für die 2008er und 2010er Versionen. Die 2005er oder ältere Versionen interessieren mich nicht.

Gruß

Michael Schmitz

Thema: Zusammenfügen von Assemblies (exe, dll) mit ILMerge im Visual Studio-Postbuild
Am im Forum: Projekte

Hallo rpauli,

danke für die Rückmeldung.

Ich selber habe das Tool - wie ich gestehen muß - nicht unter XP getestet. Aber ein anderer User sagte, es würde unter XP SP2, Visual Studio 2008 laufen.

Die nächste Version werde ich dann mal für TargetFramework = 3.5 und 4.0 kompilieren, dann müßte ja eine der beiden Versionen auch bei Dir laufen.

Ich melde mich dann nochmal ( wird wohl Mitte Oktober werden ).

Gruß

Michael Schmitz

Thema: Zusammenfügen von Assemblies (exe, dll) mit ILMerge im Visual Studio-Postbuild
Am im Forum: Projekte

Es gibt eine neue Version des Programms.

Änderungen :
1. Es gibt nun für den Debug- und Release-Build getrennte Ausgabeverzeichnisse
2. Deutsche und Englische Sprache

Die vollständige Programmbeschreibung und den Download gibt es unter vs-postbuild.de.

Gruß

Michael Schmitz

Thema: Pfadlänge überschritten, was kann ich tun ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Midnight Run,

wenn das Problem wirklich die Pfadlänge sein sollte, kannst du zum Kopieren die API-Funktion CopyFile benutzen. Wenn du bei dieser Funktion das Prefix "\\?\" vor die Pfadangabe setzt, kannst du mit Pfadangaben bis zu einer Länge von 32767 Zeichen arbeiten.

Unter File Management Functions findest du eine Übersicht über alle Dateifunktionen, die die API bietet und die alle mit langen Pfadangaben klarkommen.

Codebeispiel zum Aufruf von Copy File



   [DllImport("kernel32.dll", EntryPoint = "CopyFileW", SetLastError = true, CharSet = CharSet.Unicode)]

    [return: MarshalAs(UnmanagedType.Bool)]
    
    private static extern bool _api_CopyFile(
      [In] [MarshalAs(UnmanagedType.LPWStr)]
        string existingFileName,
      [In] [MarshalAs(UnmanagedType.LPWStr)]
        string newFileName,
      [MarshalAs(UnmanagedType.Bool)]
        bool failIfExists);


Gruß

Michael Schmitz

Thema: [erledigt] enum wert geben und abfragen
Am im Forum: Rund um die Programmierung

Hallo sakanoue,

es müßte heißen :


    private static byte BIT1 = 0x01;
    private static byte BIT2 = 0x02;
    private static byte BIT3 = 0x04;
    private static byte BIT4 = 0x08;
    private static byte BIT5 = 0x10;
    private static byte BIT6 = 0x20;
    private static byte BIT7 = 0x40;
    private static byte BIT8 = 0x80;

dann kommts richtig raus.

Bei deinem ursprünglich geposteten Code würde es so gehen :


using System;

namespace ConsoleApplication1
{

  [Flags]
  public enum ReadOptions : uint
  {
    eins = 0x01,
    zwei = 0x02,
    vier = 0x04
  }

  class Program
  {
    
    static void Main(string[] args)
    {

      for (int bit = 0; bit ≤ 7; bit++)
      {
        int value = (int)Math.Pow(2, bit);

        if (Enum.IsDefined(typeof(ReadOptions), (ReadOptions)value))
        {
          Console.WriteLine("{0} - {1}", bit, ((ReadOptions)value).ToString());
        }
        else
        {
          Console.WriteLine("{0} - not defined", bit);
        }
      }

      Console.ReadKey();

    }
  
  }

}

Gruß

Michael Schmitz

Thema: Zusammenfügen von Assemblies (exe, dll) mit ILMerge im Visual Studio-Postbuild
Am im Forum: Projekte

Hallo,

es gibt eine neue Version des Programms.

Das Programm hat ein Dialogfeld bekommen, in dem man die nötigen Eingaben machen kann, um das Zusammenfügen der Assemblies zu steuern.

Die ausführliche Beschreibung und den Download gibts unter vs-postbuild.de (und im ersten Beitrag als Dateianhang).

Gruß

Michael Schmitz

Thema: Alles (=DLLs) in eine exe!
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo PC17,

ich habe gerade ein kleines Programm geschrieben, das man im Visual-Studio-Postbuild aufrufen kann, um Exe und Dll zusammenzufügen. Näheres findest du hier.

Gruß

Michael Schmitz

Thema: Zusammenfügen von Assemblies (exe, dll) mit ILMerge im Visual Studio-Postbuild
Am im Forum: Projekte

Hallo Community,

ich habe ein kleines Programm (vs-postbuild.exe) erstellt, das mehrere .NET-Assemblies (exe, dll) zu einer Assembly vereinigt.
Das Programm benutzt die Funktionalität von Microsoft's ILMerge.exe.

Es kann im Postbuild von Visual Studio aufgerufen werden.
Die im Projekt referenzierten Assemblies können der Haupt-Assembly hinzugefügt werden.

Laufen tut das Ganze unter :
Windows Vista / Windows 7
Visual Studio 2008 / Visual Studio 2010
mit .NET-Framework 3.5 oder höher

Die Programmbeschreibung und den Download zur aktuellen Version gibt es unter vs-postbuild.de

Gruß

Michael Schmitz

Bisherige Versionen:
postbuild.zip (571 KB, 4 mal heruntergeladen)
postbuild.zip (571,05 KB, 5 mal heruntergeladen)
postbuild.zip (588 KB, 69 mal heruntergeladen)
postbuild.zip (127 KB, 27 mal heruntergeladen)

Thema: Komische JPEG-Bilder nach dem Speichern
Am im Forum: Grafik und Sound

Hallo ToTTo,

da hast du mich gerade mißverstanden. Ich benutze die Funktion <Bitmap.Save(Stream, ImageFormat)> auch nicht, da die Qualität nicht einstellbar ist.

Meine Frage war : Was für ein Objekt liefert die Funktion <GetEncoderInfo> bei Dir zurück ?

Ich benutze den folgenden Encoder :

ImageCodecInfo.CodecName = "Built-in JPEG"
ImageCodecInfo.Clsid = {557cf401-1a04-11d3-9a73-0000f81ef32e}

Schau dir mal die Liste <ImageCodecInfo[] encoders> an, vielleicht enthält die ja mehrere JPEG-Encoder.

Gruß

Michael Schmitz

Thema: Komische JPEG-Bilder nach dem Speichern
Am im Forum: Grafik und Sound

Hallo ToTTo,

vielleicht liefert die Funktion GetEncoderInfo einen nachträglich installierten Codec, der nicht funktioniert. Mit dem Build-In-Jpeg-Encoder funktioniert das bei mir einwandfrei.

Gruß

Michael Schmitz

Thema: Datenträger-Imagedatei
Am im Forum: Datentechnologien

Hallo Casiopaya,

ich habe vor einiger Zeit mal mit Visual C# 2008 für Vista eine Funktion geschrieben, um den Inhalt des Master File Tables zu lesen. Dabei habe ich mit CreateFile (API) ein Handle auf das Volume erstellt und dann mit SetFilePointerEx (API) und ReadFile (API) die Bytes direkt vom Volume gelesen. Das hat einwandfrei funktioniert. Vorraussetung ist allerdings, daß man Administratorrechte hat.

Der Aufruf für CreateFile erfolgte dabei mit den folgenden Parametern :



CreateFile(
  volumeGuidString, 
  enACCESS_RIGHTS.GENERIC_READ,
  enFILE_SHARE.READ_AND_WRITE,
  IntPtr.Zero,
  enCREATION_DISPOSITION.OPEN_EXISTING,
  enFileAttributes.None,
  IntPtr.Zero);


Wenn man erst mal das Handle hat, ist der Zugriff mit ReadFile recht einfach programmiert.

Gruß

Michael Schmitz

Thema: Programm stürzt ab mit "... hat ein Problem festgestellt ..." - wie weiter vorgehen?
Am im Forum: Rund um die Programmierung

Hallo prom,

ich habe festgestellt, daß daß ein try-catch-Block in der main-Funktion eine unbehandelte Exception nicht mehr abfängt, wenn die Funktion Application.Run(MainWindow) erst einmal aufgerufen worden ist.

Um danach auftretende unbehandelte Exceptions abzufangen, solltest Du am Anfang der main einen Eventhandler registrieren.


static void Main()
{

   Application.ThreadException += OnUnhandledAppRunExceptionOccured;

   //...

}

static void OnUnhandledAppRunExceptionOccured(object sender, ThreadExceptionEventArgs args)
{

  // write to logfile or display message

}

Gruß

Michael Schmitz

Thema: [gelöst] BindingSource und DataBindings
Am im Forum: GUI: Windows-Forms

Hallo syn87,

müßte es nicht heißen :

newValue = Format(oldValue, CharacterCasing.Capitalize); ?

Gruß

Michael Schmitz

Thema: DataGridView Header Text nicht zweizeilig
Am im Forum: GUI: Windows-Forms

Hallo carmani,

das kannst du mit DataGridView.ColumnHeadersDefaultCellStyle.WrapMode steuern.
Wenn Du WrapMode = DataGridViewTriState.False setzt, erfolgt kein Umbruch.
Die Einstellung gilt dann für alle Columns des DataGridViews.

Wenn du das nur für eine bestimmte Column setzen möchtest, setzt du für die entsprechende Column : DataGridViewColumn.DefaultCellStyle.WrapMode.

Gruß

Michael Schmitz

Thema: Registrys auslesen und schreiben: Die grundlegenden Operationen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Waffeln,

ob ein Schlüssel existiert, kannst du wie folgt abfragen :


using Microsoft.Win32;
RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\TEST");
Object value = key.GetValue("XYZ");

Mit diesem Aufruf wird der Schlüssel zum Lesen geöffnet.
Wenn der Schlüssel nicht existiert, erhälst Du für key null zurück.
GetValue liest dann den Wert eines Eintrags, der unter diesem Schlüssel liegt.

Gruß

Michael Schmitz

Thema: Dateianzahl eines Ordners/der Festplatte auslesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo frankhammer,

wenn es um die Anzahl der Dateien und Verzeichnisse auf einem Laufwerk geht, helfe ich mir folgendermaßen :

ich lese mit der API-Funktion GetFileSizeEx die Größe des Master-File-Tables ($MFT).

Dann lese ich mit der API-Funktion DeviceIoControl den NTFS_VOLUME_DATA_BUFFER . Dieser enthält die Größe eines MFT-Records (BytesPerFileRecordSegment).

Ich teile dann die Größe des MFT durch die Größe eines Records und tue dann so, als ob jeder Record für eine Datei oder ein Verzeichnis steht. Das funktioniert in der Praxis meist ganz gut.

Wie man die Anzahl der Dateien in einem Verzeichnis ohne Scan herausfindet, weiß ich nicht; und ich glaube Windows weiß es auch nicht, denn wenn Du im Windows-Explorer bei einem Verzeichnis auf Eigenschaften klickst, wird ja ein Scan des Dateisystems durchgeführt, um die Anzahl zu ermitteln.

Gruß

Michael Schmitz

PS:
Der Scan des Dateisystems geht mit den API-Funktionen FindFirstFile und FindNextFile recht flott. Bei einer Systempartition mit 60.000 Dateien und Verzeichnissen geht das bei mir in 15 sec.

Thema: Symbol des minimierten Programmes in Taskleiste blinken lassen!
Am im Forum: GUI: Windows-Forms

Hallo Da_Flo,

du kannst einen Timer erstellen und sagen wir mal alle 500 ms aufrufen.



MyAppMainWindow()
{
  System.Windows.Forms.Timer m_timer = new System.Windows.Forms.Timer();
}

private void InitializeTimer()
{
  m_timer.Tick += new EventHandler(this.OnTimerTick);
  m_timer.Interval = 500;
}

private void OnTimerTick(object sender, EventArgs e)
{
  this.ShowInTaskbar = !this.ShowInTaskbar;
}


Gruß

Michael Schmitz

Thema: DGV mit leeren Zeilen füllen
Am im Forum: GUI: Windows-Forms

Hallo koksi,

wenn du die Funktion DataGridView.Rows.Add(); ohne Parameter aufrufst, wir eine leere Zeile hinzugefügt.

Wenn du mehr als eine leere Zeile hinzufügen willst, kannst du die Funktion DataGridView.Rows.AddCopies(int indexSource, int count) benutzen.

EDIT : Der ErfinderDesRades ( siehe unten ) hat natürlich Recht : Wenn das DGV gebunden ist, geht das nicht.

Thema: [gelöst] API-Funktionsauf GetVolumeInformation abbrechen / timeout
Am im Forum: Grafik und Sound

Hallo kleines_eichhoernchen,

bei der Variante mit dem ThreadPool habe ich folgendes Problem :

Ich rufe nur eine Funktion auf, kann also keine while(!m_aborted)-Schleife bauen und bin somit darauf angewiesen, nach dem Timeout den Thread mit Thread.Abort abzubrechen. Beim ThreadPool bekomme ich ja keine Referenz auf den gestarteten Thread; oder gibt es da eine Möglichkeit ?

Gruß

Michael Schmitz

Thema: [gelöst] API-Funktionsauf GetVolumeInformation abbrechen / timeout
Am im Forum: Grafik und Sound

Hallo kleines_eichhoernchen,

ich habe es mit der zweiten von Dir genannten Variante ( mit dem Thread-Objekt und dem Aufruf von Thread.Abort ) gemacht.

Funktioniert wunderbar.

Danke.

Michael Schmitz

Thema: [gelöst] API-Funktionsauf GetVolumeInformation abbrechen / timeout
Am im Forum: Grafik und Sound

Hallo cSharper,

wenn ich die API-Funktion GetVolumeInformation für ein Volume aufrufe das nicht bereit ist ( z.B. CD/DVD oder Floppy) kann es lange dauern, bis die Funktion zurückkehrt.

Wie kann ich da einen Abbruch oder Timeout programmieren ?


Gruß

Michael Schmitz

Thema: [gelöst] Multithreading: Zugriff auf Nicht-Control-Objekte: Invoke/BeginInvoke nötig?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo kleines_eichhoernchen,

danke für deine Antwort.

Gruß

Michael Schmitz

Thema: [gelöst] Multithreading: Zugriff auf Nicht-Control-Objekte: Invoke/BeginInvoke nötig?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo cSharper,

ich habe eine GUI und zwei Backgroundworker;
und folgende Verständnisfrage:

Für die Zugriffe von den Backgroundworkern auf die Controls der GUI ist ja Invoke/BeginInvoke notwendig, da die Aufrufe der Funktionen der Controls nur von dem Thread aus erfolgen dürfen, der die Controls erstellt hat.

Aber was ist mit der Kommunikation zwischen den beiden Backroundworker ?

Ist es Nicht-Control-Objekten egal welcher Thread zugreift ?
Reicht es da zu locken oder gibt es noch etwas zu beachten ?

Gruß

Michael Schmitz

Thema: [gelöst] DataGridViewCheckBoxCell : Änderung des 'Value', aber keine Aktualisierung der Anzeige
Am im Forum: GUI: Windows-Forms

Hallo ErfinderDesRades,

DataGridView.EndEdit, das Isses !

Danke

Michael Schmitz

Thema: [gelöst] DataGridViewCheckBoxCell : Änderung des 'Value', aber keine Aktualisierung der Anzeige
Am im Forum: GUI: Windows-Forms

Hallo cSharper,

ich habe ein DataGridView.
Die Rows enthalten in der ersten Spalte eine DataGridViewCheckBoxCell.

Das Problem ist folgendes:

Wenn ich in einer Cell das gesetzte Häckchen entfernen will, indem ich DataGridViewCheckBoxCell.Value = false setze, wird die Anzeige nicht aktualisiert.

Das Objekt ist geändert, aber die Oberfläche wird nicht aktualisiert.

Ich habe es bereits mit DataGridView.Invalidate() und DataGridView.Update() versucht, aber ohne Erfolg.

Das DataGridView sitzt auf einer Registrierkarte. Wenn ich zu einer anderen Registrierkarte wechsle und dann wieder zurückgehe zu der Registrierkarte auf der das DataGridView sitzt, ist die Aktualisierung erfolgt und das Häckchen entfernt.

Was kann man da machen ?

Thema: [gelöst] DataGridView : Virtual Mode : CellValueNeeded wird für alle Zellen aufgerufen
Am im Forum: GUI: Windows-Forms

Hallo cSharper,

der Übeltäter ist gefunden :

ich hatte DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders; gesetzt.

Damit mußten erst alle Zeilen durchgegangen werden, um die endgültige Spaltenbreite zu ermitteln.

Ich habe nun DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; gesetzt und es funktioniert.

Gruß

Michael Schmitz

Thema: [gelöst] DataGridView : Virtual Mode : CellValueNeeded wird für alle Zellen aufgerufen
Am im Forum: GUI: Windows-Forms

Hallo cSharper,

ich habe ein DataGridView erstellt und VirtualMode = true gesetzt und eine Funktion OnCellValueNeeded gebaut.

Das funktioniert auch, die Zellen werden korrekt gefüllt.

Aber : die Funktion OnCellValueNeeded wird für alle Zellen aufgerufen, bevor das DataGridView zum ersten mal angezeigt wird.

Ich dachte, die Funktion würde nur für die Zellen der ersten 20 sichtbaren Zeilen aufgerufen und erst dann wenn der Benutzer nach unten scrollt die Werte für die folgenden Zellen nachgeladen.

Was mache ich da falsch ?

Gruß

Michael Schmitz