我正在编写一个小代码来搜索whatsapp中的数字并发送短信。
如果我输入脚本本身,我可以发送短信,但我想从文件中粘贴消息。
有没有办法使用adb shell input text命令从文件而不是os复制内容。
我的代码如下。
adb shell input keyevent 82
adb shell am force-stop com.whatsapp
adb shell am start -n com.whatsapp/.Main
adb shell input text "9800000000"
adb shell input keyevent 66
adb shell input text 'This%sis%sa%stest%smessage'
adb shell input keyevent 66
adb shell input text 'I%sam%schecking%slots%sof%sthings'
adb shell input keyevent 61
adb shell input keyevent 61
adb shell input keyevent 66
adb shell am force-stop com.whatsapp
谢谢,
迪帕克
答案 0 :(得分:0)
您没有说出您使用的是哪种脚本语言。 您可以使用Native二进制文件(用C / C ++编写)。
1. Open the file for reading. 2. LOOP 3. Read a line into a string. 4. convert all special characters to escape strings 5. Use the command system to send the text: system("input "text Hello%sWorld"); 6. LOOP
我写了一个叫做inputer的二进制文件。粘贴到它的工作得很好,但是 每一行都是fork / exec'd所以大文件可能会出现故障,你需要测试每一行完成或发送一个巨大的电话。
答案 1 :(得分:-1)
是的,你实际上可以做到这一点。
,当你检查剪贴板时,它看起来很奇怪首先,您可以使用服务调用剪贴板1从adb shell检查当前剪贴板内容(或者,首先不进行shelling,adb shell服务调用剪贴板1)。它可能在重新启动后最初开始为空白,例如:
Result: Parcel(
0x00000000: 00000000 00000001 00000000 00000000 '................'
0x00000010: 00000000 00000000 '........ ')
#
你可以使用服务调用剪贴板2将文本放入剪贴板,它基本上需要3个参数 - 两个整数和你想放在剪贴板上的字符串:
# service call clipboard 2 i32 1 i32 0 s16 "Hi there"
Result: Parcel(00000000 '....')
说实话,我不确定前两个参数是什么。 Stack Overflow上的一个答案表明,第一个int是"包裹中的项目数量#34; (在这种情况下为一个),第二个是字符串的长度。但是,我已经使用0作为第二个参数并且它工作正常,我找不到与此特定功能相匹配的任何文档......所以请考虑它的价值。
在任何情况下,它基本上都会创建一个包含3个字段的Parcel对象,然后将其传递到剪贴板。然后剪贴板解包Parcel并将传入的字符串值设置为剪贴板的内容。当你去后检索值时,你可以看到这个:
# service call clipboard 1
Result: Parcel(
0x00000000: 00000000 00000001 00000000 00000008 '................'
0x00000010: 00690048 00740020 00650068 00650072 'H.i. .t.h.e.r.e.'
0x00000020: 00000000 00000000 '........ ')
#
同样,如果您长按文字输入字段并点击"粘贴"执行此操作后,您将获得通过上面的呼叫服务剪贴板2行设置的文本(它看起来完全正常)。
(以上示例来自我的HTC EVO,运行CyanogenMod 7)