[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    {
    From: vincze@dseg.ti.com (MICHAEL A VINCZE 0171847)

    Well after posting the question about how to create a Windows
    File Manager extension and not getting any responses, I figured
    that not a lot of people know how to do.  So after several hours,
    as typical with translating something from C to Pascal, I finally
    got the following example to work.  Note that the example consists
    of four files:

      constant.pas
      xtension.pas
      xtension.rc
      icon.zip     <- this is uuencoded here.

    Just FYI one of the hardest items to figure out was the parameter info
    for the FMExtensionProc function.  The Borland supplied WFEXT.PAS file
    is totally bogus.  The key was to pass lParam by reference, and not
    by value.  Hence the following:

      function FMExtensionProc (Handle: HWnd; Msg: WORD; var lParam: Longint):
      HMENU; export;                                     ^^^

    Evidently, the File Manager allocates space for a TFMS_LOAD structure (record)
    and passes the address to this structure via the lParam parameter.  This should
    lead you to a rule of thumb for translating Windows C programs to Pascal.
    I leave the wording for the rule of thumb up to yourself to figure out.

    Best regards,
    Michael Vincze
    mav@asd470.dseg.ti.com

    ---------- snip ---------- snip ---------- snip ----------

    unit constant;

    interface

    const

      { menu items (must within the range of 1 to 99
      }
      IDM_STATUSWIN         =  10;
      IDM_GETFILESELLFN     =  15;
      IDM_GETDRIVEINFO      =  20;
      IDM_GETFOCUS          =  25;
      IDM_RELOADEXTENSIONS  =  30;
      IDM_REFRESHWINDOW     =  35;
      IDM_REFRESHALLWINDOWS =  40;
      IDM_ABOUTEXT          =  45;

      { dialog items
      }
      IDD_PATH              =  206;
      IDD_VOLUME            =  207;
      IDD_SHARE             =  208;
      IDD_TOTALSPACE        =  209;
      IDD_FREESPACE         =  210;

      IDD_SELFILECOUNT      =  201;
      IDD_SELFILESIZE       =  202;

      { miscellaneous items
      }
      STATUS_WIDTH          =  400;
      STATUS_HEIGHT         =  100;
      INFO_LINE_WIDTH       =  300;
      INFO_LINE_HEIGHT      =  18;
      INFO_LINE_X           =  10;
      INFO_LINE_Y           =  20;
      ID_STATUSTIMER        =  99;
      INFO_STR_LEN          =  50;
      TIMER_DURATION        =  1500;  { 1.5 seconds }
      PATH_NAME_LEN         =  260;
      VOLUME_NAME_LEN       =  14;
      SHARE_NAME_LEN        =  128;
      SMALL_STR_LEN         =  12;
      LONG_STR_LEN          =  60;

    implementation

    end.

    ---------- snip ---------- snip ---------- snip ----------

    library XTension;

    { Author:   Michael Vincze  07/30/94                              }
    {           vincze@lobby.ti.com                                   }
    {           mav@asd470.dseg.ti.com                                }
    {                                                                 }
    { The following File Manager extension is a translation from C.   }
    { The C code was taken from the Microsoft Product Support         }
    { Services, and obtained from the anonymous FTP site              }
    { ftp.microsoft.com with a file name of 4-23.zip.  The main       }
    { preamble of the original source has been preserved below.       }

    (*
    //***************************************************************************
    //
    //  Library:
    //      XTENSION.DLL
    //
    //
    //  Author:
    //      Microsoft Product Support Services.
    //
    //
    //  Purpose:
    //      XTENSION is a File Manager extension DLL.  An extension DLL adds
    //      a menu to File Manager, contains entry point that processes menu
    //      commands and notification messages sent by File Manager, and
    //      queries data and information about the File Manager windows.  The
    //      purpose of an extension DLL is to add administration support
    //      features to File Manager, for example, file and disk utilities.
    //      Up to five extension DLLs may be instaled at any one time.
    //
    //      XTENSION adds a menu called "Extension" to File manager and
    //      processes all the messages that are sent by File Manager to an
    //      extension DLL.  In order to retrieve any information, it sends
    //      messages to File Manager.  It also creates a topmost status window
    //      using the DLL's instance handle.
    //
    //
    //  Usage:
    //      File Manager installs the extensions that have entries in the
    //      [AddOns] section of the WINFILE.INI initialization file.  An entry
    //      consists of a tag and a value.  To load XTENSION.DLL as a File
    //      Manager extension, add the following to WINFILE.INI (assuming the
    //      DLL resides in c:\win\system):
    //
    //      [AddOns]
    //      SDK Demo Extension=c:\win\system\xtension.dll
    //
    //
    //  Menu Options:
    //      Following menu items belong to the "Extension" menu that is added
    //      to File Manager:
    //
    //      Status Window               - Shows/Hides status window
    //      Selected File(s) Size...    - Displays disk space taken by the files
    //      Selected Drive Info...      - Displays selected drive information
    //      Focused Item Info           - Displays the name of the focused item
    //      Reload Extension            - Reloads this extension
    //      Refresh Window              - Refreshes File Manager's active window
    //      Refresh All Windows         - Refreshes all the File Manager's windows
    //      About Extension...          - Displays About dialog
    //
    //
    //  More Info:
    //      Query on-line help on: FMExtensionProc, File Manager Extensions
    //
    //
    // COPYRIGHT:
    //
    //   (C) Copyright Microsoft Corp. 1993.  All rights reserved.
    //
    //   You have a royalty-free right to use, modify, reproduce and
    //   distribute the Sample Files (and/or any modified version) in
    //   any way you find useful, provided that you agree that
    //   Microsoft has no warranty obligations or liability for any
    //   Sample Application Files which are modified.
    //
    //***************************************************************************
    *)

    {$D File Manager Extension DLL}

    {$R XTENSION}

    uses
      WinTypes,
      WinProcs,
      Win31,
      WFExt,
      Constant;

    const
      gszDllWndClass    : PChar   = 'ExtenStatusWClass';  { Class name for status
    window      }
      ghwndStatus       : HWND    = 0;                    { Status window
              }
      ghwndInfo         : HWND    = 0;                    { Child window of status
    window     }
      ghDllInst         : THANDLE = 0;                    { DLL's instance handle
              }
      ghMenu            : HMENU   = 0;                    { Extension's menu handle
              }
      gwMenuDelta       : WORD    = 0;                    { Delta for extension's
    menu items  }
      gbStatusWinVisible: BOOLEAN = FALSE;                { Flag for status window
              }
                                                          {   FALSE=Hidden,
    TRUE=Visible     }

    { type to handle passing Longint types to wvsprintf
    }
    type
      TLongRec = record
        LO: WORD;
        HI: WORD;
        end;

    procedure DisplayStatus (Handle: HWND; wEvent: Longint);
    var
      wFileCount: Longint;
      szInfo    : array [0..INFO_STR_LEN] of CHAR;
      lFileCount: TLongRec;
    begin
    if gbStatusWinVisible = TRUE then
      begin
      case wEvent of

        FMEVENT_INITMENU:
          SetWindowText (ghwndInfo, 'Extension menu selected...');

        FMEVENT_SELCHANGE:
          begin
          wFileCount := SendMessage (Handle, FM_GETSELCOUNTLFN, 0, 0);
          lFileCount.LO := LOWORD (wFileCount);
          lFileCount.HI := HIWORD (wFileCount);
          wvsprintf (szInfo, 'File selection changed: %ld item(s) selected...',
    lFileCount);
          SetWindowText (ghwndInfo, szInfo);
          end;

        FMEVENT_UNLOAD:
          SetWindowText (ghwndInfo, 'Unloading extension...');

        FMEVENT_USER_REFRESH:
          SetWindowText (ghwndInfo, 'Refreshing window(s)...');

        end;

      { Timer to erase the info after the elapsed time
      }
      SetTimer (ghwndStatus, ID_STATUSTIMER, TIMER_DURATION, nil);
      end;
    end;

    function StatusWndProc (hWin: HWND; uMessage: WORD; wParam: WORD; lParam:
    Longint): Longint; export;
    begin
    case uMessage of

      WM_TIMER:
        { This timer is used to erase info from the
          status window at the elapsed time
        }
        if wParam = ID_STATUSTIMER then
          begin
          KillTimer (hWin, wParam);
          SetWindowText (ghwndInfo, '');
          end;

      else
        begin
        StatusWndProc := DefWindowProc (hWin, uMessage, wParam, lParam);
        exit;
        end;

      end;

    StatusWndProc := 0;
    end;

    function CreateStatusWindow (hwndExtension: HWND): BOOLEAN;
    var
      wc: TWNDCLASS;
    begin
    wc.style            := 0;
    wc.lpfnWndProc      := @StatusWndProc;
    wc.cbClsExtra       := 0;
    wc.cbWndExtra       := 0;
    wc.hInstance        := ghDllInst;
    wc.hIcon            := LoadIcon (0, IDI_APPLICATION);
    wc.hCursor          := LoadCursor (0, IDC_ARROW);
    wc.hbrBackground    := COLOR_WINDOW + 1;
    wc.lpszMenuName     := nil;
    wc.lpszClassName    := gszDllWndClass;

    if not RegisterClass (wc) then
      begin
      CreateStatusWindow := FALSE;
      exit;
      end;

    ghwndStatus := CreateWindowEx (WS_EX_TOPMOST or WS_EX_DLGMODALFRAME,
                                   gszDllWndClass,
                                   'File Manager Extension',
                                   WS_POPUP or WS_CAPTION,
                                   CW_USEDEFAULT,
                                   CW_USEDEFAULT,
                                   STATUS_WIDTH,
                                   STATUS_HEIGHT,
                                   hwndExtension,
                                   0,
                                   ghDllInst,
                                   nil);

    ghwndInfo := CreateWindow ('STATIC',
                               nil,
                               WS_CHILD or WS_VISIBLE,
                               INFO_LINE_X,
                               INFO_LINE_Y,
                               INFO_LINE_WIDTH,
                               INFO_LINE_HEIGHT,
                               ghwndStatus,
                               1,
                               ghDllInst,
                               nil);

    { note I changed the logic from the original code below to return TRUE iff both
      windows got created.
    }
    CreateStatusWindow := (ghwndStatus <> 0) and (ghwndInfo <> 0);
    end;

    function DriveInfoDlgProc (hDlg: HWND; uMessage: WORD; wParam: WORD; lParam:
    Longint): BOOLEAN; export;
    var
      fmsDriveInfo: TFMS_GETDRIVEINFO;
      szTempString: array [0..SMALL_STR_LEN] of Char;
      lTotalSpace : TLongRec;
      lFreeSpace  : TLongRec;
    begin

    ú
    (continued next message)

    Ä Area: U-PASCAL      |61 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
      Msg#: 6684                                         Date: 08-04-94  07:28
      From: Vincze@dseg.ti.com                           Read: Yes    Replied: No
        To: All                                          Mark:
      Subj: [A] Windows File Manager
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    @SUBJECT:[A] Windows File Manager Extension
    ú(Continued from last message)
    case  uMessage of

      WM_INITDIALOG:

        begin
        SendMessage (lParam, FM_GETDRIVEINFO, 0, Longint (PFMS_GETDRIVEINFO
    (@fmsDriveInfo)));

        { Convert OEM characters to Windows characters
        }
        OemToAnsi (fmsDriveInfo.szPath, fmsDriveInfo.szPath);
        OemToAnsi (fmsDriveInfo.szVolume, fmsDriveInfo.szVolume);

        if fmsDriveInfo.szShare[0] <> #0 then
          OemToAnsi (fmsDriveInfo.szShare, fmsDriveInfo.szShare)
        else
          lstrcpy (fmsDriveInfo.szShare, '< Not a Share >');

        if fmsDriveInfo.szVolume[0] <> #0 then
          SetDlgItemText (hDlg, IDD_VOLUME, fmsDriveInfo.szVolume)
        else
          SetDlgItemText (hDlg, IDD_VOLUME, '< No volume label >');

        SetDlgItemText (hDlg, IDD_PATH, fmsDriveInfo.szPath);
        SetDlgItemText (hDlg, IDD_SHARE, fmsDriveInfo.szShare);

        { When a -1 is returned for either dwTotalSpace or dwFreeSpace,
          the extension will have compute that number on its own.
        }
        if fmsDriveInfo.dwTotalSpace = -1 then
          SetDlgItemText (hDlg, IDD_TOTALSPACE, '< Info. not available >')
        else
          begin
          lTotalSpace.LO := LOWORD (fmsDriveInfo.dwTotalSpace);
          lTotalSpace.HI := HIWORD (fmsDriveInfo.dwTotalSpace);
          wvsprintf (szTempString, '%ld', lTotalSpace);
          SetDlgItemText (hDlg, IDD_TOTALSPACE, szTempString);
          end;

        if fmsDriveInfo.dwFreeSpace = -1 then
          SetDlgItemText (hDlg, IDD_FREESPACE, '< Info. not available >')
        else
          begin
          lFreeSpace.LO := LOWORD (fmsDriveInfo.dwFreeSpace);
          lFreeSpace.HI := HIWORD (fmsDriveInfo.dwFreeSpace);
          wvsprintf (szTempString, '%ld', lFreeSpace);
          SetDlgItemText (hDlg, IDD_FREESPACE, szTempString);
          end;

        DriveInfoDlgProc := TRUE;
        exit;
        end;

      WM_COMMAND:

        case wParam of

          IDOK,
          IDCANCEL:
            begin
            EndDialog (hDlg, 1);
            DriveInfoDlgProc := TRUE;
            exit;
            end;

          end;

      end;

    DriveInfoDlgProc := FALSE;
    end;

    function SelFileInfoDlgProc (hDlg: HWND; uMessage: WORD; wParam: WORD; lParam:
    Longint): BOOLEAN; export;
    const
      fmsFileInfo  : TFMS_GETFILESEL = (wTime: 0);
    var
      wSelFileCount: WORD;
      lSelFileCount: TLongRec;
      wIndex       : WORD;
      szTempString : array [0..SMALL_STR_LEN] of Char;
      dwTotalSize  : Longint;
      lTotalSize   : TLongRec;
    begin
    case uMessage of

      WM_INITDIALOG:
        begin
        wSelFileCount := SendMessage (lParam, FM_GETSELCOUNTLFN, 0, 0);
        lSelFileCount.LO := LOWORD (wSelFileCount);
        lSelFileCount.HI := HIWORD (wSelFileCount);
        wvsprintf (szTempString, '%ld', lSelFileCount);
        SetDlgItemText (hDlg, IDD_SELFILECOUNT, szTempString);
        dwTotalSize := 0;
        if wSelFileCount > 0 then
          for wIndex := 0 to wSelFileCount -1 do
            begin
            SendMessage (HWND (lParam), FM_GETFILESELLFN, wIndex, Longint
    (PFMS_GETFILESEL (@fmsFileInfo)));
            Inc (dwTotalSize, fmsFileInfo.dwSize);
            end;
        lTotalSize.LO := LOWORD (dwTotalSize);
        lTotalSize.HI := HIWORD (dwTotalSize);
        wvsprintf (szTempString, '%ld bytes', lTotalSize);
        SetDlgItemText (hDlg, IDD_SELFILESIZE, szTempString);
        SelFileInfoDlgProc := TRUE;
        exit;
        end;

      WM_COMMAND:
        case wParam of

          IDOK,
          IDCANCEL:
            begin
            EndDialog (hDlg, 1);
            SelFileInfoDlgProc := TRUE;
            exit;
            end;

          end;

      end;
    SelFileInfoDlgProc := FALSE;
    end;

    function AboutDlgProc (hDlg: HWND; uMessage: WORD; wParam: WORD; lParam:
    Longint): BOOLEAN; export;
    begin
    case uMessage of

      WM_INITDIALOG:
        begin
        AboutDlgProc := TRUE;
        exit;
        end;

      WM_COMMAND:
        case wParam of

          IDOK,
          IDCANCEL:
            begin
            EndDialog (hDlg, 1);
            AboutDlgProc := TRUE;
            exit;
            end;

          end;

      end;
    AboutDlgProc := FALSE;
    end;

    function FMExtensionProc (Handle: HWnd; Msg: WORD; var lParam: Longint): HMENU;
    export;
    var
      lpload      : PFMS_LOAD;
      lpDialogProc: TFARPROC;
      wFocusedItem: WORD;
    begin

    case Msg of

      { ****************** File Manager Events
      }

      FMEVENT_INITMENU:
        DisplayStatus (Handle, Msg);

      FMEVENT_LOAD:
        { Create status window
        }
        begin
        if ghwndStatus = 0 then
          begin
          if not CreateStatusWindow (Handle) then
            begin
            MessageBox (Handle,
              'Extension not loaded.  Status window creation error.',
              'File Manager Extension', MB_OK or MB_ICONASTERISK);

            { Unload
            }
            end;
          end;

        lpload := @lParam;

        { Assign the menu handle from the DLL's resource
        }
        ghMenu := LoadMenu (ghDllInst, 'ExtensionMenu');

        lpload^.Menu := ghMenu;

        { This is the delta we are being assigned.
        }
        gwMenuDelta := lpload^.wMenuDelta;

        { Size of the load structure
        }
        lpload^.dwSize := sizeof (TFMS_LOAD);

        { Assign the popup menu name for this extension
        }
        lstrcpy (lpload^.szMenuName, '&Extension');

        MessageBox (Handle, 'File Manager Extension will be loaded.',
          'File Manager Extension', MB_OK);

        { Return that handle
        }

        FMExtensionProc := ghMenu;
        exit;
        end;

      FMEVENT_SELCHANGE:
        DisplayStatus (Handle, Msg);

      FMEVENT_UNLOAD:
        begin
        DisplayStatus (Handle, Msg);
        MessageBox (Handle, 'File Manager Extension will be unloaded.',
          'File Manager Extension', MB_OK);

        { Since the status window was created using DLL's
          instance handle, we will have to destroy it on our own.
        }
        DestroyWindow (ghwndStatus);
        end;

      FMEVENT_USER_REFRESH:
        DisplayStatus (Handle, Msg);

      { ****************** Extension menu commands
      }

      IDM_STATUSWIN:
        begin
        if GetMenuState (ghMenu, gwMenuDelta + Msg, MF_BYCOMMAND) and MF_CHECKED >
    0 then
          begin
          gbStatusWinVisible := FALSE;

          { Hide the status window
          }
          ShowWindow (ghwndStatus, SW_HIDE);

          { Remove the checkmark
          }
          CheckMenuItem (ghMenu, gwMenuDelta + IDM_STATUSWIN, MF_UNCHECKED or
    MF_BYCOMMAND);

          end
        else
          begin
          gbStatusWinVisible := TRUE;

          { Show the status window
          }
          ShowWindow (ghwndStatus, SW_SHOW);

          { Add the checkmark
          }
          CheckMenuItem (ghMenu, gwMenuDelta + IDM_STATUSWIN, MF_CHECKED or
    MF_BYCOMMAND);
          end;
        end;

      IDM_GETDRIVEINFO:
        begin
        lpDialogProc := @DriveInfoDlgProc;
        DialogBoxParam (ghDllInst, 'DriveInfo', Handle, lpDialogProc, Handle);
        end;

      IDM_GETFILESELLFN:
        begin
        lpDialogProc := @SelFileInfoDlgProc;
        DialogBoxParam (ghDllInst, 'FileInfo', Handle, lpDialogProc, Handle);
        end;

      IDM_GETFOCUS:
        begin
        wFocusedItem := SendMessage (Handle, FM_GETFOCUS, 0, 0);

        case wFocusedItem of
          FMFOCUS_DIR:
            MessageBox (Handle, 'Focus is on the DIRECTORY window.',
              'Focus Information', MB_OK);

          FMFOCUS_TREE:
            MessageBox (Handle, 'Focus is on the TREE window.',
              'Focus Information', MB_OK);

          FMFOCUS_DRIVES:
            MessageBox (Handle, 'Focus is on the DRIVE bar.',
              'Focus Information', MB_OK);

          FMFOCUS_SEARCH:

            MessageBox (Handle, 'Focus is on the SEARCH RESULTS window.',
              'Focus Information', MB_OK);

          end;

        end;

      IDM_REFRESHWINDOW,
      IDM_REFRESHALLWINDOWS:
        { Refresh one or all the windows
        }
        begin
        if Msg = IDM_REFRESHALLWINDOWS then
          SendMessage (Handle, FM_REFRESH_WINDOWS, 1, 0)
        else
          SendMessage (Handle, FM_REFRESH_WINDOWS, 0, 0);
        end;

      IDM_RELOADEXTENSIONS:
        PostMessage (Handle, FM_RELOAD_EXTENSIONS, 0, 0);

      IDM_ABOUTEXT:
        begin
        lpDialogProc := @AboutDlgProc;
        DialogBox (ghDllInst, 'AboutExtension', Handle, lpDialogProc);
        end;

      end;

    FMExtensionProc := 0;
    end;

    exports
      FMEXTENSIONPROC;

    begin
    ghDllInst := hInstance;
    end.

    ú
    (continued next message)

    Ä Area: U-PASCAL      |61 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
      Msg#: 6685                                         Date: 08-04-94  07:28
      From: Vincze@dseg.ti.com                           Read: Yes    Replied: No
        To: All                                          Mark:
      Subj: [A] Windows File Manager
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    @SUBJECT:[A] Windows File Manager Extension
    ú(Continued from last message)
    ---------- snip ---------- snip ---------- snip ----------

    #include "constant.pas"

    ExtensionIcon   ICON    xtension.ico

    ExtensionMenu MENU
    BEGIN
      MENUITEM    "&Status Window",           IDM_STATUSWIN
      MENUITEM    SEPARATOR
      MENUITEM    "Selected &File(s) Size...",IDM_GETFILESELLFN
      MENUITEM    "Selected &Drive Info...",  IDM_GETDRIVEINFO
      MENUITEM    "Focused &Item Info...",    IDM_GETFOCUS
      MENUITEM    SEPARATOR
      MENUITEM    "Reload &Extension",        IDM_RELOADEXTENSIONS
      MENUITEM    "&Refresh &Window",          IDM_REFRESHWINDOW
      MENUITEM    "Refresh All &Windows",      IDM_REFRESHALLWINDOWS
      MENUITEM    SEPARATOR
      MENUITEM    "&About Extension...",      IDM_ABOUTEXT
    END

    FileInfo DIALOG 22, 17, 144, 71
    STYLE DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
    CAPTION "Selected File Information"
    FONT 8, "Helv"
    BEGIN
      CONTROL "OK", IDOK, "BUTTON", WS_GROUP, 56, 49, 32, 14
      LTEXT "File(s) selected:", -1, 10, 7, 64, 8
      LTEXT "Disk space taken:", -1, 10, 20, 64, 8
      LTEXT " ", IDD_SELFILECOUNT, 77, 7, 56, 8
      LTEXT " ", IDD_SELFILESIZE, 77, 20, 56, 8
    END

    AboutExtension DIALOG 8, 21, 237, 215
    STYLE DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
    CAPTION "About Extension"
    FONT 8, "Helv"
    BEGIN
      ICON "ExtensionIcon", -1, 5, 5, 16, 21
      LTEXT "File Manager Extension DLL", -1, 34, 5, 150, 8
      LTEXT "Version 1.0", -1, 34, 15 150, 8
      LTEXT "Copyright \251 Microsoft Corp., 1992", -1, 34, 25, 150, 8
      LTEXT "A File Manager extension is a Windows DLL that adds a menu to", -1, 5,
    40, 232, 8
      LTEXT "File Manager, contains entry point that processes menu commands", -1,
    5, 50, 232, 8
      LTEXT "and notification messages sent by File Manager, and queries data", -1,
    5, 60, 232, 8
      LTEXT "and information about the File Manager windows.", -1, 5, 70, 232, 8
      LTEXT "Menu Options:", -1, 5, 85, 237, 8
      LTEXT "Status Window\t\t- Shows/Hides status window", -1, 5, 98, 230, 8
      LTEXT "Selected File(s) Size...\t- Displays disk space taken by the files",
    -1, 5, 108, 230, 8
      LTEXT "Selected Drive Info...\t- Displays selected drive information", -1, 5,
    118, 230, 8
      LTEXT "Focused Item Info...\t- Displays the name of the focused item", -1, 5,
    128, 230, 8
      LTEXT "Reload Extension\t- Reloads this extension", -1, 5, 138, 230, 8
      LTEXT "Refresh Window\t- Refreshes File Manager's active window", -1, 5, 148,
    230, 8
      LTEXT "Refresh All Windows\t- Refreshes all the File Manager's windows", -1,
    5, 158, 230, 8
      LTEXT "About Extension...\t- Displays this dialog", -1, 5, 168, 230, 8
      CONTROL "OK", IDOK, "BUTTON", WS_GROUP, 101, 190, 32, 14
    END

    DriveInfo DIALOG 22, 17, 188, 85
    STYLE DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
    CAPTION "Selected Drive Information"
    FONT 8, "Helv"
    BEGIN
      CONTROL "OK", IDOK, "BUTTON", WS_GROUP, 77, 65, 32, 14
      LTEXT "Path:", -1, 7, 6, 46, 8
      LTEXT "Volume:", -1, 7, 16, 46, 8
      LTEXT "Share:", -1, 7, 26, 46, 8
      LTEXT "Total KBs:", -1, 7, 36, 46, 8
      LTEXT "Free KBs:", -1, 7, 46, 46, 8
      LTEXT " ", IDD_PATH, 61, 6, 120, 8
      LTEXT " ", IDD_VOLUME, 61, 16, 120, 8
      LTEXT " ", IDD_SHARE, 61, 26, 120, 8
      LTEXT " ", IDD_TOTALSPACE, 61, 36, 120, 8
      LTEXT " ", IDD_FREESPACE, 61, 46, 120, 8
    END

    ---------- snip ---------- snip ---------- snip ----------

    begin 755 icon.zip
    M4$L#!!0    ( "IC;!E>O+@&9@$  #X$   ,    6%1%3E-)3TXN24-/K9,]
    M;H- $(4'B!4D%\X-0A6E1.( ^!2IJ;B!:V]E(5ERKD))EST*E447I"B1"\>;
    M-[,_%I:C1%$>/-8SWWH81D 444Q9%A,KCX@>L&;9G<0#TD_(/7(.7A+OCX3Y
    MY5+&F/ [,4=4GU%LWA6LQ?U*QZ\KN_H<S71B/F4-N1_VH@$=F9/&#9>T-NJB
    M!W.@"";V&B[A^__V$3[!AJU@I^F\;J0G%5^?%XB<I)1=^. 4+EIK?AHY\5!V
    MX<-,Y_R=YELK-;"(4I=O^49-1?/28K4_#/U04UIVK+;=G':JJ2MPW(;YF()7
    MX$F1,Q\]1RQ\<!R%)]S5]_^7\8RA?B'*U1Y)YIU5NZGKBKF?D/0O]6U_4N9<
    MOTF9?S!'OFN[? <]A_Z:0C:,OO^NR.U\RBVNS&WLZY^Y[3=PUV_@;KZ>+_P+
    MX&)R?/OF8O^ +RX.&T;ZBXQ]"1;P+7]NWW^5OU5BKEG!&N[A$?;Z E!+ 0(4
    M !0    ( "IC;!E>O+@&9@$  #X$   ,            (         !85$5.
    >4TE/3BY)0T]02P4&      $  0 Z    D $

    end

    ---------- END ---------- END ---------- END ---------- END ----------

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]