Using Win32 functions in Visual FoxPro Image Gallery
Code examples:
Custom GDI+ class
How to make a VFP form fading out when released (GDI version)
How to put a horizontal text scrolling on the form (a news line, marquee)
GDI+: copying to the Clipboard (a) image of active FoxPro window/form, (b) image file
Obtaining names and positions for shortcuts located on the Windows Desktop
Storing content of the Clipboard to a bitmap file
Placing an arbitrary rectangular area of main VFP window on the Clipboard
GDI+: Implementing image scrolling with inertia
Enumerating devices installed on the local machine
How to copy the image of a form to the Clipboard using Bitmap API functions
Creating a clipping region from the path selected into the device context of a form
Splash Screen for the VFP application
Browsing Windows Known Folders (Special Folders)
How to find which fonts Windows uses for drawing captions, menus and message boxes
Vertical Label control
Class for sound recording
Round FoxPro form
Reading and setting system access privileges for the current process
Subclassing CommandButton control to create BackColor property
Listing child windows for the Windows desktop
Scanning the hierarchy of child windows down from the main VFP window
Using File Mapping for enumerating files opened by Visual FoxPro
How to print picture stored in enhanced-format metafile (*.emf)
Winsock: connecting to a news server (NNTP, port 119)
How to obtain Content-Type value for a file type from the System Registry

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:
The code below retrieves list of content-type values with corresponding file extensions from HKEY_CLASSES_ROOT\MIME\Database\Content Type. It links, for example, text/html to .htm file type.

Content-type value for a particular file type (reversed lookup) can be obtained from corresponding sub-key of HKEY_CLASSES_ROOT. For example, for .html read values of HKEY_CLASSES_ROOT\.html key.

See also:
  • How to find an application associated with the file name
  • Displaying the associated icons and descriptions for files and folders
  • How to view system icons for the classes installed on the local machine

  • DO decl
    #DEFINE KEY_READ 0x20019
    #DEFINE KeyMIME "MIME\Database\Content Type"
    #DEFINE KeyClasses "SOFTWARE\Classes"
    #DEFINE KeyExtension "Extension"
    CREATE CURSOR cs (ext C(10), CLSID C(50), contenttype C(50),;
        checktype C(50), filetype1 C(100), filetype2 C(100))
    LOCAL hKey, nResult, nIndex, cBuffer, nResult, hSubkey,;
        cExtension, cCLSID, cContentType, cFiletype, cFiletype2
    nResult = RegOpenKeyEx(HKEY_CLASSES_ROOT, KeyMIME, 0,;
        KEY_READ, @hKey)
    IF nResult <> ERROR_SUCCESS
        ? "RegOpenKeyEx failed with error code: " + nResult
    * enumerating subkeys of
    * HKEY_CLASSES_ROOT\MIME\Database\Content Type
    DO WHILE .T.
        cBuffer = REPLICATE(CHR(0), 512)
        nResult = RegEnumKey(hKey, nIndex, @cBuffer, Len(cBuffer))
        IF nResult <> ERROR_SUCCESS
        cBuffer = SUBSTR(cBuffer, 1, AT(Chr(0),cBuffer)-1)
        INSERT INTO cs (contenttype) VALUES (m.cBuffer)
        hSubkey = 0
        IF RegOpenKeyEx(hKey, cBuffer, 0,;
            KEY_READ, @hSubkey) = ERROR_SUCCESS
            cExtension = GetKeyValue(hSubkey, KeyExtension)
            cCLSID = GetKeyValue(hSubkey, KeyCLSID)
            REPLACE cs.ext WITH cExtension, cs.CLSID WITH m.cCLSID
            = RegCloseKey(hSubkey)
        nIndex = nIndex + 1
    = RegCloseKey(hKey)
    * retrieving content type and file type values
    SELECT cs
        cExtension = ALLTRIM(cs.ext)
        cContentType = GetContentType(m.cExtension)
        REPLACE checktype WITH m.cContentType
        cFiletype1 = GetDefaultKeyValue(HKEY_CLASSES_ROOT,;
        IF EMPTY(cFiletype1)
            cFiletype2 = ""
            cFiletype2 = GetDefaultKeyValue(HKEY_LOCAL_MACHINE,;
                KeyClasses + "\" + m.cFiletype1)
        REPLACE filetype1 WITH m.cFiletype1,;
            filetype2 WITH m.cFiletype2
    SELECT cs
    GO TOP
    * end of main
    FUNCTION GetKeyValue(hKey, cValueName)
        LOCAL nIndex, cName, nNameSize, nType,;
            cBuffer, nBufsize, nResult
        STORE 0 TO nIndex, nType
        DO WHILE .T.
            STORE 4096 TO nNameSize, nBufsize
            STORE REPLICATE(CHR(0), nBufsize) TO cName, cBuffer
            nResult = RegEnumValue(hKey, nIndex, @cName, @nNameSize,;
                0, @nType, @cBuffer, @nBufsize)
            IF nResult = ERROR_SUCCESS
                cName = SUBSTR(cName, 1, AT(CHR(0), cName)-1)
                IF UPPER(ALLTRIM(cValueName)) == UPPER(ALLTRIM(cName))
                    RETURN SUBSTR(cBuffer, 1, AT(CHR(0), cBuffer)-1)
                RETURN ""
            nIndex = nIndex + 1
    RETURN ""
    FUNCTION GetDefaultKeyValue(hParent, cSubkey)
        LOCAL nResult, hKey, cValue
        IF RegOpenKeyEx(hParent,;
            m.cSubkey, 0, KEY_READ, @hKey) = 0
            cValue = GetKeyValue(hKey, "")
            = RegCloseKey(m.hKey)
            cValue = ""
    RETURN m.cValue
    FUNCTION GetContentType(cExt)
        LOCAL hKey, cContentType, nResult
        nResult = RegOpenKeyEx(HKEY_CLASSES_ROOT,;
            m.cExt, 0, KEY_READ, @hKey)
        IF nResult <> 0
            RETURN ""
        cContentType = GetKeyValue(hKey, "Content Type")
        = RegCloseKey(hKey)
    RETURN m.cContentType
    PROCEDURE decl
        DECLARE INTEGER RegCloseKey IN advapi32 INTEGER hKey
        DECLARE INTEGER RegOpenKeyEx IN advapi32;
            INTEGER hKey, STRING lpSubKey, INTEGER ulOptions,;
            INTEGER samDesired, INTEGER @phkResult
        DECLARE INTEGER RegEnumValue IN advapi32;
            INTEGER hKey, INTEGER dwIndex, STRING @lpValueName,;
            INTEGER @lpcValueName, INTEGER lpReserved, INTEGER @lpType,;
            STRING @lpData, INTEGER @lpcbData
        DECLARE INTEGER RegEnumKey IN advapi32;
            INTEGER hKey, INTEGER dwIndex, STRING @lpName,;
            INTEGER cchName

    User rating: 0/10 (0 votes)
    Rate this code sample:
    • ~
    3734 bytes  
    Created: 2004-09-03 08:23:41  
    Modified: 2010-05-13 09:58:39  
    Visits in 7 days: 101  
    Listed functions:
    Printer friendly API declarations
    My comment:
    Code similar to the above I used in FoxPro SendEmail class. To assemble multi-part email message, you need to know content-type value for each file attachment to encode the file as well as to add this value as SMTP header.

    Same should be true for files transferred to remote server through HTTP POST requests.

    * * *
    Question: how to obtain file type, the one Explorer displays in Type column, for a given extension?


    Step 1. Read default value for HKEY_CLASSES_ROOT\.vbw

    Step 2. Read default value for HKEY_CLASSES_ROOT\VisualBasic.VBWFile or for HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VisualBasic.VBWFile

    Word Index links for this example:
    Translate this page:
      Spanish    Portuguese    German    French    Italian offers instant, free translations of text or web pages.
    User Contributed Notes:
    There are no notes on this subject.

    Copyright 2001-2015 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.5.44), the Open Source standard SQL database, AceHTML Freeware Version 4, freeware HTML Editor of choice.   Hosted by Korax Online Inc.
    Advertise here!