Показать сообщение отдельно
Старый 22.12.2011, 03:47   #9  
mvsenin is offline
mvsenin
Участник
 
21 / 10 (1) +
Регистрация: 09.11.2011
Вот он, всеработающий код, для закрытия повторно запускаемого клиента 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)

Последний раз редактировалось mvsenin; 22.12.2011 в 05:35.