Страница 2 из 2

О-фи-геть!

Добавлено: 23 авг 2006, 11:30
BBB
LAngel писал(а):FindWindow "всегда" находит окно, только когда приложение запущено в дизайн-тайм (под оболочкой дельфы), потому что в оболочке существует окно с тем же классом и заголовком.
Попробуй закрыть проект и запустить exe, тогда все будет работать как положено :)
Воистину так!

Спасибо огромное за такий "хинт". Буду знать. Проверил - и в самом деле при закрытой Delphi приложение при запуске не находит себя, т.е. запускается, как и следует ожидать.
Правда, возникакет практический вопрос. Если пользоваться такой проверкой, то как бедному программисту отлаживаться, т.е. запускаться из-под Delphi? Постоянно комментарить эту проверку и раскомментаривать ее при компиляции "релиза" - нудно, да и в какой-нибудь очередной раз забудешь это сделать.

Может быть есть какой-то способ run-time определить, что приложение запущено из-под среды разработки? Тогда бы можно было запрограммировать так:

Код: Выделить всё

if &#40]

А через [b]CreateFileMapping[/b] тоже, вроде как, получилось. Спасибо за наводку. Нашел в интернете пример, содрал :) Правда, дюже длинный текст оказался (по сравнению с FindWindow) :)

Добавлено: 23 авг 2006, 12:23
LAngel
Я пользуюсь методом определения запущенности с помощью мютексов:

Код: Выделить всё

var
  mh: THandle;
begin
  mh := OpenMutex(MUTEX_ALL_ACCESS, True, 'lacd');
  if mh <> 0 then
  begin
    MessageBox(0, 'Second start of lacd client detected.', 'LostAngel''s WoW cheating death client', MB_ICONERROR + MB_OK);
    Halt;
  end;
    mh := CreateMutex(nil, True, 'lacd');
    try
       //... код
    finally
      ReleaseMutex(mh);
    end;
end;
а так вообще - можно пользоваться тегами компилятора и изменять их соответственно при компиляции "готового" продукта:

Код: Выделить всё

{$DEFINE DEBUG}
{$IFDEF DEBUG}
...
{$ELSE}
...
{$ENDIF}

Добавлено: 23 авг 2006, 15:37
BBB
LAngel писал(а):а так вообще - можно пользоваться тегами компилятора и изменять их соответственно при компиляции "готового" продукта:

Код: Выделить всё

&#123][/quote]
Условная компиляция - вещь временами нужная.
Но, опять же, в данном случае, как было сказано, это "реле", которое нужно время от времени не забывать включать/выключать.
Т.е. не очень удобно не то, что надо делать много исправлений (в случае отключения символа для условной компиляции их мало - добавить/убрать всего один символ текста), а то, что надо постоянно помнить об этом.

Добавлено: 24 авг 2006, 10:03
Игорь Акопян
а ты чтоб не забыть при включенной директиве в заголовок выводи - DEBUG!!! ;)

Добавлено: 29 авг 2006, 16:24
Eugie
Может быть есть какой-то способ run-time определить, что приложение запущено из-под среды разработки?
Есть такая функция - IsDebuggerPresent(), см. MSDN
По основному вопросу повторю - лучше пользоваться стандартными средствами, т.е. ставить мьютекс.