ctxmenu.cpp
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C++ 代码 · 共 1,608 行 · 第 1/3 页
CPP
1,608 行
++ItemInfo.wID;
strcpy(MText, "&Encrypt");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
strcpy(MText, "&Sign");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
strcpy(MText, "E&ncrypt && Sign");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "D&ecrypt && Verify");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "&Wipe");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "&Create SDA");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
SubMenuItems = 7;
}
void CShellExt::CreateVolumeMenu(UINT idCmdFirst)
{
MENUITEMINFO ItemInfo;
char MText[64];
ItemInfo.cbSize = sizeof ItemInfo;
ItemInfo.wID = idCmdFirst;
ItemInfo.hSubMenu = NULL;
ItemInfo.hbmpChecked = NULL;
ItemInfo.hbmpUnchecked = NULL;
ItemInfo.dwItemData = 0;
ItemInfo.dwTypeData = MText;
ItemInfo.cch = 0;
strcpy(SubMenuType, "Volume");
hSubMenu = CreatePopupMenu();
ItemInfo.fType = MFT_STRING;
ItemInfo.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID;
ItemInfo.fState = MFS_ENABLED; // for command lines
++ItemInfo.wID;
strcpy(MText, "&Encrypt");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
strcpy(MText, "&Sign");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
strcpy(MText, "E&ncrypt && Sign");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "D&ecrypt && Verify");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "&Wipe Free Space");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "&Create SDA");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
SubMenuItems = 7;
}
void CShellExt::CreatePlaintextMenu(UINT idCmdFirst)
{
MENUITEMINFO ItemInfo;
char MText[64];
ItemInfo.cbSize = sizeof ItemInfo;
ItemInfo.wID = idCmdFirst;
ItemInfo.hSubMenu = NULL;
ItemInfo.hbmpChecked = NULL;
ItemInfo.hbmpUnchecked = NULL;
ItemInfo.dwItemData = 0;
ItemInfo.dwTypeData = MText;
ItemInfo.cch = 0;
strcpy(SubMenuType, "Plaintext");
hSubMenu = CreatePopupMenu();
ItemInfo.fType = MFT_STRING;
ItemInfo.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID;
ItemInfo.fState = MFS_ENABLED; // for command lines
++ItemInfo.wID;
strcpy(MText, "&Encrypt");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
strcpy(MText, "&Sign");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
strcpy(MText, "E&ncrypt && Sign");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "&Wipe");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType=MFT_SEPARATOR ;
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
ItemInfo.fType = MFT_STRING;
++ItemInfo.wID;
strcpy(MText, "&Create SDA");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
SubMenuItems = 6;
}
void CShellExt::CreatePGPdiskMenu(UINT idCmdFirst)
{
MENUITEMINFO ItemInfo;
char MText[64];
ItemInfo.cbSize = sizeof ItemInfo;
ItemInfo.wID = idCmdFirst;
ItemInfo.hSubMenu = NULL;
ItemInfo.hbmpChecked = NULL;
ItemInfo.hbmpUnchecked = NULL;
ItemInfo.dwItemData = 0;
ItemInfo.dwTypeData = MText;
ItemInfo.cch = 0;
strcpy(SubMenuType, "PGPdisk");
hSubMenu = CreatePopupMenu();
ItemInfo.fType = MFT_STRING;
ItemInfo.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID;
ItemInfo.fState = MFS_ENABLED;
++ItemInfo.wID;
if (m_NumFiles > 1)
strcpy(MText, "&Mount/Unmount PGPdisks...");
else if (m_IsMountedDisk)
strcpy(MText, "&Unmount PGPdisk...");
else
strcpy(MText, "&Mount PGPdisk...");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
++ItemInfo.wID;
if (m_NumFiles > 1)
ItemInfo.fState = MFS_ENABLED;
strcpy(MText, "&Edit PGPdisk...");
InsertMenuItem(hSubMenu, 0xffffffff, TRUE, &ItemInfo);
SubMenuItems = 3;
}
/*
LRESULT CALLBACK ShellProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
// See if user deselects caching via prefs
PGPscCheckForPurge(msg,wParam);
switch(msg)
{
case WM_CREATE:
{
ShowWindow(hwnd, SW_HIDE);
return 0;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
#define szAppName "PGPshell_HiddenWindow"
HWND ShellWindow(void)
{
HWND hwnd;
WNDCLASS wc;
// Register the Server Window Class
wc.style = 0;
wc.lpfnWndProc = ShellProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_hmodThisDll;
wc.hIcon = 0;
wc.hCursor = 0;
wc.hbrBackground = 0;
wc.lpszMenuName = 0;
wc.lpszClassName = szAppName;
RegisterClass(&wc);
hwnd = CreateWindow(
szAppName, szAppName, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, g_hmodThisDll, NULL );
return hwnd;
}
*/
HRESULT CallPGP(STGMEDIUM *pMedium, UINT ActionCode)
{
int i;
UINT ReturnCode;
HWND hwnd;
int NumFiles;
BOOL bEncrypt,bSign;
char szFile[MAX_PATH+1];
FILELIST *ListHead;
strcpy(szApp,"PGPshell");
ReturnCode=TRUE;
if(PGPsc==0)
{
return(ReturnCode);
}
hwnd = GetForegroundWindow();
NumFiles = DragQueryFile((HDROP) pMedium->hGlobal, (UINT)-1, 0, 0);
if(NumFiles==0)
return(ReturnCode);
ReturnCode=TRUE;
bEncrypt=bSign=FALSE;
if(ActionCode==PGP_CODE_ENCRYPT)
bEncrypt = TRUE;
if(ActionCode==PGP_CODE_SIGN)
bSign = TRUE;
if(ActionCode==PGP_CODE_ENCRYPT_SIGN)
bEncrypt = bSign = TRUE;
if ((ActionCode==PGP_CODE_ENCRYPT)||
(ActionCode==PGP_CODE_SIGN) ||
(ActionCode==PGP_CODE_ENCRYPT_SIGN))
{
ListHead=0;
for(i=0;i<NumFiles && ReturnCode == TRUE;i++)
{
DragQueryFile((HDROP) pMedium->hGlobal,
i,szFile,MAX_PATH);
PGPscAddToFileList(&ListHead,szFile,NULL,NULL);
}
ReturnCode = PGPscEncryptFileList(hwnd,szApp,PGPsc,PGPtls,
ListHead,
bEncrypt,
bSign);
}
if (ActionCode==PGP_CODE_CREATE_SDA)
{
ListHead=0;
for(i=0;i<NumFiles && ReturnCode == TRUE;i++)
{
DragQueryFile((HDROP) pMedium->hGlobal,
i,szFile,MAX_PATH);
PGPscAddToFileList(&ListHead,szFile,NULL,NULL);
}
ReturnCode = PGPscCreateSDAFileList(hwnd,szApp,PGPsc,PGPtls,
ListHead);
}
if((ActionCode==PGP_CODE_DECRYPT)||
(ActionCode==PGP_CODE_VERIFY_SIG)||
(ActionCode==PGP_CODE_VERIFY))
{
ListHead=0;
for(i=0;i<NumFiles && ReturnCode == TRUE;i++)
{
DragQueryFile((HDROP) pMedium->hGlobal,
i,szFile,MAX_PATH);
PGPscAddToFileList(&ListHead,szFile,NULL,NULL);
}
ReturnCode = PGPscDecryptFileList(hwnd,szApp,PGPsc,PGPtls,
ListHead);
}
if(ActionCode==PGP_CODE_WIPE)
{
DWORD FileAttr;
ListHead=0;
for(i=0;i<NumFiles && ReturnCode == TRUE;i++)
{
DragQueryFile((HDROP) pMedium->hGlobal,
i,szFile,MAX_PATH);
FileAttr = GetFileAttributes(szFile);
if (FileAttr == 0xFFFFFFFF)
;
else if (FileAttr & FILE_ATTRIBUTE_SYSTEM)
;
else if (FileAttr & FILE_ATTRIBUTE_READONLY)
;
else
PGPscAddToFileList(&ListHead,szFile,NULL,NULL);
}
ReturnCode = PGPscWipeFileList(hwnd,PGPsc,
ListHead,WIPE_DEFAULT,0);
}
if(ActionCode==PGP_CODE_WIPEFREESPACE)
{
for(i=0;i<NumFiles && ReturnCode == TRUE;i++)
{
DragQueryFile((HDROP) pMedium->hGlobal,
i,szFile,MAX_PATH);
if(strlen(szFile)<=3)
{
ReturnCode=PGPscFreeSpaceWipeCmdLine(hwnd,PGPsc,szFile,0,FALSE);
}
}
}
if ((ActionCode == PGP_CODE_MNTUNMNT_DISK) ||
(ActionCode == PGP_CODE_EDIT_DISK))
{
for (i=0;i<NumFiles && ReturnCode == TRUE;i++)
{
BOOL isMounted, isPGPdisk;
DragQueryFile((HDROP) pMedium->hGlobal,
i,szFile,MAX_PATH);
MNdiskIsPathPGPdisk(szFile, &isPGPdisk, &isMounted);
if (isPGPdisk)
{
if (ActionCode == PGP_CODE_EDIT_DISK)
MNdiskEditPGPdisk(szFile, hwnd);
else if (isMounted)
MNdiskUnmountPGPdisk(szFile, hwnd);
else
MNdiskMountPGPdisk(szFile, hwnd);
}
}
}
// This is done because the start menu doesn't work if
// the current directory gets set to a directory that
// the user moves to the recycling bin in Win98. The user
// won't move SYSTEM, hopefully...
GetWindowsDirectory(szFile,MAX_PATH);
SetCurrentDirectory(szFile);
ReleaseStgMedium(pMedium);
return ReturnCode;
}
BOOL CShellExt::AddMenuSeparator(HMENU hMenu, int iPosition)
{
MENUITEMINFO MenuItemInfo;
BOOL bRC;
MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
MenuItemInfo.fMask = MIIM_TYPE;
MenuItemInfo.fType = MFT_SEPARATOR;
bRC = InsertMenuItem(hMenu,
iPosition,
TRUE,
&MenuItemInfo);
if (!bRC) {
// wow, we couldn't add the separator after Send To...
ODS("Insert Separator failed...\r\n");
return FALSE;
}
return TRUE;
}
int CShellExt::FindMenuItem(HMENU hMenu, const char *itemName)
{
int iMenuItemCount = GetMenuItemCount(hMenu);
TCHAR szStringInfo[255];
for (int i = 0; i < iMenuItemCount; i++) {
MENUITEMINFO MenuItemInfo;
memset(&MenuItemInfo, 0, sizeof(MenuItemInfo));
MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
MenuItemInfo.fMask = MIIM_TYPE;
MenuItemInfo.dwTypeData = szStringInfo;
MenuItemInfo.cch = sizeof(szStringInfo);
if (GetMenuItemInfo(hMenu, i, TRUE, &MenuItemInfo)) {
if (MenuItemInfo.fType == MFT_STRING) {
if (!stricmp(MenuItemInfo.dwTypeData, itemName)) {
// found item
return i;
}
}
}
}
return -1;
}
BOOL CShellExt::InsertSubMenu(
HMENU hMenu,
const char *menuText,
int *pIPosition)
{
int iMenuItemCount = GetMenuItemCount(hMenu);
int iStartPos = *pIPosition;
TCHAR szStringInfo[255];
*pIPosition = -1;
// look for following separator
for (int j = iStartPos+1; j < iMenuItemCount; j++) {
MENUITEMINFO MenuItemInfo;
memset(&MenuItemInfo, 0, sizeof(MenuItemInfo));
MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
MenuItemInfo.fMask = MIIM_TYPE | MIIM_DATA;
MenuItemInfo.dwTypeData = szStringInfo;
MenuItemInfo.cch = sizeof(szStringInfo);
if (GetMenuItemInfo(hMenu, j, TRUE, &MenuItemInfo)) {
if (MenuItemInfo.fType == MFT_SEPARATOR) {
*pIPosition = j+1;
break;
}
}
}
if (*pIPosition == -1) {
// no end separator was found, just previous item, so add a separator
AddMenuSeparator(hMenu, iStartPos+1);
*pIPosition= iStartPos+2;
}
return InsertMenu(hMenu, *pIPosition, MF_STRING | MF_BYPOSITION |
MF_POPUP, (UINT)hSubMenu, menuText);
}
LRESULT CALLBACK InvisiProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
return 0;
}
case WM_QUERYOPEN:
{
return 0;
}
#if 0
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}
#endif
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?