Using Win32 functions in Visual FoxPro Image Gallery
Code examples:
Winsock: creating a socket that is bound to a specific service provider
Customizing the frame of top-level form: removing the standard frame (VFP9, Vista)
Obtaining names and positions for shortcuts located on the Windows Desktop
Using GetBinaryType (WinNT only) to determine the type of an executable file
Using GetFileSize
How to build UDP responder
Locking mouse and keyboard input for the VFP application
Monitoring changes in a directory
Obtaining information about all user accounts on a server (WinNT only)
Reading and setting system access privileges for the current process
Retrieveing information about the active window (even if it is not owned by the calling process)
A procedure for setting file times
CryptoAPI: Collection of Providers class
Dial the Net Automatically
How to display a dialog box with which the user can add a data source (DSN)
How to display Windows On-Screen Keyboard
Pocket PC: Folder Viewer
Testing MS Internet Explorer version installed
Retrieving list of available disk drives
Using the heap of the calling process to allocate memory blocks
Configuring DEVMODE structure for a printer
Enumerating network interfaces on the local computer
Pocket PC: custom RAPI class for operating with the Object Store Databases
Semi-transparent Form
Scanning the hierarchy of child windows down from the main VFP window

User rating: 0/10 (0 votes)
Rate this code sample:
  • ~
More code examples    Listed functions    Add comment     W32 Constants      Translate this page Printer friendly version of this code sample
Before you begin:
This code returns some interesting information about windows residing inside the main VFP window.
 
DO declare
 
* resulting cursor stores handle, parent handle,
* caption, rectangle, and style for enumerated windows
CREATE CURSOR csResult (winhandle N(12), parentwin N(12), winlevel N(5),;
    winclass C(30), wintitle C(50), wrleft N(12), wrtop N(12),;
    wrright N(12), wrbottom N(12), winwidth N(5), winheight N(5),;
    winstyle N(12), winexstyle N(12))
 
LOCAL hAppWindow, loWindow
 
hAppWindow = GetActiveWindow()  && main VFP window
*hAppWindow = _screen.HWnd
*hAppWindow = FindWindow("Shell_TrayWnd", Null)
*hAppWindow = FindWindow("AdobeAcrobat", Null)
*hAppWindow = FindWindow(Null, "Calculator")
 
IF hAppWindow = 0 OR IsWindow(hAppWindow)=0
    = MESSAGEBOX("Invalid Window Handle")
    RETURN
ENDIF
 
loWindow = CreateObject("Twindow", hAppWindow, 0,0)
 
SELECT * FROM csResult ORDER BY winlevel, parentwin
* end of main
 
DEFINE CLASS Twindow As Custom
* this class restores window parameters using recursion
* for all levels of child windows starting from a given window
#DEFINE GW_HWNDNEXT   2
#DEFINE GW_CHILD      5
 
PROTECTED WinCaption, WinClass, hWindow, hParent, lvl
 
PROCEDURE Init(lnHandle, lnParent, lnLevel)
    IF lnHandle = 0
        RETURN .F.
    ENDIF
 
    THIS.lvl = lnLevel
    THIS.hWindow = lnHandle
    THIS.hParent = lnParent
    THIS.WinCaption = GetWinText(lnHandle)
    THIS.WinClass = GetWinCLass(lnHandle)
    THIS.SaveWinInfo
 
    LOCAL hChild, oChild, hNext, oNext
    hChild = GetWindow(THIS.hWindow, GW_CHILD)
    oChild = CreateObject("Twindow", hChild, THIS.hWindow, THIS.lvl+1)
 
    IF lnParent <> 0
        hNext = GetWindow(THIS.hWindow, GW_HWNDNEXT)
        oNext = CreateObject("Twindow", hNext, THIS.hParent, THIS.lvl)
    ENDIF
 
PROCEDURE SaveWinInfo
    INSERT INTO csResult (winhandle, parentwin, winlevel, wintitle, winclass);
    VALUES (THIS.hWindow, THIS.hParent, THIS.lvl, THIS.WinCaption, THIS.WinClass)
 
*| typedef struct tagWINDOWINFO {
*|     DWORD cbSize;            0:4
*|     RECT  rcWindow;          4:16
*|     RECT  rcClient;         20:16
*|     DWORD dwStyle;          36:4
*|     DWORD dwExStyle;        40:4
*|     DWORD dwWindowStatus;   44:4
*|     UINT  cxWindowBorders;  48:4
*|     UINT  cyWindowBorders;  52:4
*|     ATOM  atomWindowType;   56:2
*|     WORD  wCreatorVersion;  58:2
*| } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO; total=60 bytes
#DEFINE WINDOWINFO_SIZE  60
 
    LOCAL lcBuffer, lnResult
    lcBuffer = Chr(WINDOWINFO_SIZE) +;
        Repli(Chr(0), WINDOWINFO_SIZE-1)
 
    lnResult = GetWindowInfo(THIS.hWindow, @lcBuffer)
 
    UPDATE csResult SET;
        wrleft = buf2dword(SUBS(lcBuffer, 5,4)),;
        wrtop  = buf2dword(SUBS(lcBuffer, 9,4)),;
        wrright = buf2dword(SUBS(lcBuffer, 13,4)),;
        wrbottom = buf2dword(SUBS(lcBuffer, 17,4)),;
        winstyle = buf2dword(SUBS(lcBuffer, 37,4)),;
        winexstyle = buf2dword(SUBS(lcBuffer, 41,4)),;
        winwidth  = wrright-wrleft+1,;
        winheight = wrbottom-wrtop+1;
    WHERE csResult.winhandle = THIS.hWindow
ENDDEFINE
 
FUNCTION GetWinText(hWindow)
* returns window title bar text -- Win9*/Me/XP/2000
    LOCAL lcBuffer, lnResult
    lcBuffer = Space(250)
    lnResult = GetWindowText(hWindow, @lcBuffer, Len(lcBuffer))
RETURN Left(lcBuffer, lnResult)
 
FUNCTION GetWinClass(hWindow)
* returns window class
    LOCAL lcBuffer, lnResult
    lcBuffer = Space(250)
    lnResult = RealGetWindowClass(hWindow, @lcBuffer, Len(lcBuffer))
RETURN Left(lcBuffer, lnResult)
 
FUNCTION buf2dword(lcBuffer)
RETURN Asc(SUBSTR(lcBuffer,1,1)) + ;
    BitLShift(Asc(SUBSTR(lcBuffer,2,1)),  8)+;
    BitLShift(Asc(SUBSTR(lcBuffer,3,1)), 16)+;
    BitLShift(Asc(SUBSTR(lcBuffer,4,1)), 24)
 
PROCEDURE declare
    DECLARE INTEGER GetActiveWindow IN user32
    DECLARE INTEGER GetWindow IN user32 INTEGER hwnd, INTEGER wFlag
    DECLARE INTEGER GetWindowInfo IN user32 INTEGER hwnd, STRING @pwi
    DECLARE INTEGER IsWindow IN user32 INTEGER hWindow
 
    DECLARE INTEGER RealGetWindowClass IN user32;
        INTEGER hWindow, STRING @pszType, INTEGER cchType
 
    DECLARE INTEGER GetWindowText IN user32;
        INTEGER hwnd, STRING @lpString, INTEGER cch
 
    DECLARE INTEGER InternalGetWindowText IN user32;
        INTEGER hWnd, STRING @lpString, INTEGER nMaxCount
 
    DECLARE INTEGER FindWindow IN user32;
        STRING lpClassName, STRING lpWindowName
 
 
 

User rating: 0/10 (0 votes)
Rate this code sample:
  • ~
4211 bytes  
Created: 2002-01-20 11:18:24  
Modified: 2005-10-04 08:18:45  
Visits in 7 days: 132  
Listed functions:
FindWindow
GetActiveWindow
GetWindow
GetWindowInfo
GetWindowText
InternalGetWindowText
IsWindow
RealGetWindowClass
Printer friendly API declarations
My comment:
Starting from the main VFP window this code recursively scans all levels of child windows.

Test this code having various combinations of VFP forms and tool windows running. Note a difference when VFP forms contain any ActiveX controls. ActiveX controls are windows, that is not true for VFP native controls.

By the way, this is how a window handle to the Command window can be obtained. Evidently more can be done with sending various messages to inner windows and reaching their parameters directly through Win32 functions.

Try to start scanning not from the main VFP window, but from the Windows Taskbar:

hAppWindow = FindWindow("Shell_TrayWnd", Null)

Where Shell_TrayWnd is Window class name for the Taskbar.
Word Index links for this example:
Translate this page:
  Spanish    Portuguese    German    French    Italian  
FreeTranslation.com offers instant, free translations of text or web pages.
User Contributed Notes:
There are no notes on this subject.


Copyright © 2001-2013 News2News, Inc. Before reproducing or distributing any data from this site please ask for an approval from its owner. Unless otherwise specified, this page is for your personal and non-commercial use. The information on this page is presented AS IS, meaning that you may use it at your own risk. Microsoft Visual FoxPro and Windows are trade marks of Microsoft Corp. All other trademarks are the property of their respective owners. 

Privacy policy
Credits: PHP (4.4.9), an HTML-embedded scripting language, MySQL (5.1.55-log), the Open Source standard SQL database, AceHTML Freeware Version 4, freeware HTML Editor of choice.   Hosted by Korax Online Inc.
Last Topics Visited (54.235.20.17)
3.62 hrs.Function: 'GetWorldTransform'
 Example: 'Simple MAPI: how to pick an email recipient from Outlook Express address book'
9.74 hrs.Example: 'Accessing examples contained in this reference through Web Services'
 Function: 'GetWindowLong'
15.79 hrs.Function: 'JetCommitTransaction'
Function group: 'Extensible Storage Engine (ESE, Jet Blue)'
 Example: 'GDI+: printing image file'
19.77 hrs.Example: 'Copying picture of the active form to the Clipboard using Enhanced Metafile API functions'
22.45 hrs.Example: 'Adding supplementary data to AVI files'
 Function: 'GetWindow'
 Example: 'Using the ChooseColor function'
Google
Advertise here!