Powershell Aufgabe?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Feststellen der Sichtbarkeit eines Prozesses anhand von MainWindowTitle ist natürlich völliger Schwachsinn , da es auch Fenster ohne Titel gibt und und diese nicht in der liste angezeigt würden! (Demo für eine solche Anwendung am Ende dieses Posts)

Du kannst natürlich nichts dafür, das die Autoren von Lehrmaterialien keine Ahnung haben. Deinem Lehrer darfst Du meine Meinung ruhigen Gewissens übermitteln!

Wrong_demo.ps1

function Get-Visibleprocess {

    param([boolean] $ShowGrid = $False)  #Defaultwert, wen kein Parameter  angegeben wird

    $processes = Get-Process | where{$_.MainWindowTitle} | Select-Object -Property Id, ProcessName, Path
    if( $ShowGrid ){
          #in der Grid selektierte Items Zurückgeben  (OK)  ...sionst  macht das  Ding keinen Sinn
        $processes | Out-GridView -PassThru   
    } 
    else { $processes }
}

Get-Visibleprocess -ShowGrid $True |ft
pause

Richtig wäre es auf ein FensterHandle ungleich 0 zu filtern (unsichtbare Prozesse haben immer ein HWnd = 0)

better_Demo.ps1

function Get-Visibleprocess {

  param([boolean] $ShowGrid = $False)
   #ich bin mal so frei den nichtvorhandenen Titel mit anzuzeigen
  $processes = Get-Process | where{$_.MainWindowHandle -ne 0} | Select-Object -Property Id, ProcessName, Path, MainWindowTitle
  if( $ShowGrid ){
     #in der Grid selektierte Items Zurückgeben (OK) ...sionst macht das Ding keinen Sinn
    $processes | Out-GridView -PassThru  
  } 
  else { $processes }
}

Get-Visibleprocess -ShowGrid $True |ft
pause

Screenclock.ps1 (eine durchsichtige Uhr ohne sichtbaren Rahmen und Titel)

using namespace System.Windows.Forms
using namespace System.Drawing

$user32=Add-Type -m '[DllImport("user32.dll")] public static extern void ShowWindow(IntPtr hWnd, int nCmdShow);' -Name myAPI -passthru
$hwnd=(gps -id $PID).MainWindowHandle
$user32::ShowWindow($hwnd, 0)

Add-Type -a 'System.Windows.Forms'
$Form = New-Object 'Form'
$Form.BackColor = '0,0,0' 
$Form.TransparencyKey = $Form.BackColor 
$Form.TopMost = $True
$Form.FormBorderStyle = 0 
$Form.Size = '250,90'
$Form.StartPosition = 'manual'
$Form.Location = '30,30'

$ClockDisplay = New-Object 'Label'
$ClockDisplay.Font = [Font]::new("Consolas",32,[FontStyle]3)
$ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date)
$ClockDisplay.AutoSize = $True
$ClockDisplay.ForeColor = '255,0,0'

$Form.Controls.Add($ClockDisplay)

$Timer1 = New-Object 'Timer'
$Timer1.Enabled = $True
$Timer1.Interval = 100
$Timer1_Action={
    $ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date) 
}
$Timer1.add_Tick($Timer1_Action)

$Null=$Form.ShowDialog()
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Function get-visibleprocess {

param([boolean] $ShowGrid)

$temp =get-process | where{$_MainWindowTitle} | select-object -property id, processname, path

If($ShowGrid){

$temp | out-gridview

} else {$temp}

}

Es ist hilfreich immer nur einzelne Teilprobleme zu googlen


kuhmelcher 
Beitragsersteller
 09.05.2022, 13:03

Danke dir viel mal! hat mir sehr fest geholfen! Wünsche dir einen schönen tag!

0