Вверх ↑
Ответов: 1043
Рейтинг: 33
#1: 2014-11-09 16:53:28 ЛС | профиль | цитата
Rysik, есть работающий компонент, по которому собственно и сабж
Вот вам кусок из кода компонента.. комментарии добавил

#pas
begin
old := GetForegroundWindow; // Сохраняем дескриптор приоритетного окна в переменную 'old'
SetForegroundWindow(ReadInteger(_Data,_data_Handle,0)); // Устанавливаем в качестве приоритетного окна, окно указаного идентификатора

// ************** Код *****************

SetForegroundWindow(old); // Активируем предшествующее окно передав заранее сохраненный дескриптор
end;


------------ Дoбавленo в 17.50:
Вот переделал чуть, теперь нет Runtime_Eror

#pas
Add(MainForm,2953706,154,280)
{
}
Add(InlineCode,3185247,273,280)
{
WorkPoints=#59:doSimKey=Эмулирует нажатие и последующее отпускание клавиши|
EventPoints=#59:onEnd=Событи происходит кажды раз после завершения операции|
DataPoints=#49:Handle=Идентификатор окна для проведения операции|32:Code=Код клавиши клавиатуры/мыши|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|33:uses kol,Share,Windows,Debug; |0:|4:type|29: THiAsmClass = class(TDebug) |0:|10: private|20: oldwind: HWND; |4: |9: public|20: Handle:THI_Event;|18: Code:THI_Event;|19: onEnd:THI_Event;|0:|51: procedure doSimKey(var _Data:TData; Index:word);|4: |5: end;|1: |86: function _SK(number: real): real; stdcall; external 'simdll.dll' name 'sim_key'; |87:// function _MC(number: real): real; stdcall; external 'simdll.dll' name 'mouse_click';|86:// function _MD(number: real): real; stdcall; external 'simdll.dll' name 'mouse_down';|84:// function _MU(number: real): real; stdcall; external 'simdll.dll' name 'mouse_up';|88:// function _MS(number: real): real; stdcall; external 'simdll.dll' name 'mouse_scroll';|0:|14:implementation|0:|0:|31:procedure THiAsmClass.doSimKey;|0:|3:var|0:|46: Data_emity:TData; // ***************** !!!|16: KeyCode:real;|14: RCode:real;|4: |5:begin|0:|41: RCode:=ReadInteger(_Data,Code,1); |33: oldwind:= GetForegroundWindow;|52: SetForegroundWindow(ReadInteger(_Data,Handle,0));|23: KeyCode:=_SK(RCode);|13: Sleep(20);|38: SetForegroundWindow(oldwind); |62: _hi_onEvent(onEnd{, KeyCode}); // ***************** !!!|3: |4:end;|0:|4:end.|
link(Handle,16584642:Value,[])
link(Code,6629165:Value,[])
}
Add(Button,2522778,210,280)
{
Left=145
Top=65
link(onClick,3185247:doSimKey,[])
}
Add(Memory,16584642,273,231)
{
Default=Integer(66396)
}
Add(Memory,6629165,280,182)
{
Default=Integer(32)
}


Но по коду есть вопросы...
Первый вопрос о переменной
#pas
Data_emity:TData
_ Я ее добавил в процедуру doSimKey, без нее Runtime_Error... Почему?

Второй вопрос. В этой же процедуре в событии onEnd я закомментировал вывод переменной KeyCode
С ней программа просто вылетает, хоть и судя по исходнику предоставленному Rysik-ом Функция возвращает значение. Почему происходит краш?

Есть подозрение на типы данных
карма: 0

0
файлы: 1code_34578.txt [643B] [194]