- Add Items to Connection ShellFolder Item Context Menu

- Are not yet handled

svn path=/trunk/; revision=35719
This commit is contained in:
Johannes Anderwald 2008-08-28 03:52:51 +00:00
parent 5ea699faeb
commit f5852bccf9
4 changed files with 116 additions and 4 deletions

View file

@ -18,4 +18,12 @@ BEGIN
IDS_STATUS_CONNECTED "Verbindung hergestellt"
IDS_STATUS_OPERATIONAL "Verbindung hergestellt"
IDS_NET_ACTIVATE "Aktivieren"
IDS_NET_DEACTIVATE "Deaktivieren"
IDS_NET_STATUS "Status"
IDS_NET_REPAIR "Reparieren"
IDS_NET_CREATELINK "Verknüpfung erstellen"
IDS_NET_DELETE "Löschen"
IDS_NET_RENAME "Umbenennen"
IDS_NET_PROPERTIES "Eigenschaften"
END

View file

@ -16,5 +16,13 @@ BEGIN
IDS_STATUS_CONNECTING "Acquiring network address"
IDS_STATUS_CONNECTED "Connected"
IDS_STATUS_OPERATIONAL "Connected"
IDS_NET_ACTIVATE "Enable"
IDS_NET_DEACTIVATE "Disable"
IDS_NET_STATUS "Status"
IDS_NET_REPAIR "Repair"
IDS_NET_CREATELINK "Create Shortcut"
IDS_NET_DELETE "Delete"
IDS_NET_PROPERTIES "Properties"
END

View file

@ -29,3 +29,12 @@
#define IDS_STATUS_CONNECTING 10011
#define IDS_STATUS_CONNECTED 10012
#define IDS_STATUS_OPERATIONAL 10013
#define IDS_NET_ACTIVATE 10100
#define IDS_NET_DEACTIVATE 10101
#define IDS_NET_STATUS 10102
#define IDS_NET_REPAIR 10103
#define IDS_NET_CREATELINK 10104
#define IDS_NET_DELETE 10105
#define IDS_NET_RENAME 10106
#define IDS_NET_PROPERTIES 10107

View file

@ -380,7 +380,7 @@ static HRESULT WINAPI ISF_NetConnect_fnGetDisplayNameOf (IShellFolder2 * iface,
val = _ILGetValueStruct(pidl);
if (val)
{
if (INetConnection_GetProperties((INetConnection*)val->pItem, &pProperties) == NOERROR)
if (INetConnection_GetProperties(val->pItem, &pProperties) == NOERROR)
{
if (pProperties->pszwName)
{
@ -628,6 +628,51 @@ static ULONG WINAPI ISF_NetConnect_IContextMenu2_Release(IContextMenu2 * iface)
return IShellFolder2_Release((IShellFolder2*)This);
}
void WINAPI _InsertMenuItemW (
HMENU hmenu,
UINT indexMenu,
BOOL fByPosition,
UINT wID,
UINT fType,
LPCWSTR dwTypeData,
UINT fState)
{
MENUITEMINFOW mii;
WCHAR szText[100];
ZeroMemory(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
if (fType == MFT_SEPARATOR)
{
mii.fMask = MIIM_ID | MIIM_TYPE;
}
else if (fType == MFT_STRING)
{
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
if ((ULONG_PTR)HIWORD((ULONG_PTR)dwTypeData) == 0)
{
if (LoadStringW(netshell_hInstance, LOWORD((ULONG_PTR)dwTypeData), szText, sizeof(szText)/sizeof(WCHAR)))
{
szText[(sizeof(szText)/sizeof(WCHAR))-1] = 0;
mii.dwTypeData = szText;
}
else
{
return;
}
}
else
{
mii.dwTypeData = (LPWSTR) dwTypeData;
}
mii.fState = fState;
}
mii.wID = wID;
mii.fType = fType;
InsertMenuItemW( hmenu, indexMenu, fByPosition, &mii);
}
/**************************************************************************
* ISF_NetConnect_IContextMenu_QueryContextMenu()
*/
@ -639,10 +684,52 @@ static HRESULT WINAPI ISF_NetConnect_IContextMenu2_QueryContextMenu(
UINT idCmdLast,
UINT uFlags)
{
int Count = 1;
//IGenericSFImpl * This = impl_from_IContextMenu2(iface);
IGenericSFImpl * This = impl_from_IContextMenu2(iface);
VALUEStruct * val;
NETCON_PROPERTIES * pProperties;
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count);
val = _ILGetValueStruct(This->apidl);
if (!val)
return E_FAIL;
if (INetConnection_GetProperties((INetConnection*)val->pItem, &pProperties) != NOERROR)
return E_FAIL;
if (pProperties->Status == NCS_HARDWARE_DISABLED)
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_ACTIVATE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_ACTIVATE), MFS_DEFAULT);
else
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_DEACTIVATE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_DEACTIVATE), MFS_ENABLED);
if (pProperties->Status == NCS_HARDWARE_DISABLED || pProperties->Status == NCS_MEDIA_DISCONNECTED || pProperties->Status == NCS_DISCONNECTED)
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_STATUS, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_STATUS), MFS_GRAYED);
else if (pProperties->Status == NCS_CONNECTED)
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_STATUS, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_STATUS), MFS_DEFAULT);
else
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_STATUS, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_STATUS), MFS_ENABLED);
if (pProperties->Status == NCS_HARDWARE_DISABLED || pProperties->Status == NCS_MEDIA_DISCONNECTED)
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_REPAIR, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_REPAIR), MFS_GRAYED);
else
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_REPAIR, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_REPAIR), MFS_ENABLED);
_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED);
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_CREATELINK, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_CREATELINK), MFS_ENABLED);
if (pProperties->dwCharacter & NCCF_ALLOW_REMOVAL)
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_DELETE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_DELETE), MFS_ENABLED);
else
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_DELETE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_DELETE), MFS_GRAYED);
if (pProperties->dwCharacter & NCCF_ALLOW_RENAME)
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_RENAME, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_RENAME), MFS_ENABLED);
else
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_RENAME, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_RENAME), MFS_GRAYED);
_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED);
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_PROPERTIES), MFS_ENABLED);
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 9);
}