Снятие защиты на запуск приложения в двух экземплярах

Тема в разделе "WASM.RESEARCH", создана пользователем filipp76, 17 авг 2006.

  1. filipp76

    filipp76 New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2006
    Сообщения:
    5
    Есть программа которую запустить в двух экземплярах "невозможно". после запуска второй копии программы пишет что данная программа уже выполняеться. Как это убрать? или хотябы с чего начать.Можно ли как-то переименовать уже запущенный процесс? я думал так сделать или скрыть запуск первой программы.Ну чтот такое , помоги плиззз очень надо.
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Mutex, Atom, etc. see MSDN.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    FindWindow
     
  4. filipp76

    filipp76 New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2006
    Сообщения:
    5
    Из того что я смог сделать , я могу найти хендл главного окна программы , просто скрыть функцией ShowWindow("",SW_HIDE) конечно же нечего недало.Обьясните хоть каким образом она может узнать или запущена еще одна её копия. Я думаю что она полюбому ищет себя в списке процессов , но это не факт.
     
  5. filipp76

    filipp76 New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2006
    Сообщения:
    5
    Как скрыть процесс от Диспетчера задач??? (Ctrl+Alt+Del) Причем реализовать это не в самой программе , а скрыть уже любой запущенный процесс имея его хендел???
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Проще первое сделать, чем второе. Круто взял)
     
  7. filipp76

    filipp76 New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2006
    Сообщения:
    5
    Первое несложно , я просто незнаю других путей решения такой проблемы , подскажите!!
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Вот простой пример, как это можно сделать. Открой программу в дизасме и посмотри есть похожий код или нет. Если есть, измени условный переход после проверки возвращаемого значения FindWindow.

    Код (Text):
    1. char szMainWndClass[] = "SomeWindowClass";
    2.  
    3. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    4. {
    5.        if (FindWindow(szMainWindowClass, NULL))
    6.        {
    7.                MessageBox(NULL, "Копия программы уже запущена", "Ошибка", MB_OK);
    8.                return 0;
    9.        }
    10.  
    11.        // регистрируем класс окна и создаем главное окно
    12.        return 0;
    13. }
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    filipp76
    Для начала изучи, как это делается. На RSDN.ru есть исчерпывающая статья по этой теме. Ссылку давать не буду, т.к. придётся искать - либо мне, либо тебе - лучше ты найди :)
    Посмотри все способы, которыми делается такое, и смотри, что происходит в самой проге.
     
  10. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    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();
    }
     
  11. filipp76

    filipp76 New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2006
    Сообщения:
    5
    Всем спасибо только есть одна проблемка , я программирую на Delphi и с дисасемблированием у меня честно проблемы). rmn и gazlan обьясните пожалуйста поподробней ваши ответы.