Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Запрет на запуск второй копии приложения 
V
    Опции темы
BlueAlien
Дата 21.10.2014, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.10.2014

Репутация: нет
Всего: -1



Доброе время суток. У меня такая проблема: есть код, который должен помешать запускать программу дважды, на случать если юзверь щелкнет второй раз по иконке, программа не запускала свою вторую копию: 
Код

Procedure TForm1.FormCreate(SEnder: TObject);
 Var ExtEndedStyle:dword;
 Wnd : hWnd;
 buff : Array[0.. 127] of Char;
Begin
 Wnd := GetWindow(Handle, gw_HWndFirst);
 While Wnd <> 0
 DO
  Begin
  If (Wnd <> Application.Handle) and (GetWindow(Wnd, gw_Owner) = 0) Then 
   Begin 
   GetWindowText (Wnd, buff, sizeof (buff ));
   If StrPas (buff) = Application.Title Then
    Begin Halt;
    End;
   End;
  Wnd := GetWindow (Wnd, gw_hWndNext); 
  End;
End;

Но вот в чем проблема, когда я все это компилирую и запускаю, программа (первый запуск!), тут же вырубается сама. 
PM MAIL   Вверх
northener
Дата 22.10.2014, 01:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(BlueAlien @  21.10.2014,  23:57 Найти цитируемый пост)
Доброе время суток. У меня такая проблема: есть код,

Странный какой-то код ты нарыл на всемирной помойке.
Ну так сам нарыл, сам и разбирайся. smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Poseidon
Дата 22.10.2014, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



BlueAlien, код, прямо скажем, бредовый. И программа очень правильно все делает когда вырубается. Проанализируй этот код и разберись что там делается, сам поймешь. Я б посоветовал бы использовать мютексы. Как-то так.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
кмс
Дата 23.10.2014, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 12.2.2009
Где: Казахстан

Репутация: 1
Всего: 2



Я так делал. Открываешь код проекта(Project>View Source) и там пишешь
Код

.........
var
  H: THandle;
.................

begin
  H := CreateMutex(nil, True, 'Bghfvgtrekjhgftuy');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    Exit;
  end;
end;
.........
.........

В место Bghfvgtrekjhgftuy можешь написать что угодно.
PM MAIL   Вверх
BlueAlien
Дата 23.10.2014, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.10.2014

Репутация: нет
Всего: -1



Цитата(кмс @  23.10.2014,  11:42 Найти цитируемый пост)
В место Bghfvgtrekjhgftuy можешь написать что угодно.

Вы имеете в виду - имя моего приложения? 
PM MAIL   Вверх
Poseidon
Дата 23.10.2014, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(BlueAlien @  23.10.2014,  16:10 Найти цитируемый пост)
Вы имеете в виду - имя моего приложения?  
Он имеет ввиду "что угодно". Я же ссылку дал, читал что там? Вот тебе дословно: 
Цитата
в самой первой строке, когда мы создаем мьютекс, я указал «кодовое слов» — это то слово, которое будет использоваться в Вашей программы и только она его будет знать. Так что придумайте его и впишите туда.


кмс, присваивать значение для H в данном случае не требуется. А следовательно и объявлять H нет необходимости.

Это сообщение отредактировал(а) Poseidon - 23.10.2014, 16:37


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CynicRus
Дата 23.10.2014, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Можешь там просто ctrl + shift + G нажать, и среда сама тебе сгенерит строку с GUID, если фантазировать в лом.

Ну и выглядеть тогда это будет примерно так:
Код

if CreateMutex(nil, True, '6EACD0BF-F3E0-44D9-91E7-47467B5A2B6A') = 0 then
  RaiseLastOSError;
if GetLastError = ERROR_ALREADY_EXISTS then
  Exit;


Это сообщение отредактировал(а) CynicRus - 23.10.2014, 22:25
PM MAIL   Вверх
кмс
Дата 24.10.2014, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 12.2.2009
Где: Казахстан

Репутация: 1
Всего: 2



Цитата(Poseidon @  23.10.2014,  16:36 Найти цитируемый пост)
кмс, присваивать значение для H в данном случае не требуется. А следовательно и объявлять H нет необходимости.

Ну я сам давно подсмотрел где то, сейчас просто тот проект нашел и скопировал smile

PM MAIL   Вверх
BlueAlien
Дата 24.10.2014, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.10.2014

Репутация: нет
Всего: -1



Poseidon, хватит кидать ссылки на нерабочие примеры, писаные криворукими школярами. 


Цитата(Poseidon @  23.10.2014,  16:36 Найти цитируемый пост)
Он имеет ввиду "что угодно". 

Но ведь это "кодовое слово", оно ведь еще где-то использоваться будет, верно?

Добавлено через 1 минуту и 42 секунды
кмс, а ваш код, даже не компилируется. 
PM MAIL   Вверх
Poseidon
Дата 24.10.2014, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(BlueAlien @  24.10.2014,  20:05 Найти цитируемый пост)
Но ведь это "кодовое слово", оно ведь еще где-то использоваться будет, верно?
Верно. Оно будет использоваться при запуске второй копии программы. Вы вообще код удосужились посмотреть? Изучить что он делает? Почему так происходит? Эти вопросы отпали бы все. Разжовывать тут и класть в рот никто не будет. Если сами не хотите разбираться, то вам прямиком на фриланс. Примеры все рабочие и использованы в не одном проекте. Если они не делают конкретно то, чт нужно вам, то это еще не говорит о том, что они не работают. Попробуйте разобраться что делает код. Тогда и поправить его под свои нужды будет проще. Обычным копи-пастом тут не обойтись.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
bems
Дата 25.10.2014, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



кмс, а почему именно мютекс? считается что ивент "легче"

Добавлено через 3 минуты и 58 секунд
Цитата(BlueAlien @  24.10.2014,  20:05 Найти цитируемый пост)
кмс, а ваш код, даже не компилируется
вы не вполне верно сформулировали высказывание. правильно было бы "мне не удалось скомпилировать ваш код"



--------------------
Обижено школьников: 8
PM MAIL   Вверх
BlueAlien
Дата 31.10.2014, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.10.2014

Репутация: нет
Всего: -1



Цитата(Poseidon @  24.10.2014,  20:33 Найти цитируемый пост)
Примеры все рабочие и использованы в не одном проекте. 

Примеры не рабочие. Сомневаюсь, что они могут использоваться хоть где-нибудь, кроме троллинга. 

Цитата(Poseidon @  24.10.2014,  20:33 Найти цитируемый пост)
Если они не делают конкретно то, чт нужно вам, то это еще не говорит о том, что они не работают.

Они именно что не работают. То есть, даже не компилирутся. 

Цитата(Poseidon @  24.10.2014,  20:33 Найти цитируемый пост)
Попробуйте разобраться что делает код.

Если бы я хотел играть в шарады, то я бы и пошел туда где в них играют. Мне нужен - рабочий код.

Цитата(bems @  25.10.2014,  14:09 Найти цитируемый пост)
вы не вполне верно сформулировали высказывание. правильно было бы "мне не удалось скомпилировать ваш код"

Код либо компилируется, либо нет. Если правильный - компилируется. Все коды, которые мне здесь дали - не компилируются, следовательно, неправильные. 
PM MAIL   Вверх
Poseidon
Дата 31.10.2014, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133




M
Poseidon
Тема закрыта в связи с нежеланием автора разобраться в вопросе.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.