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

طلب توضيح وطريقة استدعاء الفانكشن المرفق


أبو نادر

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

السلام عليكم

هذا فانكشن من الوهله الأولى شعرت بأنه محترم  :biggrin:

لكن للأسف ما عرفت كيف استدعيه

ممكن توضيح عمله وأكواد الاستدعاء

 

والله لا يحرمكم الأجر

 


Option Compare Database
Option Explicit


Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const WM_GETICON = &H7F
Public Const WM_SETICON = &H80

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Public Type POINTAPI
        X As Long
        Y As Long
End Type


Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Public Const GWL_STYLE = (-16)
Public Const WS_VISIBLE = &H10000000


Public Declare Function GetWindowPlacement Lib "user32" (ByVal hWnd As Long, lpwndpl As WINDOWPLACEMENT) As Long

Public Const SW_SHOW = 5
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1
Public Const SW_RESTORE = 9
Public Const SW_MINIMIZE = 6
Public Const SW_MAXIMIZE = 3
Public Const SW_HIDE = 0

Public Const SWP_SHOWWINDOW = &H40
Public Const HWND_TOPMOST = -1
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2

Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long


Public Type RECT
        Left As Long
        top As Long
        Right As Long
        Bottom As Long
End Type

Public Type WINDOWPLACEMENT
        Length As Long
        flags As Long
        showCmd As Long
        ptMinPosition As POINTAPI
        ptMaxPosition As POINTAPI
        rcNormalPosition As RECT
End Type

Const ABS_AUTOHIDE = &H1
Const ABS_ONTOP = &H2
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5

Private Type APPBARDATA
    cbSize As Long
    hWnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long '  message specific
End Type

Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long

Public Function CursorOnTaskbar() As Boolean


    Dim curPoint        As POINTAPI
    Dim lngRetCur       As Long
    Dim lngRetTbarPos   As Long
    Dim barData         As APPBARDATA
    
    lngRetCur = GetCursorPos(curPoint)
    
    lngRetTbarPos = SHAppBarMessage(ABM_GETTASKBARPOS, barData)
        
    If (lngRetCur <> 0) And (lngRetTbarPos <> 0) Then
        If (curPoint.X > barData.rc.Left) And _
            (curPoint.X < barData.rc.Right) And _
            (curPoint.Y < barData.rc.Bottom) And _
            (curPoint.Y > barData.rc.top) _
        Then
            CursorOnTaskbar = True
        End If
    End If
    
End Function


Public Function IsMinimized(hWnd As Long) As Boolean


    Dim wndPl       As WINDOWPLACEMENT
    Dim lngRetVal   As Long
    
    lngRetVal = GetWindowPlacement(hWnd, wndPl)
       
    If (wndPl.showCmd = SW_SHOWMINIMIZED) Then
        IsMinimized = True
    End If
    
End Function

Public Function IsVisible(hWnd As Long) As Boolean
    

    Dim lngRetVal   As Long
    
    lngRetVal = GetWindowLong(hWnd, GWL_STYLE)
    
    If ((lngRetVal And WS_VISIBLE) = WS_VISIBLE) Then
        IsVisible = True
    End If
    
End Function


Public Sub bringWindowToFront(hWnd As Long)


    Call SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)

End Sub


 

رابط هذا التعليق
شارك

اخي ابو نادر تحية طيبة

هذا الفانكشن وظيفته التعامل مع مقابض النوافذ النشطة و معرفة اذا كانت النافذة المطلوبة مصغرة او نشطة على الشاشة ( هذا ما حللته وربما اكون مخطأ )

ملاحظة هذا الفانكشن لديه نقص في الكود لاحظ ان هذا الكود يتبع الى وحدة نمطية او اجراء غير موجود

9 ساعات مضت, أبو نادر said:

Call SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)

بالنسبة الى الاستدعاء صراحة لا فكرة لدي

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

  • Like 1
رابط هذا التعليق
شارك

كل هذه الموديولات خاصة بعمل تصغير للقاعدة بجوار ساعة النظام
استاذى الحبيب راجع المرفق مرة اخرى وانظر الى الاكواد فى هذا النموذج
انا حذفت لك كل النماذج وتركت لك فقط النموذج الذى يتم استدعاء كل هذه الموديولات من خلاله

ولكن للامانه هذه الاكواد بها مشكله القاعدة احيانا يحدث لها تصغير ولا تستطيع استعادتها او اغلاقها او فتحها الا ان قفلتها عن طريق الضغط على الازرار ctrl + alt + delete

aziz.rar

  • Like 2
رابط هذا التعليق
شارك

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