Форум: "Начинающим";
Текущий архив: 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