Laden...

Diskussion zu "Message Send"

Erstellt von Vellas vor 20 Jahren Letzter Beitrag vor 20 Jahren 5.311 Views
V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 20 Jahren
Diskussion zu "Message Send"

Hier könnt Ihr diskutieren, Fragen stellen, Wünsche, Anregungen und Verbesserungsvorschläge zu >Message Send> posten.

Code-Hacker

P
939 Beiträge seit 2003
vor 20 Jahren

Brauchst du die Bat-Datei unbedingt? Was steht denn da drin?

Nimm lieber ein ProcessStartInfo-Parameter, statt eines Strings zum Starten eines Prozesses. Darüber kannst du das Verhalten viel besser steuern, z.B. auch das Dos-Fenster verstecken oder die Ausgaben umleiten.

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 20 Jahren

Damit schreibe ich die TXT-Datei in der alle aktiven PCs eines Netzwerks stehen, halt was man in einer Workgroup o.ä. sehen kann. In der BAT-Datei steht:
@NET VIEW > USER.TXT

Vielen Dank für deinen Tip. Nach einigem rumgetüftel hat es nun geklappt. Das Fenster ist nicht mehr sichtbar!!! Die BAT-Datei muss aber bleiben, wegen dem scheiben der Datei. Was ich geupdatet habe befindet sich im entsprechendem Thread.

Code-Hacker

P
939 Beiträge seit 2003
vor 20 Jahren

Wenn du im ProcessStartInfo die RedirectOutput-Eigenschaft auf true setzt, kannst du die Ausgabe von net view direkt in einen String einlesen. Dadurch bräuchtest du wahrscheinlich die User.txt und die Bat-Datei nicht mehr.

string users = netViewProcess.StandardOutput.ReadToEnd();
netViewProcess.WaitForEnd();
V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 20 Jahren

@Pulpapex:
Ich habe es eben mal probiert. Das sah dann so aus:

ProcessStartInfo userInfo = new ProcessStartInfo(>NET.EXE>, >VIEW>);
userInfo.WindowStyle = ProcessWindowStyle.Hidden;
usererInfo.RedirectStandardOutput = true;
userInfo.UseShellExecute = false;
string users = Process.Start(userInfo).StandardOutput.ReadToEnd();

Das scheiben funktioniert zwar, aber duch StandardOutput wird das verstecken des Fensters wieder überschrieben und das Fenster blitzt auf. Das UseShellExecute muss auf false da sonst nicht umgeleitet werden kann. Hast du sonst vielleicht ein komplettes Codebeispiel? Also so scheint es nicht zu funktionieren, aber ich probiere Vorschläge gerne aus. Weil die BAT-Datei da wegzubekommen wäre echt nicht übel...

Code-Hacker

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 20 Jahren

Ich habe den Informationsthread eben in das Forum User Programme -> Programme verschoben. Ich denke dort passt es besser hin als zu Jobs. Bei Jobs befindet sich jetzt nur noch der Link dorthin.

Code-Hacker

P
939 Beiträge seit 2003
vor 20 Jahren

Hmm, das ist natürlich blöd.

Es gibt noch die CreateNoWindow-Eigenschaft in ProcessStartInfo. Die gibt an, ob ein Prozess in einem neuen Fenster gestartet werden soll. Bloss ich weiss nicht, ob dann die Umleitung noch funktioniert.

Ansonsten könnte man versuchen, das Fenster aus dem Desktopbereich rauszuschieben. Leider gibt es dafür keine Methode, sondern nur das Fenster-Handle. Man müsste es also über die WinApi machen.

public class WinApi {
    [DllImport(>user32>)]
    public static extern  bool SetWindowPos(int hwnd, int hwndInsertAfter, int x, int y, int h, int w, uint flags);
}

Für den hwnd-Parameter muss man folgenden Wert angeben.

int hwnd = process.MainWindowHandle.ToInt32();

Mit hwndInsertAfter gibt man die Z-Order an, also ob das Fenster ganz vorne sein soll oder weiter im Hintergrund. Die Werte dafür weiss ich nicht. Vielleicht gehts, wenn du 0 oder nochmal hwnd angibst. flags genauso .. das sind irgendwelche Konstanten, wo man die Werte erst aus den Header-Dateien raussuchen müsste.

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 20 Jahren

Danke erstmal für deine Mühe und Verbesserungsvorschläge.

Ich habe nächsten Monat sowieso Praktikum und dann wird mein Chef mir mal zeigen wie man das mit der API lösen kann, ich kenne mich damit gar nicht aus. Er wird mir dann mal ein Buch über die Programmierung mit der API geben. Bis dahin werde ich vorerst wenig bis keine Zeit haben.

Wenn du möchtest habe ich kein Problem damit wenn du das ausprobierst ob du es vielleicht hinkriegst. Darfst wenn das klappt dann auch gerne Posten. Bei der Komplettveröffentlichung des nächsten Codes würde ich den Teil dann selbstverständlich mit einem Kommentar versehen das diese Lösung von dir ist.

Wenn die Codeoptimierung danach drin ist kommen zugleich noch die letzten Schliffe, wonach das Programm dann als 100% fertig gilt und ich mich bei diesem programm nur noch um auftretende Fehler kümmern werde.

Code-Hacker