Es stürzt ja schon ab, wenn ich in CE die Adresse erittelt habe und über CE den Wert ändern will. Das mit den variablen Speicheradressen hast du natürlich auch recht, aber so weit bin ich bei diesen beiden Arten von Werten noch gar nicht.
Hallo c#-community,
also ich experimentiere immer noch mit dem Ändern von Werten in anderen Programmen herum. Dies klappt auch bei den meisten Werten problemlos (Verwendung von read- und writeprocessmemory). Es gibt aber auch Werte bei denen entweder die Änderung nur temporär sind oder bei denen es zu Programmabstürzen des fremden Programmes führt.
Wieso können einige Werte nicht dauerhaft geändert werden oder führen zu Programmabstürzen? Wie Adressen für die Werte im Programm sind schlüssig mit CE ermittelt worden.
Welche Möglichkeiten gibt es noch, um solche Adressen erfolgreich beschreiben zu können?
MfG
mirrowwinger
jupp das war es herbivore. Funktioniert jetzt alles.
Danke euch wieder mal.
Ok habe ich benutzt,
bekomme als GetLastError ne 5. Ich glaube das bedeutet Access denied. Aber warum?
Hallo herbivore und natürlich alle anderen,
habe heute etwas Zeit gehabt und mich weiter mit dem Thema beschäfftigt und dabei auch die pinvoke.net Seite gefunden. Danach habe ich die GetWindowRect-Funktion wie folgt eingebunden:
[DllImport("user32.dll")]
public static extern IntPtr GetWindowRect(IntPtr hWnd, out RECT rect);
GetWindowRect(WindowHandle, out StandardWindowRect);
Was ich aber noch nicht verstanden habe, ist, wie ich das Fenster jetzt ändere. Da ich in die Funktion GetWindowRect ja ein Rect out bekomme. Hab auch geschaut, leider gibt es keine Funktion SetWindowRect (zumindest in der Doku von pinvoke.net). Könnt ihr mir hier nochmal einen Tipp geben, wie ich dem Fenster jetzt seine neue Größe schicken kann? Eventuell auch, wie ich es minimiere.
Vielen Dank
mirrowwinger
ok werde mir das mal anschauen. Danke dir schon mal im Voraus.
mirrowwinger
geht rein um fremde Fenster und zwar ob ich die Fenstergröße vor oder nach Erscheinen des Fensters nochmal ändern kann. Hab gerade gelesen, dass man das wohl mit einem Hook bewerkstelligen könnte.
Hallo c#-Community,
gibt es eine Möglichkeit die Größe eines Fensters zu ändern, die ohne Resize- und Close-Button erstellt wurde? Gibt ja auch des öfteren Systemmeldungen, die genau so ein unveränderliches Fenster haben.
Vielen Dank
mirrowwinger
Also die meisten Werte schreibe ich jetzt korrekt. SeDebugPrivilege hat also funktioniert. Der letzt Fehler lag in der Verwendung eines falschen Handles in der WriteProcessMemory-Funktion.
Nur bei einem Wert kommt es zu einer kuriosen Situation. Es wird zwar in die entsprechende Adresse geschrieben und der Wert wird bis zur nächsten Änderung so angezeigt, wie ich das will. ABER bei der nächsten Änderung des Wertes ändert sich der Wert in der Anzeige des Programms wieder.
Also habe mir jetzt nach dem Tutorial die SeDebugPrivilege geholt. Leider hat sich immer noch keine Verbesserung eingestellt.
Process[] process = Process.GetProcessesByName("ProcessName");
if (process.Length != 0)
{
Timer.Start();
WorkProcess = process[0];
readHandle = OpenProcess(0x10, false, (uint)WorkProcess.Id);
}
else
{
MessageBox.Show("No Success", "Process dosn´t exist", MessageBoxButtons.OK);
this.Close();
}
if (!OpenProcessToken(WorkProcess.Handle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken))
{
Console.WriteLine("OpenProcessToken() failed, error = {0} . SeDebugPrivilege is not available", Marshal.GetLastWin32Error());
return;
}
else
{
Console.WriteLine("OpenProcessToken() successfully");
}
if (!LookupPrivilegeValue(null, SE_DEBUG_NAME, out luidSEDebugNameValue))
{
Console.WriteLine("LookupPrivilegeValue() failed, error = {0} .SeDebugPrivilege is not available", Marshal.GetLastWin32Error());
CloseHandle(hToken);
Environment.Exit(0);
}
else
{
Console.WriteLine("LookupPrivilegeValue() successfully");
}
tkpPrivileges.PrivilegeCount = 1;
tkpPrivileges.Luid = luidSEDebugNameValue;
tkpPrivileges.Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, false, ref tkpPrivileges, 0, IntPtr.Zero, IntPtr.Zero))
{
Console.WriteLine("LookupPrivilegeValue() failed, error = {0} .SeDebugPrivilege is not available", Marshal.GetLastWin32Error());
}
else
{
Console.WriteLine("SeDebugPrivilege is now available");
}
Gemäß Konsole wird die SeDebugPrivilege aktiviert.
Hmm werde ich mir mal anschauen. Komischer Weise kann ich mit CE direkt in die Addresse schreiben. Ok natürlich weiß ich nicht, ob die auch die SeDebugPrivilege für den Remote Process setzen.
Also ich habe jetzt mal Admin-Rechte nach dem Tutorial Anwendung mit Administratorrechten neu starten (Windows Vista / 7) angefordert und das funktioniert auch. Weiterhin habe ich mir die Marshal.GetLastWin32Error in der Console ausgeben lassen. Als Wert habe ich bei 4Byte 10000 genommen. Als Consolen-Ausgabe habe ich
16 39 0 0
0
erhalten.
Die erste Zahl ist die erwartete Umwandlung von 10000 in den erwarteten HexCode (ist richtig) und 0 der Fehlercode. Obwohl mir das anscheinend sagt, dass der Speicher erfolgreich beschrieben wurde, steht der Wert 10000 nicht an der Stelle (Überprüft mit ReadProcessMemory).
Hallo c#-Community,
ich habe ein kleines Problem beim Ersetzen eines Wertes mit WriteProcessMemory. Aber mal von Anfang an, Ich lese einen Wert im Speicher aus über:
// funktioniert!
byte[] bytes = new byte[4];
uint size = sizeof(int);
ReadProcessMemory(readHandle, (IntPtr)Adress, bytes, (UIntPtr)size, ref rw);
TextBox.Text = BitConverter.ToInt32(bytes, 0).ToString();
Jetzt möchte ich diesen Wert ersetzen und habe folgendes programmiert:
byte[] bytes = new byte[4];
int calcvalue = Convert.ToInt32(TextBox.Text);
if (calcvalue >= 16777216)
{
bytes[3] = Convert.ToByte(calcvalue / 16777216);
calcvalue = calcvalue % 16777216;
}
if (calcvalue >= 65536)
{
bytes[2] = Convert.ToByte(calcvalue / 65536);
calcvalue = calcvalue % 65536;
}
if (calcvalue >= 256)
{
bytes[1] = Convert.ToByte(calcvalue / 256);
calcvalue = calcvalue % 256;
}
bytes[0] = Convert.ToByte(calcvalue);
Console.WriteLine(TextBoxPoints.Text = bytes[0].ToString() + " " + bytes[1].ToString() + " " + bytes[2].ToString() + " " + bytes[3].ToString());
uint size = sizeof(int);
WriteProcessMemory(readHandle, (IntPtr)Adress, bytes, (UIntPtr)size, ref rw);
Die Umwandlung erfolgt korrekt. In bytes steht am Ende was ich erwarte, nur anscheinend wird das nicht in den Speicher geschrieben. Kann mir jemand sagen, wo mein Fehler liegt?
Vielen Dank
mirrowwinger
Das hört sich schonmal gut an. Gibt es dafür irgendwo Tutorials? Die GNU-Welt finde ich ebenfalls sehr gut, habe seit Anfang des Jahres einen Ubuntu-Rechner und bin mittlerweile auch sehr überzeugt von Linux. Leider ist man im Studium bei den Nicht-Informatik-Fächern aufgrund der Kompatibilität auf Windowsrechner angewiesen. Vieleicht hast du ja nen Tip für mich für ein entsprechendes Tut. C und C++ sind prinzipiell kein Problem für mich nur ein wenig Aufwand mich wieder einzuarbeiten.
Hallo C#-community,
habe mir in diesem Semester mal das Vergnügen gegönnt und MIPS-Assembler in einer Vorlesung angefangen zu lernen. Da die Assemblerprogrammierung aber doch ein wenig anders ist, als eine normale Programmierung in Hochsprache, würde ich gern Assembler etwas besser üben. Aus meinen Zeiten, wo ich Delphi programmiert habe, weiß ich dass man dort Assembler direkt mit programmieren kann. Da mir das Delphi-Geschäftsmodel aber nicht mehr gefällt (es gibt keine kostenlose Version für Studenten) habe ich schon vor mehr als einem Jahr den Weg hier zu C# gefunden und wollte jetzt mal fragen, ob man im Visual Studio auch Assembler direkt einbinden kann und wenn ja gibt es gute Tutorials. Ja ich habe vorher in Google geschaut aber dort habe ich erstmal ncihts brauchbares gefunden (Assembly scheint in C# nicht direkt Assembler zu sein).
MfG
mirrowwinger
Hallo c#-community,
ich habe für ein Fach in meinem Maschinenbaustudium die Aufgabe erhalten einen Vortrag zu künstlichen Neuronalen Netzen zu halten. Ich weiß dieses Thema ist schier endlos aber wie meine Fachrichtung schon zeigt ist eine ins Detail gehende Darlegung nicht notwendig. Die Zielgruppe soll lediglich die groben Informationen zu Aufbau, Funktionsweise und Einsatzgebiete merken.
Da ich noch ein paar Wochen Zeit habe, habe ich mich gefragt, ob es nicht möglich ist ein "kleines" neuronales Netz zu Vorführzwecke zu erstellen (prinzipell ist dies sicherlich möglich aber), hier wäre allerdings aus meiner Sicht eines Maschinenbauers mit weitergehender Erfahrung in Programmierung (Delphi, c, (c++), c#) die Frage: "Gibt es neuronale Netze, die einen schönen Vorführeffekt haben, welche sich auch in 2 - 3 Wochen umsetzen lassen oder sind neuronale Netze wirklich so umfangreich, dass man es lieber gleich sein lassen kann?
Ziel dieses Projektes wäre es ein kleines DemoNeuronalNetz zu erstellen mit einer eher trivialen aber gut darstellbaren Funktion, um Techniken (teachen, Einsatz) an diesem während des Vortrages darstellen zu können. Hier bräuchte ich aufgrund doch fehlender Erfahrung auf diesem Gebiet eventuell ein kleines Brainstorming zum Thema. Gut wäre es wenn das Thema etwas mit Bildern zu tun hat (Objekterkennung).
vielen Dank
mirrowwinger
Hallo c#-community,
ich habe ein Problem beim ändern des Formates eines Bildes. Getestet habe ich das Extrembeispiel 32bit-Bild -> Binärbild (s/w). Habe auch schon in Google die Funktion gefunden und wie folgt umgesetzt:
Bitmap tempBitmap = LoadedBitmap.Clone(new Rectangle(0, 0, LoadedBitmap.Width - 1, LoadedBitmap.Height - 1), PixelFormat);
hab also schon den (meiner Meinung nach Fehler im Link (Weite und Höhe je -1) korrigiert und bekomme eine OutOfMemory-Exception - Nicht genügend Arbeitsspeicher!
Warum bekomme ich denn diesen Fehler?
MfG
mirrowwinger
naja bei einem Binär-Bild hat das Pixiel 1bit, bei Monochrom-Bild 8bit (1Byte für Graustufen) und so weiter (24bit RGB und 32bit ARGB).
Hallo c#-community,
ich möchte für ein Projekt Bilder laden, die in verschiedenen Formaten (monochrom, binär, ...) vorliegen. Es ist für die weitere Arbeit wichtig, dass ich erkenne, was für ein Bild gerade im Programm geladen ist.
Ich lade das Bild in ein Bitmap.
Wie müsste mein Vorgehen sein, damit ich die gewünschte Funktion bekomme?
MfG
mirrowwinger
Hallo c#-community,
habe mal eine eher theoretische Frage. Mir ist aufgefallen, dass in den letzten Monaten, wenn nicht sogar schon Jahren der Flash-Player immer mehr Einzug in Webseiten hält. Vor einigen Wochen hatte ich mich auch mal rudimentär mit Webbrowser, Htmp-Quellcode, ect und auch deren Steuerung beschäfftigt, was ja auch ziemlich gut funktioniert.
Wie ist das eigentlich beim Flash-Player? Habe mal versucht auf einen "Code" (Rechts-Klick auf so ein Fenster) zuzugreifen, was aber zu nichts führt. Hingegen ist eine Interaktion trotzdem möglich (Bei Videos kann man den kompletten Player in Flash intergrieren und Play, Stop, Forward, Backward, ... drücken). Also sollte es doch eigentlich auch eine Möglichkeit geben dies aus eigenen Programmen zu steuern oder irre ich mich da?
MfG
mirrowwinger
Hmm sehe gerade eine Information habe ich in meinem Startbeitrag vergessen: Die Übergabe der Einzellisten aus den Threads erfolgt bei mir per Event. Kann man dort auch lock verwenden?
Hallo c#-community,
habe wieder eine Frage. Ich habe eine Routine geschrieben, die aus bestimmten Webseiten (unbekannte Anzahl) Informationen entnimmt und diese in einer Liste zusammenstellen soll. Jede Website wird aufgrund der Performance in einer entsprechenden (auch unbekannten) Anzahl an Threads verarbeitet. Jetzt komme ich zu dem Problem: Ich schreibe alle Informationen in eine StringCollection (AddRange) und hier passiert es, dass ein Thread gerade noch in die StringCollection schreibt und ein weiterer gerade auf ihn zugreifen möchte. In der Console lasse ich mir das Ergebnis zum Test anzeigen und sehe dort, dass in diesem Fall die Informationen aus dem ersten zugreifenden Thread einfach abgeschnitten werden. Jetzt würde ich gern die erfahrenen mal fragen, wie ich das Problem so lösen kann, dass der 2. Thread (und alle anderen) bis der erste Thread mit dem Schreiben in die StringCollection fertig ist?
Vielen Dank
mirrowwinger
Also grundsätzlich vertraue ich natürlich meiner Freundin. Aber auch da sind natürlich Fehler nicht ausgeschlossen. UAC???
Hallo c#-community,
ich habe mal eine Frage eigentlich zum RICHTIGEN einrichten von allen Betriebssystemen und im speziellen für Win7 Starter. Hintergrund ist, dass ich und meine Freundin uns ein neues Netbook gekauft haben, welches wir für Arbeit, Studium, ect. nutzen wollen. Hierfür möchte ich das System richtig einrichten. Ich weiß dass man einen Admin und getrennt davon User einrichten muss. Dieses System kenne ich auch von Arbeit, wo der Admin die Grundfunktionen (Office, Adobe, ect.) bereitstellt und die User ihre Spezialprogramme (Cad, FEM, ect) installieren und auch die Daten (welche ja sensibel hinsichtlich des Verlustes sind) unabhängig von einander sind. Leider habe ich in der Vergangenheit auch immer als Admin meine Rechner betrieben und wollte mit diesem Hintergrund jetzt mal diesen Rechner RICHTIG einrichten. Leider fehlt mir aber das verständis, wie genau man das alles anlegen muss, damit es genau so funktioniert. deswegen habe ich mich vor 3 Tagen in einem Win7-Forum angemeldet und bis heute noch keine Antwort auf diese Frage bekommen. Ich suche aber auch nur ein Tutorial, Wiki oder ähnliches für den Einstieg. Vieleicht kann mir ja hier jemand einen guten Rat geben.
Vielen Dank
mirrowwinger
danke @herbivore und gfoidl das hat mir geholfen! 👍
Dies scheint aber beim betrachten der Bilder der Fall zu sein. Folgenden Quelltext habe ich verwendet:
Bitmap tempWorkBitmap = new Bitmap(originalBitmap.Width + 10, originalBitmap.Height + 10); //hab erstmal statischen Offset gewählt
Graphics g = Graphics.FromImage(TempWorkBitmap);
g.DrawImage(originalBitmap, 5, 5);
return(tempWorkBitmap);
Wenn ich nun Original und neues Bild übereinander lege haben markante Punkte immer noch den gleichen Abstand zum Bildrand.
ups da war ich jetzt etwas langsam mit em editieren meines vorherigen Beitrages. Wie da schon erwähnt, hab ich das mit dem DrawImage schon hinbekommen, nur würde ich eine Art weißen/ farblosen Rand erwarten aber das Bild sieht exakt gleich aus, trotz Offset von 10 Pixeln.
ok das neue Bild ist jetzt erstellt, nur es sieht exakt aus, wie das andere, als wenn der offset keine Wirkung hat. Habe zum Test den Offset mal auf 10 Pixel gesetzt, da sollte ja eigentlich ein Unterschied zu sehen sein.
Hallo c#-community,
hab mal wieder ein Problem. Möchte ein kleines Bitmap zentriert in einem größeren darstellen. Leider funktioniert das irgendwie nicht so richtig (was ich versucht habe) mit System.Drawing.Graphics.
Folgendes habe ich probiert:
Bitmap tempWorkBitmap = new Bitmap(originalBitmap.Width + 2 * offset, originalBitmap.height + 2 * offset);
Graphics g = Graphics.FromImage((Image)originalBitmap);
r.DrawImage(tempWorkBitmap, ofsett, offset);
return tempWorkBitmap;
Das Bild welches ich damit erzeuge bleibt irgendwie weiß. Habe schon geschaut, ob ich einfach nur die Form neuzeichen muss, blieb aber ohne Erfolg. Habe ich da irgendwo einen Denkfehler in meiner Funktion?
MfG
mirrowwinger
Hallo c#-community,
habe eine Frage zum Threading. Ich erstelle in einem SubThread eine Liste mit Daten in Form einer StringCollection. Diese Daten möchte ich, wenn die Liste an mein Hauptthread (über ein Event) übergeben wurde in einer RichTextBox augeben. Wie erkenne ich nun, dass meine Liste gefüllt ist und ich diese in der RichTextBox ausgeben kann?
MfG
mirrowwinger
Hast du vieleicht mal ein gutes Beispiel für eine Trennung von Logik und Anzeige? Hab das schon öfter mal gelesen, aber so richtig verstanden habe ich das glaube ich noch nicht. Ansonsten habe ich mich eigentlich anhand folgendes Bsp´s mal in WCF eingearbeitet. Ich weiß es ist nicht besonders gut, da einige Fehler drin sind und einige Stellen nicht wirklich anfängerfreundlich beschrieben ist, aber der Aufbau entspricht grob dem was ich erstellt habe und testen möchte.
Ps.: Ich glaube mein Fehler liegt in der Implementierung der ExchangeClass oder im Interface IHostService (glaube ich habe ich bisher immer vergessen deswegen hier):
[ServiceContract(CallbackContract = typeof(IClientFunctions))]
public interface IHostService
{
[OperationContract]
void Connect();
[OperationContract]
void Disconnect();
[OperationContract]
void Exchange(ExchangeClass information); //<- über diese Fkt beschwert sich der Kompiler!
}
irgendwas hab ich hier glaube ich falsch gemacht.
Hallo, sorry dass ich mich erst jetzt wieder melden kann, hat viel Arbeit. Also ich verwende die HostServiceDLL im Client wie folgt: Ich habe sie in den Verweisen eingetragen und meine MainForm-Funktionen (in denen ich erstmal die Funktion testen wollte) sehen wie folgt aus:
using System;
using System.Windows.Forms;
using System.ServiceModel;
using HostServiceDLL;
namespace ClientWCF
{
public partial class MainForm : Form, IHostServiceCallback
{
HostServiceClient client = null;
public MainForm()
{
InitializeComponent();
InstanceContext context = new InstanceContext(this);
client = new HostServiceClient(context);
}
private void buttonVerbindenTrennen_Click(object sender, EventArgs e)
{
if (buttonVerbindenTrennen.Text == "Verbinden")
{
buttonVerbindenTrennen.Text = "Trennen";
client.Connect();
}
else
{
buttonVerbindenTrennen.Text = "Verbinden";
client.Disconnect();
}
}
public void Exchange(ExchangeClass information)
{
PictureConverter pc = new PictureConverter();
pictureBoxScreenShot.Image = pc.ByteArrayToBitmap(information.Information);
}
}
}
hab auch noch nicht den Fehler finden können. Also würde ich mich freuen, wenn jemand mir einen Tip geben kann.
Hallo c#-Community,
habe folgendes Problem: Ich habe einen Server, Client und eine Dll erstellt. Ich habe in der DLL eine ExchangeClass definiert, welche mir ein ByteArray vom Server an den Client schicken soll.
Hier mal die Klasse in der DLL:
using System;
using System.Runtime.Serialization;
namespace HostServiceDLL
{
[DataContract]
public class ExchangeClass
{
byte[] _byteArray;
[DataMember]
public byte[] ByteArray
{
get { return _byteArray; }
set { _byteArray = value; }
}
}
}
Beim Server funktioniert diese auch einwandfrei. Beim Client erhalte ich die Fehlermeldung, dass "ClientWCF.MainForm" implementiert den Schnittstellenmember IHostServiceCallback.Exchange(HostServiceDLL.ExchangeClass)" nicht.
Wie implementiere ich diese richtig?
MfG
mirrowwinger
Hallo muss den Threat nochmal aufnehmen, da ich noch keine Lösung gefunden habe. Also möchte ich nochmal genauer auf mein Problem eingehen.
Ich habe ein Server-Programm, ein Client- und eine Dll. Ziel soll es sein, dass der Server ein Bild von einem bestimmten Fenster des Bildschirms an den Client schickt. Habe erstmal als "Dummy"-Funktion einen Screenshot vom gesammten Bildschirm gemacht und möchte das per WCF an den Client schicken. Ich habe mir anhand dieses Tutorials Server, Client und Dll erstellt. Ich erhalte hierdrauf, dass im Client, wenn ich das Bild einem PictureBox.Image zuweisen möchte, dass er einen Konflikt zwischen dem Image in der eigentlichen System.Drawing.Image.dll und dem Image in meiner Dll meldet. Der Auszug aus meiner Dll wo ich das Image verwende ist hier:
namespace HostServiceDLL
{
[DataContract]
public class ExchangeClass
{
Bitmap _screen;
[DataMember]
public Bitmap Screen
{
get { return _screen; }
set { _screen = value; }
}
}
}
Zurückverfolgen konnte ich das bis in die von der scvutil erstellten Proxy.cs-Datei. Auch hier wird ein Konflikt bei dem Image von System.Drawing.Image angezeigt. In der Fehlermeldung wird nun daraufhingewiesen, dass das Image aus meiner Dll verwendet wird, was aber schlecht ist, da dieses nicht in der PictureBox verwenden kann. Hab hier mal ein Bild von der Fehlermeldung in der Proxy.cs-Datei gemacht.
Hoffe jemand kann mir sagen, was ich falsch mache und mir helfen.
MfG
mirrowwinger
Nein alle 3 Projekte (Client, Server und Dll) verwenden das Framework 4.0.
Fehler tritt ausschließlich im Client auf. Habe es jetzt soweit, dass er folgenden Fehler ausgiebt(im Client):
implizierte Konvertierung vom Typ System.Drawing.Image[hier steht Pfad zu meinem Projekt] in System.Drawing.Image[hier steht Pfad zum Framework] ist nicht möglich.
Warum kann er ein Image nicht als Image akzeptieren???
Hallo c#-community,
ich arbeite zum ersten mal mit Dll´s und leider ergeben sich daraus auch einige Unklarheiten, denen ich leider nicht allein auf die Spur komme. Also ich habe in meiner Dll eine ExchangeClass definiert:
[DataContract]
public class ExchangeClass
{
Bitmap _screen;
[DataMember]
public Bitmap Screen
{
get { return _screen; }
set { _screen = value; }
}
}
Diese Klasse habe ich erstellt und als Dll in einem Server-Programm und einem Client eingefügt. Jetzt möchte ich das Bitmap in ein Image ändern. Dies funktioniert auch ohne Probleme im Server. Im Client wird aber ein Fehler gemeldet:
implizite Konvertierung vom Typ System.Drawing.Bitmap in System.Drawing.Image ist nicht möglich.
Was mache ich hier falsch. Hoffe mir kann jemand helfen.
MfG
mirrowwinger
Ps.: Habe die Verweise nochmal geprüft, es wird die gleiche Dll verwendet, allerdings im Server wird erkannt, dass es ein Image ist, im Client nicht.
@ gfoidl 👍 der Hinweis war schon gut, dachte gestern schon ich bin vollkommen plem-plem. ABER ganz deine Lösung war es nicht ganz. In Vista Home gibt es nicht den Ordner v7.1\Bin sondern v7.0A\Bin und die dort drin befindliche SvcConfigEditor.exe habe ich gestern verwendet und bekam immer den oben erwähnten Fehler. In dem gleichen Ordner befindet sich aber noch einen Ordner NETFX 4.0 Tools in welchem sich eine weitere SvcConfigEditor.exe befindet. Wenn diese verwendet wird funktioniert die im Tutorial beschriebene Vorgehensweise ohne Probleme.
Vielen Dank
mirrowwinger
Hallo nochmal c#-community,
also versuche mich immer noch durch ein bestimmtes WCF Tutorial zu arbeiten. Leider kommt nach einem gelösten Problem immer nur das nächste. Im jetzigen Problem möchte ich meine App.config mit dem Configuration Editor bearbeiten. Ich habe gemäß dem Tutorial die gemeinsamen Interfaces in eine Klassenbibliothek geschrieben. Diese soll ich nun in der App.config automatisch eintragen lassen. Wenn ich dies versuche bekomme ich folgende Fehlermeldung (siehe Anhang)
Vielen Dank
mirrowwinger
Ok hab gefunden, was dort gemeint ist, allerdings ist bei mir (VS 2010 Express und Windows Vista) beide Verweise im Tutorial nicht brauchbar. Habe im MSDN gefunden, dass der Configuration Editor Tool (SvcConfigEditor.exe) Auf der Festplatte unter: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin zu finden ist und von da gestartet werden muss.
Hallo nochmal an die c#-community,
Habe heute ja schon eine Frage zu WCF und einem Tutorial gestellt. Nun wird dort von einem Dienstconfigurationseditor gesprochen. Für alle die nicht das Tutorial lesen wollen (weil ich glaube, dass es vieleicht auch anders heißt) hier eine kurze Beschreibung, was das sein soll:
Mit Hilfe einer App.config soll über den Dienstconfigurationseditor der Enpunkt für den Server konfiguriert werden. Es werden 2 Möglichkeiten erwähnt, wie dieser Dienst gestartet werden kann:
Beide Wege führen bei mir ins Nirvana, da weder unter Extra in VS der Menü-Punkt WCF-Dienstconf...-Option vorhanden ist, noch Windows SDK im Startmenü vorhanden ist.
Vielen Dank
mirrowwinger
danke @ serial konnte das jetzt einbinden.
Hallo c#-community,
ich bin gerade dabei mich mit WCF zu beschäfftigen und habe auch ein schönes Tutorial gefunden, welches ich gerade versuche zu verstehen und nach zu programmieren. Leider bin ich gerade an einem Punkt angekommen, wo ich nicht wirklich weiterkomme, weil der Autor eventuell eine ungebräuchliche Wortwahl gewählt hat.
Im 2. Abschnitt 2.Satz spricht er davon eine Dienstbibliothek zu erstellen für die Funktionen, welche sowohl der Client als auch der Server verwenden soll.
Hier gibt es jetzt 2 Fragen, die ich habe. Ich habe eine Klassenbibliothek erstellt. Jetzt ergibt sich für mich die Frage ob das der richtige Weg war, da ich diese Bibliothek irgendwie nicht in die VerweisListe meines Clients und meines Servers einbinden kann (bin da aber auch noch Anfänger!). Einbinden kann ich allerdings DLL-Dateien, welche aber dll als Erweiterung hätten und nicht .cs (alle Dateien, die im Tutorial erstellt werden enden mit .cs!) Kann mir hier vieleicht einer der Profis mal schnell einen Schubs in die richtige Richtung geben, was ich falsch mache, welche Projekt-Art ich wählen muss und wie ich das dann richtig in meinen Client und Server einbaue?
Vielen Dank
mirrowwinger
Jupp das war die Lösung, danke Khalid und Lars.
Wie kann ich denn das .NET Framework ändern oder deren Existenz prüfen? Also in den Einstellungen habe ich nichts gefunden. Wenn ich using System.ServiceModel; eintrage wird das ServiceModel rot unterstrichen.
Hallo c#-community,
ich habe eine Frage zu WCF und der Express Version von VS. In meinem letzten Post hat mich gfoidl auf eine Seite mit Tut´s für WCF verwiesen. Beim Versuch diese Tut´s nachzuprogrammieren, habe ich bemerkt, dass VS 2010 Express nicht den namespace ServiceModel kennt. Ich habe im Internet gesucht, wie ich das eventuell nachinstallieren kann und eigentlich nur die Information gefunden, dass WCF eigentlich ab Framework 3.0 dabei sein sollte und VS 2010 Exp hat ja 4.0. Jetzt stellt sich mir die Frage, ob es bei den Einschränkungen der Exp-Version kein WCF gibt? Kann mir jemand sagen, ob dies der Fall ist, also kann VS 2010 Express kein WCF?
Vielen Dank
mirrowwinger
Danke an euch, das WCF sieht schonmal sehr interessant aus @gfoidl und @ cookiie ja ist noch single Thread aber eigentlich möchte ich nur meine beiden Rechner miteinander verbinden. Es ist also kein Multiclient prinzipiell notwendig. Aber ich werde trotzdem erstmal das WCF anschauen.
mirrowwinger
Hallo c#-community,
hab wiedermal eine Frage. Ich habe einen Server und ein Client geschrieben, was auch alles soweit funktioniert (einmalig, da der Server nach Trennung keinen Client mehr connected). Deswegen wollte ich jetzt mit Hilfe eines Timers dies ändern, damit der Server nach Trennung wieder zu einen neuen Client eine neue Verbindung aufbauen kann.
Dafür habe ich folgende TimerTick-Methode geschrieben:
try
{
if (!_connected)
{
_socketClientCommunication = _socketServerCommunication.Accept(); // <-- hier bleibt er hängen
StatusMessage("\nClient at " + _socketClientCommunication.RemoteEndPoint + " connected");
_connected = true;
sendMessageToClient(_serverWelcomeText);
_timerReadCommunication.Enabled = true;
_timerReadCommunication.Start();
}
}
catch (Exception exc)
{
StatusMessage(exc.Message);
_connected = false;
}
Ich habe euch die Zeile markiert, bei der er hängen bleibt. Szenario dazu ist, dass ich das Server-Programm starte und damit der Timer gestartet wird. Client ist noch nicht gestartet.
Wie kann ich das besser machen, dass der Server vieleicht nur 5sec versucht mit einen Client zu verbinden und dann weiter macht.
Vielen Dank
mirrowwinger
Danke dir funktioniert jetzt alles. Habe ich die Funktion wohl vollkommen falsch verstanden. Dachte man muss da wieder ein Rechteck angeben, mit linker ober Ecke (1. Point) und rechter oberer Ecke.
Hallo c#-community,
hab wieder mal ein kleines Problem. Ich möchte in meinem Programm ein verkleinertes Bild meines Bildschirms darstellen. Habe mir auch mehrere Quellen hier herausgesucht und folgende Methoden in meinem Programm erstellt:
private void ButtonScreenShot_Click(object sender, EventArgs e)
{
Bitmap test;
test = GetBitmapOfPrimaryScreen();
if (test != null) test = GetScaledBitmapOfPrimaryScreen(test, 400, true);
PictureBoxScreenShot.Image = test;
PictureBoxScreenShot.Invalidate();
}
private Bitmap GetBitmapOfPrimaryScreen()
{
Bitmap bitmap;
Rectangle ScreenRect = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CopyFromScreen(new Point(0, 0), new Point(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height), ScreenRect.Size);
g.Dispose();
return bitmap;
}
private Bitmap GetScaledBitmapOfPrimaryScreen(Bitmap BitmapOfPrimaryScreen, int SideLength, bool horizontalOrVertical)
{
int x = 0, y = 0, imgwidth = -1, imgheight = -1;
if (BitmapOfPrimaryScreen == null)
return BitmapOfPrimaryScreen;
if (BitmapOfPrimaryScreen.Width < 1 || BitmapOfPrimaryScreen.Height < 1)
return BitmapOfPrimaryScreen;
imgwidth = BitmapOfPrimaryScreen.Width;
imgheight = BitmapOfPrimaryScreen.Height;
if (horizontalOrVertical == false)
if (imgheight == SideLength)
return BitmapOfPrimaryScreen;
if (horizontalOrVertical == true)
if (imgwidth == SideLength)
return BitmapOfPrimaryScreen;
float scaleFactor = ((float)SideLength / ((horizontalOrVertical) ? imgwidth : imgheight));
x = (int)((float)imgwidth * scaleFactor);
y = (int)((float)imgheight * scaleFactor);
Bitmap ret = new Bitmap(x, y);
Graphics g = Graphics.FromImage(ret);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(BitmapOfPrimaryScreen, 0, 0, x, y);
g.Dispose();
return ret;
Das Programm compiliert und läuft ohne Probleme. Allerdings, wenn ich den Button drücke, welcher den Screenshot erstellen soll, passiert nichts. Der Quellcode wird auch ordnungsgemäß abgearbeitet und auch beim Debuggen finde ich keinen Fehler. Sieht vieleicht jemand wo der Fehler liegt, denke mal ist irgendein trivialer wieder mal, bei dem ich wieder den Wald vor lauter Bäumen nicht sehe.
Vielen Dank
mirrowwinger