الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أمنع برنامجي أن يعمل أكثر من مرة واحدة

مغلق
بدأه asrocks في 31 يناير 2007 · 2 رد · 709 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي سؤال في عملية إلغاء تشغيل برنامجي إذا كان يعمل

بحيث مثلاً يظهر رسالة بأن "التطبيق لا يعمل أكثر من نسخة و احدة".

فلعلي أجد الحل عندكم إن شاء الله

و السلام عليكم

تم تعديل هذه المشاركة بواسطة asrocks في 31 يناير 2007 في 20:10

#2

السلام عليكم و رحمة الله و بركاته .

إذا كنت قد فهمت طلبك ، فأنت تبحث عن كيفية تشغيل البرنامج مرة واحدة (أي معنى لا يستطيع تشغيل البرنامج مرتين في نفس الوقت على جهاز واحد)

في هذه الحالة يوجد عدة حلول أبسطها

أكيد أن كود البرنامج هو يشبه الكود التالي

إذهب إلى Project ----> View source

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

[code/]
جرب هذا الكود

[code]
program Project1;

uses
  Windows, Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
  SetLastError(NO_ERROR);
  CreateMutex (nil, False, name of your  application');
  if GetLastError = ERROR_ALREADY_EXISTS
	then Exit;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

و إليك البرنامج.

أرجو الدعاء.

exemple.rar

أدم الصلاة على النبي محمد ...............فقبولها حتما بدون تردد

أعمالنا بين القبول وردها ............إلا الصلاة على النبي محمد

#3
/1. CreateMutex

unit Unit1;

uses
  Windows, Dialogs, Sysutils;

{....}
implementation

{....}

var
  mHandle: THandle;	// Mutexhandle

initialization
  mHandle := CreateMutex(nil, True, 'XYZ');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
	ShowMessage('Program is already running!');
	halt;
  end;

finalization
  if mHandle <> 0 then CloseHandle(mHandle)
end.

procedure TForm1.FormCreate(Sender: TObject);
var
  Sem: THandle;
begin
  Sem := CreateSemaphore(nil, 0, 1, 'PROGRAM_NAME');
  if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then
  begin
	CloseHandle(Sem);
	ShowMessage('This program is already running.');
	Halt;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  atom: Integer;
  CRLF: string;
begin
  if GlobalFindAtom('A Text used to be stored in memory') = 0 then
	atom := GlobalAddAtom('A Text used to be stored in memory')
  else
  begin
	CRLF := #10 + #13;
	ShowMessage('This version may only be run once for every Windows Session.' +
	  CRLF +
	  'To run this program again, you need to restart Windows, or better yet:' +
	  CRLF +
	  'REGISTER !!');
	Close;
  end;
end;

http://www.swissdelphicenter.ch/torry/showcode.php?id=42

قطرة الماء تـثـقب الحجر.. لا بالعنف. لكن بتكرار المحاولة

at4re.gif

منتديات الفريق العربي للهندسة العكسية 不喜欢的勿入! www.at4re.com

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…