rakibdepu Posted October 5, 2022 Posted October 5, 2022 Hi All, I need help. I have been searching help files and browsing forums about this for the past 7 days. It's either I don't understand, or it's going over my head. I am trying to create gui for ADB & Scrcpy. I have pretty much everything under control, but I'm stuck on the StdoutRead to ListView part. See the attached link for what I want with ListView. https://github.com/gxj8885718/ScrcpyGui_New/raw/master/Preview.gif Here is my Scrcpy Helper Gui. expandcollapse popup#include <ButtonConstants.au3> #include <ComboConstants.au3> #Include <GuiComboBox.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GuiIPAddress.au3> #include <GUIListView.au3> #include <GuiStatusBar.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ; Change to OnEvent mode Global $ini = "settings.ini" ReadSettings() Func ReadSettings() Global $AlwaysOnTopV = IniRead($ini, "Main", "AlwaysOnTop", 1) Global $FullScreenV = IniRead($ini, "Main", "FullScreen", 0) Global $HideBorderV = IniRead($ini, "Main", "HideBorder", 1) Global $LastDevicesV = IniRead($ini, "Main", "LastDevices", "?") Global $LastWiFiAddressV = IniRead($ini, "Main", "LastWiFiAddress", "?") Global $NoPowerOnV = IniRead($ini, "Main", "NoPowerOn", 0) Global $NoScreenSaverV = IniRead($ini, "Main", "NoScreenSaver", 1) Global $PowerOffOnCloseV = IniRead($ini, "Main", "PowerOffOnClose", 1) Global $ReadOnlyModeV = IniRead($ini, "Main", "ReadOnlyMode", 0) Global $SerialV = IniRead($ini, "Main", "Serial", "?") Global $ShowTouchV = IniRead($ini, "Main", "ShowTouch", 0) Global $StayAwakeV = IniRead($ini, "Main", "StayAwake", 0) Global $TurnOffTheScreenV = IniRead($ini, "Main", "TurnOffTheScreen", 1) Global $Parameter = IniRead($ini, "Main", "Parameter", "") ADBReboot() EndFunc ;==>ReadSettings #Region ### START Koda GUI section ### Form=hgui.kxf $MainGUI = GUICreate("Scrcpy Helper", 405, 561, 184, 129) GUISetOnEvent($GUI_EVENT_CLOSE, "Off") $MainGroup = GUICtrlCreateGroup("", 10, 6, 380, 525) $DeviceGroup = GUICtrlCreateGroup("Device", 20, 18, 360, 118, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) $DeviceList = GUICtrlCreateListView("Device Connected", 30, 36, 260, 90) _GUICtrlListView_SetExtendedListViewStyle($DeviceList, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 255) $ConnectedDevice = GUICtrlCreateListViewItem("", $DeviceList) _GUICtrlListView_JustifyColumn(GUICtrlGetHandle($DeviceList), 0, 2) GUICtrlSetTip(-1, "Double click on serial") $Refresh = GUICtrlCreateButton("Refresh", 300, 36, 70, 90) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlSetOnEvent($Refresh, "Refresh") $ADBGroup = GUICtrlCreateGroup("ADB", 20, 142, 360, 58, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) $GoWireless = GUICtrlCreateButton("Go Wireless", 220, 160, 70, 30, $BS_MULTILINE) GUICtrlSetTip(-1, "Enter IP address") GUICtrlSetOnEvent($GoWireless, "GoWireless") $ADBReboot = GUICtrlCreateButton("ADB Reboot", 300, 160, 70, 30, $BS_MULTILINE) GUICtrlSetOnEvent($ADBReboot, "ADBReboot") $IPAddress = _GUICtrlIpAddress_Create($MainGUI, 30, 160, 180, 30, -1, 0) _GUICtrlIpAddress_Set($IPAddress,$LastWiFiAddressV) GUICtrlCreateGroup("", -99, -99, 1, 1) ;GUICtrlSetData(-1, Local $IPAddressV = $IPAddress, "") $ScrcpyGroup = GUICtrlCreateGroup("Scrcpy", 20, 206, 360, 49, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) $Resolution = GUICtrlCreateCombo("", 300, 224, 70, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "Auto|Max") GUICtrlSetTip(-1, "Resolution") _GUICtrlComboBox_SelectString($Resolution, IniRead($ini, "Main", "Size", "")) $FullScreenC = GUICtrlCreateCheckbox("", 30, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Full Screen") GUICtrlSetState($FullScreenC, $FullScreenV) $PowerOffOnCloseC = GUICtrlCreateCheckbox("", 60, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Power Off On Close") GUICtrlSetState($PowerOffOnCloseC, $PowerOffOnCloseV) $AlwaysOnTopC = GUICtrlCreateCheckbox("", 90, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Always On Top") GUICtrlSetState($AlwaysOnTopC, $AlwaysOnTopV) $ReadOnlyModeC = GUICtrlCreateCheckbox("", 120, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Read Only Mode") GUICtrlSetState($ReadOnlyModeC, $ReadOnlyModeV) $ShowTouchC = GUICtrlCreateCheckbox("", 150, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Show Touch") GUICtrlSetState($ShowTouchC, $ShowTouchV) $NoScreenSaverC = GUICtrlCreateCheckbox("", 180, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "No Screensaver") GUICtrlSetState($NoScreenSaverC, $NoScreenSaverV) $TurnOffTheScreenC = GUICtrlCreateCheckbox("", 210, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Turn off the screen") GUICtrlSetState($TurnOffTheScreenC, $TurnOffTheScreenV) $StayAwakeC = GUICtrlCreateCheckbox("", 240, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Stay Awake") GUICtrlSetState($StayAwakeC, $StayAwakeV) $HideBorderC = GUICtrlCreateCheckbox("", 270, 224, 20, 20, BitOR($GUI_SS_DEFAULT_CHECKBOX, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Hide Border") GUICtrlSetState($HideBorderC, $HideBorderV) GUICtrlCreateGroup("", -99, -99, 1, 1) $TouchGroup = GUICtrlCreateGroup("Touch", 20, 261, 260, 183, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) $ShortCutC = GUICtrlCreateRadio("", 120, 279, 20, 20, BitOR($GUI_SS_DEFAULT_RADIO, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Ctrl") $ShortCutA = GUICtrlCreateRadio("", 160, 279, 20, 20, BitOR($GUI_SS_DEFAULT_RADIO, $BS_PUSHLIKE)) GUICtrlSetTip(-1, "Alt") $VolumeUP = GUICtrlCreateButton("+", 30, 309, 50, 35) GUICtrlSetTip(-1, "Volume UP") $ScreenOn = GUICtrlCreateButton("Screen On", 90, 309, 50, 35, $BS_MULTILINE) $NotificationOn = GUICtrlCreateButton("Notification On", 160, 309, 50, 35, $BS_MULTILINE) $Menu = GUICtrlCreateButton("Menu", 220, 309, 50, 35) GUICtrlSetTip(-1, "Menu") $VolumeDown = GUICtrlCreateButton("-", 30, 354, 50, 35) GUICtrlSetTip(-1, "Volume Down") $ScreenOff = GUICtrlCreateButton("Screen Off", 90, 354, 50, 35, $BS_MULTILINE) $NotificationOff = GUICtrlCreateButton("Notification Off", 160, 354, 50, 35, $BS_MULTILINE) $Power = GUICtrlCreateButton("Power", 220, 354, 50, 35) GUICtrlSetTip(-1, "Power On/Off") $Back = GUICtrlCreateButton("<", 65, 399, 50, 35) GUICtrlSetTip(-1, "Back") $Home = GUICtrlCreateButton("?", 125, 399, 50, 35) GUICtrlSetTip(-1, "Home") $Switch = GUICtrlCreateButton("=", 185, 399, 50, 35) GUICtrlSetTip(-1, "Switch") GUICtrlCreateGroup("", -99, -99, 1, 1) $OnOFFGroup = GUICtrlCreateGroup("", 290, 261, 90, 183) $On = GUICtrlCreateButton("On", 300, 276, 70, 74) $Off = GUICtrlCreateButton("Off", 300, 360, 70, 74) GUICtrlSetOnEvent($Off, "Off") GUICtrlCreateGroup("", -99, -99, 1, 1) $Parameter = GUICtrlCreateEdit("", 20, 446, 360, 75, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN), 0) GUICtrlSetData(-1, "") GUICtrlCreateGroup("", -99, -99, 1, 1) $StatusBar1 = _GUICtrlStatusBar_Create($MainGUI) _GUICtrlStatusBar_SetBkColor($StatusBar1, 0xD1B499) _GUICtrlStatusBar_SetMinHeight($StatusBar1, 20) If IniRead($ini, "Main", "ShortCutCtrl", "0") = 1 Then GUICtrlSetState ($ShortCutC,$GUI_CHECKED) IniWrite($ini, "Main", "ShortCutCtrl", $ShortCutC) ElseIf IniRead($ini, "Main", "ShortCutAlt", "0") = 1 Then GUICtrlSetState ($ShortCutA,$GUI_CHECKED) IniWrite($ini, "Main", "ShortCutCtrl", $ShortCutA) EndIf ;If IniRead($ini, "Main", "ShortCutCtrl", "0") = 1 Then ; GUICtrlSetState ($ShortCutC,$GUI_CHECKED) ; IniWrite($ini, "Main", "ShortCut", $ShortCutC) ;ElseIf IniRead($ini, "Main", "ShortCutAlt", "0") = 1 Then ; GUICtrlSetState ($ShortCutA,$GUI_CHECKED) ; IniWrite($ini, "Main", "ShortCut", $ShortCutA) ;EndIf GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Refresh() While 1 Sleep(100) ; Sleep to reduce CPU usage WEnd ;==>Func INICreate() ;==> IniWrite($ini, "Main", "AlwaysOnTop", "") ;==> IniWrite($ini, "Main", "FullScreen", "") ;==> IniWrite($ini, "Main", "HideBorder", "") ;==> IniWrite($ini, "Main", "LastDevices", "") ;==> IniWrite($ini, "Main", "LastWiFiAddress", "") ;==> IniWrite($ini, "Main", "NoPowerOn", "") ;==> IniWrite($ini, "Main", "NoScreenSaver", "") ;==> IniWrite($ini, "Main", "PowerOffOnClose", "") ;==> IniWrite($ini, "Main", "ReadOnlyMode", "") ;==> IniWrite($ini, "Main", "Serial", "") ;==> IniWrite($ini, "Main", "ShortCut", "") ;==> IniWrite($ini, "Main", "ShowTouch", "") ;==> IniWrite($ini, "Main", "Size", "") ;==> IniWrite($ini, "Main", "StayAwake", "") ;==> IniWrite($ini, "Main", "TurnOffTheScreen", "") ;==>EndFunc ;==>INICreate Func Refresh() ;RunWait(@ComSpec & " /c " & "adb connect 192.168.255.251 & adb connect 192.168.255.252", "", @SW_HIDE) $adbdevices = Run("adb devices", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) ProcessWaitClose($adbdevices) $ADBOut = StringTrimLeft(StdoutRead($adbdevices), 26) $ADBOut1 = StringRegExpReplace($ADBOut, "(\s+device+\s)\s*", "|", 0) $ADBOutput = StringTrimRight(StringStripCR($ADBOut1), 1) GUICtrlSetData($SerialV, $ADBOutput) GUICtrlSetData($Parameter, GUICtrlRead($Parameter) & '' & $ADBOutput & @CRLF) ;_GUICtrlListView_DeleteAllItems($DeviceList) ;_GUICtrlListView_AddArray($DeviceList, $ADBOutput) ;IniWriteSection($ini, "Main", "Devices" & "=" & $ADBOutput) IniWrite($ini, "Main", "Devices", $ADBOutput) EndFunc ;==>Refresh Func GoWireless() If _GUICtrlIpAddress_IsBlank($IPAddress) Then MsgBox($MB_SYSTEMMODAL, "", "Enter IP Address.") _GUICtrlIpAddress_SetFocus($IPAddress, 0) Else ;$GoWifi = Run("adb connect " & $IPAddress, "", @SW_HIDE) ;ProcessWaitClose($GoWifi) RunWait(@ComSpec & " /c " & "adb connect " & $IPAddress, "", @SW_HIDE) IniWrite($ini, "Main", "LastWiFiAddress", _GUICtrlIpAddress_Get($IPAddress)) Refresh() EndIf EndFunc ;==>GoWireless Func ADBReboot() RunWait(@ComSpec & " /c " & "adb" & " kill-server", "", @SW_HIDE) RunWait(@ComSpec & " /c " & "adb" & " start-server", "", @SW_HIDE) EndFunc ;==>ADBReboot Func Off() RunWait(@ComSpec & " /c " & "adb" & " kill-server", "", @SW_HIDE) Exit EndFunc ;==>CLOSEButton PS: Sorry for my English.
abberration Posted October 6, 2022 Posted October 6, 2022 I am no expert and I cannot test your code, but looking at these lines: $adbdevices = Run("adb devices", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) ProcessWaitClose($adbdevices) $ADBOut = StringTrimLeft(StdoutRead($adbdevices), 26) It looks like you run the process, then you wait for it to close, then you try to read it. You cannot read something that is closed. Also, I played with StdoutRead once before and my experience was I needed to read the output multiple times (in a For loop) to get all of the output. Otherwise, you will only get one line of the output. And there is a possibility that StdoutRead may not be able to read what you are trying to read. I hope this helps. Easy MP3 | Software Installer | Password Manager
rakibdepu Posted October 6, 2022 Author Posted October 6, 2022 Sorry, I didn't understand something, the help file says, ; Wait until the process has closed using the PID returned by Run. Â ; Read the Stdout stream of the PID returned by Run. This can also be done in a while loop. Look at the example for StderrRead.
mikell Posted October 6, 2022 Posted October 6, 2022 18 hours ago, rakibdepu said: Â Â $adbdevices = Run("adb devices", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) Â Â ProcessWaitClose($adbdevices) Â Â $ADBOut = StringTrimLeft(StdoutRead($adbdevices), 26) This might work, using a loop or not (test needed) You should use ConsoleWrite in Scite to first visualize what is returned by the StdoutRead
rakibdepu Posted October 6, 2022 Author Posted October 6, 2022 I know StdoutRead result. adb devices result: Quote List of devices attached 4200349cce57438b   device Y3123A0110SM010011780   device 192.168.1.148:5555   device 192.168.255.251:5555   device 192.168.255.252:5555   device My question was how to redirect StdoutRead result in ListView.
rakibdepu Posted October 6, 2022 Author Posted October 6, 2022 Sorry, my mistake. I didn't really notice. Quote needed to read the output multiple times (in a For loop) to get all of the output. Otherwise, you will only get one line of the output. I tried, but StdoutRead result first line "List of devices attached" give me error. Then add StringTrimLeft, but no result.
Solution rakibdepu Posted October 9, 2022 Author Solution Posted October 9, 2022 Finally . . . Func Refresh() IniDelete ( $ini, "Devices" ) Local $iPID = Run(@ComSpec & " /c adb devices", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) ProcessWaitClose($iPID) $adbdevices = StdoutRead($iPID) $ADBOutput = StringReplace(StringStripWS(StringTrimLeft($adbdevices, 26), $STR_STRIPTRAILING), @CR, " =") If $ADBOutput = "" Then IniWriteSection($ini, "Devices", $WiFiAddressV & " device =") Else IniWriteSection($ini, "Devices", $ADBOutput & " =") EndIf _GUICtrlListView_DeleteAllItems($DeviceList) DeviceRefresh() EndFunc ;==>Refresh Func DeviceRefresh() $aList = IniReadSection($ini, "Devices") _GUICtrlListView_BeginUpdate($DeviceList) For $i = 1 To $aList[0][0] _GUICtrlListView_AddItem($DeviceList, $i) $aStr = StringSplit($aList[$i][0], " ", 1) _GUICtrlListView_AddSubItem($DeviceList, $i-1, $aStr[1], 1) _GUICtrlListView_AddSubItem($DeviceList, $i-1, $aStr[2], 2) Next _GUICtrlListView_EndUpdate($DeviceList) Param() EndFunc Thank you Zedna Help got from your post ListView save/load checked scenarios - need an idea I will publish when complete. RHD
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