ozbodd Posted May 28, 2007 Share Posted May 28, 2007 (edited) I want to close all windows that have a similar path in their titles obtained from winlist() eg winclose("*/commonfiles/*")I do not fully understand regular expressions, how might I do this?I am wanting to close all open programs on my pen drive. If there is a way to find all window titles who's filepath is /somepath I could then use winclose?Thank you Edited May 28, 2007 by ozbodd Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 28, 2007 Share Posted May 28, 2007 Hi, try something like : closeWindowsByTitle('/commonfiles/') Func closeWindowsByTitle($RegTitle) Local $opt = Opt('WinTitleMatchMode', 4) Do Until WinClose('RegExp=' & $RegTitle) = 0 Opt('WinTitleMatchMode', $opt) EndFunc ;==>closeWindowsByTitle So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 28, 2007 Author Share Posted May 28, 2007 @Mega Thanks, I just figured a way out just before your post. But only works for windows that I know are open and are hard coded $var = WinList() For $i = 1 to $var[0][0] If StringInStr($var[$i][0], "PortableApps Menu") Then WinClose("PortableApps Menu") If StringInStr($var[$i][0], "EssentialPIM") Then WinClose("EssentialPIM Portable") If StringInStr($var[$i][0], "\PortableApps\") Then WinClose($var[$i][0]) ; If $var[$i][0] = "PortableApps Menu" Then WinClose("PortableApps Menu") Next I still would like to be able to find and close any windows from a specified path e.g. /portableapps/ Is there a function that can find window titles that are from programs that match a specified file path? Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 28, 2007 Share Posted May 28, 2007 Hi, where do you start? The titles which include a word, or the path from the exe which elongs to the window? So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 28, 2007 Author Share Posted May 28, 2007 Hi,where do you start? The titles which include a word, or the path from the exe which elongs to the window?So long,MegaTo begin I need to search for all windows that are from a specified file path - /portableappsI then need their titles to winclose() them.Thanks Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 28, 2007 Share Posted May 28, 2007 Hi, did you try my func? So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 28, 2007 Author Share Posted May 28, 2007 (edited) Hi,did you try my func?So long,MegaYes I did and it didn't do what I want unfortunately. The Window title doesn't always have the path in it (What I am searching for)See my code - The first two are examples of windows that just have their application name only in the title, the third is a program without a title so it has the path to the exe instead in the title.If I could only find the file paths to running applications ... Edited May 28, 2007 by ozbodd Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 28, 2007 Share Posted May 28, 2007 Hi, with this code, you get the windows from the pid/exe expandcollapse popup#include<Array.au3> $a = ProcessGetId('TOTALCMD.EXE') ConsoleWrite(ProcessGetWindow($a[1]) & @CRLF) WinSetState(ProcessGetWindow($a[1]), "", @SW_HIDE) Sleep(2000) WinSetState(ProcessGetWindow($a[1]), "", @SW_SHOW) Func ProcessGetWindow($PId) If IsNumber($PId) = 0 Or ProcessExists(ProcessGetName($PId)) = 0 Then SetError(1) Else Local $WinList = WinList() Local $i = 1 Local $WindowTitle = "" While $i <= $WinList[0][0] And $WindowTitle = "" If WinGetProcess($WinList[$i][0], "") = $PId Then $WindowTitle = $WinList[$i][0] Else $i = $i + 1 EndIf WEnd Return $WindowTitle EndIf EndFunc ;==>ProcessGetWindow Func ProcessGetId($Process) If IsString($Process) = 0 Then SetError(2) ElseIf ProcessExists($Process) = 0 Then SetError(1) Else Local $PList = ProcessList($Process) Local $i Local $PId[$PList[0][0] + 1] $PId[0] = $PList[0][0] For $i = 1 To $PList[0][0] $PId[$i] = $PList[$i][1] Next Return $PId EndIf EndFunc ;==>ProcessGetId Func ProcessGetName($PId) If IsNumber($PId) = 0 Then SetError(2) ElseIf $PId > 9999 Then SetError(1) Else Local $PList = ProcessList() Local $i = 1 Local $ProcessName = "" While $i <= $PList[0][0] And $ProcessName = "" If $PList[$i][1] = $PId Then $ProcessName = $PList[$i][0] Else $i = $i + 1 EndIf WEnd Return $ProcessName EndIf EndFunc ;==>ProcessGetName So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 28, 2007 Author Share Posted May 28, 2007 Hi, with this code, you get the windows from the pid/exe expandcollapse popup#include<Array.au3> $a = ProcessGetId('TOTALCMD.EXE') ConsoleWrite(ProcessGetWindow($a[1]) & @CRLF) WinSetState(ProcessGetWindow($a[1]), "", @SW_HIDE) Sleep(2000) WinSetState(ProcessGetWindow($a[1]), "", @SW_SHOW) Func ProcessGetWindow($PId) If IsNumber($PId) = 0 Or ProcessExists(ProcessGetName($PId)) = 0 Then SetError(1) Else Local $WinList = WinList() Local $i = 1 Local $WindowTitle = "" While $i <= $WinList[0][0] And $WindowTitle = "" If WinGetProcess($WinList[$i][0], "") = $PId Then $WindowTitle = $WinList[$i][0] Else $i = $i + 1 EndIf WEnd Return $WindowTitle EndIf EndFunc ;==>ProcessGetWindow Func ProcessGetId($Process) If IsString($Process) = 0 Then SetError(2) ElseIf ProcessExists($Process) = 0 Then SetError(1) Else Local $PList = ProcessList($Process) Local $i Local $PId[$PList[0][0] + 1] $PId[0] = $PList[0][0] For $i = 1 To $PList[0][0] $PId[$i] = $PList[$i][1] Next Return $PId EndIf EndFunc ;==>ProcessGetId Func ProcessGetName($PId) If IsNumber($PId) = 0 Then SetError(2) ElseIf $PId > 9999 Then SetError(1) Else Local $PList = ProcessList() Local $i = 1 Local $ProcessName = "" While $i <= $PList[0][0] And $ProcessName = "" If $PList[$i][1] = $PId Then $ProcessName = $PList[$i][0] Else $i = $i + 1 EndIf WEnd Return $ProcessName EndIf EndFunc ;==>ProcessGetName So long, MegaStill only good for apps I know are running and code in - I want this to capture any app I leave open on my pen drive and close it. Like an eject button Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 28, 2007 Share Posted May 28, 2007 Hi, now I got you! $path = _WinGetPath() MsgBox(0,WinGetTitle(""),$path) Func _WinGetPath($Title="", $strComputer='localhost') $win = WinGetTitle($Title) $pid = WinGetProcess($win) $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $objItem.ExecutablePath Then Return $objItem.ExecutablePath Next EndIf EndFunc So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 28, 2007 Author Share Posted May 28, 2007 @Mega you're a star - I'm almost there $var = WinList() For $i = 1 to $var[0][0] $path = _WinGetPath($var[$i][0]) If StringInStr($path, "\PortableApps\") Then WinClose($var[$i][0]) ConsoleWrite("Path=" & $path & "Title=" & $var[$i][0] & @LF) next Func _WinGetPath($Title="", $strComputer='localhost') $win = WinGetTitle($Title) $pid = WinGetProcess($win) $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $objItem.ExecutablePath Then Return $objItem.ExecutablePath Next EndIf EndFunc It works I just seem to be getting too many itterations Do I have an unnecessary loop in here somewhere? - See console output Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\WINDOWS\Explorer.EXETitle=Start Menu Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Link to comment Share on other sites More sharing options...
ozbodd Posted May 29, 2007 Author Share Posted May 29, 2007 If I run this WinList() command $var = WinList() For $i = 1 to $var[0][0] if $var[$i][0]<>"" AND StringInStr($var[$i][0], "Default IME")=false AND StringInStr($var[$i][0], "WAB ")=false then ConsoleWrite("Path=" & $var[$i][0] & @LF) next I get ...CONSOLE OUTPUT Path=HiddenFaxWindow Path=Available Networks Path=Gsm Event Window Path=WLKeeperWindow Path=Tea Timer Path=AVG Free Edition - Control Center Path=Spybot - Search & Destroy Path=VMware ACE Host Network Access Info Path=ZoneAlarm Security Suite Path=QuickSet Path=SigmatelSysTray Path=Powercinema service Path=Connections Tray Path=Power Meter Path=MS_WebcheckMonitor Path=TouchPad object helper window Path=Touchpad driver tray icon window Path=TouchPad object helper window Path=Touchpad driver backward compatibility window Path=Touchpad driver helper window Path=Layered Hidden Window ... I want to pass these titles to the function and close only specified paths. $path = _WinGetPath($var[$i][0]) if $var[$i][0]<>"" AND StringInStr($var[$i][0], "Default IME")=false AND StringInStr($var[$i][0], "WAB ")=false Then $path = _WinGetPath($var[$i][0]) ;If StringInStr($path, "\PortableApps\") Then WinClose($var[$i][0]) ConsoleWrite("Path=" & $path & "Title=" & $var[$i][0] & @LF) next Func _WinGetPath($Title="", $strComputer='localhost') $win = WinGetTitle($Title) $pid = WinGetProcess($win) $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $objItem.ExecutablePath Then Return $objItem.ExecutablePath Next EndIf EndFunc It is working however as can be seen from the console output there appears some unnecessary duplication in the output and the script runs too long, I can't see where that is happening caan anyone help please. expandcollapse popup...CONSOLE OUTPUT Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\AutoIt3\SciTE\SciTE.exeTitle= Path=C:\Program Files\Internet Explorer\iexplore.exeTitle=Language Reference - Conditional Statements - Windows Internet Explorer Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService.exeTitle=WAB Notification Window Path=C:\Program Files\Dell\MediaDirect\PCMService .... Link to comment Share on other sites More sharing options...
ozbodd Posted May 29, 2007 Author Share Posted May 29, 2007 Sorted I was caling the function twice :/ $var = WinList() For $i = 1 to $var[0][0] If $var[$i][0]<>"" AND StringInStr($var[$i][0], "Default IME")=false AND StringInStr($var[$i][0], "WAB Notification Window")=false Then $path = _WinGetPath($var[$i][0]) Else $path="" EndIf If StringInStr($path, "\PortableApps\") Then WinClose($var[$i][0]) ;ConsoleWrite("Path=" & $path & "Title=" & $var[$i][0] & @LF) next Func _WinGetPath($Title="", $strComputer='localhost') $win = WinGetTitle($Title) $pid = WinGetProcess($win) $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $objItem.ExecutablePath Then Return $objItem.ExecutablePath Next EndIf EndFunc Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 29, 2007 Share Posted May 29, 2007 Hi, try this way: #include<Array.au3> $ret = _getPathForProcessOnDrive(getUSBDrive('USB Mega')) _ArrayDisplay($ret, "USB ProcessPathes") Func getUSBDrive($driveLabel) Local $drives = DriveGetDrive("all") If @error Then Return -1 For $i = 1 To $drives[0] If DriveGetType($drives[$i]) = "Removable" And DriveGetLabel($drives[$i]) = $driveLabel Then Return $drives[$i] Next EndFunc ;==>getUSBDrive Func _getPathForProcessOnDrive($drive = "c:", $strComputer = 'localhost') Local $return[1] Local $wbemFlagReturnImmediately = 0x10 Local $wbemFlagForwardOnly = 0x20 Local $colItems = "" Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process", "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If StringLeft($objItem.ExecutablePath, 2) = $drive Then _ArrayAdd($return, $objItem.ExecutablePath) Next EndIf If UBound($return) > 1 Then $return[0] = UBound($return) - 1 Return $return Else Return -1 EndIf EndFunc ;==>_getPathForProcessOnDrive So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 30, 2007 Author Share Posted May 30, 2007 (edited) @Mage Thanks for your help - I have it working though maybe in a round-about way, and I understand most of it. (I don't understand what is returned in the function query) expandcollapse popupDim $driveLetter $var = WinList() ; Find the Drive Letter for portableApps For $i = 1 to $var[0][0] If $var[$i][0]="PortableApps Menu" Then $path = _WinGetPath($var[$i][0]) $driveLetter = StringLeft($path, 2) EndIf Next ; Fetch the path for probable windows For $i = 1 to $var[0][0] If $var[$i][0]<>"" AND StringInStr($var[$i][0], "Default IME")=false AND StringInStr($var[$i][0], "WAB Notification Window")=false Then $path = _WinGetPath($var[$i][0]) Else $path="" EndIf ;ConsoleWrite("FOUND" & "Path=" & $path & "Title=" & $var[$i][0] & "Drive=" & $driveLetter & @LF) ; Close window IF Drive is matched in path or title - Ignore the script If StringInStr($var[$i][0], $driveLetter) AND StringInStr($path, "Eject")=false Then ;ConsoleWrite("CLOSE" & "Path=" & $path & "Title=" & $var[$i][0] & "Drive=" & $driveLetter & @LF) WinClose($var[$i][0]) Else If StringInStr($path, $driveLetter) AND StringInStr($path, "Eject")=false Then ;ConsoleWrite("CLOSE" & "Path=" & $path & "Title=" & $var[$i][0] & "Drive=" & $driveLetter & @LF) WinClose($var[$i][0]) EndIf EndIf next MsgBox(0, "Eject USB", "Close any Exit Dialogue Boxes - Device is safe to remove") ; Fetch the process Path from the WindowTitle Func _WinGetPath($Title="", $strComputer='localhost') $win = WinGetTitle($Title) $pid = WinGetProcess($win) $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $objItem.ExecutablePath Then Return $objItem.ExecutablePath Next EndIf EndFunc I do have another question though about the function. It finds the path for parent processes fine, can it be modified to also find the paths of any child windows? For example Application Paint Shop Pro from the C: drive viewing a graphic whos path is F:\ (USB) - Hope that is clear? Edited May 30, 2007 by ozbodd Link to comment Share on other sites More sharing options...
Xenobiologist Posted May 30, 2007 Share Posted May 30, 2007 Hi, why going to search the windows? Why not searching the processes which are started from your usbdrive? So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
ozbodd Posted May 30, 2007 Author Share Posted May 30, 2007 Hi,why going to search the windows? Why not searching the processes which are started from your usbdrive?So long,MegaMainly because this is my level of understanding Would a word doc on a USB drive opened in MSWord running locally show as a usbdrive process? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now