小鱼塘--自说自话的地方

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. scrcpy
  3. 正文

scrcpy 实现全选功能ctrl+a 输入法

1 7 月, 2022 2217点热度 0人点赞 0条评论
内容目录

背景

之前实现输入法功能,然后去android keyevent文档上找是否这样子,结果毛都没有,然后看scrcpy上面也没有看到单独一个函数是实现全选,后面想了好久是不是就是实现ctrl+a 这个按键呢?后面果然发现确实是这样子

知识点

在scrcpy 他实现按键时候传递metaState 这个属性值,我自己没有实现,然后看了一个关键词 AMETA_CTRL_LEFT_ON,然后搜索到这个对应值,所以只要模拟A时候设置一下metaState

PC代码

bool WindowsUI::HandleSelectAll(const SDL_KeyboardEvent& ev)
{
    if (ev.keysym.sym == SDLK_a && (ev.keysym.mod & KMOD_LCTRL) == KMOD_LCTRL) {
        //a + ctrl
        //AMETA_CTRL_LEFT_ON 0x2000
        m_contronl_net->SendKeyEvent(29, 0x2000);        //全选
        return true;
    }
    return false;
}

android 代码

    private void handleKeyCodeMessage(JSONObject data) throws JSONException{
        int key_code = data.getInt("key_code");
        int meta_state = data.getInt("mode");
        actionImplement.keyEvent(key_code, meta_state, false);
    }

        private void sendKeyEvent(int inputSource, int keyCode, int meteState, boolean longpress) {
        long now = SystemClock.uptimeMillis();

        EventFactory.injectKeyEventSelf(new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 0, meteState,
                KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, inputSource));
        if (longpress) {
            EventFactory.injectKeyEventSelf(new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 1, meteState,
                    KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_LONG_PRESS,
                    inputSource));
        }

        EventFactory.injectKeyEventSelf(new KeyEvent(now, now, KeyEvent.ACTION_UP, keyCode, 0, meteState,
                KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, inputSource));
    }

我模拟按键跟scrcpy不一样,感觉简单一些,因为我抄的是adb 实现模拟,看一眼就特别清晰。。
现在自己用协同工具非常舒服了,我现在就缺少文件传送了,这个东西还是非常方便。主要平时自己还不到图片发送,主要看手机上APP的东西。

标签: 暂无
最后更新:1 7 月, 2022

小鱼儿

爱研究技术,爱玩LOL

点赞
< 上一篇

COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

湘ICP备18005349号