m0nstar
Goto Top

Positionieren einer MsgBox mit WSH

Hallo,

ist es möglich in VBS (WSH) eine MsgBox unten Rechts über der Taskleiste zu positionieren? Habe da was von API oder Modulen gehört, aber wirklich wie es gehen soll weiß ich leider auch nicht. Kann mir da einer helfen? Habe auch gehört das man eine Inputbox positionieren kann, dann sollte das doch auch irgendwie mit einer MsgBox möglich sein oder nicht?

Gruß,
m0nstar

Content-Key: 121375

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: 76109
76109 27.07.2009 um 10:22:46 Uhr
Goto Top
Hallo m0nstar!

Du hast richtig gehört, dass man eine Input-Box positionieren kann. Aber mit der Msg-Box geht das leider nicht.

Gruß Dieter
Mitglied: m0nstar
m0nstar 27.07.2009 um 10:49:39 Uhr
Goto Top
Hallo didi,

http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0048.shtml

das habe ich zwar gefunden, weiß aber nicht 1. wie ich des anwenden kann und 2. ob es überhaupt mit wsh geht...

Kann man den zunot in einer inputbox die Eingabenleiste ausblenden lassen?

Gruß,
m0nstar
Mitglied: 76109
76109 27.07.2009 um 11:11:20 Uhr
Goto Top
Hallo m0nstar!

Das mit der Input-Box sollte wohl nicht funktionieren. Das widerspricht ja völlig dem Sinn der Funktion.

Und bei der VB-API sind Bibliotheksfunktionen einbezogen, die in VB-Script, meines Wissens nicht zur Verfügung stehen.

Aber eventuell hat der Kollege "bastla" eine funkende Ideeface-smile

Gruß Dieter
Mitglied: m0nstar
m0nstar 27.07.2009 um 12:12:00 Uhr
Goto Top
Hallo didi,

gibt glaub ich auch noch sowas wie Userform, haste davon schonmal was gehört oder gibet das unter wsh?

Gruß,
m0nstar
Mitglied: 76109
76109 27.07.2009 um 12:27:41 Uhr
Goto Top
Hallo m0nstar!

Ja, aber leider nicht in VBS. Da musst Du schon auf eine VB-Programmierumgebung umsteigen.

Gruß Dieter
Mitglied: 76109
76109 27.07.2009 um 13:27:41 Uhr
Goto Top
Hallo nochmal!

Hier kannst Du Dir VisualStudio 2008 (ISO-File 877MB) herunterladen.

http://www.microsoft.com/express/download/

Gruß Dieter
Mitglied: m0nstar
m0nstar 27.07.2009 um 15:06:29 Uhr
Goto Top
Hallo Dieter,

mein Problem ist ja das mein komplettes Programm in vbs ist... dann muss ich doch alles umschreiben oder nicht?

Gruß,
m0nstar
Mitglied: 76109
76109 27.07.2009 um 15:22:03 Uhr
Goto Top
Hallo m0nstar!

Das ist wohl war. Das hindert Dich aber nicht daran, Dir das Paket herunterzuladen, um etwas damit herum zu experimentieren.

Gruß Dieter
Mitglied: bastla
bastla 27.07.2009 um 19:34:33 Uhr
Goto Top
@76109
Aber eventuell hat der Kollege "bastla" eine funkende Ideeface-smile
Leider Funkstille face-sad

@m0nstar
Wie früher schon einmal erwähnt, hat VBS keine "Oberfläche" zu bieten - dazu müsstest Du Dich schon in Richtung "HTA" umsehen, und dann ist's zu VB auch nicht mehr so weit ...

Grüße
bastla
Mitglied: 76109
76109 27.07.2009 um 20:41:34 Uhr
Goto Top
Zitat von @bastla:
Leider Funkstille face-sad
Naja, HTA währe schon eine Alternative, aber ich kriege die Positionierung nicht hinface-sad

Gruß Dieter
Mitglied: bastla
bastla 27.07.2009 um 20:53:19 Uhr
Goto Top
@76109
Vielleicht haben ja die Scripting Guys etwas Passendes: How Can I Get an HTA to Remember Its Previous Position Onscreen?

[Edit] Noch was gefunden: http://qaix.com/javascript-web-programming/334-263-hta-launch-window-si ... und nochmals die Scripting Guys: How Can I Center an HTA on the Screen?

Kombiniert wäre das Ergebnis etwa:
<html>
<head>

<title>Centered HTA</title>
<SCRIPT Language="VBScript">  
        strComputer = "."  
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
        Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")  
        For Each objItem in colItems
            intHorizontal = objItem.ScreenWidth
            intVertical = objItem.ScreenHeight
        Next
        intLeft = (intHorizontal - 800) / 2
        intTop = (intVertical - 600) / 2
        window.resizeTo 800,600
        window.moveTo intLeft, intTop
</SCRIPT>
<HTA:APPLICATION 
     ID="objHTA"  
     APPLICATIONNAME="Centered HTA"  
     SCROLL="yes"  
     SINGLEINSTANCE="yes"  
>
</head>

<body></body>
</html>
[/Edit]

Grüße
bastla
Mitglied: 76109
76109 27.07.2009 um 21:35:49 Uhr
Goto Top
Hallo bastla!

Superface-smile Das habe ich gesucht:
window.moveTo

Danke!

Gruß Dieter
Mitglied: m0nstar
m0nstar 28.07.2009 um 08:21:48 Uhr
Goto Top
Hallo ihr zwei,

was genau ist den HTA überhaupt? Kenne HTA nur als HTACCESS, wie kann ich den deinen Code verwenden? Muss ich das in eine HTML einbauen, oder .hta? Und wie rufe ich das dann in meinem Programm auf? Klärt mich mal bitte auf face-smile

Gruß,
m0nstar
Mitglied: bastla
bastla 28.07.2009 um 09:24:26 Uhr
Goto Top
Hallo m0nstar!

Zugegeben, zB dieser Artikel ist (in Google) erst an 4. Stelle gereiht gewesen - also eine etwas aufwändige Sache, ihn zu finden ...

... andererseits sollten (VB-)Scripter dieseyer.de kennen - dort findest Du diese Beschreibung (und, ganz nebenbei, auf der Startseite auch einen Link zur script56.chm = VBS-Hilfedatei in Deutsch).

Grüße
bastla

[Edit] Nur der Ordnung halber: Sogar MS hat etwas zu diesem Thema: Learn About Scripting for HTML Applications (HTAs) [/Edit]
Mitglied: m0nstar
m0nstar 28.07.2009 um 09:38:57 Uhr
Goto Top
Hallo bastla,

ja soweit bin ich grade auch schon gekommen^^...blöd bin ich ja auch net...kenne google auch, ich war mir einfach nur unsicher ob mit HTA wirklich htaccess gemeint war, weil ich neu in dem Bereich bin, ich habe nur einwenig vba und c++ Kenntnisse.

Ein problem habe ich allerdings noch, egal was für zahlen ich bei deinem Code eingebe:

        intLeft = (intHorizontal - 600) / 2
        intTop = (intVertical - 400) / 2

Ich bekomme es nicht unten rechts an die Taskleiste, es ist immer oben Links. Irgendwie steh ich grad aufn Schlauch.

Gruß,
m0nstar
Mitglied: bastla
bastla 28.07.2009 um 10:12:01 Uhr
Goto Top
Hallo m0nstar!
blöd bin ich ja auch net
Davon wäre ich auch nicht ausgegangen - mir würde eher "bequem" einfallen ...
egal was für zahlen ich bei deinem Code eingebe:
Hast Du die Artikel dazu gelesen? Es ging darum, ein Fenster in der Größe 800 x 600 (siehe die "Resize"-Anweisung) zu zentrieren, was eben dadurch erreicht wird, dass von den ermittelten Werten der Auflösung die Fenstergröße abgezogen und der Rest halbiert wird - so bleibt links und rechts bzw ober- und unterhalb gleich viel frei.

Wenn Du in die rechte untere Ecke willst, sollten rechts und unten nur wenige Pixel (im Beispiel rechts 20 und unten 40) freigelassen werden, daher zB
intLeft = intHorizontal - 600 - 20
intTop = intVertical - 400 - 40
Nur zur Sicherheit: Die Berechnung der Position beginnt links oben mit 0,0.

Grüße
bastla
Mitglied: m0nstar
m0nstar 28.07.2009 um 10:41:26 Uhr
Goto Top
Hallo bastla,

hab da 2 Probleme, habe dir mal Screenshots gemacht schau mal pls:

Dieser Fehler kommt immer wenn ich die Datei starte, ist das normal?
http://s1.picsafe.de/files/0f5ede1b/Snap4.jpg

Ich bekomme die box nicht nach unten: (habe auch schon andere Werte versucht)
http://s1.picsafe.de/files/a217bbcf/Snap5.jpg

Gruß,
m0nstar
Mitglied: bastla
bastla 28.07.2009 um 10:50:10 Uhr
Goto Top
... wenn Du auch noch Deinen aktuellen Stand des Codes posten würdest, könnte ich vielleicht sogar etwas zum Fehler sagen ...

Grüße
bastla

P.S.: Weil Du (lt Screenshot) mit "notepad" arbeitest: Sieh Dir mal zB Notepad++ an ...
Mitglied: m0nstar
m0nstar 28.07.2009 um 10:57:53 Uhr
Goto Top
Hallo bastla,

ok ich lade mir später mal notepad+

<html>
<head>

<title>Centered HTA</title>
<SCRIPT Language="VBScript">  
        strComputer = "."  
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
        Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")  
        For Each objItem in colItems
            intHorizontal = objItem.ScreenWidth
            intVertical = objItem.ScreenHeight
        Next
	intLeft = intHorizontal - 600 - 20
	intTop = intVertical - 400 - 40
        window.resizeTo 300,100
        window.moveTo intRight, intTop
</SCRIPT>
<HTA:APPLICATION 
     ID="objHTA"  
     APPLICATIONNAME="Centered HTA"  
     SCROLL="no"  
     SINGLEINSTANCE="yes"  
>
</head>

<body>test</body>
</html>

Gruß,
m0nstar
Mitglied: bastla
bastla 28.07.2009 um 11:07:03 Uhr
Goto Top
Hallo m0nstar!

Der entscheidende Teil sollte so aussehen:
	intLeft = intHorizontal - 300 - 20
	intTop = intVertical - 100 - 40
        window.resizeTo 300,100
        window.moveTo intLeft, intTop
wobei es natürlich in sinnvoller wäre, die konstanten Werte 300 und 100 Variablen zuzuweisen ...

Grüße
bastla
Mitglied: m0nstar
m0nstar 28.07.2009 um 11:10:07 Uhr
Goto Top
Hallo bastla,
genauso hat ich das auch schon, ist aber immer noch oben links am Bildschirm, hat sich nur einwenig verschoben.

Und diese Fehlermeldung kommt leider immer.

Gruß,
m0nstar
Mitglied: bastla
bastla 28.07.2009 um 11:17:53 Uhr
Goto Top
Hallo m0nstar!

Zur Fehlermeldung: Du hattest
window.moveTo intRight, intTop
anstelle von
window.moveTo intLeft, intTop
Die Positionierung funktioniert bei mir, daher solltest Du die ermittelten Werte für "intHorizontal" und "intVertical" prüfen - dazu vor Zeile 17 einfügen:
document.write intHorizontal & " x " & intVertical

Grüße
bastla
Mitglied: m0nstar
m0nstar 28.07.2009 um 11:25:26 Uhr
Goto Top
Hallo bastla,

ahh ich habs face-big-smile

            intHorizontal = objItem.ScreenWidth
            intVertical = objItem.ScreenHeight 

Das kannte der nicht, wenn man es so macht geht es:

            intHorizontal = 1280
            intVertical = 1024

Und die Fehlermeldung kommt auch nimmer, danke dir face-smile

Jetzt schau ich mal wie ich das einbaue aber da haste mir ja links geschickt.

Gruß,
m0nstar

[Edit]: ok ich teste es mal mit deiner Zeile 17

[Edit 2]: Wenn ich das mache gehts wieder net

<html>
<head>

<title>Centered HTA</title>
<SCRIPT Language="VBScript">  
        strComputer = "."  
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
        Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")  
        For Each objItem in colItems
            intHorizontal = objItem.ScreenWidth
            intVertical = objItem.ScreenHeight 
        Next
	intLeft = intHorizontal - 300 - 1
	intTop = intVertical - 100 - 32
        window.resizeTo 300,100
        window.moveTo intLeft, intTop
	document.write intHorizontal & " x " & intVertical  
</SCRIPT>
<HTA:APPLICATION 
     ID="objHTA"  
     APPLICATIONNAME="Centered HTA"  
     SCROLL="no"  
     SINGLEINSTANCE="yes"  
>
</head>

<body>test</body>
</html>

wenn ich es anders mache und genau die größe festlege geht es:

<html>
<head>

<title>Centered HTA</title>
<SCRIPT Language="VBScript">  
        strComputer = "."  
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
        Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")  
        For Each objItem in colItems
            intHorizontal = 1280
            intVertical = 1024
        Next
	intLeft = intHorizontal - 300 - 1
	intTop = intVertical - 100 - 32
        window.resizeTo 300,100
        window.moveTo intLeft, intTop
</SCRIPT>
<HTA:APPLICATION 
     ID="objHTA"  
     APPLICATIONNAME="Centered HTA"  
     SCROLL="no"  
     SINGLEINSTANCE="yes"  
>
</head>

<body>test</body>
</html>
Mitglied: 76109
76109 28.07.2009 um 16:40:04 Uhr
Goto Top
Hallo m0nstar und Hallo bastla!

So, ich habe jetzt auch mal was zusammengebastelt.

Probiers mal aus.

Wenn Dir diese Ausgabe nicht gefällt, dann ersetze die Codezeile 44 durch 43 und 47 durch 46.

Nach dem Ersetzen, kannst Du die Hintergrundfarbe mit der Konstanten BackColor festlegen.

Die anderen Konstanten musst Du ebenfalls entsprechend festlegen.

Eine HTML-Farbtabelle mit Namen, mit Hex-Werte und mit RGB-Werte sind hier zu sehen:
http://www.farb-tabelle.de/de/farbtabelle.htm

Die Abfrage für die Desktopgröße bekomme ich leider nicht anders hinface-smile

Option Explicit

Const BoxWidth = 300
Const BoxHeight = 80
Const TaskHeight = 60

Const BackColor = "#FFFFFF"  
Const FontColor = "#EE7600"  


'Main Beg  

    Call SendMsg("Textausgabe")  

    Wscript.Quit

'Main End  


Private Sub SendMsg(ByRef Text)
    Dim Fso, HtaPath, HtaFile, Shell, BoxLeft, BoxTop

    Set Fso = CreateObject("Scripting.FileSystemObject")  
    HtaPath = Fso.GetParentFolderName(WScript.ScriptFullName) & "\Ausgabe.Hta"  
    Set HtaFile = Fso.CreateTextFile(HtaPath)

    BoxTop = screen.Height - BoxHeight - TaskHeight:   BoxLeft = screen.Width - BoxWidth

    With HtaFile
        .WriteLine "<html>"  
        .WriteLine "<head>"  
        .WriteLine "<title>Textausgabe</title>"  
        .WriteLine "<SCRIPT Language='VBScript'>"  
        .WriteLine "window.resizeTo " & BoxWidth & "," & BoxHeight  
        .WriteLine "window.moveTo " & BoxLeft & "," & BoxTop         
        .WriteLine "</SCRIPT>"  
        .WriteLine "<HTA:APPLICATION"   
        .WriteLine "ID='objHTA'"  
        .WriteLine "APPLICATIONNAME='Textausgabe'"  
        .WriteLine "SCROLL='no'"  
        .WriteLine "SINGLEINSTANCE='yes'>"  
        .WriteLine "<style type='text/css'>"  
           '.WriteLine "body { font-family:Arial, Tahoma; font-size:14px; background-color:" & BackColor & "; }"  
        .WriteLine "body { font-family:Arial, Tahoma; font-size:14px; }"  
        .WriteLine "</style></head>"  
           '.WriteLine "<body>"   
        .WriteLine "<body style=""filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr='#000000', EndColorStr='#0000FF')"">"  
        .WriteLine "<font color='" & FontColor & "'>" & Text & "</font><br>"  
        .WriteLine "</body>"  
        .WriteLine "</html>"  
        .Close
    End With
    
    Set Shell = CreateObject("Wscript.Shell")  
    Shell.Run HtaPath, 1, True:  Fso.DeleteFile HtaPath
End Sub

Gruß Dieter

[edit] Code geändert am 02.08.2009 [/edit]
Mitglied: bastla
bastla 28.07.2009 um 17:12:37 Uhr
Goto Top
Hallo didi1954!

Und sogar mit Extras ... face-smile

Vielleicht nur als Anmerkung: Das ist jetzt wieder ein VBScript (Dateityp .vbs)

Grüße
bastla
Mitglied: m0nstar
m0nstar 28.07.2009 um 17:19:38 Uhr
Goto Top
Hallo ihr beiden,

das ist klasse geworden...schau mir das grade mal an... sieht aber echt gut aus...

danke euch schonmal....

Gruß,
m0nstar
Mitglied: 76109
76109 28.07.2009 um 18:03:23 Uhr
Goto Top
Zitat von @bastla:
Und sogar mit Extras ... face-smile
Man tut was man kann, um die Leute bei Laune zu haltenface-smile

Und wenn's (hoffentlich) auch bei mOnstar funktioniert, dann habe ich meine Pfadfinder-Tat für heute vollbrachtface-smile

Gruß Dieter
Mitglied: m0nstar
m0nstar 29.07.2009 um 10:08:27 Uhr
Goto Top
Hallo didi,

also habe es jetzt mal durch getestet, besteht die möglichkeit, das man das fenster im Vordergrund lässt? also das es nicht im hintergrund verschwindet? Und kann man da ne Art ok Button oder schließ button einbauen?

Gruß,
m0nstar

P.s.: Sonst total perfekt!
Mitglied: 76109
76109 29.07.2009 um 11:48:14 Uhr
Goto Top
Hallo m0nstar!

Sorry, so gut sind meine Kenntnisse in HTA auch wieder nicht.

bastla hatte oben schonmal diesen Link angegeben, der Dir weiterhelfen könnte:

http://technet.microsoft.com/en-us/scriptcenter/dd742317.aspx

Gruß Dieter
Mitglied: 76109
76109 29.07.2009, aktualisiert am 18.10.2012 um 18:38:54 Uhr
Goto Top
Hallo mOnstar!

Falls Du mit den Buttons noch nicht weitergekommen bist, dann siehe Dir mal diesen Beitrag an:

Password Hidden input batch

In dem HTM-Scriptcode sind gute Beispiele zu sehen.

Gruß Dieter
Mitglied: 76109
76109 02.08.2009 um 15:57:21 Uhr
Goto Top
Hallo zusammen!

Da es offensichtlich doch einfacher geht, die Desktop-Größe zu ermitteln, habe ich meinen Code weiter oben entsprechend geändert. Die Anregung kam durch @afrankhauser.

Gruß Dieter
Mitglied: m0nstar
m0nstar 02.08.2009 um 16:30:31 Uhr
Goto Top
Hallo Didi,

danke dir für deine Bemühung...es ist so geworden wie ich mir das vorgstellt habe face-smile ich danke dir.

Gruß,
m0nstar
Mitglied: 76109
76109 02.08.2009 um 17:23:56 Uhr
Goto Top
Hallo m0nstar!

Gern geschehen. Und es freut mich, dass Du es nach Deinen Wünschen hinbekommen hastface-smile

Gruß Dieter
Mitglied: 76109
76109 10.10.2009 um 10:31:07 Uhr
Goto Top
Hallo zusammen!

Sorry, habe leider heute erst durch Zufall gemerkt, dass die Screen-Variablen in Zeile 27, an der falschen Stelle sitzen. Diese müssen mit in den HTA-Code.

Das funktionierende Script müsste dann so aussehen:
Option Explicit

Const BoxWidth = 300
Const BoxHeight = 80
Const TaskHeight = 60

Const BackColor = "#FFFFFF"  
Const FontColor = "#EE7600"  


'Main Beg  

    Call SendMsg("Textausgabe")  

    Wscript.Quit

'Main End  


Private Sub SendMsg(ByRef Text)
    Dim Fso, HtaPath, HtaFile, Shell, BoxLeft, BoxTop

    Set Fso = CreateObject("Scripting.FileSystemObject")  
    HtaPath = Fso.GetParentFolderName(WScript.ScriptFullName) & "\Ausgabe.Hta"  
    Set HtaFile = Fso.CreateTextFile(HtaPath)

    With HtaFile
        .WriteLine "<html>"  
        .WriteLine "<head>"  
        .WriteLine "<title>Textausgabe</title>"  
        .WriteLine "<SCRIPT Language='VBScript'>"  
        .WriteLine "BoxLeft = screen.Width - " & BoxWidth  
        .WriteLine "BoxTop = screen.Height - " & BoxHeight + TaskHeight  
        .WriteLine "window.resizeTo " & BoxWidth & ", " & BoxHeight  
        .WriteLine "window.moveTo BoxLeft, BoxTop"  
        .WriteLine "</SCRIPT>"  
        .WriteLine "<HTA:APPLICATION"   
        .WriteLine "ID='objHTA'"  
        .WriteLine "APPLICATIONNAME='Textausgabe'"  
        .WriteLine "SCROLL='no'"  
        .WriteLine "SINGLEINSTANCE='yes'>"  
        .WriteLine "<style type='text/css'>"  
           '.WriteLine "body { font-family:Arial, Tahoma; font-size:14px; background-color:" & BackColor & "; }"  
        .WriteLine "body { font-family:Arial, Tahoma; font-size:14px; }"  
        .WriteLine "</style></head>"  
           '.WriteLine "<body>"   
        .WriteLine "<body style=""filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr='#000000', EndColorStr='#0000FF')"">"  
        .WriteLine "<font color='" & FontColor & "'>" & Text & "</font><br>"  
        .WriteLine "</body>"  
        .WriteLine "</html>"  
        .Close
    End With
    
    Set Shell = CreateObject("Wscript.Shell")  
    Shell.Run HtaPath, 1, True:  Fso.DeleteFile HtaPath
End Sub

Gruß Dieter