dauerhaftes "Desktophinweisschild"

  • Hallo,
    ich wurde im IrfanView Forum hierher vermittelt, in der Hoffnung dass mir hier jemand helfen kann.

    Ich möchte gerne einen unveränderlichen Text an einer bestimmten Stelle auf dem Desktop
    angezeigt bekommen und das dauerhaft im Vordergrund - der PC soll nebenbei ganz normal zu bedienen sein. Und das anzeigende
    Programm darf entweder nur nach Eingabe eines Kennworts geschlossen werden oder muss sich alternativ immer wieder öffnen bis Windows neu gestartet wurde.

    Mein erster Lösungsgedanke war dass ich eine .txt erstelle, die ich in IrfanView öffne. In IrfanView lässt sich einstellen, dass das angezeigte immer ontop ist und es lassen sich alle Menüs ausblenden: http://www.abload.de/img/unbenannt-1wwr81.jpg

    Mit einer Batch-Datei habe ich dann hinbekommen, dass sich IrfanView wieder öffnet sobald es geschlossen wurde, allerdings konnte man das umgehen indem man erst die Eingabeaufforderung schließt die sich beim Ausführen der Batch-Datei öffnet und dann IrfanView schließt. Darüberhinaus konnte man das IrfanView-Fenster nach wie vor skalieren, sodass man es so klein machen konnte, dass man den Text nicht mehr lesen kann ... Der Code der Batch-Datei:

    Code
    @echo off
    :P1
    Start /W D:\IrfanView\i_view32.exe
    goto P1

    Ich hab dann versucht mit cmdow und chp die Eingabaufforderung zu verstecken, was nicht gelang ...

    Desweiteren hab ich versucht die Batchdatei zu einer .exe zu machen und diese wiederum als Dienst laufen zu lassen, da ja User eines Gast-Kontos keine Dienste schließen können ... allerdings gelang es mir nicht den Dienst mit einem GUI zu starten ...

    Deshalb meine Frage: Gibt es die Möglichkeit mit AutoIt möglichst unkompliziert (vll. gibt es ja schon sowas ähnliches, was man nur anpassen müsste?) das ganz zu bewerkstelligen oder irgendwo in meine bisherigen Lösungsversuche einzugreifen, damit das ganze funktioniert?

    MfG,
    rai

    Einmal editiert, zuletzt von raigon (20. Oktober 2012 um 14:02)

  • Sowas lässt sich mit AutoIt simpler und schöner umsetzen, dazu brauchst du kein IrfanView. ^^
    Da reicht auch eine GUI mit einem Label-Control in dem dein Text angezeigt und per Input-Control das PW abgefragt wird. Dazu brauchst du noch nicht einmal ein Bild.
    Wenn du allerdings nicht vorhast das selbst (mit unserer Unterstützung) umzusetzen, dann gehört das eher in den Bereich "Programmieranfragen".
    Dürfte ich erfahren wozu man so etwas braucht? Eigentlich gibt es ja schon so etwas Ähnliches in Form des Windows Lock-Screens (Win+L).

  • hey danke für die schnelle Antwort.

    Das ganze ist für eine Privatfeier. Wir haben viele Musikgeschmäcker zu bedienen und lassen immer den Windows Media laufen, damit jeder seine Wunschtitel in die Wiedergabeliste einordenen kann, was auch eigentlich ganz gut läuft ... leider gibt es immer wieder Spezialisten, die der Meinung sind das jetzt unbedingt fünfmal hintereinander die Lieblingsband gespielt werden muss oder dass das eigene Lied jetzt viel wichtiger wäre als der Musikgeschmack der anderen ... bei 50-70 Gästen , wo man eigentlich immer irgendwo im Gespräch steckt und mit zugegeben auch steigender Anzahl der Biergläser kriegt man das aber als Gastgeber auch nicht immer unbedingt mit ... man darf sich dann immer nur hinterher den Unmut der anderen Gäste anhören ... Zettel die darauf hinweisen dass es auch andere Geschmäcker gibt, haben die letzten Jahre nicht unbedingt lange überlebt und es ist auch davon auszugehen, dann wenn ich IrfanView ohne weiteres öffne, sich Leute "einen Spaß daraus zu machen" das wieder zu schließen ... keine Ahnung warum das nicht funktioniert, mal von dem kindischen Verhalten abgesehen sind das ganz nette Leute ...

    Naja es gibt tragischere Sachen im Leben, aber ich dachte ich komme den Spezialisten dieses Jahr mal zuvor bzw. sorge dafür dass zumindest darauf hingewiesen wird dass man auch auf andere Rücksicht nehmen kann ;) ... allerdings würde ich dafür nicht unbedingt eine neue Scriptsprache lernen wollen, es sei denn du kannst mir glaubhaft vermitteln dass das in dem speziellen Fall nicht allzu viele Lernstunden erfordert ^^
    Vll. gibt es ja aber tatsächlich jemand der so nett wäre und mir das "kurz?" zusammenbastelt.

    Der Lock-Screen wäre wie gesagt ungeeignet, da der WMP nicht mehr bedient werden könnte ...

  • So was?

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include<EditConstants.au3>
    Global $Input, $Passwort = '1234'
    $Gui = GUICreate('LockScreen', @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, 0)
    GUISetBkColor(000000)
    $Input = GUICtrlCreateInput('', @DesktopWidth / 2 - 100, @DesktopHeight / 2 + 50, 200, 21, $ES_PASSWORD)
    GUISetState(@SW_SHOW)
    WinSetOnTop('LockScreen', '', 1)
    HotKeySet('{ENTER}', '_Eingabe')

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(500)
    If Not WinActive('LockScreen') Then WinSetOnTop('LockScreen', '', 1)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Eingabe()
    If GUICtrlRead($Input) = $Passwort Then Exit
    EndFunc

    [/autoit]

    LG
    Christoph :)

  • Sowas ist wirklich nicht besonders schwer. Hier mal meine Version (in 5 Minuten kurz zusammengezimmert):

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $iX = 800 ;Fensterposition (X) in Pixeln
    $iY = 100 ;Fensterposition (Y) in Pixeln
    $iWidth = 400 ;Fenstergröße (W) in Pixeln
    $iHeight = 150 ;Fenstergröße (H) in Pixeln

    [/autoit] [autoit][/autoit] [autoit]

    $iColorBG = 0xFFFFFF ;Hintergrundfarbe RGB
    $iColorFont = 0x000000 ;Schriftfarbe RGB

    [/autoit] [autoit][/autoit] [autoit]

    $sText = "Dies ist ein Test" ;Anzeigetext
    $iSize = 40 ;Schriftgröße

    [/autoit] [autoit][/autoit] [autoit]

    $sPass = "AutoIt" ;Passwort

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("", $iWidth, $iHeight, $iX, $iY, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0xFFFFFF)
    $cLabel = GUICtrlCreateLabel($sText, 0, 0, $iWidth, $iHeight, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetFont(-1, $iSize, 400, 0, "Arial", 4)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetOnEvent($cLabel, "_Password")

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Password()
    $sPassInput = InputBox("Passwort", "Bitte das Passwort eingeben:", "", "*", 200, 150)
    If $sPassInput == $sPass Then Exit
    EndFunc

    [/autoit]


    Das Programm verlangt beim Start Adminrechte, damit man es als normaler User nicht per Taskmanager beenden kann (falls du das auf einem Adminaccount verwendest bringt das natürlich nichts). Wenn dir das nicht gefällt, kannst du auch die Zeile "#RequireAdmin" löschen. Ich habe die wichtigsten Einstellungen in Form von globalen Variablen am Anfang des Scripts eingebaut. Sobald du auf den Text klickst erscheint die Passwortabfrage, wenn es richtig eingetippt wurde, wird das Programm beendet.
    Ich hoffe das ist was du dir vorgestellt hast.

  • Vielen Dank euch beiden, ich hab jetzt nur das von name22 ausprobiert, aber das ist genau was ich meinte :)

    Allerdings möchte er das Script nicht ausführen, sobald ich es von einem Gastkonto aus öffne ... er hat dann ne Art Dauerlade-Symbol und ist am flackern. (Windows Vista Home Premium)

    Ach und kann man anstatt des farbigen Hintergrundes auch ein Bild anzeigen lassen?

  • Allerdings möchte er das Script nicht ausführen, sobald ich es von einem Gastkonto aus öffne ... er hat dann ne Art Dauerlade-Symbol und ist am flackern. (Windows Vista Home Premium)

    Vermutlich ein Problem mit UAC und dem #requireadmin. Jedenfalls hatte ich damit schon ein vergleichbares verhalten. Würde es daher an deiner stelle mal ohne requireadmin versuchen.


    Was ein Bild anstelle eines einfarbigen Hintergrunds angeht schaust du dir am besten

    [autoit]

    guictrlcreatepic()

    [/autoit]


    in der Hilfe an.

  • Vermutlich ein Problem mit UAC und dem #requireadmin. Jedenfalls hatte ich damit schon ein vergleichbares verhalten. Würde es daher an deiner stelle mal ohne requireadmin versuchen.

    Was dann aber bedeutet, dass man den Prozess wieder über den Taskmanager schließen könnte und was das Script hinfällig machen würde :/


    Danke für den Hinweis mit dem Bild einfügen, schau ich mir mal an.

  • Macht doch 'nen Doppelscript. Das eine prüft alle 0,1 Sekunden, ob der andere Prozess existiert; wenn nicht wird neu geöffnet. Der andere prüft auch im runloop und öffnet den Prüfprozess neu. Einziger Haken: Man braucht ein Script, was die sofort hintereinander schließt, oder muss den Rechner neu starten.

    Wer die manuell geschlossen kriegt, ist auf jeden Fall noch nüchtern!

    Alternativ kann man alle 0,1 sek prüfen, ob der Prozess taskmgr.exe existiert, und wenn ja, den töten.

    Widerstand ist Zwecklos!

    Meine Projekte: Kizzys Controller, 2nd Desktop und Versteckte Dateien Assistent
    Meine Downloadwebsite .

  • hallo und vielen Dank schonmal, das mit dem Taskmanager ausschalten ist ne gute Lösung ...

    jetzt hab ich allerdings noch Probleme mit dem Gestalten, bei dem ihr mir vll. helfen könntet. So soll das Ganze mal aussehen:
    http://www.abload.de/img/finalpcbwy.jpg

    Anscheinend krieg ich aber nicht mal das mit dem Hintergrund hin, denn er gibt mir diese Fehlermeldung:
    http://www.abload.de/img/errorh7qjj.jpg

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.8.1
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $iX = 800 ;Fensterposition (X) in Pixeln
    $iY = 100 ;Fensterposition (Y) in Pixeln
    $iWidth = 627 ;Fenstergröße (W) in Pixeln
    $iHeight = 619 ;Fenstergröße (H) in Pixeln

    [/autoit] [autoit][/autoit] [autoit]

    $iColorBG = 0x1D1D1F ;Hintergrundfarbe RGB
    $iColorFont = 0xFFF10A ;Schriftfarbe RGB

    [/autoit] [autoit][/autoit] [autoit]

    $sText = "Wir bemühten uns um eine ausgewogne Musikauswahl. Es wäre nett wenn ihr ebenfalls auf die Musikwünsche Anderer Rücksicht nehmen könntet indem ihr • euren Wunschtitel nach dem aktuellen Song einordnet und diesen erst zu Ende spielen lasst • nicht unbedingt drei mal die gleiche Band hintereinander spielt Björn, Marcel & Keven" ;Anzeigetext
    $iSize = 6; Schriftgröße

    [/autoit] [autoit][/autoit] [autoit]

    $sPass = "1234" ;Passwort

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("", $iWidth, $iHeight, $iX, $iY, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0x1D1D1F)
    GUICtrlCreatePic ( ..\GUI\bg.jpg, 0, 0)
    $cLabel = GUICtrlCreateLabel($sText, 0, 0, $iWidth, $iHeight, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetFont(-1, $iSize, 400, 0, "Arial", 4)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetOnEvent($cLabel, "_Password")

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Password()
    $sPassInput = InputBox("Passwort", "Bitte das Passwort eingeben:", "", "*", 200, 150)
    If $sPassInput == $sPass Then Exit
    EndFunc

    [/autoit]

    Was mach ich falsch?

    Darüber hinaus die Frage wie ich Zeilenbrüche, Absätze und Einschübe erstellen und den Text bold machen kann.

    VG,
    rai

  • Den Bildnamen in Anführungszeichen setzen...
    Und noch etwas: Nach dem "wenn" im Text folgt ein Komma ;)
    Zeilenbrüche:
    "mein Text" & @crlf & "mein zweiter Text"

    Was die Schrift angeht, könntest du es anstelle von "Arial" mit "Arial Bold" versuchen (Mac Erfahrung; weiß nicht, ob das unter Win funktioniert).
    Was den Absatz angeht, einfach "Erster Text" & @crlf & " Zweiter Text, der durch die Fensterbreite umgebrochen wird."
    Das sähe dann wie folgt aus:

    Erster Text
    Zweiter Text, der durch die Fensterbreite
    umgebrochen wird.

    Beachte das Leerzeichen vor " Zweiter Text" (oder wahlweise mehrere/Tabulator)
    Den Aufzählungspunkt bekommst du, indem du in Word/Open Office den Punkt aus den Sonderzeichen heraussuchst, kopierst, und dann einfach in den Text einfügst.
    Alternativ: Setz doch einfach das Bild mit dem Text als Hintergrundbild fest...

    Widerstand ist Zwecklos!

    Meine Projekte: Kizzys Controller, 2nd Desktop und Versteckte Dateien Assistent
    Meine Downloadwebsite .

  • Er zeigt das Bild leider immer noch nicht an (allerdings ohne Fehlermeldung) :/

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.8.1
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $iX = 800 ;Fensterposition (X) in Pixeln
    $iY = 100 ;Fensterposition (Y) in Pixeln
    $iWidth = 627 ;Fenstergröße (W) in Pixeln
    $iHeight = 619 ;Fenstergröße (H) in Pixeln

    [/autoit] [autoit][/autoit] [autoit]

    $iColorBG = 0x1D1D1F ;Hintergrundfarbe RGB
    $iColorFont = 0xFFF10A ;Schriftfarbe RGB

    [/autoit] [autoit][/autoit] [autoit]

    $sText = " " ;Anzeigetext
    $iSize = 6; Schriftgröße

    [/autoit] [autoit][/autoit] [autoit]

    $sPass = "1234" ;Passwort

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("", $iWidth, $iHeight, $iX, $iY, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0x1D1D1F)
    GUICtrlCreatePic ("..\final.jpg", 0, 0)
    $cLabel = GUICtrlCreateLabel($sText, 0, 0, $iWidth, $iHeight, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetFont(-1, $iSize, 400, 0, "Arial", 4)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetOnEvent($cLabel, "_Password")

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Password()
    $sPassInput = InputBox("Passwort", "Bitte das Passwort eingeben:", "", "*", 200, 150)
    If $sPassInput == $sPass Then Exit
    EndFunc

    [/autoit]
  • Hab ich es so richtig?:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $iX = 100 ;Fensterposition (X) in Pixeln
    $iY = 100 ;Fensterposition (Y) in Pixeln
    $iWidth = 627 ;Fenstergröße (W) in Pixeln
    $iHeight = 619 ;Fenstergröße (H) in Pixeln

    [/autoit] [autoit][/autoit] [autoit]

    $iColorBG = 0x1D1D1F ;Hintergrundfarbe RGB
    $iColorFont = 0xFFF10A ;Schriftfarbe RGB

    [/autoit] [autoit][/autoit] [autoit]

    $sText = "Hallo Welt!" ;Anzeigetext
    $iSize = 12; Schriftgröße

    [/autoit] [autoit][/autoit] [autoit]

    $sPass = "1234" ;Passwort

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("", $iWidth, $iHeight, $iX, $iY, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0x1D1D1F)
    $Pic = GUICtrlCreatePic(@ScriptDir & "\Psc.jpg", 0, 0, $iWidth, $iHeight) ;@ScriptDir & "\DeinHintergrundBild.jpg" //Bild im gleichen Ordner wie das Script

    [/autoit] [autoit][/autoit] [autoit]

    $cLabel = GUICtrlCreateLabel($sText, 0, 0, $iWidth, $iHeight, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetFont(-1, $iSize, 400, 0, "Arial", 4)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ;~ GUICtrlSetOnEvent($cLabel, "_Password") ; D;
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_Password", $hWnd) ;Funtioniert Besser (andere geht nun garnicht mehr) | Wenn die linke Maustaste auf der GUI gedrückt wird "_Password" ausführen
    While Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Password()
    $sPassInput = InputBox("Passwort", "Bitte das Passwort eingeben:", "", "*", 200, 150)
    If $sPassInput == $sPass Then Exit
    EndFunc ;==>_Password

    [/autoit]
  • Im Grunde schon aber die Passworteingabe taucht hinter dem Bild auf, sodass ich sie nicht mehr sehe ^^

  • Du musst die Position und Breite oben anpassen:

    [autoit]

    $iX = 100 ;Fensterposition (X) in Pixeln //Anpassen
    $iY = 100 ;Fensterposition (Y) in Pixeln //
    $iWidth = 627 ;Fenstergröße (W) in Pixeln //
    $iHeight = 619 ;Fenstergröße (H) in Pixeln //z.B. 250

    [/autoit]

    ;D

  • ah ok, dachte die Größe muss der Originalgröße des Bildes entsprechen und hab nicht gemerkt dass sich das automatisch skaliert ^^

    Vielen Dank allen Helfern :thumbup:

  • Ich find es mutig von dir das du deinen Gästen so vertraust. Können ja alles mögliche auf den Computer anstellen. Kleiner Tipp von mir löse es so das du mit 2 Rechner arbeitest. Ein Gast System und/oder Handy wo die wünsch ausgewählt werden können und eins um die Musik zu spielen. Gut Lösung dafür gibt es kostenlos in Web -> http://blog.devsource.de/?page_id=2

    So würde ich es zumindest machen und kann dann die Beine hochlegen :)

    Gruß DevFly