Popup Fenster erstellen
Hallo zusammen,
Ich hätte da mal eine Frage. Ich bin kein Spezialist in Sachen programmieren und würde dennoch gerne ein bisschen was machen.
Ich habe eine Kamera, die speichert auf einer NAS Bilder von Personen die in den Empfangsbereich eintreten. Jetzt hätte ich gerne ein Popupfenster, dass mir das gerade eben gemachte Bild auf meinem PC am Bildschirm zeigt. Die NAS ist mit Benutzern und Passwörtern gespeichert.
Könntet ihr mir vielleicht ein wenig dabei helfen und mir auch ein bisschen was darüber erklären damit ich mich Prinzipiell auskenne?
Danke schon im Vorhinein
Gruß
Florian
Ich hätte da mal eine Frage. Ich bin kein Spezialist in Sachen programmieren und würde dennoch gerne ein bisschen was machen.
Ich habe eine Kamera, die speichert auf einer NAS Bilder von Personen die in den Empfangsbereich eintreten. Jetzt hätte ich gerne ein Popupfenster, dass mir das gerade eben gemachte Bild auf meinem PC am Bildschirm zeigt. Die NAS ist mit Benutzern und Passwörtern gespeichert.
Könntet ihr mir vielleicht ein wenig dabei helfen und mir auch ein bisschen was darüber erklären damit ich mich Prinzipiell auskenne?
Danke schon im Vorhinein
Gruß
Florian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 268632
Url: https://administrator.de/contentid/268632
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo Florian,
mit Powershell z.B. so: (Informationen über Powershell-Scripte findest du ganz unten im Kommentar)
In den ersten Zeilen legst du den Ordner fest in dem die Bilder gespeichert werden. Das Script zeigt dann das aktuellste Bild in diesem Ordner in einem Fenster an.
Wenn kein Powershell gewünscht ist, lässt sich das auch mit einem HTA-File und VBS machen, oder gleich mit einer richtigen Programmiersprache (VB.Net/C#).
Grüße Uwe
Liegt das Script im selben Verzeichnis in dem man sich gerade befindet, kann man es auch so abkürzen:
Der einfachste Aufruf sieht hier so aus:
Wenn man dem Script Parameter übergeben möchte:
Wenn man "benannte" Parameter übergeben möchte (die einfachen Hochkommas um den Scriptpfad werden benötigt wenn er Leerzeichen beinhaltet):
Man kann auch mehrere Scripte hintereinander ausführen lassen:
Weitere Parameter zeigt einem ein
mit Powershell z.B. so: (Informationen über Powershell-Scripte findest du ganz unten im Kommentar)
In den ersten Zeilen legst du den Ordner fest in dem die Bilder gespeichert werden. Das Script zeigt dann das aktuellste Bild in diesem Ordner in einem Fenster an.
Wenn kein Powershell gewünscht ist, lässt sich das auch mit einem HTA-File und VBS machen, oder gleich mit einer richtigen Programmiersprache (VB.Net/C#).
#---------------------------------------
# Ordner in dem die Bilder liegen
$folder = "\\Server\Freigabe\images"
# hole aktuellstes Bild im Ordner
$newestfile = gci $folder -Filter *.jpg | sort -Descending -Property LastWriteTime | select -First 1 -ExpandProperty Fullname
#---------------------
$showWindowAsync = Add-Type –memberDefinition @”
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
“@ -name “Win32ShowWindowAsync” -namespace Win32Functions –passThru
function Hide-PowerShell() {
[void]$showWindowAsync::ShowWindowAsync((Get-Process –id $pid).MainWindowHandle, 2)
}
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$formMain = New-Object System.Windows.Forms.Form
$pictureBox1 = New-Object System.Windows.Forms.PictureBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
#Provide Custom Code for events specified in PrimalForms.
$handler_formMain_Load=
{
$pictureBox1.Load($newestfile)
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$formMain.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 600
$System_Drawing_Size.Width = 800
$formMain.ClientSize = $System_Drawing_Size
$formMain.DataBindings.DefaultDataSourceUpdateMode = 0
$formMain.Name = "formMain"
$formMain.Text = "Bild-Popup"
$formMain.add_Load($handler_formMain_Load)
$pictureBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$pictureBox1.Dock = 5
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 0
$System_Drawing_Point.Y = 0
$pictureBox1.Location = $System_Drawing_Point
$pictureBox1.Name = "pictureBox1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 320
$System_Drawing_Size.Width = 390
$pictureBox1.Size = $System_Drawing_Size
$pictureBox1.SizeMode = 4
$pictureBox1.TabIndex = 0
$pictureBox1.TabStop = $False
$formMain.Controls.Add($pictureBox1)
#Save the initial state of the form
$InitialFormWindowState = $formMain.WindowState
#Init the OnLoad event to correct the initial state of the form
$formMain.add_Load($OnLoadForm_StateCorrection)
# hide powershell Window
Hide-PowerShell
#Show the Form
$formMain.ShowDialog()| Out-Null
Grüße Uwe
Anleitung: Wie starte ich Powershell-Scripte
- Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
- Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl
Set-ExecutionPolicy RemoteSigned -Force
ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden:Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
- Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
- Alternativ lässt sich ein Script auch ohne das globale Ändern der ExecutionPolicy ausführen indem man die Policy als Parameter auf der Kommandozeile mitgibt:
powershell.exe -ExecutionPolicy RemoteSigned -File "C:\Pfad\Script.ps1"
Starten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:"C:\Pfad\script.ps1"
.\script.ps1
Starten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
powershell -?
in einer Konsole an.Starten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Hallo!
Der Unterschied zwischen VBA und PowerShell lässt sich am besten nachlesen - beides sind aber keine Programmiersprachen.
Es gibt immer mehrere Lösungen für ein Problem. Die Frage ist nun, was ist hier das Anliegen?
Hier würde sich PowerShell anbieten. Hier im Forum findest man bereits Lösungen um einen Ordner auf neue Dateien zu überwachen und zu durchsuchen.
Schau dir diese Beispiele einmal an, ob das "vorstellbar" und "erlernbar" wäre
Ich kenne die Kamera nicht, aber gibt es da evtl. eine Möglichkeit bei Motionalarm auch andere Funktionen auszuführen?
Gruß
Eisbein
EDIT: @colinardo war schneller und eifriger
Der Unterschied zwischen VBA und PowerShell lässt sich am besten nachlesen - beides sind aber keine Programmiersprachen.
Es gibt immer mehrere Lösungen für ein Problem. Die Frage ist nun, was ist hier das Anliegen?
Hier würde sich PowerShell anbieten. Hier im Forum findest man bereits Lösungen um einen Ordner auf neue Dateien zu überwachen und zu durchsuchen.
Schau dir diese Beispiele einmal an, ob das "vorstellbar" und "erlernbar" wäre
Ich kenne die Kamera nicht, aber gibt es da evtl. eine Möglichkeit bei Motionalarm auch andere Funktionen auszuführen?
Gruß
Eisbein
EDIT: @colinardo war schneller und eifriger
Und hier noch eine HTA-Version: (Script als *.hta speichern und in Zeile 24 den Pfad zu den Bildern angeben)
Doppelklick zeigt dann das aktuellste Bild dieses Ordners im FullScreen an ein Klick aufs Bild schließt das Fenster dann wieder.
Doppelklick zeigt dann das aktuellste Bild dieses Ordners im FullScreen an ein Klick aufs Bild schließt das Fenster dann wieder.
<html>
<head>
<title>WebCam Image</title>
<HTA:APPLICATION
APPLICATIONNAME="My FullScreen WebCam image"
ID="myApp"
VERSION="1.0"
BORDER="none"
INNERBORDER="no"
CAPTION="no"
SYSMENU="no"
MAXIMIZEBUTTON="no"
MINIMIZEBUTTON="no"
SCROLL="no"
WINDOWSTATE="maximize"
SHOWINTASKBAR="yes"
CONTEXTMENU="no"
SELECTION="no"/>
</head>
<script language="VBScript">
Dim fso,objInterval
Sub loadImage()
Const FOLDERIMAGES = "\\Server\Share\images"
Dim latestImage, lastDate
If fso.FolderExists(FOLDERIMAGES) Then
For Each file In fso.getFolder(FOLDERIMAGES).Files
If LCase(fso.GetExtensionName(file.Path)) = "jpg" Then
If lastDate = "" Then
lastDate = file.DateLastModified
latestImage = file.Path
End If
If file.DateLastModified > lastDate Then
lastDate = file.DateLastModified
latestImage = file.Path
End If
End If
Next
End If
If latestImage <> "" Then
document.getElementById("img").setAttribute "src",latestImage
End If
window.resizeTo screen.width, screen.height
window.focus
End Sub
Sub Window_OnLoad
window.resizeTo 0,0
Set fso = CreateObject("Scripting.Filesystemobject")
loadImage
End Sub
Sub closeWindow
Set fso = Nothing
window.close
End Sub
</script>
<body bgcolor="white" style="padding:0;margin:0">
<img id="img" src="" alt="" width="100%" height="100%" border="0" onclick="closeWindow">
</body>
</html>
Wenn mans genau nimmt eher ActiveScripting, ist ja oben statt JavaScript > VBS im HTA
Grüße Uwe
Grüße Uwe
Zitat von @TripleFlo:
Aber wenn ich jetzt alle 5 Sekunden dann die Aktion durch geführt bekomme, bekomme ich doch dann immer alle 5 Sekunden das letzte Bild auch wenn kein neues dazwischen gekommen ist oder liege ich da falsch?
Wenn du folgendes abgeändertes Script nimmst geht das:Aber wenn ich jetzt alle 5 Sekunden dann die Aktion durch geführt bekomme, bekomme ich doch dann immer alle 5 Sekunden das letzte Bild auch wenn kein neues dazwischen gekommen ist oder liege ich da falsch?
<html>
<head>
<title>WebCam Image</title>
<HTA:APPLICATION
APPLICATIONNAME="My FullScreen Window"
ID="myApp"
VERSION="1.0"
BORDER="none"
INNERBORDER="no"
CAPTION="no"
SYSMENU="no"
MAXIMIZEBUTTON="no"
MINIMIZEBUTTON="no"
SCROLL="no"
WINDOWSTATE="maximize"
SHOWINTASKBAR="yes"
CONTEXTMENU="no"
SELECTION="no"/>
</head>
<script language="VBScript">
Dim fso,objInterval, lastImageDate
Sub loadImage()
Const FOLDERIMAGES = "\\Server\Share\images"
Dim latestImage, lastDate
If fso.FolderExists(FOLDERIMAGES) Then
For Each file In fso.getFolder(FOLDERIMAGES).Files
If LCase(fso.GetExtensionName(file.Path)) = "jpg" Then
If lastDate = "" Then
lastDate = file.DateLastModified
latestImage = file.Path
End If
If file.DateLastModified > lastDate Then
lastDate = file.DateLastModified
latestImage = file.Path
End If
End If
Next
End If
If latestImage <> "" And lastImageDate < lastDate Then
document.getElementById("img").setAttribute "src",latestImage
window.resizeTo screen.width, screen.height
window.focus
lastImageDate = lastDate
End If
End Sub
Sub Window_OnLoad
window.resizeTo 0,0
Set fso = CreateObject("Scripting.Filesystemobject")
loadImage
objInterval = window.setInterval("loadImage",5000)
End Sub
Sub minimize
window.resizeTo 0,0
End Sub
</script>
<body bgcolor="white" style="padding:0;margin:0">
<img id="img" src="" alt="" width="100%" height="100%" border="0" onclick="minimize">
</body>
</html>
Zitat von @TripleFlo:
EIn kleiner Zusatz noch: Wie ist das dann beim Mac? Würde es gerne dort auch verwenden, da es sich aber hier um eine Windows basierende Form handelt wird es sicher nicht auf einem Mac unterstützt.
Wie du schon festgestellt hast läuft das nicht auf einem MAC ... Dort kannst du dir etwas ähnliches mit z.B. mit dem Automator basteln ... habe aber dafür im Moment keine Zeit.EIn kleiner Zusatz noch: Wie ist das dann beim Mac? Würde es gerne dort auch verwenden, da es sich aber hier um eine Windows basierende Form handelt wird es sicher nicht auf einem Mac unterstützt.
Hallo!
latestImage beinhaltet den Dateinamen der zuletzt angesehen Datei/Bild
lastDate das Erstellungsdatum der zuletzt angesehenen Datei/Bild
Mit folgender Abfrage (Zeile 40)
wird abgefragt ob
latestImage <> "" überhaupt eine Datei vorhanden ist UND
lastImageDate < lastDate das Erstellungsdatum der Datei aktueller ist als das der Datei, die zuvor bereits angezeigt wurde.
Ergo: Jedes neue Bild wird nur 1 x angezeigt. Wenn keine neuen Bilder da sind, wird auch nichts ausgegeben.
Wenn du die Abfrage wie folgt änderst, sollte dir immer das neue Bild angezeigt werden, solange bis es ein aktuelleres gibt:
(Zeile 40)
Gruß
Eisbein
Dim latestImage, lastDate
latestImage beinhaltet den Dateinamen der zuletzt angesehen Datei/Bild
lastDate das Erstellungsdatum der zuletzt angesehenen Datei/Bild
Mit folgender Abfrage (Zeile 40)
If latestImage <> "" And lastImageDate < lastDate Then
latestImage <> "" überhaupt eine Datei vorhanden ist UND
lastImageDate < lastDate das Erstellungsdatum der Datei aktueller ist als das der Datei, die zuvor bereits angezeigt wurde.
Ergo: Jedes neue Bild wird nur 1 x angezeigt. Wenn keine neuen Bilder da sind, wird auch nichts ausgegeben.
Wenn du die Abfrage wie folgt änderst, sollte dir immer das neue Bild angezeigt werden, solange bis es ein aktuelleres gibt:
(Zeile 40)
If latestImage <> "" And lastImageDate <= lastDate Then
Gruß
Eisbein
dass Programm zwar offen bleibt aber keine weiteren Bilder mehr zeigt.
Es ist so konfiguriert das nur ein neues Bild angezeigt wird wenn auch das Änderungsdatum des aktuellen Files größer als das des letzten ist. D.h. wenn du zum Test nur Bilder kopierst wird dir kein anderes angezeigt weil es ja das selbe Änderungsdatum hat.