rasim Posted January 9, 2008 Posted January 9, 2008 (edited) Hello all! This is just simple script. expandcollapse popup#include <GuiConstants.au3> #include<Misc.au3> _Singleton("FreeResources.exe", 0) Opt("GuiOnEventMode", 1) Opt("TrayMenuMode", 1) Opt("TrayOnEventMode", 1) Global $Drives = DriveGetDrive("Fixed") If Not IsArray($Drives) Then MsgBox(16, "Error", "Fixed drive not found") Exit EndIf Global $PrgBar[UBound($Drives)] Global $FreePercentLbl[UBound($Drives)] Global $FreeSpaceLbl[UBound($Drives)] Global $TotalSpaceLbl[UBound($Drives)] $PrgBar[0] = $Drives[0] $FreePercentLbl[0] = $Drives[0] $FreeSpaceLbl[0] = $Drives[0] $TotalSpaceLbl[0] = $Drives[0] Dim $LblTop = 40 Dim $PrgTop = 50 Dim $GuiHeight = $Drives[0] * 80 $hGui = GUICreate("Free Resources", 374, $GuiHeight, -1, -1, Default, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST) GUISetOnEvent(-3, "Hide") $hTab = GUICtrlCreateTab(1, 1, 374, $GuiHeight, BitOR($TCS_FIXEDWIDTH, $TCS_MULTILINE)) GUICtrlSendMsg($hTab, $TCM_SETITEMSIZE, 0, BitAnd(184, 0xFFFF) + BitShift(BitAnd(20, 0xFFFF), -16)) GUICtrlCreateTabItem("HDD") $Group1 = GUICtrlCreateGroup("HDD info", 240, 25, 115, $GuiHeight - 35, $BS_CENTER) GUICtrlSetColor(-1, 0x0046D5) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($Group1), "wstr", "", "wstr", "") For $i = 1 To $PrgBar[0] $PrgBar[$i] = GUICtrlCreateProgress(24, $PrgTop, 200, 17, $PBS_SMOOTH) GUICtrlSetColor(-1, 0xFF0000) GUICtrlSetBkColor(-1, 0x00F200) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($PrgBar[$i]), "wstr", "", "wstr", "") GUICtrlCreateLabel(StringUpper($Drives[$i]), 10, $LblTop + 12, 10, 15) GUICtrlSetFont(-1, Default, 1000) GUICtrlCreateLabel("Free space is: ", 110, $LblTop - 10, 110, 15) GUICtrlSetFont(-1, Default, 1000) $FreePercentLbl[$i] = GUICtrlCreateLabel("", 190, $LblTop - 10, 50, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Free space: ", 245, $LblTop, 60, 15) $FreeSpaceLbl[$i] = GUICtrlCreateLabel("", 305, $LblTop, 40, 15) GUICtrlSetFont(-1, Default, 1000) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Total size: ", 245, $LblTop + 20, 55, 15) $TotalSpaceLbl[$i] = GUICtrlCreateLabel(Round(DriveSpaceTotal($Drives[$i]) / 1024, 2) & " GB", 305, $LblTop + 20, 45, 15) GUICtrlSetFont(-1, Default, 1000) GUICtrlSetColor(-1, 0x009300) $LblTop += 70 $PrgTop += 70 Next GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateTabItem("Memory") $Group2 = GUICtrlCreateGroup("Memory info", 10, 25, 355, $GuiHeight - 35, $BS_CENTER) GUICtrlSetColor(-1, 0x0046D5) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($Group2), "wstr", "", "wstr", "") GUICtrlCreateLabel("Total physical RAM:", 15, 45, 130, 16) GUICtrlSetFont(-1, 9, 1000) $TotalMemLabel = GUICtrlCreateLabel("", 130, 46, 45, 16) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Total pagefile:", 15, 82, 80, 16) GUICtrlSetFont(-1, 9, 900) $TotalPageLabel = GUICtrlCreateLabel("", 130, 82, 45, 16) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Total virtual:", 15, 119, 70, 16) GUICtrlSetFont(-1, 9, 1000) $TotalVirtualLabel = GUICtrlCreateLabel("", 130, 119, 45, 16) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Available physical RAM:", 180, 45, 135, 16) GUICtrlSetFont(-1, 9, 1000) $AvailRamLabel = GUICtrlCreateLabel("", 317, 45, 45, 16) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Available pagefile:", 180, 82, 105, 16) GUICtrlSetFont(-1, 9, 1000) $AvailPageLabel = GUICtrlCreateLabel("", 317, 82, 45, 16) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Available virtual:", 180, 119, 105, 16) GUICtrlSetFont(-1, 9, 1000) $AvailVirtualLabel = GUICtrlCreateLabel("", 317, 119, 45, 16) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateGroup("", -99, -99, 1, 1) $RestoreItem = TrayCreateItem("Restore") TrayItemSetOnEvent(-1, "RestoreGui") TrayCreateItem("") TrayCreateItem("Exit") TrayItemSetOnEvent(-1, "Quit") TraySetClick(16) TraySetState(2) GUISetState() CheckResource() AdlibEnable("CheckResource", 1000) While 1 CheckState() Sleep(100) WEnd Func Quit() Exit EndFunc Func Hide() Local $ToolTip TraySetState(1) For $i = 1 To $Drives[0] $ToolTip &= StringUpper($Drives[$i]) & " free " & Round(DriveSpaceFree($Drives[$i]) / 1024, 2) & " GB" & @CRLF Next TraySetToolTip($ToolTip) GUISetState(@SW_HIDE) EndFunc Func RestoreGui() TraySetState(2) If Not BitAND(WinGetState($hGui), 2) Then GUISetState(@SW_SHOW) EndFunc Func CheckResource() Local $MemArray = MemGetStats() Local $Total, $Free, $Percfree, $busy For $i = 1 To $Drives[0] $Total = Round(DriveSpaceTotal($Drives[$i]) / 1024, 2) $Free = Round(DriveSpaceFree($Drives[$i]) / 1024, 2) ;$Full = Round($Total - $Free, 2) $Percfree = Round(($Free / $Total) * 100, 2) $busy = Round(100 - $Percfree, 2) _GuiCtrlSetData($PrgBar[$i], Int($busy)) _GUICtrlSetData($FreePercentLbl[$i], $Percfree & "%") _GUICtrlSetData($FreeSpaceLbl[$i], $Free) _GUICtrlSetData($TotalMemLabel, Round($MemArray[1] / 1024) & " mb") _GUICtrlSetData($TotalPageLabel, Round($MemArray[3] / 1024) & " mb") _GUICtrlSetData($TotalVirtualLabel, Round($MemArray[5] / 1024) & " mb") _GUICtrlSetData($AvailRamLabel, Round($MemArray[2] / 1024) & " mb") _GUICtrlSetData($AvailPageLabel, Round($MemArray[4] / 1024) & " mb") _GUICtrlSetData($AvailVirtualLabel, Round($MemArray[6] / 1024) & " mb") Next EndFunc Func _GUICtrlSetData($iCtrlID, $sData) If GUICtrlRead($iCtrlID) <> $sData Then GUICtrlSetData($iCtrlID, $sData) EndFunc #cs Func GetDisplaySize($iSize, $iPlaces = 1) Local $aBytes[5] = [' Bytes', ' KB', ' MB', ' GB', ' TB'] For $i = 4 To 1 Step -1 If $iSize >= 1024 ^ $i Then Return Round($iSize / 1024 ^ $i, $iPlaces) & $aBytes[$i] EndIf Next Return $iSize & ' Bytes' EndFunc #ce Func CheckState() If BitAND(WinGetState($hGui), 2) Then If BitAND(TrayItemGetState($RestoreItem), $TRAY_ENABLE) Then TrayItemSetState($RestoreItem, $TRAY_DISABLE) Else TrayItemSetState($RestoreItem, $TRAY_ENABLE) If BitAND(TrayItemGetState($RestoreItem), $TRAY_DISABLE) Then TrayItemSetState($RestoreItem, $TRAY_ENABLE) EndIf EndFunc Edited January 12, 2008 by rasim
gseller Posted January 10, 2008 Posted January 10, 2008 Cool app! You can get a better protection against being ran more than once by changing the $ProcList From: Dim $ProcList = ProcessList("FreeResources.exe") If (UBound($ProcList) -1) > 1 Then WinSetState("Free Resources", "", @SW_SHOW) Exit EndIf
rasim Posted January 11, 2008 Author Posted January 11, 2008 Cool app! You can get a better protection against being ran more than once by changing the $ProcList From: Dim $ProcList = ProcessList("FreeResources.exe") If (UBound($ProcList) -1) > 1 Then WinSetState("Free Resources", "", @SW_SHOW) Exit EndIf gesller Thank you for comments and little help! I changed script.
MrCreatoR Posted January 11, 2008 Posted January 11, 2008 Nice, here is a little changed version... I think this is the case when we realy need to use _GuiCtrlSetData() . I also added GetDisplaySize() function, so the values will be displayed correctly, and some more minor additions/corrections. expandcollapse popup#include <GuiConstants.au3> ;#include <Constants.au3> #include <Misc.au3> _Singleton(@ScriptFullPath) Opt("GuiOnEventMode", 1) Opt("TrayMenuMode", 1) Opt("TrayOnEventMode", 1) Global $Drives = DriveGetDrive("Fixed") If Not IsArray($Drives) Then MsgBox(16, "Error", "Fixed drive not found") Exit EndIf Global $PrgBar[UBound($Drives)] Global $FreePercentLbl[UBound($Drives)] Global $FreeSpaceLbl[UBound($Drives)] Global $TotalSpaceLbl[UBound($Drives)] $PrgBar[0] = $Drives[0] $FreePercentLbl[0] = $Drives[0] $FreeSpaceLbl[0] = $Drives[0] $TotalSpaceLbl[0] = $Drives[0] Dim $LblTop = 40 Dim $PrgTop = 50 Dim $GuiHeight = $Drives[0] * 80 $hGui = GUICreate("Free Resources", 374, $GuiHeight, -1, -1, Default, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST) GUISetOnEvent(-3, "Hide") $hTab = GUICtrlCreateTab(1, 1, 374, $GuiHeight, BitOR($TCS_FIXEDWIDTH, $TCS_MULTILINE)) GUICtrlSendMsg($hTab, $TCM_SETITEMSIZE, 0, BitAnd(184, 0xFFFF) + BitShift(BitAnd(20, 0xFFFF), -16)) GUICtrlCreateTabItem("HDD") $Group1 = GUICtrlCreateGroup("HDD info", 240, 25, 125, $GuiHeight - 35, $BS_CENTER) GUICtrlSetColor(-1, 0x0046D5) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($Group1), "wstr", "", "wstr", "") For $i = 1 To $PrgBar[0] $PrgBar[$i] = GUICtrlCreateProgress(24, $PrgTop, 200, 17, $PBS_SMOOTH) GUICtrlSetColor(-1, 0xFF0000) GUICtrlSetBkColor(-1, 0x00F200) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($PrgBar[$i]), "wstr", "", "wstr", "") GUICtrlCreateLabel(StringUpper($Drives[$i]), 10, $LblTop + 12, 10, 15) GUICtrlSetFont(-1, Default, 800) GUICtrlCreateLabel("Free space is: ", 110, $LblTop - 10, 110, 15) GUICtrlSetFont(-1, Default, 800) $FreePercentLbl[$i] = GUICtrlCreateLabel("", 190, $LblTop - 10, 50, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Free space: ", 245, $LblTop, 60, 15) $FreeSpaceLbl[$i] = GUICtrlCreateLabel("", 305, $LblTop, 50, 15) GUICtrlSetFont(-1, Default, 800) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Total size: ", 245, $LblTop + 20, 55, 15) $TotalSpaceLbl[$i] = GUICtrlCreateLabel(Round(DriveSpaceTotal($Drives[$i]) / 1024, 2) & " GB", 305, $LblTop + 20, 50, 15) GUICtrlSetFont(-1, Default, 800) GUICtrlSetColor(-1, 0x009300) $LblTop += 70 $PrgTop += 70 Next GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateTabItem("Memory") $Group2 = GUICtrlCreateGroup("Memory info", 10, 25, 355, $GuiHeight - 35, $BS_CENTER) GUICtrlSetColor(-1, 0x0046D5) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($Group2), "wstr", "", "wstr", "") GUICtrlCreateLabel("Total physical RAM:", 15, 50, 150, 15) GUICtrlSetFont(-1, 9, 800) $TotalMemLabel = GUICtrlCreateLabel("", 200, 50, 80, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Total pagefile:", 15, 90, 150, 15) GUICtrlSetFont(-1, 9, 800) $TotalPageLabel = GUICtrlCreateLabel("", 200, 90, 80, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Total virtual:", 15, 130, 150, 15) GUICtrlSetFont(-1, 9, 800) $TotalVirtualLabel = GUICtrlCreateLabel("", 200, 130, 80, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Available physical RAM:", 15, 170, 150, 15) GUICtrlSetFont(-1, 9, 800) $AvailRamLabel = GUICtrlCreateLabel("", 200, 170, 80, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Available pagefile:", 15, 210, 150, 15) GUICtrlSetFont(-1, 9, 800) $AvailPageLabel = GUICtrlCreateLabel("", 200, 210, 80, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateLabel("Available virtual:", 15, 250, 150, 15) GUICtrlSetFont(-1, 9, 800) $AvailVirtualLabel = GUICtrlCreateLabel("", 200, 250, 80, 15) GUICtrlSetColor(-1, 0x009300) GUICtrlCreateGroup("", -99, -99, 1, 1) $RestoreItem = TrayCreateItem("Restore") TrayItemSetOnEvent(-1, "RestoreGui") TrayCreateItem("") TrayCreateItem("Exit") TrayItemSetOnEvent(-1, "Quit") TraySetClick(16) TraySetState(2) GUISetState() CheckResource() AdlibEnable("CheckResource", 500) While 1 CheckState() Sleep(100) WEnd Func Quit() Exit EndFunc Func Hide() Local $ToolTip TraySetState(1) For $i = 1 To $Drives[0] $ToolTip &= StringUpper($Drives[$i]) & " free " & GetDisplaySize(Round(DriveSpaceFree($Drives[$i]) * 1024 * 1024)) & @CRLF Next TraySetToolTip(StringStripWS($ToolTip, 3)) GUISetState(@SW_HIDE) EndFunc Func RestoreGui() TraySetState(2) If Not BitAND(WinGetState($hGui), 2) Then GUISetState(@SW_SHOW) EndFunc Func CheckResource() Local $MemArray = MemGetStats() Local $Total, $Free, $Percfree, $busy For $i = 1 To $Drives[0] $Total = Round(DriveSpaceTotal($Drives[$i]) * 1024 * 1024) $Free = Round(DriveSpaceFree($Drives[$i]) * 1024 * 1024) $Percfree = Round(($Free / $Total) * 100, 2) $busy = Round(100 - $Percfree, 2) _GuiCtrlSetData($PrgBar[$i], $busy) _GUICtrlSetData($FreePercentLbl[$i], $Percfree & "%") _GUICtrlSetData($FreeSpaceLbl[$i], GetDisplaySize($Free)) _GUICtrlSetData($TotalMemLabel, GetDisplaySize($MemArray[1] * 1024)) _GUICtrlSetData($TotalPageLabel, GetDisplaySize($MemArray[3] * 1024)) _GUICtrlSetData($TotalVirtualLabel, GetDisplaySize($MemArray[5] * 1024)) _GUICtrlSetData($AvailRamLabel, GetDisplaySize($MemArray[2] * 1024)) _GUICtrlSetData($AvailPageLabel, GetDisplaySize($MemArray[4] * 1024)) _GUICtrlSetData($AvailVirtualLabel, GetDisplaySize($MemArray[6] * 1024)) Next EndFunc Func _GUICtrlSetData($iCtrlID, $sData) If GUICtrlRead($iCtrlID, 1) <> $sData Then GUICtrlSetData($iCtrlID, $sData) EndFunc Func GetDisplaySize($iSize, $iPlaces = 1) Local $aBytes[5] = [' Bytes', ' KB', ' MB', ' GB', ' TB'] For $i = 4 To 1 Step -1 If $iSize >= 1024 ^ $i Then Return Round($iSize / 1024 ^ $i, $iPlaces) & $aBytes[$i] EndIf Next Return $iSize & ' Bytes' EndFunc Func CheckState() If BitAND(WinGetState($hGui), 2) Then If BitAND(TrayItemGetState($RestoreItem), $TRAY_ENABLE) Then TrayItemSetState($RestoreItem, $TRAY_DISABLE) Else TrayItemSetState($RestoreItem, $TRAY_ENABLE) If BitAND(TrayItemGetState($RestoreItem), $TRAY_DISABLE) Then TrayItemSetState($RestoreItem, $TRAY_ENABLE) EndIf EndFunc Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team
rasim Posted January 12, 2008 Author Posted January 12, 2008 MsCreatoRPrivet! I glad for your help and comments! Very nice solution with _GUICtrlSetData() and GetDisplaySize()! Now ProgressBar not flickering. Thanks!
MrCreatoR Posted January 12, 2008 Posted January 12, 2008 rasimHi,This line:GUICtrlSetFont(-1, Default, 1000)not displaying labels correctly, i can not understand what is written.I changed to 800 specialy because of that problem... why 1000? P.SНе советую привыкать к Koda, лучше всё руками писать, надёжнее, и опыта больше будет Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team
Nutster Posted January 14, 2008 Posted January 14, 2008 If you have a small number of fixed drives, then you need to make the window big enough to show your memory information. Add the line: #include <Math.au3>oÝ÷ ٩ݶ§r§æ®¶sdFÒb33c´wVVvBÒb33c´G&fW5³Ò¢oÝ÷ ÚÚºÚ"µÍ[H ÌÍÑÝZRZYÚHÓX^ ÌÍÑ]ÖÌH HÈXZÙH]HZ[[][HÙYÙÙYYYYÈÚÝÈ[]Ë to make sure all the memory info shows up. David NuttallNuttall Computer Consulting An Aquarius born during the Age of Aquarius AutoIt allows me to re-invent the wheel so much faster. I'm off to write a wizard, a wonderful wizard of odd...
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