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

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

قام بنشر

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

 

سؤالك غير واضح !!

12 ساعات مضت, حسين العربى said:

لتصغير برنامج معين  مفتوح علي سطح المكتب

 

جعفر

قام بنشر (معدل)

 كود لعمل Minimize لبرنامج معين

ولنفترض برنامج تيم فيور  مفتوح مثلا  اريد عمل  Minimize لهذا البرنامج

تم تعديل بواسطه حسين العربى
قام بنشر

أهلا حسين

في ٣‏/٩‏/٢٠٢٠ at 13:41, حسين العربى said:

ولنفترض برنامج تيم فيور  مفتوح مثلا  اريد عمل  Minimize لهذا البرنامج

التعامل مع التطبيقات خارج أكسس له أسلوب خاص يتعلق بويندوز نفسه وبالتالي يطلب منك ويندوز معلومات تتعلق بالتطبيق الذي تريد أن ترسل الأمر إليه مثل الاسم البرمجي، عنوان التطبيق، من أين أقلع التطبيق من داخل أكسس أو خارجه، هل هو التطبيق النشط أم لا.. أشياء كهذه. هل يمكن أن توفر هذه المعلومات؟

  • Like 1
قام بنشر (معدل)

استاذي الفاضل ابو ابراهيم الف شكر علي مرورك الطيب  هذه بعض المعلموات علي حسب ما فهمت

هو برنامج فيجول ستديوا

اقلاعه من خارج اكسس

التطبيق النشط نعم

عنوان التطبيق 

D:\KFM\CivilIdHtmlDemo.exe

وهذا هو البرنامج المراد عمل Minimize  له من خلال كود في زر امر في نموذج اكسس

KFM.rar

تم تعديل بواسطه حسين العربى
قام بنشر (معدل)

السلام عليكم

بما أنكم لم تحصلوا على الحل بعد إليك هذا الكود، لقد أثار سؤالكم فضولي وبعد البحث توصلت إلى الكود وقمت بتعديله على النحو الذي عمل لدي على جميع البرامج على حاسبي، مع ملاحظة أن ملفكم المرفق لم يعمل على جهازي.

قم باستدعاء الأمر التالي بالأحداث:

Public Sub MinimizeProgram()

وذلك بعد وضع الكود الآتي في مودجال جديد، و الانتباه إلى المعايير والتي هي عبارة عن جزء من اسم التطبيق:

 criteria = "*CivilIdHtmlDemo*"

الكود:

Option Compare Database

Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _
                                                  ByVal param As Long) As Long
Public Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
                                                 (ByVal hwnd As Long, _
                                                  ByVal lpString As String, _
                                                  ByVal cch As Long) As Long
                                                  
Public Declare Function fShowWindow Lib "user32.dll" Alias "ShowWindow" _
 (ByVal lngHWND As Long, ByVal lngCommand As Long) As Long
 
 Dim lngHandle As Long
Dim lngTemp As Long


Public Const MAX_LEN = 260

' you can use the Comment if you add  (Microsoft Scripting Runtime) Library to the references.
Public results 'As Dictionary

Public criteria As String

Public Sub MinimizeProgram()
'Edited By Hamdi-E 10/9/2020
'Officena Forums Khalf

'put a part Of the Targeted App Name
    criteria = "*CivilIdHtmlDemo*"
    
    Set results = CreateObject("Scripting.Dictionary")

 ' you can use the Comment if you add  (Microsoft Scripting Runtime) Library to the references.   
'   Set results = New Dictionary
    Call EnumWindows(AddressOf EnumWindowCallback, &H0)
    Dim result As Variant
    For Each result In results.Keys
   
        lngTemp = fShowWindow(result, 1)

' the available values in the second parameter:
'vbHide 0
'vbMaximizedFocus   3
'vbMinimizedFocus  2
'vbMinimizedNoFocus  6
'vbNormalFocus  1
'vbNormalNoFocus  4

    Next result
End Sub

Public Function EnumWindowCallback(ByVal hwnd As Long, ByVal param As Long) As Long
    Dim retValue As Long
    Dim buffer As String
    If IsWindowVisible(hwnd) Then
        buffer = Space$(MAX_LEN)
        retValue = GetWindowText(hwnd, buffer, Len(buffer))
        If retValue Then
            If buffer Like criteria Then
                results.Add hwnd, Left$(buffer, retValue)

End If
        End If
    End If
    EnumWindowCallback = 1
End Function

الحمد لله الذي بنعمته تتم الصالحات، اللهم صلِ على سيدنا محمد وعلى آله وصحبه ومن ولاه وسلم تسليماً كثيراً.

تم تعديل بواسطه Khalf
  • Like 3
قام بنشر

استاذي الفاضل الف شكر علي مرورك الطيب 

مكن لو تكرمت تطبق لنا الاكود علي ملف اكسس من عندك 

لاني الامر اختلط علي فا مش ظابط معي

والف شكر

قام بنشر

السلام عليكم 🙂 

 

وجرب هذا المرفق. هذا المرفق ينزل جميع البرامج المفتوحة ، وبعدين يكبّر برنامج الاكسس بعد ثانية ،

حصلت على الكود من الانترنت ، وتم عمل بعض التعديلات عليه وتضبيطه للعمل على النواتين 32 و 64 بت :

Option Compare Database
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Private Declare PtrSafe Function PostMessage Lib "USER32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim DoIt As LongPtr
#Else
    Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function PostMessage Lib "USER32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim DoIt As Long
#End If

    'Private Declare PtrSafe Function PostMessage Lib "USER32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Private Const WM_COMMAND As Long = &H111
Private Const MIN_ALL As Long = 419
Private Const MIN_ALL_UNDO As Long = 416
Private Const SW_RESTORE  As Long = 9
'

Public Function Minimize_AllWindows()
    
    DoIt = FindWindow("shell_traywnd", vbNullString)
    'to minimize them all
    Call PostMessage(DoIt, WM_COMMAND, MIN_ALL, 0&)


    Dim PauseTime, Start
    PauseTime = 1    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop

    DoCmd.RunCommand acCmdAppMaximize
    
End Function
 
Public Function Restore_AllWindows()

    DoIt = FindWindow("shell_traywnd", vbNullString)
    'to return them all to normal size
    Call PostMessage(DoIt, WM_COMMAND, MIN_ALL_UNDO, 0&)
    
End Function

.

وطريقة العمل اننا ننادي الوحدة النمطية عند بدء البرنامج هكذا :

call Minimize_AllWindows

.

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

call Restore_AllWindows

.

 

اما انا ، فأفتح برنامجي عن طريق الماكرو autoexec والذي يعمل تلقائيا لما يفتح الاكسس ،

واول امر فيه هو مناداة الوحدة النمطية لتصغير النوافد ، ثم يفتح لي النموذج الذي اريده ، هكذا :

image.png.6623f140fa33195c2003493209872487.png

.

ولما اغلق البرنامج ، اضع كود ارجاع البرامج الى وضعها السابق على حدث زر الخروج من البرنامج :

image.png.e99d094a04cd0f3e2f45fffe66d1d08e.png

.

والكود :

    Call Restore_AllWindows
    
    DoCmd.Quit

 

جعفر

 

All_Minimize_Restore.zip

  • Like 3
قام بنشر

أهلا الجميع..

في الحقيقة مشاركات متنوعة وجميلة لاستخدام دوال ويندوز WIN32API ..

-- مشاركة أ. @Khalf مبنية على البحث عن النوافذ المفتوحة في شريط المهام بواسطة الدالة EnumWindows مع استخدام دالة التغذية الراجعة EnumWindowCallback.. (تستخدم هذه الدالة لتطبيق بعض الإجراءات التي يحددها المستخدم في دالة التغذية الراجعة على النوافذ المفتوحة).

ولهذا هي طويلة بعض الشيء.

 

-- مشاركة أ. @jjafferr : هي أيضا لها علاقة بالنوافذ المفتوحة في شريط المهام؛ ولكنه استخدم الطبقة الرئسية للنوافذ المفتوحة، وهي هنا shell_traywnd، ثم مررها إلى الدالة FindWindow، لتعيد له هذه الدالة رقم صحيحا يسمى مقبض النافذة HWND. ثم مرر هذا الرقم إلى وظيفة أخرى PostMessage لتقوم بإرسال رسائل للطبقة الرئيسية: بالتصغير، أو العودة إلى الوضع الطبيعي..

ولهذا هي قصيرة جدا! لأنها محددة المهام

 

أما مشاركتي فلا علاقة لها بالإجابة عن السؤال!

عند تمرير مؤشر الفارة على النوافذ المفتوحة يعيد أكسس البيانات التي سألت عنها في الاقتباس أدناه! إذا لم تظهر البيانات بالشكل الصحيح ثبت أكسس فوق النافذة وحرك الفارة..

في ٦‏/٩‏/٢٠٢٠ at 09:02, أبو إبراهيم الغامدي said:

التعامل مع التطبيقات خارج أكسس له أسلوب خاص يتعلق بويندوز نفسه وبالتالي يطلب منك ويندوز معلومات تتعلق بالتطبيق الذي تريد أن ترسل الأمر إليه مثل الاسم البرمجي، عنوان التطبيق، من أين أقلع التطبيق من داخل أكسس أو خارجه، هل هو التطبيق النشط أم لا.. أشياء كهذه. هل يمكن أن توفر هذه المعلومات؟

Windows Information.accdb

 

  • Like 2
قام بنشر

ملاحظة فاتتني، يمكن أن تربط الكود بمربع سرد وحوار، وهناك عدة خيارات للتعامل مع نوافذ البرامج، وأهم ما في الكود أنك لن تحتاج إلى الحصول على اسم الكلاس الخاص بالتطبيق المراد التحكم بنافذته، والذي يطلب كباراميتر لبعض الإي بي آي.

  • Like 1
قام بنشر
6 ساعات مضت, Khalf said:

ملاحظة فاتتني، يمكن أن تربط الكود بمربع سرد وحوار، وهناك عدة خيارات للتعامل مع نوافذ البرامج، وأهم ما في الكود أنك لن تحتاج إلى الحصول على اسم الكلاس الخاص بالتطبيق المراد التحكم بنافذته، والذي يطلب كباراميتر لبعض الإي بي آي.

لكنك خالفت هذه النقطة! ولجأت إلى عنوان النافذة لتستخدمه كمحدد! (باراميتر).. 

بعد فحصك لعنوان النافذة المطابق لطلبك استخدمت المجمع (Dictionary) لتخزين مقبض النافذة المطابق لشرطك، وكان يالإمكان استخدام الدالة ShowWindow مباشرة مع ذلك المقبض، والاسنغناء كليا عن المجمع..

في كل الأحوال أنت بحاجة إلى محدد؛ سواءً استخدمت الطبقة أو العنوان كمحدد! وإلا سوف تقوم الدالة ShowWindow بتطبيق الإجراء على جميع النوافذ..

 

  • Thanks 1
قام بنشر
منذ ساعه, Khalf said:

جزاكم الله كل خير، على التوضيح والتصحيح. ما دعاني لوضع ذلك التوضيح هو الصعوبة التي واجهتني بالحصول على اسم الكلاس الخاص بالتطبيق لاستخدامه كباراميتر.

أما أنا فأحمد الله أنك لم تفعل ذلك! لأن طريقتك أجود في نظري! أتمنى لك التوفيق 

  • Thanks 1

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