Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с повторным запуском приложения

833
23 января 2008 года
leich
135 / / 27.09.2006
Привет. У меня в WinMain стоит проверка на то, запущено ли приложение. Если оно уже запущено, то второй раз его запускать не надо, а надо послать ему сообщение.
Код:
hWndPrevInstance = FindWindow(WC_DIALOG, dlgTitle);
        if(hWndPrevInstance != NULL)
    {                  
        SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance) | 0x01));

    if (!wcscmp(lpCmdLine, APP_RUN_AT_TIME))
        {      
    SendMessage(hWndPrevInstance, WM_COMMAND, ID_STOCKQUOTES_DLG_OPTIONS_UPDATEALL, 0);
    //PostMessage(hWndPrevInstance, WM_COMMAND, ID_STOCKQUOTES_DLG_OPTIONS_UPDATEALL, 0);
        AlertNotify_ResheduleEvents();         
    }

    return nResult;
    }

Я никак не могу ничего понять - у меня сообщение то доходит до диалога, то не доходит - по рандому походу. Как правильно сделать?
261
23 января 2008 года
ahilles
1.5K / / 03.11.2005
не пойму строку:
SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance) | 0x01));
зачем устанавливать младший бит? тогда значение хендла измениться.
попробуй так
SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance)));
833
25 января 2008 года
leich
135 / / 27.09.2006
 
Код:
SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance) | 0x01));
- это чтобы наверх всплывали дочерние окна.
Без
 
Код:
| 0x01
у меня там начинались жуткие глюки с менюшками).
Ошибку вроде нашел сам - там в коде все правильно, просто тормоза какие то были с обновлением экзешника.
31K
26 января 2008 года
Yarosl@w
18 / / 23.01.2008
Привет. Я не очень опытный в етом деле, но я в своих приложениях использую Mutex для синхронизации двох запущеных копий:

 
Код:
function RunCheck : boolean; //Ета функция возвращает true если
var                                    //запущена копия программы
hnd : Thandle;
begin
hnd := CreateMutex(NIL, TRUE,'SpecialName007');
if (GetLastError() = ERROR_ALREADY_EXISTS) and (WAIT_ABANDONED <> WaitForSingleObject(hnd, 10)) then
begin
Result:=true;
end else Result:=false;
end;


Также можно и сообщение отправить используя Mutex. Сам не пробовал. Юзай Гугл, если интерестно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог