AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2007, 15:24   #1  
pvito is offline
pvito
Участник
Аватар для pvito
 
9 / 10 (1) +
Регистрация: 14.04.2007
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  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Во-первых проверьте размер передаваемой структуры, из-за наличия в структуре union он может менятся
Во-вторых проверьте смещения в структуре
В-третьих (по крайне мере в 3.0) Binary нужно передавать как ExtTypes::Pointer
Старый 23.05.2007, 16:12   #3  
pvito is offline
pvito
Участник
Аватар для pvito
 
9 / 10 (1) +
Регистрация: 14.04.2007
Сделал так:

_sendInput.arg(ExtTypes::Word,
ExtTypes::Pointer,
ExtTypes::Word);

Теперь не ругается ... но и не работает
Старый 23.05.2007, 16:28   #4  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Проверьте передаваемую структуру. Как выглядил бы код если бы Вы писали его на С?
Старый 23.05.2007, 16:58   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Еще.
А что вы хотите получить, собственно, используя эту функцию?
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 23.05.2007 в 17:12. Причина: собственное->собственно
Старый 23.05.2007, 17:12   #7  
pvito is offline
pvito
Участник
Аватар для pvito
 
9 / 10 (1) +
Регистрация: 14.04.2007
Мне нужно передавать форме нажатие клавиш (и сочетаний клавиш в том числе...)
Старый 23.05.2007, 17:15   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Сочетание клавиш - это CTRL, SHIFT, ALT + другие кнопки на клавиатуре или что-то другое (A+B)?
__________________
Axapta v.3.0 sp5 kr2
Старый 23.05.2007, 17:39   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
На всякий случай, посмотрите может вот это (проект для АХ 4.0)
http://www.axaptapedia.com/images/6/...Interfaces.xpo
За это сообщение автора поблагодарили: Logger (3).
Старый 24.05.2007, 07:20   #10  
pvito is offline
pvito
Участник
Аватар для pvito
 
9 / 10 (1) +
Регистрация: 14.04.2007
Огромное спасибо :)
Спасибо! Этот проект нам очень помог!
Теги
документация, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Managing Your Supply Chain Using Microsoft Dynamics AX 2009 - Book Review Blog bot DAX Blogs 0 31.03.2009 23:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Inside Dynamics AX 4.0: Usage Scenarios Blog bot DAX Blogs 0 04.10.2007 05:15
Сергей Герасимов: Что нового в Microsoft Dynamics AX 4.0 Blog bot DAX Blogs 0 16.01.2007 11:00
Dynamics AX: Why Dynamics AX beats SAP Blog bot DAX Blogs 0 10.01.2007 23:15

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:39.