dumpsys window | grep display | grep 'imeInputTarget' | awk -F '[{ }]' '{print $3, $NF}' | cut -d '#' -f 2 imeInputTarget imeInputTarget
时间: 2023-12-20 07:08:01 浏览: 31
非常抱歉,我之前的回答有误。正确的命令应该是:
```
dumpsys window | grep display | grep 'imeInputTarget' | awk -F '[{ }]' '{print $NF}' | cut -d '#' -f 2
```
该命令的执行流程如下:
1. 使用`dumpsys window`命令获取窗口信息,使用`grep display | grep 'imeInputTarget'`命令获取当前输入法目标所在的所有显示器信息。
2. 使用`awk -F '[{ }]' '{print $NF}'`命令将每行输出结果使用大括号分割,提取最后一个字段(Activity名称和显示器ID)。
3. 使用`cut -d '#' -f 2`命令仅提取显示器ID,并将两行输出结果合并成一行。
输出结果类似于:
```
0
2
```
其中,每行为一个显示器的ID。
相关问题
#!/system/bin/sh # 获取当前活跃窗口 get_display_id() { local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) focus是否和activity一样可以返回一个布尔类型 } get_display_id_activity() { local displays=$(dumpsys window | grep display | grep 'imeInputTarget') dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1 local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}') local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) echo $display_id $activity } get_display_id_activity # 判断窗口所在的显示器 display_id=$(get_display_id) case esac 优化一下
可以将 `get_display_id_activity()` 函数中的冗余代码去掉,同时在 `case` 语句中添加具体的操作。代码优化后如下所示:
```shell
#!/system/bin/sh
# 获取当前活跃窗口的显示器 ID 和活动
get_display_id_activity() {
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}')
local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$display_id $activity"
}
# 获取当前活跃窗口所在的显示器 ID
get_display_id() {
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1)
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$activity"
}
# 获取当前活跃窗口所在的显示器 ID,然后根据不同的显示器 ID 执行不同的操作
display_id=$(get_display_id)
case "$display_id" in
"display_id_1")
# 执行显示器1的操作
;;
"display_id_2")
# 执行显示器2的操作
;;
*)
# 默认操作
;;
esac
```
这样代码更加简洁,可读性也更好了。
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local display_id=$(echo "$displays" | grep "$focus") echo $display_id
这段代码有一个问题,它没有提取出显示器的 ID,而是直接将 `$displays` 变量赋值给了 `$display_id` 变量,因此输出的是包含当前窗口信息的行。
要修复这个问题,需要在 `grep` 命令中添加 `awk '{print $1}'` 来提取出显示器的 ID。改进后的代码如下:
```
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1)
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local display_id=$(echo "$displays" | grep "$focus" | awk '{print $1}')
echo $display_id
```
这段代码的作用与之前的代码相同,都是获取当前焦点所在窗口所在的显示器 ID,但它修复了没有提取出显示器 ID 的问题。