Aleksoid1978
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору V0lt Цитата: Код: m_mutexOneInstance.Create(NULL, TRUE, MPC_WND_CLASS_NAME); if (GetLastError() == ERROR_ALREADY_EXISTS && (!(m_s.fAllowMultipleInst || (m_s.nCLSwitches&CLSW_NEW) || m_cmdln.IsEmpty()) || (m_s.nCLSwitches&CLSW_ADD))) { int wait_count = 0; HWND hWnd = ::FindWindow(MPC_WND_CLASS_NAME, NULL); while (!hWnd && (wait_count++<200)) { Sleep(100); hWnd = ::FindWindow(MPC_WND_CLASS_NAME, NULL); } if (hWnd && (wait_count<200)) { ... Поясню. Новая копия плеера видит, что старая висит в памяти. Затем для контроля запускает FindWindow, если плеер к этому успел закрыться, то запускается цикл, который чрез каждые 0,1 сек ищет потерянное окно, которое естественно не появится вновь. | Это я делал, щас объясню зачем так - когда выделяешь кучу файлов в проводнике и открываешь через правую кнопку - проводник для КАЖДОГО выделенного файла запускает свою копию программы. Получается выделили 10 - запускается 10 копий. И получалось так, что вместо одной копии и 10 файлами запускалось 2, 3 и более копий. Вот и пришлось - если мутекс создан, ждать ответа от окна таким "деревянным" способом.
---------- AMD Ryzen 7 7700 /ASRock B650M Pro RS /G.Skill RIPJAWS 32 ГБ /Kingston 500Gb M.2 /RTX 4060 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215 |
|