132749
Goto Top

Batchfenster links bzw. rechts zentrieren

Hallo zusammen,
ich habe da mal wieder ein Problem und frage mich ob man das irgendwie lösen kann!

Ich möchte, dass das Batchfenster auf dem Desktop links bzw. rechts zentriert angezeigt wird und nicht mal da oder hier! Ist das möglich?
Vielleicht über die Registry? Wenn ja, wie?

mode con lines=40 cols=40
Color CF

TITLE Copyright: myName @ 2018

set "key=HKLM\SOFTWARE\myProgramm"  
reg query "%key%" /v Publisher /reg:32 | findstr myName >nul 2>&1 || (  
CLS
echo ****************************************      
echo *                                      *
echo *              myProgramm              *
echo *                myName                *
echo *                                      *  
echo *        NOT FOUND -- NOT FOUND        *
echo *   NICHT GEFUNDEN -- NICHT GEFUNDEN   *
echo *                                      *
echo ****************************************
ping /n 10 localhost >nul
pause
)

Für Eure Hilfe bedanke ich mich im Voraus

Gruß
kampen

Content-Key: 383093

Url: https://administrator.de/contentid/383093

Printed on: April 19, 2024 at 06:04 o'clock

Member: rubberman
rubberman Aug 11, 2018 at 22:37:34 (UTC)
Goto Top
Du kannst nur eine absolute Position festlegen. Rechtsklick auf die Titelleiste des Fensters > Eigenschaften > Tab "Layout" > Bei "Fensterposition" den Haken "Automatisch posionieren" entfernen und statt dessen Werte für Links und Oben angeben.

Steffen
Mitglied: 132749
132749 Aug 12, 2018 at 04:32:15 (UTC)
Goto Top
Moin rubberman,

die Option habe ich bereits ausprobiert aber wenn die Batch auf einem anderen PC ausgeführt wird dann funktioniert das nicht!
Ich dachte, man könnte das über einen Batchbefehl lösen! Gibt es vielleicht eine andere Lösung um das zu realisieren? Wie sieht es mit dem hinzufügen eines Registry Eintrag aus? Könnte man das damit lösen?
Member: Pjordorf
Pjordorf Aug 12, 2018 at 08:14:51 (UTC)
Goto Top
Hallo,

Zitat von @132749:
auf einem anderen PC ausgeführt wird dann funktioniert das nicht!
Davon hast du aber nichts gesagt. Ein anderer Rechner hat eine andere Umgebung (auch wenn der Desktop für dich gleich aussieht) und da gelten dann evtl andere gegenbenheiten. Und das CMD Fenster war nie dafür vorgesehen es wie eine GUI Anwendung auf Desktops zu bewegen, kann es doch mit den groben Werkzeugen ein bisserl gesteuert werden
https://stackoverflow.com/questions/7977322/set-the-window-position-of-a ...

Ich dachte, man könnte das über einen Batchbefehl lösen! Gibt es vielleicht eine andere Lösung um das zu realisieren? Wie sieht es mit dem hinzufügen eines Registry Eintrag aus? Könnte man das damit lösen?
https://superuser.com/questions/532256/where-is-the-information-about-th ...
Und ein HKCU kann auf jeden Rechner andere Inhalte haben. Ob ein CMD Fenster sich dort einträgt und die Werte auch beachtet bzw. liesst?

Gruß,
Peter
Member: rubberman
rubberman Aug 12, 2018 updated at 13:15:09 (UTC)
Goto Top
Ach hör doch auf. Das was du da vorhast, ist eine Positionierung des Fensters zur Laufzeit des Scripts. Da kannst du viel in der Registry ändern - ist das Fenster einmal an seinem Platz, tut sich nichts mehr. Erst beim nächsten Öffnen wäre das wirksam. Da musst du schon mit ganz anderen Mitteln ran und die stehen dir in Batch nicht zur Verfügung.

Das folgende Script definiert zwei Variablen, center_left und center_right. In jeder ist ein Powershell Aufruf gespeichert. Dort kannst du die Plattform API ansprechen. Einmal definiert, kannst du die Variablen immer wiederverwenden, wie ich das am Ende in der Endlosschleife vorgeturnt habe. Kopiere den Code unbedingt über den "Quelltext" Link, damit sich an den Zeilenenden keine Leerzeichen einmogeln.

Steffen

@echo off &setlocal
mode con lines=40 cols=40

set center_left=powershell -NoProfile -ExecutionPolicy Bypass -Command ^"^  
Add-Type -TypeDefinition '^  
using System;^
using System.Runtime.InteropServices;^
public class C {^
 [StructLayout(LayoutKind.Sequential)] public struct POINT {public int x; public int y;}^
 [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; }^
 [StructLayout(LayoutKind.Sequential)] public struct WINDOWPLACEMENT { public uint length; public uint flags; public uint showCmd; public POINT ptMinPosition; public POINT ptMaxPosition; public RECT rcNormalPosition; }^
 [DllImport(\^"user32.dll\^")] public static extern int GetSystemMetrics(int nIndex);^  
 [DllImport(\^"kernel32.dll\^")] public static extern IntPtr GetConsoleWindow();^  
 [DllImport(\^"user32.dll\^")] public static extern int GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);^  
 [DllImport(\^"user32.dll\^")] public static extern int SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);^  
 public void center_left() {^
  int screen_height = GetSystemMetrics(17);^
  WINDOWPLACEMENT wpl = new WINDOWPLACEMENT() {length = (uint)Marshal.SizeOf(typeof(WINDOWPLACEMENT))};^
  GetWindowPlacement(GetConsoleWindow(), ref wpl);^
  int top = screen_height / 2 - (wpl.rcNormalPosition.Bottom - wpl.rcNormalPosition.Top) / 2, right = wpl.rcNormalPosition.Right - wpl.rcNormalPosition.Left, bottom = screen_height / 2 + (wpl.rcNormalPosition.Bottom - wpl.rcNormalPosition.Top) / 2;^
  wpl.flags = 0; wpl.showCmd = 1; wpl.rcNormalPosition.Left = 0; wpl.rcNormalPosition.Top = top; wpl.rcNormalPosition.Right = right; wpl.rcNormalPosition.Bottom = bottom;^
  SetWindowPlacement(GetConsoleWindow(), ref wpl);^
 }^
}';^  
(New-Object C).center_left();^"  

set center_right=powershell -NoProfile -ExecutionPolicy Bypass -Command ^"^  
Add-Type -TypeDefinition '^  
using System;^
using System.Runtime.InteropServices;^
public class C {^
 [StructLayout(LayoutKind.Sequential)] public struct POINT {public int x; public int y;}^
 [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; }^
 [StructLayout(LayoutKind.Sequential)] public struct WINDOWPLACEMENT { public uint length; public uint flags; public uint showCmd; public POINT ptMinPosition; public POINT ptMaxPosition; public RECT rcNormalPosition; }^
 [DllImport(\^"user32.dll\^")] public static extern int GetSystemMetrics(int nIndex);^  
 [DllImport(\^"kernel32.dll\^")] public static extern IntPtr GetConsoleWindow();^  
 [DllImport(\^"user32.dll\^")] public static extern int GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);^  
 [DllImport(\^"user32.dll\^")] public static extern int SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);^  
 public void center_right() {^
  int screen_width = GetSystemMetrics(16), screen_height = GetSystemMetrics(17);^
  WINDOWPLACEMENT wpl = new WINDOWPLACEMENT() {length = (uint)Marshal.SizeOf(typeof(WINDOWPLACEMENT))};^
  GetWindowPlacement(GetConsoleWindow(), ref wpl);^
  int top = screen_height / 2 - (wpl.rcNormalPosition.Bottom - wpl.rcNormalPosition.Top) / 2, left = screen_width - (wpl.rcNormalPosition.Right - wpl.rcNormalPosition.Left), bottom = screen_height / 2 + (wpl.rcNormalPosition.Bottom - wpl.rcNormalPosition.Top) / 2;^
  wpl.flags = 0; wpl.showCmd = 1; wpl.rcNormalPosition.Left = left; wpl.rcNormalPosition.Top = top; wpl.rcNormalPosition.Right = screen_width; wpl.rcNormalPosition.Bottom = bottom;^
  SetWindowPlacement(GetConsoleWindow(), ref wpl);^
 }^
}';^  
(New-Object C).center_right();^"  


for /l %%i in () do (
  %center_left%
  %center_right%
)
Mitglied: 132749
132749 Aug 12, 2018 at 15:26:27 (UTC)
Goto Top
Danke für eure Antworten!