23.05.2007, 15:24 | #1 |
Участник
|
WinAPI в Dynamics AX 4.0
Добрый день!
Люди подскажите плиз ... Может кто сталкивался... У нас такая проблема. Нужно использовать в Dynamics AX 4.0 WinAPI функцию SendInput Пишу реализацию этой функции для AX 4.0 WinAPI #define.structSize1(20) #define.structSize2(16) client static int sendInput(int Param1) { DLL _winApiDLL = new DLL(#UserDLL); DLLFunction _sendInput = new DLLFunction(_winApiDLL, 'SendInput'); Binary value = new Binary(#structSize1); Binary value_in = new Binary(#structSize2); _sendInput.returns(ExtTypes::Word); value_in.Word(#offset0, Param1); value_in.Word(#offset2, 0); value_in.dWord(#offset4, 0x00000002 || 0x00000004); value_in.dWord(#offset8, 0); value_in.dWord(#offset12, 0); value.dWord(#offset0, 0x00000001); // count value.binary(#offset4, value_in); _sendInput.arg(ExtTypes::Word, ExtTypes::Binary, ExtTypes::Word); return _sendInput.call(1, value, 20); } при использовании: WinApi::sendInput(69); акцапта ругается: Ошибка: Значение регистра ESP не было сохранено при вызове функции "SendInput" в библиотеке DLL "USER32". Причиной может являться вызов функции DLL, которая объявлена с неверным числом аргументов. - скорее всего это связано что я неправильно передаю второй параметр (там должна быть сишная структура). ??? - если кто сталкивался с подобным поделитесь информацией ... Заранее благодарен! |
|
23.05.2007, 15:56 | #2 |
Участник
|
Во-первых проверьте размер передаваемой структуры, из-за наличия в структуре union он может менятся
Во-вторых проверьте смещения в структуре В-третьих (по крайне мере в 3.0) Binary нужно передавать как ExtTypes::Pointer |
|
23.05.2007, 16:12 | #3 |
Участник
|
Сделал так:
_sendInput.arg(ExtTypes::Word, ExtTypes::Pointer, ExtTypes::Word); Теперь не ругается ... но и не работает |
|
23.05.2007, 16:28 | #4 |
Участник
|
Проверьте передаваемую структуру. Как выглядил бы код если бы Вы писали его на С?
|
|
23.05.2007, 16:58 | #5 |
Участник
|
X++: #define.structSize(28) #define.INPUT_KEYBOARD (1) int sendInput(int Param1) { DLL _winApiDLL = new DLL("user32.dll"); DLLFunction _sendInput = new DLLFunction(_winApiDLL, 'SendInput'); Binary value = new Binary(#structSize); ; value.dWord(0, #INPUT_KEYBOARD); value.Word(4, Param1); value.Word(6, 0); value.dWord(8, 0); value.dWord(12, 0); value.dWord(16, 0); _sendInput.returns(ExtTypes::dWord); _sendInput.arg(ExtTypes::dWord, ExtTypes::Pointer, ExtTypes::dWord); return _sendInput.call(1, value, #structSize); }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (3). |
23.05.2007, 17:06 | #6 |
Участник
|
Еще.
А что вы хотите получить, собственно, используя эту функцию?
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 23.05.2007 в 17:12. Причина: собственное->собственно |
|
23.05.2007, 17:12 | #7 |
Участник
|
Мне нужно передавать форме нажатие клавиш (и сочетаний клавиш в том числе...)
|
|
23.05.2007, 17:15 | #8 |
Участник
|
Сочетание клавиш - это CTRL, SHIFT, ALT + другие кнопки на клавиатуре или что-то другое (A+B)?
__________________
Axapta v.3.0 sp5 kr2 |
|
23.05.2007, 17:39 | #9 |
Участник
|
На всякий случай, посмотрите может вот это (проект для АХ 4.0)
http://www.axaptapedia.com/images/6/...Interfaces.xpo |
|
|
За это сообщение автора поблагодарили: Logger (3). |
24.05.2007, 07:20 | #10 |
Участник
|
Огромное спасибо :)
Спасибо! Этот проект нам очень помог!
|
|
Теги |
документация, ax4.0 |
|
|