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;
}
Проблемы с повторным запуском приложения
Код:
Я никак не могу ничего понять - у меня сообщение то доходит до диалога, то не доходит - по рандому походу. Как правильно сделать?
SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance) | 0x01));
зачем устанавливать младший бит? тогда значение хендла измениться.
попробуй так
SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance)));
Код:
SetForegroundWindow((HWND)(((ULONG) hWndPrevInstance) | 0x01));
Без
Код:
| 0x01
Ошибку вроде нашел сам - там в коде все правильно, просто тормоза какие то были с обновлением экзешника.
Код:
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;
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. Сам не пробовал. Юзай Гугл, если интерестно