Есть программа которую запустить в двух экземплярах "невозможно". после запуска второй копии программы пишет что данная программа уже выполняеться. Как это убрать? или хотябы с чего начать.Можно ли как-то переименовать уже запущенный процесс? я думал так сделать или скрыть запуск первой программы.Ну чтот такое , помоги плиззз очень надо.
Из того что я смог сделать , я могу найти хендл главного окна программы , просто скрыть функцией ShowWindow("",SW_HIDE) конечно же нечего недало.Обьясните хоть каким образом она может узнать или запущена еще одна её копия. Я думаю что она полюбому ищет себя в списке процессов , но это не факт.
Как скрыть процесс от Диспетчера задач??? (Ctrl+Alt+Del) Причем реализовать это не в самой программе , а скрыть уже любой запущенный процесс имея его хендел???
Вот простой пример, как это можно сделать. Открой программу в дизасме и посмотри есть похожий код или нет. Если есть, измени условный переход после проверки возвращаемого значения FindWindow. Код (Text): char szMainWndClass[] = "SomeWindowClass"; int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { if (FindWindow(szMainWindowClass, NULL)) { MessageBox(NULL, "Копия программы уже запущена", "Ошибка", MB_OK); return 0; } // регистрируем класс окна и создаем главное окно return 0; }
filipp76 Для начала изучи, как это делается. На RSDN.ru есть исчерпывающая статья по этой теме. Ссылку давать не буду, т.к. придётся искать - либо мне, либо тебе - лучше ты найди Посмотри все способы, которыми делается такое, и смотри, что происходит в самой проге.
BOOL CMyApp::InitInstance() { // Only One Instance of this App is available ! _hMutex = CreateMutex(NULL,TRUE,"MY_APP"); if (!_hMutex) { return FALSE; } if (GetLastError() == ERROR_ALREADY_EXISTS) { return FALSE; } < some code > return CWinApp::InitInstance(); }
Всем спасибо только есть одна проблемка , я программирую на Delphi и с дисасемблированием у меня честно проблемы). rmn и gazlan обьясните пожалуйста поподробней ваши ответы.