aardio 官方社区

用户名  找回密码
 注册会员

QQ登录

只需一步,快速开始

帖子
查看: 12204|回复: 1

chrome库中Input.dispatchKeyEvent模拟键盘输入的疑问

[复制链接]

34

主题

29

回帖

390

积分

新手入门

积分
390
发表于 2018-2-21 19:09:40 | 显示全部楼层 |阅读模式
Input.dispatchKeyEvent 参数中 text = "1234"可以成功,用"12345"不成功,提示text参数错误,为什么?
假如我要输入一长串中文字符"中国人民站起来了123456abcdefg",怎么设置这些参数?
求解Input.dispatchKeyEvent的正确用法!

  1. //Chrome远程调试接口
  2. import win.ui;
  3. /*DSG{{*/
  4. var winform = win.form(text="调用chrome远程调试接口";right=789;bottom=508;topmost=1)
  5. winform.add(
  6. btnConnect={cls="button";text="3.连接chrome";left=334;top=456;right=438;bottom=487;db=1;dr=1;z=4};
  7. btnSend={cls="button";text="4.调用chrome打开网页";left=444;top=456;right=583;bottom=487;db=1;dr=1;z=3};
  8. btnStartChrome={cls="button";text="1.启动chrome调试进程";left=39;top=456;right=178;bottom=487;db=1;dr=1;z=5};
  9. button={cls="button";text="2.获取可调试网页列表";left=187;top=456;right=326;bottom=487;db=1;dr=1;z=7};
  10. button2={cls="button";text="5.模拟键盘输入";left=619;top=419;right=758;bottom=487;db=1;dr=1;z=9};
  11. editPort={cls="edit";left=30;top=361;right=122;bottom=391;edge=1;multiline=1;z=6};
  12. txtData={cls="edit";text="http://bbs.aardio.com/forum.php?mod=viewthread&tid=21977";left=30;top=398;right=583;bottom=437;db=1;dl=1;dr=1;edge=1;multiline=1;z=2};
  13. txtMessage={cls="richedit";left=29;top=22;right=755;bottom=352;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1};
  14. txtWsUrl={cls="edit";left=124;top=361;right=584;bottom=392;edge=1;multiline=1;z=8}
  15. )
  16. /*}}*/

  17. import web.socket.chrome;
  18. var ws = web.socket.chrome();

  19. //监听chrome事件
  20. ws.on("Inspector.detached",function(param){
  21.     winform.txtMessage.print("chrome已主动断开连接,原因:",param);
  22. })

  23. ws.on("Network.requestWillBeSent",function(param){
  24.             winform.txtMessage.print("准备发送请求:",param );               
  25. })

  26. //打开连接触发的事件
  27. ws.on("open",function(){
  28.     winform.txtMessage.print("已打开连接")      
  29. })

  30. ws.on("close",function(){
  31.     winform.txtMessage.print("已关闭连接")      
  32. });

  33. ws.on("error",function(err){
  34.     winform.txtMessage.print("出错了",err);
  35. });  

  36. //调用chrome打开一个网页
  37. winform.btnSend.oncommand = function(id,event){
  38.           ws.Network.enable(
  39.             maxTotalBufferSize = 10240;
  40.     ).end = function(result,err){
  41.         winform.txtMessage.print("调用Network.enable结果:",result)
  42.     }   
  43.            
  44.     ws.Page.navigate(
  45.         url = winform.txtData.text;
  46.     ).end = function(result,err){
  47.         winform.txtMessage.print("调用返回参数",result)
  48.     }
  49. }

  50. //连接chrome
  51. winform.btnConnect.oncommand = function(id,event){
  52.     ws.connect(winform.txtWsUrl.text);
  53. }

  54. winform.btnStartChrome.oncommand = function(id,event){
  55.         //获取chrome安装路径
  56.         import win.reg;
  57.         var reg = win.reg("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe")
  58.         var chromePath = reg.queryValue("");
  59.        
  60.         //获取可用端口
  61.         var port = wsock.getFreePort();
  62.        
  63.         //启动chrome;
  64.         import process;
  65.         if( process.find("chrome.exe")){
  66.             //winform.msgbox("请先先退出chrome.exe");
  67.             //return;
  68.         }
  69.         process.execute(chromePath,"--remote-debugging-port=" +port ++`   ` );         
  70.        
  71.         winform.editPort.text = port;
  72. }

  73. winform.button.oncommand = function(id,event){
  74.     var first;
  75.         for id,title,wsUrl,devtoolsUrl in ws.eachDebuggingPage(winform.editPort.text) {
  76.                 winform.txtMessage.print(title);
  77.                 winform.txtMessage.print(devtoolsUrl);
  78.                 winform.txtMessage.print(wsUrl);
  79.                 winform.txtMessage.print();
  80.                
  81.                 if(!first) first = wsUrl;
  82.         }
  83.        
  84.         winform.txtWsUrl.text = first : "";
  85. }


  86. //模拟键盘输入 -- text = "12345";//"1234"可以,用"12345"不可以;
  87. winform.button2.oncommand = function(id,event){
  88.         ws.Input.dispatchKeyEvent(
  89.                 type = "char";//类型,允许值:keyDown, keyUp, rawKeyDown, char
  90.                 modifiers = 0;//功能键
  91.                 timestamp = time.tick();//时间戳
  92.                 text = "12345";//"1234"可以,用"12345"不可以;//通过处理带有键盘布局的虚拟密钥代码生成的文本字符串文本,不要用于KEYUP和rawkeydown事件,默认""
  93.                 unmodifiedtext = "";//tostring("111");//"";//字符串文本,对快捷键处理有用,默认""
  94.                 keyidentifier = "";//字符串唯一密钥标识符,默认""
  95.                 code = "";//物理键,如"KeyA",默认""
  96.                 key = "";//键盘布局,如"AltGr",默认""
  97.                 windowsvirtualkeycode = 0;//Windows虚拟键码,默认值
  98.                 nativevirtualkeycode = 0;//本地虚拟键码,默认值
  99.                 autoRepeat = false;//事件是否是自动重复生成(默认:假)
  100.                 iskeypad = false;//事件是否是从键盘生成(默认:假)
  101.                 issystemkey = false;//事件是否是一个系统的关键事件(默认:假)
  102.         ).end = function(result,err){
  103.                 winform.txtMessage.print("模拟键盘输入,收到应答",result,err)
  104.         }
  105. }

  106. winform.show();
  107. win.loopMessage();
复制代码

34

主题

29

回帖

390

积分

新手入门

积分
390
 楼主| 发表于 2018-2-21 19:41:51 | 显示全部楼层
API说明地址 https://paulirish.github.io/debugger-protocol-viewer/1-3/Input/  
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-6-4 16:46 , Processed in 0.059459 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表