----------------------------------------------- POINT ARGUMENT January 2024 ----------------------------------------------- CCB 1. THE POINT STRUCTURE: typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT; HWND WINAPI WindowFromPoint( _In_ POINT Point ); 2. REFERENCE CODE: In x86, a point argument is 2 arguments: pt.x and pt.y. For example, we can write the following code to call WindowFromPoint: ; WindowFromPoint PROTO :DWORD,:DWORD (2 arguments) push dword ptr pt.y push dword ptr pt.x call WindowFromPoint In x64, a point argument is 1 argument: pt. For example, we can write the following code to call WindowFromPoint: ; PROTO64 external,WindowFromPoint, :QWORD (1 argument) mov rcx, qword ptr pt call WindowFromPoint The following code is incorrectly in x64: ; incorrectly code (2 arguments?) mov ecx, dword ptr pt.x mov edx, dword ptr pt.y call WindowFromPoint 3. REFERENCE WINDOWS APIS: AccNotifyTouchInteraction(_In_ HWND hwndApp, _In_ HWND hwndTarget, _In_ POINT ptTarget); AccessibleObjectFromPoint(_In_ POINT ptScreen, _Outptr_ IAccessible ** ppacc, _Out_ VARIANT* pvarChild); ChildWindowFromPoint(_In_ HWND hWndParent, _In_ POINT Point); ChildWindowFromPointEx(_In_ HWND hwnd, _In_ POINT pt, _In_ UINT flags); DAD_DragEnterEx(HWND hwndTarget, const POINT ptStart); DAD_DragEnterEx2(_In_ HWND hwndTarget, const POINT ptStart, _In_opt_ IDataObject *pdtObject); DAD_DragMove(POINT pt); DragDetect(_In_ HWND hwnd, _In_ POINT pt); DwmTetherContact(DWORD dwPointerID, BOOL fEnable, POINT ptTether ); HitTestThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, DWORD dwOptions, LPCRECT pRect, HRGN hrgn, POINT ptTest, _Out_ WORD *pwHitTestCode ); LBItemFromPt(HWND hLB, POINT pt, BOOL bAutoScroll); MenuItemFromPoint(_In_opt_ HWND hWnd, _In_ HMENU hMenu, _In_ POINT ptScreen); MonitorFromPoint(_In_ POINT pt, _In_ DWORD dwFlags); PtInRect(_In_ CONST RECT *lprc, _In_ POINT pt); RealChildWindowFromPoint(_In_ HWND hwndParent, _In_ POINT ptParentClientCoords); WindowFromPhysicalPoint(_In_ POINT Point); WindowFromPoint(_In_ POINT Point); MonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags); 4. REFERENCE COM INTERFACES: HRESULT IDropTarget::DragEnter([in] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT IDropTarget::DragOver([in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT IDropTarget::Drop([in] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT IOleInPlaceSite::Scroll([in] SIZE scrollExtant); 5. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |