⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remnet.c

📁 See Hanoi.cpp for the implementation of this cla
💻 C
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************
Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.

remnet.c : Remote networking

******************************************************************************/

#include <windows.h>
#include <windowsx.h>
#include <tchar.h>
#include "string.h"
#include "memory.h"
#include "commctrl.h"
#include "wcommctl.h"
//#include "shlobj.h"
//#include "wceshell.h"
//#include "aygshell.h"
#ifdef USE_SIP
#	include <sipapi.h>
#endif

#include "resource.h"
#include "remnet.h"

#ifdef DEBUG
DBGPARAM dpCurSettings = {
    TEXT("RemoteNet"), {
        TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),
        TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),
        TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),TEXT("Misc"),
        TEXT("Alloc"),TEXT("Function"),TEXT("Warning"),TEXT("Error") },
    0x0000C000
    //0xFFFF
}; 
#endif	// DEBUG

ITEMINFO	EditItem;
HINSTANCE	v_hInst;
HWND		v_hMainWnd;
HWND		v_hListWnd;
HWND		v_hCmdBar;
HWND		v_hDialogWnd;
HFONT		v_hfont;
RECT		v_ClientRect;
RECT		v_ListRect;
DWORD		v_WizDialog;
DWORD       v_PrevWizDialog;
BOOL		v_fInRename;
BOOL		v_fPortrait;

#ifdef USE_SIP
LPFNSIP		  g_pSipGetInfo, g_pSipSetInfo;
LPFNSIPSTATUS g_pSipStatus;
HINSTANCE	  g_hSipLib;
#endif

extern DWORD v_EnteredAsAWizard;

DWORD		v_DialogPages[DLG_NUMDLGS] = {
	IDD_RAS_WIZ_1,
	IDD_RAS_WIZ_2,
	IDD_RAS_WIZ_3,
	IDD_RAS_WIZ_4,
	IDD_RAS_WIZ_5,
	IDD_RAS_TCPIP_GEN,
	IDD_RAS_TCPIP_NAME_SERV
};

const TCHAR szAppName[] = TEXT("RemoteNet");
TCHAR szTitle[36];

const static TBBUTTON tbButton[] = {
	{0,             0,        TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0, -1},
  {STD_DELETE+12,ID_FILE_DELETE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},
  {STD_PROPERTIES+12,ID_FILE_PROPERTIES,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},
  {0, 0,              TBSTATE_ENABLED, TBSTYLE_SEP,               0, 0, 0, -1},
  {VIEW_LARGEICONS, ID_VIEW_LARGEICON,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0,0,-1},
  {VIEW_SMALLICONS, ID_VIEW_SMALLICON,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0,0,-1},
  {VIEW_DETAILS, ID_VIEW_DETAILS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0, 0, -1},
};    

static TBBUTTON tbButtonPortrait[] = {
	{0, 0,        TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0, -1},
	{0,ID_CONN_CONN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},
	{0, 0,        TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0, -1},
//	{0, ID_CONN_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},
	{STD_PROPERTIES+12,ID_CONN_EDIT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},
	{STD_DELETE+12,ID_CONN_DELETE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},
};    

TCHAR	nonStr[10];
TCHAR	deleteStr[30];
TCHAR	propertiesStr[30];
TCHAR	largeIconStr[30];
TCHAR	smallIconStr[30];
TCHAR	detailsStr[30];

const LPTSTR ToolTipsTbl[] = {
	nonStr,
	deleteStr,
	propertiesStr,
	largeIconStr,
	smallIconStr,
	detailsStr
};

const LPTSTR ToolTipsTblPortrait[] = {
	nonStr,
	largeIconStr,
	smallIconStr,
	propertiesStr,
	deleteStr,
};

// Declare the CommCtrl stuff.
DECLARE_COMMCTRL_TABLE;


void  FAR  PASCAL RegisterIPClass(HINSTANCE);
void  FAR  PASCAL UnregisterIPClass(HINSTANCE);

void PositionSIP(int nSipState)
{
#ifdef USE_SIP
    // Do we have the sip function?
    if (g_pSipGetInfo && g_pSipSetInfo)
    {
	    SIPINFO si;

        // See whether the SIP is up or down
        memset(&si, 0, sizeof(SIPINFO));
        si.cbSize = sizeof(SIPINFO);
        if ((*g_pSipGetInfo)(&si))
        {
            // Has the SIP state changed?
            if ((!(si.fdwFlags & SIPF_ON) && SIP_UP == nSipState) ||
                (si.fdwFlags & SIPF_ON && !(SIP_UP == nSipState)))
            {
                si.fdwFlags ^= SIPF_ON;
		        (*g_pSipSetInfo)(&si);
            }
        }
    }
#endif
}

BOOL
CreateShortcut(TCHAR *pEntryName)
{
    TCHAR   szFmtStr[256];
    TCHAR   szPath[256];
    TCHAR   szFile[256];
    char    szAnsiTarget[128];
	HANDLE  hFile;
    int     nLinks = 1;
    int     Len;
	
	LoadString(v_hInst, IDS_DESKTOP_PATH, szFmtStr,
			   sizeof(szFmtStr)/sizeof(TCHAR));
    
    wsprintf(szPath, szFmtStr, pEntryName);
    
	hFile = CreateFile(szPath, GENERIC_WRITE, 0, NULL, CREATE_NEW,
					   FILE_ATTRIBUTE_NORMAL, NULL);

    while (hFile == INVALID_HANDLE_VALUE)
    {
        if (nLinks++ > 20)
            return FALSE;

		LoadString(v_hInst, IDS_DESKTOP_PATH2, szFmtStr,
				   sizeof(szFmtStr)/sizeof(TCHAR));
    
        wsprintf(szPath, szFmtStr,
                 pEntryName, nLinks);

        hFile = CreateFile(szPath, GENERIC_WRITE, 0, NULL, CREATE_NEW,
                           FILE_ATTRIBUTE_NORMAL, NULL);        
    }

    
	LoadString(v_hInst, IDS_SHORTCUT_STRING, szFmtStr,
			   sizeof(szFmtStr)/sizeof(TCHAR));
    
    wsprintf(szFile, szFmtStr, pEntryName);

    Len = _tcslen(szFile);

    wsprintf(szPath, TEXT("%d#%s"), Len, szFile);
    
    Len = WideCharToMultiByte(CP_ACP, 0, szPath, -1, szAnsiTarget, 128, NULL, NULL);

    WriteFile(hFile, szAnsiTarget, Len, &Len, NULL);

    CloseHandle(hFile);
    
    return TRUE;
}
VOID
UpdateView (DWORD	What)
{
	HMENU	hMenu;
	
	hMenu = CallCommCtrlFunc(CommandBar_GetMenu)(v_hCmdBar, 0);

    if (ID_VIEW_LARGEICON == What)
         CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON,
                                   ID_VIEW_DETAILS,
                                   ID_VIEW_LARGEICON,
                                   MF_BYCOMMAND);
    if (ID_VIEW_SMALLICON == What)
         CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON,
                                   ID_VIEW_DETAILS,
                                   ID_VIEW_SMALLICON,
                                   MF_BYCOMMAND);
    if (ID_VIEW_DETAILS == What)
         CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON,
                                   ID_VIEW_DETAILS,
                                   ID_VIEW_DETAILS,
                                   MF_BYCOMMAND);

	SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_LARGEICON,
				 MAKELONG((ID_VIEW_LARGEICON == What) ? TRUE : FALSE, 0));
	SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_SMALLICON,
				 MAKELONG((ID_VIEW_SMALLICON == What) ? TRUE : FALSE, 0));
	SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_DETAILS,
				 MAKELONG((ID_VIEW_DETAILS == What) ? TRUE : FALSE, 0));
}

VOID
SetMenu()
{
	HMENU	hMenu;
	DWORD		    cb;
	LV_ITEM		    lvi;
    MENUITEMINFO    MenuItemInfo;
	TCHAR		    szTemp[128];
	
	cb = ListView_GetSelectedCount (v_hListWnd);
	lvi.iItem = ListView_GetNextItem(v_hListWnd, -1, LVNI_SELECTED);
	hMenu = CallCommCtrlFunc(CommandBar_GetMenu)(v_hCmdBar, 0);
	// Set the File->Connect/Create menu to connect
	MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
	MenuItemInfo.fMask = MIIM_TYPE;
	MenuItemInfo.dwTypeData = szTemp;
	MenuItemInfo.cch = sizeof(szTemp)/sizeof(TCHAR);

	GetMenuItemInfo(hMenu, ID_FILE_CONNECTCREATE, FALSE,
					&MenuItemInfo);
	MenuItemInfo.fMask = MIIM_TYPE;                        
	MenuItemInfo.cch = LoadString(v_hInst, IDS_CONNECT,
								  MenuItemInfo.dwTypeData,
								  sizeof(szTemp)/sizeof(TCHAR));
	SetMenuItemInfo(hMenu, ID_FILE_CONNECTCREATE, FALSE,
					&MenuItemInfo);

	EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE, MF_GRAYED);
	EnableMenuItem (hMenu, ID_FILE_CREATESHORTCUT, MF_GRAYED);
	EnableMenuItem (hMenu, ID_FILE_DELETE, MF_GRAYED);
	EnableMenuItem (hMenu, ID_FILE_RENAME, MF_GRAYED);
	EnableMenuItem (hMenu, ID_FILE_PROPERTIES, MF_GRAYED);
	EnableMenuItem (hMenu, ID_EDIT_CREATECOPY, MF_GRAYED);

	// Portrait mode menu
	EnableMenuItem (hMenu, ID_CONN_CONN, MF_GRAYED);
	EnableMenuItem (hMenu, ID_CONN_EDIT, MF_GRAYED);
	EnableMenuItem (hMenu, ID_CONN_DELETE, MF_GRAYED);
	EnableMenuItem (hMenu, ID_CONN_RENAME, MF_GRAYED);

	SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_EDIT,
				 MAKELONG(FALSE, 0));
	SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_CONN,
				 MAKELONG(FALSE, 0));
	SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_DELETE,
				 MAKELONG(FALSE, 0));
	SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_DELETE,
				 MAKELONG(FALSE, 0));
	SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_PROPERTIES,
				 MAKELONG(FALSE, 0));

	if (cb == 1) {
		if (lvi.iItem == 0) {
			// Make new connection

			// Set File->Connect/Create menu to create and enable
			MenuItemInfo.fMask = MIIM_TYPE;                        
			MenuItemInfo.cch = LoadString(v_hInst, IDS_CREATE,
										  MenuItemInfo.dwTypeData,
										  sizeof(szTemp)/sizeof(TCHAR));
			SetMenuItemInfo(hMenu, ID_FILE_CONNECTCREATE, FALSE,
							&MenuItemInfo);
			EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE,
							MF_ENABLED);
		} else {
			EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_FILE_CREATESHORTCUT,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_FILE_DELETE,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_FILE_RENAME,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_FILE_PROPERTIES,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_EDIT_CREATECOPY,
							MF_ENABLED);

			EnableMenuItem (hMenu, ID_CONN_CONN, MF_ENABLED);
			EnableMenuItem (hMenu, ID_CONN_EDIT, MF_ENABLED);
			EnableMenuItem (hMenu, ID_CONN_DELETE, MF_ENABLED);
			EnableMenuItem (hMenu, ID_CONN_RENAME, MF_ENABLED);

			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_EDIT,
						 MAKELONG(TRUE, 0));
			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_CONN,
						 MAKELONG(TRUE, 0));
			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_DELETE,
						 MAKELONG(TRUE, 0));

			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_DELETE,
						 MAKELONG(TRUE, 0));
			SendMessage (v_hCmdBar, TB_ENABLEBUTTON,
						 ID_FILE_PROPERTIES,
						 MAKELONG(TRUE, 0));
		}
	} else {
		if (cb != 0) {
			// allow shortcuts for multiple items
			if (lvi.iItem > 0) {
				EnableMenuItem (hMenu, ID_EDIT_CREATECOPY,
								MF_ENABLED);
			}
			EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_FILE_CREATESHORTCUT,
							MF_ENABLED);
			EnableMenuItem (hMenu, ID_FILE_DELETE,
							MF_ENABLED);
			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_CONN,
						 MAKELONG(TRUE, 0));
			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_DELETE,
						 MAKELONG(TRUE, 0));
			SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_DELETE,
						 MAKELONG(TRUE, 0));

			EnableMenuItem (hMenu, ID_CONN_DELETE, MF_ENABLED);
		}
	}
}

// ----------------------------------------------------------------
//
// NotifyHandler ()
//
// Handle Notification events for the ListView
//
// ----------------------------------------------------------------

LRESULT
NotifyHandler (HWND hWnd, NM_LISTVIEW *pnm, LV_DISPINFO *plvdi)
{
	LV_ITEM		    lvi;
	PITEMINFO		pItemInfo;
	HWND			hwndEdit;
	DWORD		    dwTemp;
    int             nFormatId;
	TCHAR		    szTemp[128];
	TCHAR			szFmtStr[128];

	DEBUGMSG (ZONE_MISC, (TEXT("Got WM_NOTIFY hdr.code=%d\r\n"),
						  pnm->hdr.code));

	switch (pnm->hdr.code) {
	case LVN_DELETEALLITEMS :
		DEBUGMSG (ZONE_MISC, (TEXT("Got LVN_DELETEALLITEMS\r\n")));
		return FALSE;
	case LVN_DELETEITEM :
		if (0 != pnm->iItem) {
			DEBUGMSG (ZONE_MISC, (TEXT("Got LVN_DELETEITEM %d\r\n"), pnm->iItem));
			LocalFree ((HLOCAL)pnm->lParam);
		}
		break;
	case LVN_GETDISPINFO :
		DEBUGMSG (ZONE_MISC, (TEXT("LVN_GETDISPINFO\r\n")));
		if (!(plvdi->item.mask & LVIF_TEXT)) {
			DEBUGMSG (ZONE_MISC, (TEXT("LVN_GETDISPINFO: Not Text? Mask=0x%X\r\n"),
								  plvdi->item.mask));
			break;
		}
		SetMenu();

		if (0 == plvdi->item.iItem) {
			if (0 == plvdi->item.iSubItem) {
				LoadString(v_hInst, IDS_MAKE_NEW,
						   plvdi->item.pszText,
						   plvdi->item.cchTextMax);
			}
			break;
		}
		pItemInfo = (PITEMINFO)plvdi->item.lParam;
		switch (plvdi->item.iSubItem) {
		case 0 :
			_tcsncpy (plvdi->item.pszText,
					  pItemInfo->EntryName,
					  plvdi->item.cchTextMax);
			break;
		case 1 :
			_tcsncpy (plvdi->item.pszText,
					  pItemInfo->szPhone,
					  plvdi->item.cchTextMax);
			break;
		case 2 :
			_tcsncpy (plvdi->item.pszText,
					  ((PITEMINFO)plvdi->item.lParam)->Entry.szDeviceName,
					  plvdi->item.cchTextMax);
			break;
		}
		DEBUGMSG (ZONE_MISC, (TEXT("LVN_GETDISPINFO: Returning string '%s'\r\n"),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -