Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

запуск программы 1 раз   Найти похожие ветки 

 
sss1 ©   (2006-10-14 17:50) [0]

здрасти....помогите пожалуйста а как сделать что б юзре мог запустить программу 1 раз?
заранее благодарен


 
Palladin ©   (2006-10-14 17:51) [1]

вообще 1 раз?


 
sss1 ©   (2006-10-14 17:58) [2]

даа..что б человек запустил 1 раз..и все больше не мог...ну типа демо версия))


 
Loginov Dmitry ©   (2006-10-14 18:19) [3]

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


 
Anatoly Podgoretsky ©   (2006-10-14 18:23) [4]


> sss1 ©   (14.10.06 17:58) [2]
> даа..что б человек запустил 1 раз..и все больше не мог..
> .ну типа демо версия))

Очень жестоко. Так это демо версией и останется, если не хуже - если ее не отнесут к троянам.


 
Длинный логин не получился:(   (2006-10-14 18:39) [5]

По поводу запустить прогу 1 раз, идей, к сожалению, нет. А если вопрос в том, как ни разу не запустить программму, имеются наработки могу выслать на tro45@mail.ru
Подтвердите, если такая неоходимость есть


 
sss1 ©   (2006-10-14 18:42) [6]

неее спс(((что  б прога ни разу не запускалась((


> Loginov Dmitry ©   (14.10.06 18:19) [3]
> При закрытии программы записывай куда-нибудь информацию
> о факте запуска. При повторных запусках проверяй ее наличие
> и закрывай прогу.

Юзер скачает прогу и запустит...и может так делать....продолжать это не выход...


 
Anatoly Podgoretsky ©   (2006-10-14 18:48) [7]

Лучше скажи, за что ты так ненавидишь пользователей, может тебе лучше программу запереть в сейф?


 
Длинный логин не получился:(   (2006-10-14 18:52) [8]

>Anatoly Podgoretsky ©   (14.10.06 18:48) [7]

Дык и я об том же :)


 
Anatoly Podgoretsky ©   (2006-10-14 18:58) [9]

А если он сам пользователь, то представляешь, что надо делать :)))
Не дрогнет ли рука?


 
sss1 ©   (2006-10-14 19:02) [10]

просто хочу предоставить программу...продемонстрировать....а если кому нить понравиться что б уже полную версию им давать...в обмен на что то)
так значь никто не сталкивался с такой проблемой?(


 
Anatoly Podgoretsky ©   (2006-10-14 19:12) [11]

Никакой проблемы нет, демо есть демо.
Делать одноразовое демо, самому себе вредить, притом много кратно.


 
DrPass ©   (2006-10-14 20:30) [12]

Можно сделать так, чтобы это демо стирало папку "Мои документы" и писало неприличные слова на обоях десктопа. Тогда у пользователя точно отпадет желание запускать его во второй раз


 
HITMAN ©   (2006-10-15 00:55) [13]

А не проще просто закрыть некоторые функции программы???
пользователь тыкнет, а там сообщение иди ..... купи у меня полную версию.

Алгоритм, применяемый мною:

В блоке 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.


 
Anatoly Podgoretsky ©   (2006-10-15 01:04) [14]


> А не проще просто закрыть некоторые функции программы???
>
> пользователь тыкнет, а там сообщение иди ..... купи у меня
> полную версию.

А кто же в демо включает рабочие функции, это же не триал?


 
!!!!!!!!!!!!!!!!!!!   (2006-10-16 11:17) [15]

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;



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.041 c
3-1156354971
Garyck
2006-08-23 21:42
2006.10.29
Ошибка ADO


15-1159967209
ПЛОВ
2006-10-04 17:06
2006.10.29
HDD-шка шутит?


2-1161064765
DevilDevil
2006-10-17 09:59
2006.10.29
Как правильно работать с Битмапом?


15-1158055308
VitV
2006-09-12 14:01
2006.10.29
Стоит ли передодить на С#?


2-1160740414
ceval
2006-10-13 15:53
2006.10.29
отображалось в реальном времени использывания памяти