![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
запуск программы 1 раз
sss1 © (2006-10-14 17:50:00)здрасти....помогите пожалуйста а как сделать что б юзре мог запустить программу 1 раз?
заранее благодарен
!!!!!!!!!!!!!!!!!!! (2006-10-16 11:17:00) [1]
procedure TForm1.FormCreate(Sender: TObject);
begin
if GlobalFindAtom('THIS_IS_SOME_OBSCUREE_TEXT') = 0 then
GlobalAddAtom('THIS_IS_SOME_OBSCUREE_TEXT')
else
begin
ShowMessage('Это приложение может быть запущено только один раз за сессию Windows.' + #10+#13 +
'Если будет сделана ещё одна попытка запуска, нам придётся отформатировать винчестер');
Halt;
end;
Anatoly Podgoretsky (2006-10-15 01:04:00) [2]
> А не проще просто закрыть некоторые функции программы???
>
> пользователь тыкнет, а там сообщение иди ..... купи у меня
> полную версию.
А кто же в демо включает рабочие функции, это же не триал?
HITMAN (2006-10-15 00:55:00) [3]А не проще просто закрыть некоторые функции программы???
пользователь тыкнет, а там сообщение иди ..... купи у меня полную версию.
Алгоритм, применяемый мною:
В блоке begin..end модуля .dpr:
begin
if HPrevInst <>0 then
begin
ActivatePreviousInstance;
Halt;
end;
end;
Реализация в модуле:
unit PrevInst;
interface
uses
WinProcs,
WinTypes,
SysUtils;
type
PHWnd = ^HWnd;
function EnumApps(Wnd: HWnd; TargetWindow: PHWnd): bool; export;
procedure ActivatePreviousInstance;
implementation
function EnumApps(Wnd: HWnd; TargetWindow: PHWnd): bool;
var
ClassName: array[0..30] of char;
begin
Result := true;
if GetWindowWord(Wnd, GWW_HINSTANCE) = HPrevInst then
begin
GetClassName(Wnd, ClassName, 30);
if STRIComp(ClassName, 'TApplication') = 0 then
begin
TargetWindow^ := Wnd;
Result := false;
end;
end;
end;
procedure ActivatePreviousInstance;
var
PrevInstWnd: HWnd;
begin
PrevInstWnd := 0;
EnumWindows(@EnumApps, LongInt(@PrevInstWnd));
if PrevInstWnd <> 0 then
if IsIconic(PrevInstWnd) then
ShowWindow(PrevInstWnd, SW_Restore)
else
BringWindowToTop(PrevInstWnd);
end;
end.
и вот ещё
var
MutexHandle: THandle;
var
UniqueKey: string;
function IsNextInstance: BOOLEAN;
begin
Result := FALSE;
MutexHandle := 0;
MutexHandle := CREATEMUTEX(nil, TRUE, UniqueKey);
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Result := TRUE;
CLOSEHANDLE(MutexHandle);
MutexHandle := 0;
end;
end;
end;
begin
CmdShow := SW_HIDE;
MessageId := RegisterWindowMessage(zAppName);
Application.Initialize;
if IsNextInstance then
PostMessage(HWND_BROADCAST, MessageId, 0, 0)
else
begin
Application.ShowMainForm := FALSE;
Application.CreateForm(TMainForm, MainForm);
MainForm.StartTimer.Enabled := TRUE;
Application.Run;
end;
if MutexHandle <> 0 then
CLOSEHANDLE(MutexHandle);
end.
В MainForm вам необходимо вставить обработчик внутреннего сообщения
procedure TMainForm.OnAppMessage(var M: TMSG; var Ret: BOOLEAN);
begin
if M.Message = MessageId then
begin
Ret := TRUE;
// Поместить окно наверх !!!!!!!!
end;
end;
initialization
ShowWindow(Application.Handle, SW_Hide);
end.
DrPass (2006-10-14 20:30:00) [4]Можно сделать так, чтобы это демо стирало папку "Мои документы" и писало неприличные слова на обоях десктопа. Тогда у пользователя точно отпадет желание запускать его во второй раз
Anatoly Podgoretsky (2006-10-14 19:12:00) [5]Никакой проблемы нет, демо есть демо.
Делать одноразовое демо, самому себе вредить, притом много кратно.
sss1 (2006-10-14 19:02:00) [6]просто хочу предоставить программу...продемонстрировать....а если кому нить понравиться что б уже полную версию им давать...в обмен на что то)
так значь никто не сталкивался с такой проблемой?(
Anatoly Podgoretsky (2006-10-14 18:58:00) [7]А если он сам пользователь, то представляешь, что надо делать :)))
Не дрогнет ли рука?
Длинный логин не получился:( (2006-10-14 18:52:00) [8]>Anatoly Podgoretsky © (14.10.06 18:48) [7]
Дык и я об том же :)
Anatoly Podgoretsky (2006-10-14 18:48:00) [9]Лучше скажи, за что ты так ненавидишь пользователей, может тебе лучше программу запереть в сейф?
sss1 (2006-10-14 18:42:00) [10]неее спс(((что б прога ни разу не запускалась((
> Loginov Dmitry © (14.10.06 18:19) [3]
> При закрытии программы записывай куда-нибудь информацию
> о факте запуска. При повторных запусках проверяй ее наличие
> и закрывай прогу.
Юзер скачает прогу и запустит...и может так делать....продолжать это не выход...
Длинный логин не получился:( (2006-10-14 18:39:00) [11]По поводу запустить прогу 1 раз, идей, к сожалению, нет. А если вопрос в том, как ни разу не запустить программму, имеются наработки могу выслать на tro45@mail.ru
Подтвердите, если такая неоходимость есть
Anatoly Podgoretsky (2006-10-14 18:23:00) [12]
> sss1 © (14.10.06 17:58) [2]
> даа..что б человек запустил 1 раз..и все больше не мог..
> .ну типа демо версия))
Очень жестоко. Так это демо версией и останется, если не хуже - если ее не отнесут к троянам.
Loginov Dmitry (2006-10-14 18:19:00) [13]При закрытии программы записывай куда-нибудь информацию о факте запуска. При повторных запусках проверяй ее наличие и закрывай прогу.
sss1 (2006-10-14 17:58:00) [14]даа..что б человек запустил 1 раз..и все больше не мог...ну типа демо версия))
Palladin (2006-10-14 17:51:00) [15]вообще 1 раз?