Zitat von Tom3419
Oder wo ist der Denkfehler?
Wenn du immer die GLEICHEN Werte bei der Form setzt, warum sollte die Form an einer anderen Stelle erscheinen?
Dieser Code
Screen monitor = Screen.AllScreens[screenIdx];
holt nur einen Wert aus einer Auflistung. Punkt. Mehr macht er nicht. Er stellet nichts irgenwie wo ein!
Der Code, der das was du möchtest macht, den habe ich schon hier gezeigt. Also ist es eher ein Lese- als ein Denkfehler
Zitat von Th69
Und wenn die übergebenen Parameter
xPos
/yPos
die relative Position angeben sollen, dann noch die Werte dazuaddieren:
Dann sollte man die aber auch konsequent umbenennen in xOffset
und yOffset
f3.Location = new Point(rect.X + xOffset, rect.Y + yOffset);
und man müsste diese Werte auch noch von der Höhe und Breite abziehen, sonst schiebt man das Fenster über den Bildschirmrand hinaus
Ich schaue mir mal den Code an:
private void Anzeige (int screenIdx, int xPos, int yPos, int xDim, int yDim)
{
// Den gewünschten Screen/Monitor auswählen - OK
Screen monitor = Screen.AllScreens[screenIdx];
// Den Arbeitsbereich des Monitors auslesen - OK
Rectangle rect = monitor.WorkingArea;
// Und nun? Was fängst du mit dem rect nun an?
f3.StartPosition = FormStartPosition.Manual;
f3.Location = new Point(xPos, yPos);
f3.Size = new Size(xDim, yDim);
f3.BackColor = Color.Red;
f3.Show();
}
Also du holst dir den Monitor, davon den Arbeitsbereich um dann damit nichts zu machen.
Die Arbeit kannst du dir doch auch sparen, und somit würde der folgende Code das Gleiche machen:
private void Anzeige (int screenIdx, int xPos, int yPos, int xDim, int yDim)
{
f3.StartPosition = FormStartPosition.Manual;
f3.Location = new Point(xPos, yPos);
f3.Size = new Size(xDim, yDim);
f3.BackColor = Color.Red;
f3.Show();
}
Wenn du das Fenster an den Arbeitsbereich des gewählten Screens anpassen willst, dann brauchst du aber die ganzen Parameter nicht, denn die Werte holst du dir aus der rect
Variable:
private void Anzeige (int screenIdx)
{
Screen monitor = Screen.AllScreens[screenIdx];
Rectangle rect = monitor.WorkingArea;
// Wir verwenden die Werte von rect
f3.StartPosition = FormStartPosition.Manual;
f3.Location = rect.Location;
f3.Size = rect.Size;
f3.BackColor = Color.Red;
f3.Show();
}
Schau mal in die Dokumentation von BitConverter da wird auch der Umgang mit Little- und. Big-Endian angesprochen
BTW Man kann hier ganz toll den Code direkt in den Beitrag einfügen, wenn man die Code-Tags verwendet. Sieht dann so aus:
namespace Foo;
class Bar
{
void Do( string s )
{
Console.WriteLine( s );
}
}
Du kopierst also alle Dateien von beiden Anwendungen in einen Ordner?
Genau das würde ich nicht machen - unter anderem aus dem Grund warum du gerade fragst.
Wenn du eine kleine Linux-Kiste (z.B. virtuell) aufstellst kannst du postfix
dafür verwenden.
Habe ich auch genau aus so einem Grund im Einsatz.
In Visual Studio ist die Erweiterung ResXManager sehr hilfreich.
dotnet publish -p:AssemblyName=appIntern […]
Zitat von Abt
Das erste was man braucht, ist eigentlich die WMI. Über GetProccess bekommt man immer nur die gleichen Prozesse der Architektur, also x86 oder x64. Über WMI bekommt man alles.
Das war die Einleitung zum Beitrag.
Um direkt in dem Code die Ergebnisse von Process.GetProcesses()
(wir erinnern uns: liefert zu wenig) und der WMI (wir erinnern uns: liefert alles) mit einem join
zu verknüpfen und damit das was die WMI mehr liefert gleich wieder in den Ausguss zu spülen.
Das macht einfach keinen Sinn weil man so nicht mehr bekommt.
Auf diese Problematik wollte ich den unbedarften Copy-Paste-Nutzer der Zukunft hinweisen, nicht das der dann da mit seinem kurzen Hemd im Regen herumsteht und die Welt nicht mehr begreift, denn das hilft schon mal gar nicht.