пытались ли вы использовать PostMessage для отправки WM_KEYDOWN
и WM_KEYUP
?
Изменить
Вы использовали бы его таким образом (пишу на C ++, но вы можете легко использовать PInvoke и ..NET)
HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
Ваши операции с кликами делятся на несколько категорий. Если вы добавите операцию к элементу, то ваш код может определить, что делать, не зная, что это за фактический элемент, например:
<button type="button" data-operation="click">click</button>
<button type="button" data-operation="navigate" data-navigate="anotherpage">another page</button>
Вы можете затем обработать их в одном function:
$(".targetClass").keydown(function (e) {
if (e.keyCode === 13) {
switch ($(this).data("operation")) {
case "click":
$(this).trigger("click")
return false;
case "navigate":
navigateTo($(this).data("navigate"));
return false;
или (предпочтительно) вы можете добавить обработчики для каждой операции:
$(".targetClass[data-operation=click]").keydown(function(e) {
if (e.keyCode === 13) {
$(this).trigger("click");
return false;
}
});
$(".targetClass[data-operation=navigate]").keydown(function(e) {
if (e.keyCode === 13) {
navigateTo($(this).data("navigate"));
return false;
}
});
В зависимости от операций и ваших предпочтений, вы можете использовать классы для этих операций. (что может быть более эффективным для селектора, не проверено, возможно, микрооптимизация), например:
<button type="button" class="targetClass trigger-click">click</button>
<button type="button" class="targetClass trigger-navigate" data-navigate="anotherpage">another page</button>
, затем аналогичные обработчики событий разделения:
$(".targetClass.trigger-click").keydown(function(e) {
if (e.keyCode === 13) {
$(this).trigger("click");
return false;
}
});
$(".targetClass.trigger-navigate").keydown(function(e) {
if (e.keyCode === 13) {
navigateTo($(this).data("navigate"));
return false;
}
});
Использование отдельных обработчики означают, что расширение новой функциональности с меньшей вероятностью повлияет на существующий код (то есть улучшенную поддержку). Если вы хотите добавить новую операцию:
$(".targetClass.trigger-show").click(function() {
$($(this).data("trigger")).toggle();
}
Вы, вероятно, можете использовать массив атрибутов для их обхода:
var elList = [".classOne","#iDOne",".classTwo",".classThree",".classFour","#idTwo"];
elList.forEach(function(el){
$(el).keydown(function(e){
if (e.keyCode === 13) {
if($(this).hasClass('classOne')){
//do your staff
console.log('classOne');
}
else if($(this).attr('id') == 'iDOne'){
//do your staff
console.log($(this).attr('id'));
}
//do it for all
//
//
return false;
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="classOne" >classOne
<input id="iDOne">iDOne
Используйте что-нибудь подобное
function KeyDown(ele, type) {
var $selector = null;
if (type == 'cssClass') {
$selector = $("." + ele);
else if (type == "id")
$selector = $("#" + ele);
}
$selctor.on("keydown", function(e) {
if (e.keyCode === 13) {
switch (ele)
case "classOne":
hideShow('classOne');
return false;
break;
case "iDOne":
navigateTo('somepage');
break;
case "classTwo":
$(".classTwo").trigger("click");
break;
case "classThree":
navigateTo('anotherpage');
break;
case "classFour":
$(".classFour").trigger("click");
break;
case "idTwo":
$("#idTwo").trigger("click");
break;
return false;
}
})
$(function(){
KeyDown('classOne', 'cssClass');
KeyDown('iDOne', 'id') ;
KeyDown('classTwo', 'cssClass');
KeyDown('classThree', 'cssClass');
KeyDown('classFour', 'cssClass');
KeyDown('idTwo', 'id') ;
})