Hex String -> Byte[] -> Base64 String
Das würde für dein Beispiel v+v7/wACBqc=
(12 Zeichen) ergeben.
Wenn dir das zu unleserlich ist, kannst du auch base32 nehmen (BVQVRVS0041L7
, 13 Zeichen).
Guck dir mal Shortcut Manager mit Shortcuts wie Visual Studio an.
Das Problem sind die Leerzeichen in den Pfaden, da musst du die einzelnen Parameter in " schreiben:
System.Diagnostics.Process.Start("cmd.exe", " /C \"C:\\Program Files\\Graphviz2.36\\bin\\dot.exe\" -Tpng \"C:\\Users\\Peter\\Downloads\\GraphOfText.txt\" > \"C:\\Users\\Peter\\Downloads\\output.png\"");
Du solltest dein Programm auch direkt ausführen können:
System.Diagnostics.Process.Start("C:\\Program Files\\Graphviz2.36\\bin\\dot.exe", "-Tpng \"-oC:\\Users\\Peter\\Downloads\\output.png\" \"C:\\Users\\Peter\\Downloads\\GraphOfText.txt\"");
Wenn ich mich richtig erinnere, musst du den Content des Post Requests in den StandardInput-Stream schreiben, also anstatt compilerProcessInfo.EnvironmentVariables.Add("BODY", RequestCommand);
sollte es so aussehen: compilerProcess.StandardInput.Write(RequestCommand)
nachdem du den Prozess gestartet hast. Vielleicht geht aber auch beides.
Fehler der php-cgi.exe stehen im StandardError-Stream, den solltest du also auch auslesen um zu sehen was du falsch machst.
Wenn es nur 2 verschiedene Prioritäten gibt, dann ist das einfachste mit 2 Queues zu arbeiten, einen für die wichtigen Requests und einen für die normalen. Wenn es Requests im "wichtigen" Queue gibt, dann nimmt sich der Thread diesen, ansonsten einen aus dem "normalen" Queue.
Setze auch noch das richtige WorkingDirectory, das ist wahrscheinlich die Stelle an der das Text-File erstellt wird.
Nur mal so am Rande: [Tipp] Anfängerfehler == true / == false
Damit lässt sich dein ganzes if-Konstrukt zu return pal || p1.X == p2.X
zusammenfassen.
Du musst Application.Run() ausführen, damit das mit dem TrayIcon funktioniert. Als kleines Beispiel kannst du dir [Snippet] Vorlage für Tray-/NotifyIcon-Anwendung angucken.
/k set x = blabla && set y = blublu
Benutze "/k dir", das schließt die Konsole nicht sofort wieder.
Probiere es mal mit "ftp://USER:PASSWORT@SERVER:21/und/hier/das/verzeichnis" als Argument.
Du speicherst einfach in einer Variable ob beim letzten Prüfen die Hand im Rechteck war, wenn die Hand außerhalb ist, beim letzen mal aber noch innerhalb, dann kannst du dein Leave-Event auslösen.
Steht doch in dem Link den Abt gepostet hat.
[DllImport("cfgmgr32.dll")]
public static extern bool CM_Is_Dock_Station_Present();
Dann guck dir an, was in diesen bytes drinsteht, und mach dann .Trim((char)0x00) oder was auch immer in den überflüssigen bytes steht. Oder du bekommst auch die Länge des Strings übertragen, dann kannst du mit .Substring() arbeiten.
Guck dir das: [FAQ] Assistenten/Wizards: Mit Windows Forms eine Art Frameset einer Website nachbauen und das: [Hinweis] Wie poste ich richtig? (1.1/1.1.1) an 😃
PictureBoxen bewegen ist eigentlich niemals eine gute Idee, guck dir [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) an.
Nur der Vollständigkeit halber, der Operator den du suchst:
>
Und [Hinweis] Wie poste ich richtig? 1.1, 1.1.1, 1.2
Dafür gibt es auch direkt Control.DesignMode, du brauchst dein IsInDesignMode()
also nicht 😃
Das funktioniert dann auch wenn du andere Desginer als Visual Studio benutzt, falls die devenv.exe irgendwann mal anders heißen sollte oder deine eigene Anwendung devenv.exe heißt.
(Und deine Methode kannst do noch verkürzen, siehe auch [Tipp] Anfängerfehler == true / == false)
public static bool IsInDesignMode()
{
return Application.ExecutablePath.EndsWith("devenv.exe");
}
Guck dir mal das hier an: [Hinweis] Wie poste ich richtig? (interessant für dich sind 1.1.1, 4a, 4.1 und 5)
Du kannst dir am besten ja mal diesen Artikel durchlesen: [Tutorial] Client-/Server-Komponente über TCP-Sockets.
Wäre da nicht ein NumericUpDown besser geeignet?
Bevor du ein Programm schreibst, dass die Synchronisation von der DropBox an und ausschaltet, würde ich lieber im Post/Pre-Build in eine richtige Versionsverwaltung einchecken, dafür musst du nicht mal ein Programm schreiben, sondern einfach nur git mit den richtigen Parametern aufrufen.
Du könntest auch an einen Pfad außerhalb der Dropbox kompilieren und nur die *.cs und Projektdateien in der Dropbox haben. Aber am einfachsten ist wirklich eine richtige Quellcodeverwaltung einzusetzen, da Dropbox für so etwas einfach nicht da ist.
Darth Maim
Zurück in den Code müsste einfach nur F7 sein.
Darth Maim
Du brauchst da 2 Gleichheitszeichen statt nur einem.
if (ausgangszahl1 > ausgangszahl2 && ausgangszahl1 % ausgangszahl2 == 0)
Das sind aber Grundlagen! (siehe [Hinweis] Wie poste ich richtig? 1.1.1)
Darth Maim
Der erste Timer existiert und läuft noch. Du erstellst dann einen 2. Timer, der das gleiche Event aufruft -> Das Event wird 2 mal alle 500ms aufgerufen.
Hab den Code zu schnell überflogen.
Im Tick-Event wird der Zähler erhöht, ist damit 1 (ich gehe mal davon aus, dass der am Anfang 0 ist). Dadurch wird das erste Bild angezeigt. Da der Zähler aber immer noch kleiner 4 ist, wird die Schleife nochmal ausgeführt, der Zähler ist dann 2, das 2. Bild wird angezeigt und zwar gleich nachdem das erste Bild angezeigt wird. Und das ganze vier mal.
Du willst das ganze ohne while-Schleife, ungefähr so:
public void t3_Tick(object sender, EventArgs e) {
zaehler++;
if (zaehler == 1)
pictureBox_quit.Load("C:\\Users\\Jaroprus\\Pictures\\Quit_1.png");
else if (zaehler == 2)
pictureBox_quit.Load("C:\\Users\\Jaroprus\\Pictures\\Quit_2.png");
else if (zaehler == 3)
pictureBox_quit.Load("C:\\Users\\Jaroprus\\Pictures\\Quit_3.png");
}
Darth Maim
Und Ich möchte ein Grundlagen-Forum [und wie myCSharp.de Anfängern auch ohne ein solches helfen kann]
EDIT von herbivore:
Und insbesondere für den Aspekt "Anfänger helfen Anfängern" sei folgendes Zitat aus dem verlinkten Thread explizit genannt:
Auch wenn man im Hinterkopf behalten sollte, dass die Tipps [von Anfängern] zwar fast immer gut gemeint sind und auch häufig funktionieren, aber doch oft suboptimal sind (z.B. wenn globale Variablen statt Parameterübergabe vorgeschlagen wird). Es besteht also dabei leider immer die erhöhte Gefahr, dass schlechte Ratschläge gegeben werden.
Deine while-Schleife blockiert den GUI Thread.
1.) [FAQ] Warum blockiert mein GUI?
2.) [Hinweis] Wie poste ich richtig? 1.1.1 und 6
Darth Maim
Das bedeutet es ist kein Tutorial, sodass ich auch nichts dabei lerne bzw. weiß was dort geschieht?!
Niemand hindert dich daran, den Code durchzulesen und dir anzugucken was da passiert 😃
Darth Maim
Ich habe so etwas in der Art mal geschrieben, deswegen hier mal eine vereinfachte Version. Hauptsächlich brauchst du einen IExtenderProvider, der jedem Control auf deiner Form/Usercontrol die Eigenschaft Permissions gibt. Die gibt an, welche Rechte der Benutzer haben muss, damit das Control Enabled ist.
[ProvideProperty("Permissions", typeof(Control))]
class PermissionProvider : Component, IExtenderProvider
{
Dictionary<Control, Permissions> _permissions = new Dictionary<Control, Permissions>();
private Permissions _currentPermissions;
private bool _enabled;
[DefaultValue(Permissions.None)]
public Permissions GetPermissions(Control control)
{
return _permissions.ContainsKey(control) ? _permissions[control]: Permissions.None;
}
public void SetPermissions(Control control, Permissions permissions)
{
_permissions[control] = permissions;
}
public void UpdateAll()
{
foreach(var kvp in _permissions)
Update(kvp.Key, kvp.Value);
}
private void Update(Control control, Permissions permissions)
{
control.Enabled = !Enabled || (CurrentPermissions & permissions) == permissions;
}
public bool CanExtend(object extendee)
{
return (extendee is Control);
}
[EditorBrowsable]
[DefaultValue(Permissions.None)]
public Permissions CurrentPermissions
{
get { return _currentPermissions; }
set { _currentPermissions = value; UpdateAll(); }
}
[EditorBrowsable]
[DefaultValue(true)]
public bool Enabled
{
get { return _enabled; }
set { _enabled = value; UpdateAll(); }
}
}
[Flags]
public enum Permissions
{
None = 0,
CanClickButton = 1,
CanEditTextBoxes = 2,
CanDoFancyStuff = 4,
All = 7
}
Du kannst diesen PermissionProvider einfach auf deine Form ziehen, und dann jedem Control die Permissions geben, die es braucht um Enabled zu sein. Pass das Permissions-Enum passend zu deinen Berechtigungen an. Mit der Eigenschaft CurrentPermissions des PermissionProviders kannst du die Rechte des aktuellen Users angeben.
Darth Maim
Mit HTML5 kannst du einem Input oder einer Form durch das autocomplete-Attribut sagen, ob es die Autovervollständigung anzeigen soll oder nicht. Das bezieht sich aber nur aufs anzeigen (die eingegebenen Werte werden weiter gespeichert) und funktioniert nur in Browsern, die HTML5 unterstützen.
Darth Maim
Benenne die hauptanwendung.exe vor dem updaten in hauptanwendung.old.exe oder so um, dann hast du die alte lauffähige Version immer noch als Backup. Das gleiche kannst du zum Updaten des Updaters benutzen, nenne die Datei des Updaters um (geht auch während der Updater läuft), und dann kannst du den neuen Updater an die Stelle des alten Laden. Und im Updater (oder in der Hauptanwendung) kannst du beim Starten prüfen ob eine dieser *.old.exe Dateien vorhanden ist und wenn ja, dann löschen, da das Programm ja grade läuft und du so weißt, dass die Datei nicht korrupt ist. Natürlich kannst du die *.old.exe-Dateien auch behalten, und nur löschen wenn du sie neu anlegst.
Darth Maim
Paint.NET ist nichtmehr Open Source, war es aber mal. Die letzte öffentliche Version gibts hier: OpenPDN. 😃
Trotzdem sollte man da nicht die Datei wechseln, sonder eine Klasse für die 2 Designs benutzen. Das kannst du doch auch immernoch auf mehrere .css-Datein aufteilen.
Zum Beispiel so:
/* default.css */
.navigation { color: black; }
/* blue.css */
html.blueDesign .navigation { color: blue; }
/* red.css */
html.redDesign .navigation { color: red; }
/* html für das blaue Design */
<html class='blueDesign'> ...
/* html für das rote Design */
<html class='redDesign'> ...
Darth Maim
Ich habe bereits zahlreiche Topics durchstöbert, aber es wurde immer nur verwiesen, dass das Programmverzeichnis nicht der richtige Ort dafür ist und AppData dafür gedacht ist.
Und das ist auch richtig so. Warum meinst du denn, dass dein Programm da Schreibrechte braucht?
Darth Maim
Warum gehst du den Umweg über die PictureBox? Beim speichern von PictureBox.Image gehen alle Daten verloren (bzw. schon vorher, denn sie werden gar nicht erst geladen). Nehme einfach direkt die Datei und wandel die in Hex um:
test2 = byteToHex(File.ReadAllBytes(pfadDerDatei));
Darth Maim
Wahrscheinlich ist das mal wieder der WebRequest der nach dem Systemproxy sucht, versuch mal den Proxy auf null zusetzen.
Darth Maim
Nein.
Pfad müsste dann in etwa so aussehen: ft****p://user:pass@ftp.server.com:21/download/directory/file.avi
Darth Maim
Das ganze geht auch einfach mit [Windows]+[P].
Darth Maim
Steam an sich macht auch nichts gegen Hacks, Steam verkauft spiele, und solange die Geld bekommen, ist denen egal ob wer hackt (bei Spielen von Valve ist das wieder was anderes (TF2, CS, ...), aber die benutzen auch externe Anticheatprogramme). Bei CoD wäre das Punkbuster, was nicht auf allen Servern aktiviert ist. Ich bin mir ziemlich sicher, dass Punkbuster dich mit deinen "Hacks" nicht auf einem Server hätte spielen lassen, auf dem das aktiviert ist.
Guck dir mal [FAQ] Assistenten/Wizards: Mit Windows Forms eine Art Frameset einer Website nachbauen an, das sollte dir helfen.
Darth Maim
Du kannst das UserControl ja trotzdem in ein eigenes Fenster mit WindowStyle=None und ShowInTaskbar=False packen, und immer wenn du deine MainForm verschiebst/minimierst/resized/... die Position des UserControlWindows passend anpassen. Dann merkt man garnicht, dass es eigentlich ein eigenes Window ist.
Darth Maim
Das einfachste wäre wahrscheinlich, dein Usercontrol in einem eigenem Fenster anzuzeigen, und den Owner davon auf dein MainWindow zu setzen, dann ist das immer vor dem MainWindow.
Darth Maim
Dann änder das Vorzeichen der Richtung?
aber die Picturebox ist schon ok
Nein, ist sie nicht! Lies dir unbedingt [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) durch.
Darth Maim
return Convert.ToString(i, basis).PadLeft(stellen, '0');
Darth Maim
Guck dir mal die MaskedTextBox-Klasse an. Die Maske müsste dann so ähnlich aussehen: 0000-00-000.
Darth Maim
Mit Winforms ist das nur sehr schwer bis garnicht umzusetzen, ich würde dir empfehlen dir mal WPF anzugucken, da kannst du dem Window einfach eine transparente Hintergrundfarbe geben.
Darth Maim