2016-09-12 2 views
0

Ich möchte prüfen, ob ein Fenster mit Wildcard in Vbscript geöffnet ist. Ich konnte den folgenden Code finden:Vbscript, um zu prüfen, ob ein Fenster mit Wildcard geöffnet ist

Set oShell = CreateObject("WScript.Shell") 
If oShell.AppActivate("Untitled - Notepad") Then 
    WScript.Sleep 500 
End If 

Aber ich möchte einen Platzhalter auf dem Fenstertitel verwenden. Ich habe versucht mit * und%, aber es funktioniert nicht. Jede Hilfe wird geschätzt.

If oShell.AppActivate("*Notepad*") Then 

Updates Jungs .. Ich konnte eine Lösung finden, aber es ist immer noch offen, wenn jemand das vereinfachen kann. Vielen Dank.

Set Word = CreateObject("Word.Application") 
Set Tasks = Word.Tasks 

isFound = False 
For i = 1 to 5 
    For Each Task in Tasks 
     checkVal = 0 
     If Task.Visible Then 
     checkVal = inStr(UCase(Task.name), UCase("outlook")) 
     If checkVal <> 0 Then 
      isFound = True 
      Exit For 
     End If 
     End If 
    Next 
    If isFound = True Then 
     Exit For 
    End If 
    WScript.Sleep 1000 
Next 

Word.Quit 
msgbox ("Is the Window Found? - " & isFound) 
+0

Dies wäre keine nativ installierte Bibliothek, die Sie verwenden könnten, um dies zu erhalten. Es gibt einige Bibliotheken/Wrapper, die Ihnen dies ermöglichen, aber Sie können dies nicht aus RAW VBScript erreichen, ohne eine zusätzliche Bibliothek zu erhalten/zu codieren. Sie könnten versuchen, TASKLIST mit einer Shell zu verwenden, führen Sie eine Stout-Erfassung mit etwas wie Tasklist/v | aus find/i "Suchzeichenkette hier" –

+0

Zusätzlich ... können Sie eine Regex verwenden, um das Fenstertitelfeld von dieser Tasklistenausgabe zu erfassen. (?:. *) (?: \ d: \ d \ d: \ d \ d \ s) (. *) –

+0

Hallo Steve - ich habe versucht, eine Lösung mit RegEx zu finden, aber zum Glück konnte ich eine Lösung finden i habe meine Frage oben schon aktualisiert. Übrigens, was ich tue, bekomme ich alle Namen auf der Aufgabenliste und Schleife darauf, um die Zeichenfolge zu finden, die ich mit der Funktion inStr suchen. –

Antwort

0

Überprüfen Sie diese Methode im Gegensatz zu einem Word-Dokument erstellen. Diese Methode erfordert eine Abhängigkeit von der Office-Installation. Dies verwendet nur native Windows-Bibliotheken.

Erste Funktion: findwindowtitle Führt den Joblistenbefehl aus, um die Titelliste aufzuzählen und zu filtern. Anschließend wird der Regex-Parser ausgelöst, um die Zeichenfolge mit den übrigen Werten aus der Taskliste abzugleichen.

Zweite Funktion: matchtitle Dann wird die Konvertierung Ihres Platzhalters in einen regulären Ausdruck des [a-zA-Z0-9.-] verwendet, der alphanumerisch einschließlich Leerzeichen ist. Art von erforderlich für die Platzhalterzeichen und zulässigen Zeichen für Windows-Dateien zu arbeiten.

MysearchString = "*Notepad" 
processtitle = findwindowtitle(MysearchString) 
wscript.echo "My search found window title: '" & processtitle & "'" 
'do something with processtitle 


function findwindowtitle(srchstr) 
    filtersrchstr = replace(srchstr, "*", "") 
    strcommand = "tasklist /v | find /i """ & filtersrchstr & """" 
    cmdout = CreateObject("Wscript.Shell").Exec("cmd /c """ & strcommand & " 2>&1 """).stdout.readall 
    wscript.sleep 500 
    findwindowtitle = matchtitle(srchstr, cmdout) 
End Function 

Function matchtitle(srchstr, input) 
    matchtitle = false 
    if instr(1, srchstr, "*", 1) <> 0 Then 
     filtersrchstr = replace(srchstr, "*", "") 
     filterstrpatt = replace(srchstr, "*", "[a-zA-Z0-9\.- ]*") 
    end if 
    Set regex = CreateObject("VBScript.RegExp") 
    regex.MultiLine = True 
    regex.Global = True 
    regex.IgnoreCase = True 
    regex.Pattern = "(?:.*)(?:\d\d?\d?:\d\d:\d\d\s)(\b" & filterstrpatt & "\b)" 
    Set matches = regex.Execute(input) 
    for m = 0 to matches.count - 1 
     Set SubMatches = matches.item(m).SubMatches 
     for i = 0 to (Submatches.count - 1) 
      if instr(1, Submatches.item(i), filtersrchstr, 1) <> 0 then matchtitle = Submatches.item(i) 
     Next 
    Next 
    if (matchtitle = false) then 
     wscript.echo "Could not find process with title matching, '" & srchstr & "'" 
     wscript.quit 
    end if 
End Function 
Verwandte Themen