Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

запуск программы 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.046 c
2-1161068983
Silica
2006-10-17 11:09
2006.10.29
Построение графика функции


2-1160503113
Volodya_
2006-10-10 21:58
2006.10.29
Delphi - Excel


15-1160059103
TUser
2006-10-05 18:38
2006.10.29
Коучи


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


11-1128235367
Sniper17
2005-10-02 10:42
2006.10.29
А если перейти на SVN?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский