اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

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

أخواني الأعزاء هل يمكن تأمين قاعدة البيانات بحيث تغلق ألياً إذا لم يحرك المستخدم الماوس خلال 5 دقائق مثلاً مثل ال Screen Saver

وشكراً

قام بنشر

أبدا مش صعب ولا حاجة

أفتح النموذج في وضع التصميم ثم في قائمة حدث ستجد خاصية: الفاصل الزمني لعداد الوقت أكتب فيه مثلا : 1000000طبعا هذي القيمة بالملي سكند يعني 10 دقايق . يعد كذه تجد في القائمة :عند عداد الوقت : أكتب مثلا Quit

========================

أحفظ النوذج وشغله سوف يضل مفتوح لمدة 10 دقائق وبعدها يقفل البرنامج , تصلح هذي الطريقة عندما يكون البرنامج على شبكة ويكون أحد المستخدمات فاتحة البرنامج ونسته مفتوح مثلا . تحياتي

  • Like 1
قام بنشر

فى الحقيقة الطريقة السابقة تغلق قاعدة البينات اتوماتيكيا بعد 10000 مللى ثانية

ولكن ليس هذا هو المطلوب تماما

وذلك لأن قاعدة البيانات ستغلق حتى لو كان المستخدم يستخدم الفأرة ولوحة المفاتيح

أى الغلق يتم دونما شرط او قيد

يكون تعديلها بالطريقة الاتية

1-ندخل Module ونكتب فيه الجملة الاتية

Global SumofEvents1 As Integer, SumofEvents2 As Integer
2- فى النموذج يتم عمل الاتى خاصية Timer Interavels =180000 (milli-Second) تكتب هذه الدوال فى كود النموذج
Private Sub Form_KeyPress(KeyAscii As Integer)
  If SumofEvents1 > 32000 Then SumofEvents1 = -32000
  SumofEvents1 = SumofEvents1 + 1
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If SumofEvents1 > 32000 Then SumofEvents1 = -32000
  SumofEvents1 = SumofEvents1 + 1
End Sub

Private Sub Form_Timer()
 If SumofEvents1 = SumofEvents2 Then
  Application.Quit
 Else
   SumofEvents2 = SumofEvents1
  End If
End Sub

والفكرة أنه يتم تعريف متغيريين

ونقوم بيادة 1على المتغير الأول عند حدوث أى حدث - يمكن تكرار S

Sub Form_MouseMove فى كل الأحداث المطلوب ان تعبر عن ان المستخدم متواجد أمام الكمبيوتر

كل فاصل زمنى تقوم Sub Form_Timer بتخزين القيمة عند هذا الفاصل غى المتغير

وكل فاصل زمنى تقوم باختبار المتغييرن ومعنى تساويهما أنه لم يتم أى حدث بين الفاصلين وهنا نغلق قاعدة البينات

العيوب:

1-يجب تكرار الدوال لكل مقاطع النموذج حيث أن تحرك الماوس على مقطع Detail بسسب الحدث

Detail_MouseMove وهكذا

2- فى حالة عمل Minemize للنموذج لن يسجل أى أحداث للماوس والكيبورد مما قد يؤدى ألى غلق قاعدة البيانات بينما المستعمل يقوم بأحداث على مكان أخر

3-أيضا فى حالة فتح نموذج الى هذا النموذج بمساحة أكبر يستقبل النموذج الثانى كل الأحداث وتؤدى إلى النتيجة السابقة

  • Like 1
قام بنشر

وهناك حل افضل قليلا

وهو ربط غلق البرنامج بحدوث Screen Saver فعليا وربما كان ذللك معبرا فعليا عن المستخدم كف عن استخدام البرنامج وكذلك ان ضبط screen Saver معبر عن رغبة المستخدم بدلا من تضايقه من غلق البرنامج قصرا عنه

الخطوات:

1-ندخل Module ونكتب فيه ننقل فيه الأكود الاتية

'http://www.littleguru.com
'=================================
Public Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long)
Public Declare Function GetWindowText& Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long)
      
Private strAppTitle As String
Private lngHwnd As Long

Public Function IsRunning&(strTitle As String)

  lngHwnd = 0
  strAppTitle = strTitle
  EnumWindows AddressOf EnumWinProc, 0

  If lngHwnd <> 0 Then
    IsRunning = lngHwnd
  Else
    IsRunning = 0
  End If
End Function

Private Function EnumWinProc&(ByVal lhWnd As Long, ByVal lParam As Long)
  Dim WinTitleBuf As String * 255
  Dim WinTitle As String

  GetWindowText lhWnd, WinTitleBuf, 255
  WinTitle = StripNulls(WinTitleBuf)
  
  If InStr(WinTitle, strAppTitle) <> 0 Then
    lngHwnd = lhWnd
    EnumWinProc = False
    Exit Function
  End If
  
  EnumWinProc = True
End Function

Private Function StripNulls(OriginalStr As String) As String

  If (InStr(OriginalStr, Chr(0)) > 0) Then
    OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)

  End If
  StripNulls = OriginalStr
End Function
2- فى النموذج نضع الفاصل الزمنى المناسب بالمللى ثانية وهذا الفاصل لا يستخدم لغلق البرنامج بل كل فاصل زمنى يتم اختبار ما إذا كان الscreen Saver يعمل فإذا كان يعمل يقوم بغلق البرنامج ويتم نسخ هذا الكود فى حدث OnTimer للنموذج :
Private Sub Form_Timer()
Dim strApp As String
strApp = "Screen Saver"
If IsRunning(strApp) > 0 Then
  Application.Quit
End If
End Sub

وما زال يعيبها أن تتم من خلال نموذج ولا يوجد حدث فى Application لكى يتم ربط الدالة به .....

مع تحياتى وخالص الشكر للاستاذ أبى أفنان على هديته أكواد خاصة بالكسس

  • Like 1
  • 2 months later...
قام بنشر

السلام عليكم

مرفق مثال أخر يوضح كيفية حماية قاعدة البيانات وذلك بإغلاقها, اذا لم يحرك المستخدم مؤشر الماوس او الكتابة على لوحة المفاتيح خلال فترة زمنية يتم تحديدها مسبقاً

واترك لباقي الزملاء التعديل او طرح طرق أخرى

مع تحياتي

SecureDatabase.zip

  • Like 1
  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information