704 lines
25 KiB
C
704 lines
25 KiB
C
|
/*++ BUILD Version: 0002 - Increment this if a change has global effects
|
||
|
|
||
|
/****************************************************************************/
|
||
|
/* */
|
||
|
/* PROGMAN.H - */
|
||
|
/* */
|
||
|
/* Include for the Windows Program Manager */
|
||
|
/* */
|
||
|
/****************************************************************************/
|
||
|
|
||
|
#ifndef RC_INVOKED
|
||
|
#include <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
#endif
|
||
|
|
||
|
#include <setjmp.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <windows.h>
|
||
|
#include <winuserp.h>
|
||
|
|
||
|
#ifndef RC_INVOKED
|
||
|
#include "port1632.h"
|
||
|
#undef RDW_VALIDMASK
|
||
|
#endif
|
||
|
|
||
|
#include <pmvdm.h>
|
||
|
|
||
|
#include "pmhelp.h"
|
||
|
#include "shellapi.h"
|
||
|
#include "shlapip.h"
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
/* */
|
||
|
/* Typedefs */
|
||
|
/* */
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct tagITEM {
|
||
|
struct tagITEM *pNext; /* link to next item */
|
||
|
int iItem; /* index in group */
|
||
|
DWORD dwDDEId; /* id used for Apps querying Progman */
|
||
|
/* for its properties via DDE */
|
||
|
RECT rcIcon; /* icon rectangle */
|
||
|
HICON hIcon; /* the actual icon */
|
||
|
RECT rcTitle; /* title rectangle */
|
||
|
} ITEM, *PITEM;
|
||
|
|
||
|
typedef struct tagGROUP {
|
||
|
struct tagGROUP *pNext; /* link to next group */
|
||
|
HWND hwnd; /* hwnd of group window */
|
||
|
HANDLE hGroup; /* global handle of group object */
|
||
|
PITEM pItems; /* pointer to first item */
|
||
|
LPTSTR lpKey; /* name of group key */
|
||
|
WORD wIndex; /* index in PROGMAN.INI of group */
|
||
|
BOOL fRO; /* group file is readonly */
|
||
|
BOOL fCommon; /* group is a common group vs a personal group */
|
||
|
FILETIME ftLastWriteTime;
|
||
|
HBITMAP hbm; /* bitmap 'o icons */
|
||
|
WORD fLoaded;
|
||
|
PSECURITY_DESCRIPTOR pSecDesc;
|
||
|
} GROUP, *PGROUP;
|
||
|
|
||
|
/*
|
||
|
* .GRP File format structures -
|
||
|
*/
|
||
|
typedef struct tagGROUPDEF {
|
||
|
DWORD dwMagic; /* magical bytes 'PMCC' */
|
||
|
DWORD cbGroup; /* length of group segment */
|
||
|
RECT rcNormal; /* rectangle of normal window */
|
||
|
POINT ptMin; /* point of icon */
|
||
|
WORD wCheckSum; /* adjust this for zero sum of file */
|
||
|
WORD nCmdShow; /* min, max, or normal state */
|
||
|
DWORD pName; /* name of group */
|
||
|
/* these four change interpretation */
|
||
|
WORD cxIcon; /* width of icons */
|
||
|
WORD cyIcon; /* hieght of icons */
|
||
|
WORD wIconFormat; /* planes and BPP in icons */
|
||
|
WORD wReserved; /* This word is no longer used. */
|
||
|
|
||
|
WORD cItems; /* number of items in group */
|
||
|
WORD Reserved1;
|
||
|
DWORD Reserved2;
|
||
|
DWORD rgiItems[1]; /* array of ITEMDEF offsets */
|
||
|
} GROUPDEF, *PGROUPDEF;
|
||
|
typedef GROUPDEF *LPGROUPDEF;
|
||
|
|
||
|
typedef struct tagITEMDEF {
|
||
|
POINT pt; /* location of item icon in group */
|
||
|
WORD iIcon; /* id of item icon */
|
||
|
WORD wIconVer; /* icon version */
|
||
|
WORD cbIconRes; /* size of icon resource */
|
||
|
WORD wIconIndex; /* index of the item icon (not the same as the id) */
|
||
|
DWORD pIconRes; /* offset of icon resource */
|
||
|
DWORD pName; /* offset of name string */
|
||
|
DWORD pCommand; /* offset of command string */
|
||
|
DWORD pIconPath; /* offset of icon path */
|
||
|
} ITEMDEF, *PITEMDEF;
|
||
|
typedef ITEMDEF *LPITEMDEF;
|
||
|
|
||
|
|
||
|
/* the pointers in the above structures are short pointers relative to the
|
||
|
* beginning of the segments. This macro converts the short pointer into
|
||
|
* a long pointer including the proper segment/selector value. It assumes
|
||
|
* that its argument is an lvalue somewhere in a group segment, for example,
|
||
|
* PTR(lpgd->pName) returns a pointer to the group name, but k=lpgd->pName;
|
||
|
* PTR(k) is obviously wrong as it will use either SS or DS for its segment,
|
||
|
* depending on the storage class of k.
|
||
|
*/
|
||
|
#define PTR(base, offset) (LPBYTE)((PBYTE)base + offset)
|
||
|
|
||
|
/* PTR2 is used for those cases where a variable already contains an offset
|
||
|
* (The "case that doesn't work", above)
|
||
|
*/
|
||
|
#define PTR2(lp,offset) ((LPBYTE)MAKELONG(offset,HIWORD(lp)))
|
||
|
|
||
|
/* this macro is used to retrieve the i-th item in the group segment. Note
|
||
|
* that this pointer will NOT be NULL for an unused slot.
|
||
|
*/
|
||
|
#define ITEM(lpgd,i) ((LPITEMDEF)PTR(lpgd, lpgd->rgiItems[i]))
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
/* */
|
||
|
/* Tag Stuff */
|
||
|
/* */
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct _tag
|
||
|
{
|
||
|
WORD wID; // tag identifier
|
||
|
WORD dummy1; // need this for alignment!
|
||
|
int wItem; // (unde the covers 32 bit point!)item the tag belongs to
|
||
|
WORD cb; // size of record, including id and count
|
||
|
WORD dummy2; // need this for alignment!
|
||
|
BYTE rgb[1];
|
||
|
} PMTAG, FAR * LPPMTAG;
|
||
|
|
||
|
#define PMTAG_MAGIC GROUP_MAGIC
|
||
|
|
||
|
/* range 8000 - 80FF > global
|
||
|
* range 8100 - 81FF > per item
|
||
|
* all others reserved
|
||
|
*/
|
||
|
|
||
|
#define ID_MAINTAIN 0x8000
|
||
|
/* bit used to indicate a tag that should be kept even if the writer
|
||
|
* doesn't recognize it.
|
||
|
*/
|
||
|
|
||
|
#define ID_MAGIC 0x8000
|
||
|
/* data: the string 'TAGS'
|
||
|
*/
|
||
|
|
||
|
#define ID_WRITERVERSION 0x8001
|
||
|
/* data: string in the form [9]9.99[Z].99
|
||
|
*/
|
||
|
|
||
|
#define ID_APPLICATIONDIR 0x8101
|
||
|
/* data: ASCIZ string of directory where application may be
|
||
|
* located.
|
||
|
* this is defined as application dir rather than default dir
|
||
|
* since the default dir is explicit in the 3.0 command line and
|
||
|
* must stay there. The true "new information" is the application
|
||
|
* directory. If not present, search the path.
|
||
|
*/
|
||
|
|
||
|
#define ID_HOTKEY 0x8102
|
||
|
/* data: WORD hotkey index
|
||
|
*/
|
||
|
|
||
|
#define ID_MINIMIZE 0x8103
|
||
|
/* data none
|
||
|
*/
|
||
|
|
||
|
#define ID_NEWVDM 0x8104
|
||
|
/* data none
|
||
|
*/
|
||
|
|
||
|
#define ID_LASTTAG 0xFFFF
|
||
|
/* the last tag in the file
|
||
|
*/
|
||
|
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
/* */
|
||
|
/* For Icon Extraction */
|
||
|
/* */
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct _MyIconInfo {
|
||
|
HICON hIcon;
|
||
|
INT iIconId;
|
||
|
} MYICONINFO, *LPMYICONINFO;
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
/* */
|
||
|
/* Function Templates */
|
||
|
/* */
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
|
||
|
|
||
|
BOOL FAR PASCAL IsRemoteDrive(int);
|
||
|
BOOL FAR PASCAL IsRemovableDrive(int);
|
||
|
|
||
|
int FAR PASCAL MyMessageBox(HWND, WORD, WORD , LPTSTR , WORD);
|
||
|
BOOL FAR PASCAL AppInit(HANDLE, LPTSTR , int);
|
||
|
void FAR PASCAL BuildDescription(LPTSTR, LPTSTR);
|
||
|
WORD FAR PASCAL ExecProgram(LPTSTR, LPTSTR, LPTSTR, BOOL, DWORD, WORD, BOOL);
|
||
|
void FAR PASCAL ExecItem(PGROUP,PITEM,BOOL,BOOL);
|
||
|
WORD FAR PASCAL SelectionType(void);
|
||
|
BOOL APIENTRY ProgmanCommandProc(HWND, WPARAM, LPARAM);
|
||
|
void FAR PASCAL WriteINIFile(void);
|
||
|
void FAR PASCAL ArrangeItems(HWND);
|
||
|
void FAR PASCAL WriteGroupsSection(void);
|
||
|
LRESULT APIENTRY DDEMsgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
LRESULT APIENTRY AppIconDDEMsgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
LRESULT APIENTRY AppDescriptionDDEMsgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
LRESULT APIENTRY AppWorkingDirDDEMsgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
|
||
|
BOOL FAR PASCAL IsGroupReadOnly(LPTSTR szGroupKey, BOOL bCommonGroup);
|
||
|
LPGROUPDEF FAR PASCAL LockGroup(HWND);
|
||
|
void FAR PASCAL UnlockGroup(HWND);
|
||
|
LPITEMDEF FAR PASCAL LockItem(PGROUP, PITEM);
|
||
|
HICON FAR PASCAL GetItemIcon(HWND, PITEM);
|
||
|
HWND FAR PASCAL LoadGroupWindow(LPTSTR, WORD, BOOL);
|
||
|
PITEM FAR PASCAL CreateNewItem(HWND,LPTSTR,LPTSTR,LPTSTR,LPTSTR,WORD,BOOL,WORD,WORD,HICON,LPPOINT,DWORD);
|
||
|
HWND FAR PASCAL CreateNewGroup(LPTSTR, BOOL);
|
||
|
void FAR PASCAL DeleteItem(PGROUP, PITEM);
|
||
|
void FAR PASCAL DeleteGroup(HWND);
|
||
|
void FAR PASCAL ChangeGroupTitle(HWND, LPTSTR, BOOL);
|
||
|
void FAR PASCAL CreateItemIcons(HWND);
|
||
|
void FAR PASCAL GetItemText(PGROUP,PITEM,LPTSTR,int);
|
||
|
void FAR PASCAL InvalidateIcon(PGROUP,PITEM);
|
||
|
void FAR PASCAL ComputeIconPosition(PGROUP,POINT,LPRECT,LPRECT,LPTSTR);
|
||
|
void FAR PASCAL CalcGroupScrolls(HWND);
|
||
|
BOOL FAR PASCAL GroupCheck(PGROUP);
|
||
|
void FAR PASCAL UnloadGroupWindow(HWND);
|
||
|
void FAR PASCAL NukeIconBitmap(PGROUP pGroup);
|
||
|
|
||
|
WORD FAR PASCAL GroupFlag(PGROUP, PITEM, WORD);
|
||
|
WORD FAR PASCAL GetGroupTag(PGROUP, PITEM, WORD, LPTSTR, WORD);
|
||
|
|
||
|
VOID FAR PASCAL LoadAllGroups(VOID);
|
||
|
|
||
|
PITEM FAR PASCAL DuplicateItem(PGROUP,PITEM,PGROUP,LPPOINT);
|
||
|
|
||
|
void FAR PASCAL GetItemCommand(PGROUP,PITEM,LPTSTR,LPTSTR);
|
||
|
|
||
|
VOID APIENTRY RegisterDDEClasses(HANDLE);
|
||
|
INT MyDwordAlign(INT);
|
||
|
|
||
|
LRESULT APIENTRY GroupWndProc(HWND , UINT, WPARAM, LPARAM);
|
||
|
LRESULT APIENTRY ProgmanWndProc(HWND , UINT , WPARAM, LPARAM );
|
||
|
WORD FAR PASCAL MyDialogBox(WORD, HWND , DLGPROC );
|
||
|
|
||
|
INT_PTR APIENTRY ChooserDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY BrowseDlgProc(HWND, UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY RunDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY ExitDlgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
INT_PTR APIENTRY IconDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY NewItemDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY NewGroupDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY MoveItemDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY CopyItemDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY EditItemDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY EditGroupDlgProc(HWND, UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY AboutDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
INT_PTR APIENTRY HotKeyDlgProc(HWND , UINT , WPARAM , LPARAM );
|
||
|
BOOL APIENTRY ShutdownDialog(HANDLE, HWND);
|
||
|
INT_PTR APIENTRY NewLogoffDlgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
INT_PTR APIENTRY UpdateGroupsDlgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
VOID APIENTRY HandleDosApps
|
||
|
(
|
||
|
LPTSTR sz // Full path sans arguments.
|
||
|
);
|
||
|
DWORD APIENTRY ValidatePath
|
||
|
(
|
||
|
HWND hDlg,
|
||
|
LPTSTR szPath, // Path to item
|
||
|
LPTSTR szExePath, // Path to associated exe.
|
||
|
LPTSTR szDir // Path to working directory.
|
||
|
);
|
||
|
VOID APIENTRY GetDirectoryFromPath
|
||
|
(
|
||
|
LPTSTR szFilePath, // Full path to a file.
|
||
|
LPTSTR szDir // Directory returned in here, the buffer is assumed
|
||
|
// to be as big as szFilePath.
|
||
|
);
|
||
|
VOID APIENTRY GetFilenameFromPath
|
||
|
(
|
||
|
LPTSTR szPath,
|
||
|
LPTSTR szFilename
|
||
|
);
|
||
|
void APIENTRY TagExtension
|
||
|
(
|
||
|
LPTSTR szPath,
|
||
|
UINT cbPath
|
||
|
);
|
||
|
void APIENTRY StripArgs
|
||
|
(
|
||
|
LPTSTR szCmmdLine // A command line.
|
||
|
);
|
||
|
BOOL APIENTRY ValidPathDrive
|
||
|
(
|
||
|
LPTSTR lpstr
|
||
|
);
|
||
|
|
||
|
LRESULT APIENTRY MessageFilter(int , WPARAM , LPARAM) ;
|
||
|
|
||
|
BOOL APIENTRY SaveGroup(HWND, BOOL);
|
||
|
BOOL SaveGroupsContent(BOOL);
|
||
|
BOOL IsReadOnly(LPTSTR);
|
||
|
VOID FAR PASCAL StartupGroup(HWND hwnd);
|
||
|
VOID APIENTRY PMHelp(HWND);
|
||
|
VOID FAR PASCAL RemoveLeadingSpaces(LPTSTR sz);
|
||
|
VOID FAR PASCAL BringItemToTop(PGROUP pGroup, PITEM pItem, BOOL fUpdate);
|
||
|
VOID APIENTRY SaveRecentFileList (HWND hwnd, LPTSTR szCurrentFile, WORD idControl);
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
/* */
|
||
|
/* Defines */
|
||
|
/* */
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
|
||
|
#define CharSizeOf(x) (sizeof(x) / sizeof(*x))
|
||
|
#define ByteCountOf(x) ((x) * sizeof(TCHAR))
|
||
|
|
||
|
#define CITEMSMAX 50
|
||
|
//
|
||
|
// CreateNewItem flags
|
||
|
//
|
||
|
#define CI_ACTIVATE 0x1
|
||
|
#define CI_SET_DOS_FULLSCRN 0x2
|
||
|
#define CI_NO_ASSOCIATION 0x4
|
||
|
#define CI_SEPARATE_VDM 0x8
|
||
|
|
||
|
/* magic number for .GRP file validation
|
||
|
*/
|
||
|
#define GROUP_MAGIC 0x43434D50L /* 'PMCC' */
|
||
|
#define GROUP_UNICODE 0x43554D50L /* 'PMUC' */
|
||
|
|
||
|
#define MAXTITLELEN 50 /* Length of MessageBox titles */
|
||
|
#define MAXMESSAGELEN 512 /* Length of MessageBox messages */
|
||
|
|
||
|
#define MAXITEMNAMELEN 40
|
||
|
//#define MAXITEMPATHLEN 64+16+48 /* Path + 8.3 + Drive(colon) + arguments */
|
||
|
#define MAXITEMPATHLEN MAX_PATH - 1 // -1 for backward compatibility
|
||
|
// with shell32.dll
|
||
|
#define MAXGROUPNAMELEN 30
|
||
|
|
||
|
#define NSLOTS 16 /* initial number of items entries */
|
||
|
|
||
|
#define PATH_INVALID 0
|
||
|
#define PATH_INVALID_OK 1
|
||
|
#define PATH_VALID 2
|
||
|
|
||
|
#define CCHGROUP 5 // length of the string "Group"
|
||
|
#define CCHCOMMONGROUP 6 // length of the string "CGroup"
|
||
|
|
||
|
#define CGROUPSMAX 40 // The max number of groups allowed.
|
||
|
|
||
|
#define TYPE_ITEM 0
|
||
|
#define TYPE_PERSGROUP 1
|
||
|
#define TYPE_COMMONGROUP 2
|
||
|
|
||
|
/* Resource Numbers */
|
||
|
#define PROGMANICON 1
|
||
|
#define DOSAPPICON 2
|
||
|
#define WORDICON 3
|
||
|
#define SHEETICON 4
|
||
|
#define DATAICON 5
|
||
|
#define COMMICON 6
|
||
|
#define ITEMICON 7
|
||
|
#define PERSGROUPICON 8
|
||
|
#define COMMGROUPICON 9
|
||
|
#define WINDOWSICON 10 /* Should be large ? */
|
||
|
#define MSDOSICON 11
|
||
|
#define PMACCELS 1004
|
||
|
#define PROGMANMENU 1005
|
||
|
#define GROUPICON 146
|
||
|
|
||
|
#define DOSAPPICONINDEX 1
|
||
|
#define ITEMICONINDEX 6
|
||
|
|
||
|
#define ITEMLISTBOX 1
|
||
|
|
||
|
#define GWLP_PGROUP 0 // Used in the Group window frames
|
||
|
#define GWL_EXITING 0 // Used in the main window frame
|
||
|
|
||
|
#define DRAG_SWP 1
|
||
|
#define DRAG_COPY 2
|
||
|
|
||
|
/* DDE Messaging Stuff */
|
||
|
#define ACK_POS 0x8000
|
||
|
#define ACK_NEG 0x0000
|
||
|
|
||
|
// message sent to indicate another instance has been exec'd
|
||
|
#define WM_EXECINSTANCE (WM_USER+100)
|
||
|
|
||
|
// message sent to reload a group
|
||
|
#define WM_RELOADGROUP (WM_USER+101)
|
||
|
// message sent to delete a group
|
||
|
#define WM_UNLOADGROUP (WM_USER+102)
|
||
|
|
||
|
// Lock errors
|
||
|
#define LOCK_LOWMEM 1
|
||
|
#define LOCK_FILECHANGED 2
|
||
|
|
||
|
// Binary type defins
|
||
|
#define BINARY_TYPE_DEFAULT 1
|
||
|
#define BINARY_TIMEOUT_DEFAULT 500
|
||
|
|
||
|
// Recent file list defines
|
||
|
#define MYCBN_SELCHANGE (WM_USER+5)
|
||
|
|
||
|
#define INIT_MAX_FILES 4
|
||
|
#define FILES_KEY L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Program Manager\\Recent File List"
|
||
|
#define MAXFILES_ENTRY L"Max Files"
|
||
|
#define FILE_ENTRY L"File%lu"
|
||
|
|
||
|
|
||
|
/* Menu Command Defines */
|
||
|
#define IDM_FILE 0
|
||
|
#define IDM_NEW 101
|
||
|
#define IDM_OPEN 102
|
||
|
#define IDM_MOVE 103
|
||
|
#define IDM_COPY 104
|
||
|
#define IDM_DELETE 105
|
||
|
#define IDM_PROPS 106
|
||
|
#define IDM_RUN 107
|
||
|
#define IDM_EXIT 108
|
||
|
#define IDM_SAVE 109
|
||
|
#define IDM_SHUTDOWN 110
|
||
|
#define IDM_OPTIONS 1
|
||
|
#define IDM_AUTOARRANGE 201
|
||
|
#define IDM_MINONRUN 202
|
||
|
#define IDM_HOTKEY 203
|
||
|
#define IDM_SAVESETTINGS 204
|
||
|
#define IDM_SAVENOW 205
|
||
|
#define IDM_ANSIGROUPS 206
|
||
|
#define IDM_WINDOW 2
|
||
|
#define IDM_CASCADE 301
|
||
|
#define IDM_TILE 302
|
||
|
#define IDM_ARRANGEICONS 303
|
||
|
|
||
|
#define IDM_CHILDSTART 310
|
||
|
|
||
|
#define IDM_HELP 3
|
||
|
#define IDM_HELPINDEX 401
|
||
|
#define IDM_HELPHELP 402
|
||
|
#define IDM_ABOUT 403
|
||
|
#define IDM_HELPSEARCH 404
|
||
|
|
||
|
|
||
|
/* StringTable Defines */
|
||
|
#define IDS_APPTITLE 1
|
||
|
#define IDS_PMCLASS 2
|
||
|
#define IDS_GROUPCLASS 3
|
||
|
#define IDS_ITEMCLASS 4
|
||
|
#define IDS_DATAFILE 5
|
||
|
#define IDS_SETTINGS 7
|
||
|
#define IDS_CONFIRMDELTITLE 40 /* Must be > 32 */
|
||
|
#define IDS_CONFIRMDELITEMMSG 41
|
||
|
#define IDS_CONFIRMDELGROUPMSG 42
|
||
|
#define IDS_NOICONSTITLE 50
|
||
|
#define IDS_NOICONSMSG 51
|
||
|
#define IDS_BADPATHTITLE 52
|
||
|
#define IDS_BADPATHMSG 53
|
||
|
#define IDS_NETPATHTITLE 54
|
||
|
#define IDS_REMOVEPATHTITLE 55
|
||
|
#define IDS_PATHWARNING 56
|
||
|
#define IDS_EXECERRTITLE 60
|
||
|
#define IDS_UNKNOWNMSG 61
|
||
|
#define IDS_NOMEMORYMSG 62
|
||
|
#define IDS_FILENOTFOUNDMSG 63
|
||
|
#define IDS_MANYOPENFILESMSG 64
|
||
|
#define IDS_NOASSOCMSG 65
|
||
|
#define IDS_MULTIPLEDSMSG 66
|
||
|
#define IDS_ASSOCINCOMPLETE 67
|
||
|
#define IDS_COPYDLGTITLE 70
|
||
|
#define IDS_COPYDLGTITLE1 71
|
||
|
#define IDS_GROUPS 72
|
||
|
#define IDS_NOGRPFILE 73
|
||
|
#define IDS_LOWMEM 74
|
||
|
#define IDS_BADFILE 75
|
||
|
#define IDS_CANTWRITEGRP 76
|
||
|
#define IDS_GROUPFILEERR 77
|
||
|
#define IDS_GRPISRO 78
|
||
|
#define IDS_EXTRACTERROR 79
|
||
|
#define IDS_EEGROUPRO 80
|
||
|
#define IDS_CANTWRITEGRPS 81
|
||
|
#define IDS_OOMEXITTITLE 110
|
||
|
#define IDS_OOMEXITMSG 111
|
||
|
#define IDS_GROUPRO 112
|
||
|
#define IDS_CANTRENAMETITLE 113
|
||
|
#define IDS_CANTRENAMEMSG 114
|
||
|
#define IDS_TOOMANYITEMS 115
|
||
|
#define IDS_OS2APPMSG 116
|
||
|
#define IDS_NEWWINDOWSMSG 117
|
||
|
#define IDS_PMODEONLYMSG 118
|
||
|
#define IDS_ALREADYLOADED 119
|
||
|
#define IDS_STARTUP 120
|
||
|
#define IDS_PLUS 121
|
||
|
#define IDS_GRPHASCHANGED 122
|
||
|
#define IDS_NONE 123
|
||
|
#define IDS_EXIT 124
|
||
|
#define IDS_DUPHOTKEYTTL 125
|
||
|
#define IDS_DUPHOTKEYMSG 126
|
||
|
#define IDS_BROWSE 127
|
||
|
#define IDS_NEWITEMPROGS 128
|
||
|
#define IDS_PROPERTIESPROGS 129
|
||
|
#define IDS_CHNGICONPROGS 130
|
||
|
#define IDS_TOOMANYGROUPS 131
|
||
|
#define IDS_ACCESSDENIED 133
|
||
|
#define IDS_DDEFAIL 134
|
||
|
#define IDS_LOWMEMONINIT 135
|
||
|
#define IDS_PIFINIFILE 136
|
||
|
#define IDS_PIFSECTION 137
|
||
|
#define IDS_EXECSETUP 138
|
||
|
#define IDS_WINHELPERR 139
|
||
|
#define IDS_PIFADDINFO 140
|
||
|
|
||
|
#define IDS_BADPATHMSG2 141
|
||
|
#define IDS_BADPATHMSG3 142
|
||
|
#define IDS_LOWMEMONEXIT 143
|
||
|
#define IDS_WININIERR 144
|
||
|
#define IDS_STARTUPERR 145
|
||
|
#define IDS_CMDLINEERR 146
|
||
|
#define IDS_ITEMINGROUP 147
|
||
|
#define IDS_LOWMEMONEXTRACT 148
|
||
|
#define IDS_DEFICONSFILE 149
|
||
|
#define IDS_COMPRESSEDEXE 150
|
||
|
#define IDS_INVALIDDLL 151
|
||
|
#define IDS_SHAREERROR 152
|
||
|
#define IDS_CANTWRITEGRPDISK 153
|
||
|
#define IDS_COMMDLGLOADERR 154
|
||
|
#define IDS_NOICONSMSG1 155
|
||
|
#define IDS_NOGRPFILE2 156
|
||
|
|
||
|
#define IDS_REGISTRYERROR 164
|
||
|
#define IDS_ERRORDELETEGROUP 165
|
||
|
#define IDS_LOGOFFERROR 166
|
||
|
|
||
|
#define IDS_COMMONGRPSUFFIX 167
|
||
|
#define IDS_COMMONGROUPPROP 168
|
||
|
#define IDS_COMMONGROUPERR 169
|
||
|
#define IDS_NOCOMMONGRPS 170
|
||
|
|
||
|
#define IDS_NO_PERMISSION_SHUTDOWN 171
|
||
|
#define IDS_SHUTDOWN_MESSAGE 172
|
||
|
|
||
|
|
||
|
#define IDS_DEFAULTSTARTUP 173
|
||
|
#define IDS_TOOMANYCOMMONGROUPS 174
|
||
|
|
||
|
#define IDS_LOGOFF 175
|
||
|
#define IDS_SHUTDOWN 176
|
||
|
|
||
|
#define IDS_MSGBOXSTR1 177
|
||
|
#define IDS_MSGBOXSTR2 178
|
||
|
|
||
|
#define IDS_INSUFFICIENTQUOTA 179
|
||
|
|
||
|
#define IDS_ANSIGROUPSMENU 180
|
||
|
|
||
|
//#ifdef JAPAN
|
||
|
//#define IDS_BADPORTPATHTITLE 1102
|
||
|
//#define IDS_BADPORTPATHMSG 1103
|
||
|
//#endif //JAPAN
|
||
|
|
||
|
#include "pmdlg.h"
|
||
|
#include "pmreg.h"
|
||
|
#include "notify.h"
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
/* */
|
||
|
/* Global Externs */
|
||
|
/* */
|
||
|
/*--------------------------------------------------------------------------*/
|
||
|
|
||
|
extern BOOL UserIsAdmin;
|
||
|
extern BOOL AccessToCommonGroups;
|
||
|
extern BOOL bLoadIt;
|
||
|
extern BOOL bMinOnRun;
|
||
|
extern BOOL bArranging;
|
||
|
extern BOOL bAutoArrange;
|
||
|
extern BOOL bAutoArranging;
|
||
|
extern BOOL bExitWindows;
|
||
|
extern BOOL bSaveSettings;
|
||
|
extern BOOL bIconTitleWrap;
|
||
|
extern BOOL bScrolling;
|
||
|
extern BOOL bLoadEvil;
|
||
|
extern BOOL bMove;
|
||
|
extern BOOL bInDDE;
|
||
|
extern BOOL fInExec;
|
||
|
extern BOOL fNoRun;
|
||
|
extern BOOL fNoClose;
|
||
|
extern BOOL fNoSave;
|
||
|
extern BOOL fNoFileMenu;
|
||
|
extern BOOL fLowMemErrYet;
|
||
|
extern BOOL fExiting;
|
||
|
extern BOOL fErrorOnExtract;
|
||
|
extern BOOL bFrameSysMenu;
|
||
|
|
||
|
extern TCHAR szNULL[];
|
||
|
extern TCHAR szProgman[];
|
||
|
extern TCHAR szTitle[];
|
||
|
//
|
||
|
// Program Manager's Settings keys
|
||
|
//
|
||
|
extern TCHAR szWindow[];
|
||
|
extern TCHAR szOrder[];
|
||
|
extern TCHAR szAnsiOrder[];
|
||
|
extern TCHAR szStartup[];
|
||
|
extern TCHAR szAutoArrange[];
|
||
|
extern TCHAR szSaveSettings[];
|
||
|
extern TCHAR szMinOnRun[];
|
||
|
extern TCHAR szFocusOnCommonGroup[];
|
||
|
|
||
|
extern TCHAR szMessage[MAXMESSAGELEN+1];
|
||
|
extern TCHAR szNameField[MAXITEMPATHLEN+1];
|
||
|
extern TCHAR szPathField[MAXITEMPATHLEN+1];
|
||
|
extern TCHAR szIconPath[MAXITEMPATHLEN+1];
|
||
|
extern TCHAR szDirField[];
|
||
|
extern TCHAR szOriginalDirectory[];
|
||
|
extern TCHAR szWindowsDirectory[];
|
||
|
extern TCHAR szOOMExitMsg[64];
|
||
|
extern TCHAR szOOMExitTitle[32];
|
||
|
|
||
|
extern HANDLE hAccel;
|
||
|
extern HINSTANCE hAppInstance;
|
||
|
extern HANDLE hCommdlg;
|
||
|
|
||
|
extern HICON hDlgIcon;
|
||
|
extern HICON hItemIcon;
|
||
|
extern HICON hProgmanIcon;
|
||
|
extern HICON hGroupIcon;
|
||
|
extern HICON hCommonGrpIcon;
|
||
|
extern HICON hIconGlobal;
|
||
|
|
||
|
|
||
|
extern HWND hwndProgman;
|
||
|
extern HWND hwndMDIClient;
|
||
|
|
||
|
extern HBRUSH hbrWorkspace;
|
||
|
|
||
|
extern int nGroups;
|
||
|
extern int dyBorder;
|
||
|
extern int iDlgIconId;
|
||
|
extern int iDlgIconIndex;
|
||
|
extern int cxIcon;
|
||
|
extern int cyIcon;
|
||
|
extern int cxIconSpace;
|
||
|
extern int cyIconSpace;
|
||
|
extern int cxArrange;
|
||
|
extern int cyArrange;
|
||
|
extern int cxOffset;
|
||
|
extern int cyOffset;
|
||
|
|
||
|
extern WORD wPendingHotKey;
|
||
|
|
||
|
extern DWORD dwDDEAppId;
|
||
|
extern DWORD dwEditLevel;
|
||
|
extern WORD wLockError;
|
||
|
extern UINT uiActivateShellWindowMessage;
|
||
|
extern UINT uiConsoleWindowMessage;
|
||
|
extern UINT uiSaveSettingsMessage; // for User Profile Editor: upedit.exe
|
||
|
|
||
|
extern PGROUP pFirstGroup;
|
||
|
extern PGROUP pCurrentGroup;
|
||
|
extern PGROUP pActiveGroup;
|
||
|
extern PGROUP *pLastGroup;
|
||
|
extern PGROUP pExecingGroup;
|
||
|
|
||
|
extern PITEM pExecingItem;
|
||
|
|
||
|
extern RECT rcDrag;
|
||
|
extern HWND hwndDrag;
|
||
|
|
||
|
extern WORD wNewSelection;
|
||
|
|
||
|
extern HFONT hFontTitle;
|
||
|
|
||
|
extern UINT uiHelpMessage; // stuff for help
|
||
|
extern UINT uiBrowseMessage; // stuff for help
|
||
|
extern WORD wMenuID;
|
||
|
extern HANDLE hSaveMenuHandle; /*Save hMenu into one variable*/
|
||
|
extern WORD wSaveFlags; /*Save flags into another*/
|
||
|
extern HANDLE hSaveMenuHandleAroundSendMessage;/*Save hMenu into one variable*/
|
||
|
extern WORD wSaveFlagsAroundSendMessage; /*Save flags into another*/
|
||
|
extern WORD wSaveMenuIDAroundSendMessage;
|
||
|
|
||
|
extern DWORD dwContext;
|
||
|
extern HHOOK hhkMsgFilter;
|
||
|
extern TCHAR szProgmanHelp[];
|
||
|
|
||
|
extern BOOL bUseANSIGroups;
|
||
|
|
||
|
extern PSECURITY_ATTRIBUTES pSecurityAttributes;
|
||
|
extern PSECURITY_ATTRIBUTES pAdminSecAttr;
|
||
|
|
||
|
extern BOOL bDisableDDE;
|