Mercurial > vim
diff src/gui_w32.c @ 29432:339fe2968690 v9.0.0058
patch 9.0.0058: Win32: cannot test low level events
Commit: https://github.com/vim/vim/commit/81a3ff97e2012bdafc3ece796289f2e11e2754f3
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Sat Jul 23 05:04:16 2022 +0100
patch 9.0.0058: Win32: cannot test low level events
Problem: Win32: cannot test low level events.
Solution: Add "sendevent" to test_gui_event(). (Yegappan Lakshmanan,
closes #10679)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 23 Jul 2022 06:15:07 +0200 |
parents | f103da6ba95f |
children | 8d9400c64654 |
line wrap: on
line diff
--- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -8541,3 +8541,42 @@ netbeans_draw_multisign_indicator(int ro SetPixel(s_hdc, x+2, y, gui.currFgColor); } #endif + +#if defined(FEAT_EVAL) || defined(PROTO) + int +test_gui_w32_sendevent(dict_T *args) +{ + char_u *event; + INPUT inputs[1]; + + event = dict_get_string(args, "event", TRUE); + if (event == NULL) + return FALSE; + + ZeroMemory(inputs, sizeof(inputs)); + + if (STRICMP(event, "keydown") == 0 || STRICMP(event, "keyup") == 0) + { + WORD vkCode; + + vkCode = dict_get_number_def(args, "keycode", 0); + if (vkCode <= 0 || vkCode >= 0xFF) + { + semsg(_(e_invalid_argument_nr), (long)vkCode); + return FALSE; + } + + inputs[0].type = INPUT_KEYBOARD; + inputs[0].ki.wVk = vkCode; + if (STRICMP(event, "keyup") == 0) + inputs[0].ki.dwFlags = KEYEVENTF_KEYUP; + SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT)); + } + else + semsg(_(e_invalid_argument_str), event); + + vim_free(event); + + return TRUE; +} +#endif