Вот он, всеработающий код, для закрытия повторно запускаемого клиента AX при запуске (условие может каждый выбрать себе сам, в данном примере ограничение сделано для запуска второго экземпляра клиента на компьютере с одним и тем же именем один и тем же пользователем):
X++:
void startupPost()
{
xSession session;
Session curSession;
int counter;
str warning;
HWND AxClient;
;
//--- CRM start
if (!appl.isConfigMode())
{
//--- Prevent call to smmInit during installation of Axapta
//--- If not, code in the method below is run that uses a table that has not yet been created
for (counter = 1; counter <= xSession::maxSessionId(); counter++)
{
session = new xSession(counter, true);
if (session)
{
if (session.sessionId() != sessionid())
{
if ((curuserid() == session.userId()) && (winapi::getComputerName() == session.clientComputerName()))
{
warning = strfmt("Под пользователем %1 АХ уже запущена на компьютере %2!", session.userId(), session.clientComputerName());
Box::warning(warning, "Доступ ограничен");
AxClient = winapi::getActiveWindow();
winapi::sendMessage(AxClient,274,61536,''); // = SendMessage(WHND, WM_SYSCOMMAND, SC_CLOSE, 0);
}
}
}
}
SmmInit::construct();
}
//--- CRM end
}
Все копирайты слюблюдены, отдельный респект Mohan Kumar (
http://www.codeproject.com/KB/dialog/closewindow.aspx)