bennib22
Goto Top

Position von MsgBox verschieben

Hi,

Immer wenn ich eine MsgBox-vbs aus führe, kommt das Dialogfenster in der Mitte vom Bildschirm.
Kann ich die Position verändern?
Wie?

Hier der MsgBox Code:

x=MsgBox("Trink ein Glas Wasser",290+14,"Titel")


Danke im voraus
bennib22

Content-Key: 128116

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: bastla
bastla 28.10.2009, aktualisiert am 18.10.2012 um 18:39:47 Uhr
Goto Top
Hallo bennib22!

Schau mal hier vorbei ...

Grüße
bastla
Mitglied: Tommy70
Tommy70 28.10.2009 um 11:45:14 Uhr
Goto Top
Hi,

schau dir mal das an. ist zwar für VB. Soll aber anscheinend so ähnlich auch in VBS zu realisieren sein.

Gruß
Tom
Mitglied: ZAFAS
ZAFAS 28.10.2009 um 11:46:37 Uhr
Goto Top
Mitglied: bennib22
bennib22 28.10.2009 um 12:00:25 Uhr
Goto Top
Ich hab trotzdem ne Frage.
Ist das eine vbs oder html datei?
Bei html sperrt der Internet Explorer den Zugriff,
bei vbs kommtv Anweisung erwartet Zeile 1 Zeichen 1.
Der Code:
<html><head><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.ScreenHeightNextintLeft = (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>
Mitglied: ZAFAS
ZAFAS 28.10.2009 um 12:17:56 Uhr
Goto Top
Zitat von @bennib22:

Ist das eine vbs oder html datei?

<SCRIPT Language="VBScript">
Mitglied: 5t8d1e
5t8d1e 28.10.2009 um 13:40:47 Uhr
Goto Top

<HTA:APPLICATION

Hallo,

hier wird es verraten. Es ist eine HTML-Applikation. Wenn du denn Sourcecode in den Editor deiner Wahl abspeichert dann mußt du die Dateierweiterung .hta benutzen.

TST

PS.: hier noch ein Link zu HTA
http://technet.microsoft.com/de-de/scriptcenter/dd742317(en-us).aspx
Mitglied: bastla
bastla 28.10.2009 um 15:15:16 Uhr
Goto Top
@ZAFAS & Tommy70

In VBS können keine API-Calls verwendet werden.

Grüße
bastla
Mitglied: bennib22
bennib22 28.10.2009 um 15:20:41 Uhr
Goto Top
Ich versteh garnixmehrface-sadface-sadface-sadface-sadface-sad!

bennib22
Mitglied: bastla
bastla 28.10.2009 um 15:40:14 Uhr
Goto Top
Hallo bennib22!

Wo genau ist das Problem?

Der von ZAFAS und Tommy70 verlinkte "VB-fun.de"-Tipp ist leider für VBS nicht verwendbar, da er auf Funktionen der Windows-API zurückgreift, die in VBS nicht angesprochen werden können ...

... aber der im von mir verlinkten Forumsbeitrag dargestellte Ansatz sollte eigentlich funktionieren.

Grüße
bastla
Mitglied: Tommy70
Tommy70 28.10.2009 um 15:56:52 Uhr
Goto Top
Zitat von @bastla:
@ZAFAS & Tommy70

In VBS können keine API-Calls verwendet werden.

Grüße
bastla

Stimmt so nicht ganz Link ;)
Man muss "nur" die benötigten Funktionn als VB ActiveX DLL implementieren und dann aus VBScript heraus wrappen.

Gruß
Tom
Mitglied: bennib22
bennib22 28.10.2009 um 16:17:59 Uhr
Goto Top
Kann mir bitte mal jemand gaaaanz ausführlich den Syntax zum Ändern der Position der MsgBoX per vbs sagen!

Danke im Voraus
bennib22
Mitglied: bastla
bastla 28.10.2009 um 17:06:59 Uhr
Goto Top
@Tommy70

Dann einigen wir und am besten auf: "In native VBS können keine API-Calls verwendet werden" ...

Kann mir bitte mal jemand gaaaanz ausführlich den Syntax zum Ändern der Position der MsgBoX per vbs sagen!
Sagst Du es dann bennib22? face-wink

Grüße
bastla
Mitglied: Tommy70
Tommy70 29.10.2009 um 06:31:53 Uhr
Goto Top
Zitat von @bastla:
@Tommy70

Dann einigen wir und am besten auf: "In
native VBS können keine API-Calls verwendet
werden" ...

OK face-smile

> Kann mir bitte mal jemand gaaaanz ausführlich den Syntax
zum Ändern der Position der MsgBoX per vbs sagen!
Sagst Du es dann bennib22? face-wink

Ist eigentlich in deinem Beispiel schon ausführlich beschrieben. Was soll man da noch mehr sagen.
Mitglied: bennib22
bennib22 29.10.2009 um 10:48:43 Uhr
Goto Top
Mein Beispiel funktioniert nicht!
Hilft mir bitte!

benni
Mitglied: Tommy70
Tommy70 29.10.2009 um 11:18:04 Uhr
Goto Top
Zitat von @bennib22:
Mein Beispiel funktioniert nicht!
Hilft mir bitte!

benni

Einfach den Code den du oben bereits gepostet hast in einer .hta Datei abspeichern. Dann müsste es funktionieren.
Mitglied: 76109
76109 29.10.2009 um 11:26:44 Uhr
Goto Top
Hallo zusammen!

Hier ein VB-Script (*.vbs), das eine Hta-MsgBox in Abhängigkeit der Konstanten ausgibt.
Die Konstanten können selbstverständlich auch in die Funktion als Übergabeparameter eingebunden werden.
Die HtaBox enthält einen OK und einen Cancel-Button und gibt auf Umwege vbOK oder vbCancel zurück.
Das Ganze kann eigentlich relativ einfach an eigene Vorstellungen angepasst werden.
Die zwei Kommentarzeilen in Msg.WriteLine enthalten mit Screen.Width und Screen.Height die Bildschirmgröße.

Den Quelltext kopieren und unter *.vbs abspeichern und starten.

Das sieht dann - je nach Bildschirmdarstellung - in etwa so aus:
dec15281220bbd00df337b793c143372-htabox

Option Explicit

Const BoxTop = 200
Const BoxLeft = 200
Const BoxWidth = 300
Const BoxHeight = 120

Const FontType = "Arial"  
Const FontSize = 12

'Main Beg  
    Dim Return

    Return = HtaBox("Mein Text", "Mein Titel")  

    If Return = vbOK Then MsgBox "Rückgabe OK"  

    If Return = vbCancel Then MsgBox "Rückgabe Cancel"  

    Wscript.Quit

'Main End  


Private Function HtaBox(ByRef Text, ByRef Titel)
    Dim Fso, Shell, Msg, Path

    Set Fso = CreateObject("Scripting.FileSystemObject")  
    Path = Fso.GetParentFolderName(WScript.ScriptFullName) & "\Msg.Hta"  
    Set Msg = Fso.CreateTextFile(Path)

    With Msg
        .WriteLine "<html>"  
        .WriteLine "<head>"  
        .WriteLine "<title>" & Titel & "</title>"  
        .WriteLine "<SCRIPT Language='VBScript'>"  
        '.WriteLine "BoxLeft = (Screen.Width - " & BoxWidth & ") / 2"  'Ohne Const BoxLeft = Horizontal Zentriert  
        '.WriteLine "BoxTop = (Screen.Height - " & BoxHeight & ") / 2" 'Ohne Const BoxTop = Vertikal Zentriert  
        .WriteLine "Window.ResizeTo " & BoxWidth & ", " & BoxHeight  
        .WriteLine "Window.MoveTo " & BoxLeft & ", " & BoxTop  
        .WriteLine "Dim Fso, Hta, HtaPath"  
        .WriteLine "Set Fso = CreateObject(""Scripting.FileSystemObject"")"  
        .WriteLine "HtaPath = Window.Location.Pathname"  
        .WriteLine "Set Hta = Fso.CreateTextFile(HtaPath)"  
        .WriteLine "Sub RetOK"  
        .WriteLine "Hta.WriteLine vbOK"  
        .WriteLine "Hta.Close"  
        .WriteLine "Close"  
        .WriteLine "End Sub"  
        .WriteLine "Sub RetCancel"  
        .WriteLine "Hta.WriteLine vbCancel"  
        .WriteLine "Hta.Close"  
        .WriteLine "Close"  
        .WriteLine "End Sub"  
        .WriteLine "</SCRIPT>"  
        .WriteLine "<HTA:APPLICATION"  
        .WriteLine "ID='objMsg'"  
        .WriteLine "APPLICATIONNAME='Msg-Ausgabe'"  
        .WriteLine "MaximizeButton='no'"  
        .WriteLine "MinimizeButton='no'"  
        .WriteLine "SCROLL='no'"  
        .WriteLine "SINGLEINSTANCE='yes'>"  
        .WriteLine "</head>"  
        .WriteLine "<body bgcolor='buttonface' style='font-family:" & FontType & ";font-size:" & FontSize & "px'>"  
        .WriteLine "<p>" & Text & "</p>"  
        .WriteLine "<table border='0' width='100%'><tr>"  
        .WriteLine "<td width='50%' align='center'>"  
        .WriteLine "<input type='button' value='    OK    ' tabindex='1' onClick='RetOK'></td>"  
        .WriteLine "<td width='50%' align='center'>"  
        .WriteLine "<input type='button' value='Cancel' tabindex='2' onClick='RetCancel'></td>"  
        .WriteLine "</tr></table></body></html>"  
        .Close
    End With
    Set Shell = CreateObject("Wscript.Shell"):  Shell.Run Path, 1, True  
    Set Msg = Fso.OpenTextFile(Path)
    If Msg.AtEndOfStream Then HtaBox = vbCancel Else HtaBox = CInt(Msg.ReadLine)
    Msg.Close:  Fso.DeleteFile Path
End Function

Gruß Dieter

[edit] In Zeile 59 noch die Parameter für die Buttons Fenster Mini/Maximize yes/no eingefügt [/edit]
[edit] In Zeile 63 hatte ich den Tag "</head>" auch noch vergessen [/edit]
Mitglied: bennib22
bennib22 29.10.2009 um 11:33:05 Uhr
Goto Top
Ich hab den Code von oben als *.hta gespeichrt & ausgeführt.
Es kommt ne Fehlermeldung:
"Typkonflikt: Zeile:15 Zeichen:1
Möchten sie fortfahren?"
Es gibt ja und nein zur Auswahl
Nach der Bestätigung komm ein weißes Fenster mit *.hta in der Kopfzeile.

Gruß
benni
Mitglied: bennib22
bennib22 29.10.2009 um 11:49:12 Uhr
Goto Top
Eeendlich klappts!
Danke Dieter!
Danke auch an alle Andern die mir (wenigstens ein bisschen face-smile) geholfen haben!


mfG
bennib22
Mitglied: 76109
76109 29.10.2009 um 12:27:04 Uhr
Goto Top
Hallo bennib22!

Freut mich, wenn's endlich klapptface-smile

Gruß Dieter
Mitglied: bennib22
bennib22 29.10.2009 um 15:22:30 Uhr
Goto Top
Noch eine Frage.
Wo ist der Parameter wohin das Fenster verschoben wird??

bennib22
Mitglied: 76109
76109 29.10.2009 um 15:53:41 Uhr
Goto Top
Hallo bennib22!

Ist das jetzt ne Scherzfrageface-smile

Ich habe zwar keine Ahnung, was Du genau meinst. Aber ich rate mal und nehme an, dass Du die Position für Left und Top als Übergabeparameter an die Funktion HtaBox meinst. Wenn dem so ist, dann den Code folgendermaßen anpassen:

Die Konstanten in Zeile 3 und 4 entfernen

Die Zeile 25 durch diese Zeile ersetzen:
Private Function HtaBox(ByRef Text, ByRef Titel, ByVal BoxLeft, ByVal BoxTop) 
Den Aufruf in Zeile 14 ändern in z.B.:
Return = HtaBox("Mein Text", "Mein Titel", 200, 200)   
Wenn das nicht gemeint war, dann bitte etwas genauer formulierenface-wink

Gruß Dieter
Mitglied: bennib22
bennib22 29.10.2009 um 16:13:15 Uhr
Goto Top
Das hat mir geholfen!

Danke nochmal.
bennib22

PS: Du kannst gut raten!face-big-smile