当我用adb写的时候:
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
Run Code Online (Sandbox Code Playgroud)
我得到错误输出:
'grep' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
但如果我将它拆分为两个运营商:
adb shell
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
Run Code Online (Sandbox Code Playgroud)
它工作正常(它提供正在运行的应用程序的主要活动名称).
如果唯一的方法是将它拆分为两个 - 首先进入adb shell,然后运行Inquire,有一种方法可以从c#中执行此操作吗?
在我的代码中,它只执行第一部分(进入shell).
这是我的代码:
public static void startNewProccess(object startInfo)
{
p = new Process();
p.StartInfo = (System.Diagnostics.ProcessStartInfo)startInfo;
p.Start();
p.WaitForExit();
}
public static void getMainActivity()
{
var startInfo1 = new System.Diagnostics.ProcessStartInfo
{
WorkingDirectory = @ADB_FOLDER,
WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
FileName = "cmd.exe",
Arguments = "/c" + " adb shell",
//adb shell am start -n com.package.name/com.package.name.ActivityName
UseShellExecute = false
};
startNewProccess(startInfo1);
var startInfo2 = new System.Diagnostics.ProcessStartInfo
{
WorkingDirectory = @ADB_FOLDER,
WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
FileName = "cmd.exe",
Arguments = "/c" + " dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'",
UseShellExecute = false
};
}
Run Code Online (Sandbox Code Playgroud)
Ale*_* P. 25
没有问题grep在adb.您对shell工作原理的理解存在问题.所以让我们解决这个问题:
在您的adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'命令中,只有dumpsys window windows部分在Android上运行.两者adb shell和grep命令都在Windows PC上运行.因此你得到的错误 - 你只是没有grep.
adb shell单独运行时 - 您启动交互式adb shell会话,您输入的所有内容都将在Android端执行.这非常适合手动测试.但在用于自动化时增加了额外的复杂性层.要使用代码中的交互模式,您需要多个线程(一个用于shell本身,另一个用于发送命令).
但是在你的情况下,你并不真的需要所有这些复杂性 - 只需转义"管道"字符或将整个shell命令放在引号中,如下所示:
adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21088 次 |
| 最近记录: |