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

📄 rnaapp.c

📁 See Hanoi.cpp for the implementation of this cla
💻 C
📖 第 1 页 / 共 3 页
字号:

			PositionSIP(SIP_UP);

			if (!DialogBox(v_hInstance,
						   MAKEINTRESOURCE((cxScreen < 480) ? IDD_USERPWD2 :
										   IDD_USERPWD),
						   hWnd, (DLGPROC)DlgProcCredentials)) {
				// Exit.

				v_RNAAppInfo.ErrorCode = ERROR_USER_DISCONNECTION;
				DestroyWindow (hWnd);
                PositionSIP(SIP_DOWN);
				break;
			}

            PositionSIP(SIP_DOWN);
			SendMessage( hWnd, WM_PAINT, 0, 0 );
		}

		SetForegroundWindow ( hWnd );
        
		// Begin the actual connection process

		if( RetVal = RasDial( NULL, NULL, 
					 &v_RasDialParams, 
					 0xffffffff, 
					 hWnd, 
					 &v_hRasConn ) ) {
			RETAILMSG (1, (TEXT("Error from RasDial %d %d\r\n"),
						   RetVal, GetLastError()));
			
			if( !v_fNoMsgBox ) {
				StringID = RasErrorToStringID (RetVal, IDS_RASDIAL_ERR, TRUE);

				ShowError (StringID, IDS_REM_NET);
			}

			if( v_hRasConn ) {
				RasHangup( v_hRasConn );
				v_hRasConn = 0;
			}

			v_RNAAppInfo.ErrorCode = RetVal;

			// This makes us go away....
			DestroyWindow (hWnd);
		}
		break;
	case RNA_RASCMD :
		switch (wParam) {
		case RNA_ADDREF :
			v_RefCount++;
			DEBUGMSG (ZONE_WARN, (TEXT("AddRef %d\r\n"), v_RefCount));
			break;
		case RNA_DELREF :
			if (v_RefCount) {
				v_RefCount--;
			}
			DEBUGMSG (ZONE_WARN, (TEXT("DelRef %d\r\n"), v_RefCount));
			if (!v_RefCount) {
				SendMessage (hWnd, WM_COMMAND, IDCANCEL, 0);
				DEBUGMSG (ZONE_WARN, (TEXT("Sending myself a cancel\r\n")));
			}
			break;
		case RNA_GETINFO :
			if (IsWindow((HWND)lParam)) {
				DEBUGMSG (ZONE_WARN,
						  (TEXT("GetInfo: Sending WM_NETCONNECT to 0x%X\r\n"),
						   lParam));
				SendNotifyMessage ((HWND)lParam, WM_NETCONNECT, (WPARAM)TRUE,
							 (LPARAM)&v_RNAAppInfo);
			} else {
				DEBUGMSG (ZONE_ERROR,
						  (TEXT("GetInfo: lParam 0x%X is not a window\r\n"),
						   lParam));
			}
			break;
		default :
			DEBUGMSG (ZONE_WARN, (TEXT("Unknown RNA_RASCMD %d\r\n"), wParam));
			break;
		}
		break;

	case WM_TIMER :
		break;
		
    case WM_COMMAND:

        switch( LOWORD( wParam ) ) {
        case IDDISMISS:
			{
		        if(IsAPIReady(SH_SHELL))
    	   			ShowWindow(hWnd, SW_HIDE);
   				else
					SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
			}
            break;

        case IDCANCEL:
        	DEBUGMSG( ZONE_MISC, (TEXT("IDCANCEL:v_hRasConn: 0x%8x\r\n"),
								  v_hRasConn ));

            if( v_hRasConn ) {
        		DEBUGMSG( ZONE_MISC, ( TEXT( "-> rasHangup\r\n" )));
                RasHangup( v_hRasConn );
        		DEBUGMSG( ZONE_MISC, ( TEXT( "<- rasHangup\r\n" )));
                v_hRasConn = 0;
            }
			v_RNAAppInfo.ErrorCode = ERROR_USER_DISCONNECTION;
			sndPlaySound(TEXT("RNEnd"), SND_ALIAS|SND_ASYNC|SND_NODEFAULT);
            DestroyWindow( hWnd );
            break;
        }
        break;

    case WM_RASDIALEVENT:

        if( FALSE == RasDialEvent( hWnd, message, wParam, lParam ) ) {
            // Fatal Error.

			if (!v_RNAAppInfo.ErrorCode) {
				v_RNAAppInfo.ErrorCode = ERROR_DISCONNECTION;
			}

            DestroyWindow( hWnd );
        }
        break;

    case IDM_TASKBAR_NOTIFY:

        if( lParam == WM_LBUTTONDBLCLK) {
            DEBUGMSG( ZONE_MISC,
					  (TEXT("Got IDM_TASKBAR_NOTIFY: LBUTTONDOWN\r\n")));
			SetForegroundWindow(hWnd);
            ShowWindow( hWnd, SW_SHOWNORMAL );
        }
        break;

    case WM_DESTROY:
        DEBUGMSG(1, (TEXT("DESTROY\n")));
        
        tnid.cbSize = sizeof(NOTIFYICONDATA); 
        tnid.hWnd = hWnd; 
        tnid.uID = 13; 
         
        if(IsAPIReady(SH_SHELL))
        	Shell_NotifyIcon(NIM_DELETE, &tnid); 
        PostQuitMessage(0);
        break;

    default:
		break;
    }
    return (0);
}

BOOL
InitApplication(HINSTANCE hInstance)
{
    return TRUE;
}

BOOL
InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    DWORD   ScreenX = GetSystemMetrics(SM_CXSCREEN);
    DWORD   ScreenY = GetSystemMetrics(SM_CYSCREEN);

    v_hDirectIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_DIRECTCC));
    v_hDialupIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_DIALUP));
    v_hVPNIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_VPN));
    
    v_hMainWnd = CreateDialog(hInstance,
                              MAKEINTRESOURCE( GetSystemMetrics(SM_CXSCREEN) <
											   480 ? IDD_DCCSTATUS2 :
											   IDD_DCCSTATUS),
							  NULL, WndProc);

    if (v_hMainWnd) {
		SetWindowLong (v_hMainWnd, DWL_USER, RNAAPP_MAGIC_NUM);
		if(IsAPIReady(SH_SHELL))
			ShowWindow(v_hMainWnd, SW_HIDE);
		else
			SetWindowPos(v_hMainWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
        UpdateWindow(v_hMainWnd);
    }

    return (NULL != v_hMainWnd);
}
BOOL FindRNAAppWindow(HWND hWnd, LPARAM lParam)
{
    TCHAR  	szClassName[32];

	GetClassName (hWnd, szClassName, sizeof(szClassName)/sizeof(TCHAR));

	if (!_tcscmp (szClassName, TEXT("Dialog")) &&
		(RNAAPP_MAGIC_NUM == GetWindowLong (hWnd, DWL_USER))) {
		*((HWND *)lParam) = hWnd;
		return FALSE;
	}
	return TRUE;
}

int WINAPI
#ifdef UNDER_CE
WinMain(HINSTANCE hInstance, HINSTANCE hInstPrev, LPWSTR pCmdLine,
     int nCmdShow)
#else
WinMain(HINSTANCE hInstance, HINSTANCE hInstPrev, LPSTR pCmdLine,
     int nCmdShow)
#endif
{
    MSG         msg;
    BOOL        fParmError = FALSE;
    BOOL        fHaveQuote;
    DWORD       cb;
    DWORD       Index;
    long        lReturn;
	DWORD		dwDebug;
	BOOL		TapiInitialFlg = FALSE;

	DEBUGREGISTER(0);

    v_hInstance = hInstance;
	v_hMainWnd = NULL;
	memset(&v_RNAAppInfo, 0, sizeof(v_RNAAppInfo));

#ifdef USE_TTCONTROLS
	if (!InitCommCtrlTable()) {
		DEBUGMSG (ZONE_ERROR, (TEXT("RNAAPP: No commctrl.dll\r\n")));
	}
	else {
		INITCOMMONCONTROLSEX icce;
		icce.dwSize = sizeof(INITCOMMONCONTROLSEX);
		icce.dwICC  = ICC_TOOLTIP_CLASSES|ICC_CAPEDIT_CLASS;
		CallCommCtrlFunc(InitCommonControlsEx)(&icce); 
	}
#endif

	// see if the SIP is enabled
	LoadSIP();

    // Parse the command line.
    while (*pCmdLine != TEXT('\0') && !fParmError) {
        // Skip leading whitespace
        while (*pCmdLine == TEXT(' ')) {
            pCmdLine++;
        }
        if ((*pCmdLine == TEXT('-')) || (*pCmdLine == TEXT('/'))) {
            pCmdLine++;
            switch (*pCmdLine) {
			case TEXT('n') :
			case TEXT('N') :
				v_fNoMsgBox = TRUE;
				*pCmdLine++;
				break;

			case TEXT('p') :
			case TEXT('P') :
				v_fNoPassword = TRUE;
				*pCmdLine++;
				break;

			case TEXT('m') :
            case TEXT('M') :
                v_fMinOnConnect = TRUE;
                *pCmdLine++;
                break;

			case TEXT('c') :
			case TEXT('C') :
				pCmdLine++;
				while ( ( (*pCmdLine >= TEXT('0') ) &&
						(*pCmdLine <= TEXT('9'))) ||
						((*pCmdLine >= TEXT('A')) &&
						 (*pCmdLine <= TEXT('F')))) {
					v_RNAAppInfo.Context <<= 4;
					if ((*pCmdLine >= TEXT('0')) && (*pCmdLine <= TEXT('9'))) {
						v_RNAAppInfo.Context += *pCmdLine - TEXT('0');
					} else {
						v_RNAAppInfo.Context += *pCmdLine - TEXT('A') + 10;
					}
					pCmdLine++;
				}
				DEBUGMSG (ZONE_WARN, (TEXT("Context=0x%X\r\n"),
							  v_RNAAppInfo.Context));
				break;

			case TEXT('e') :
            case TEXT('E') :
                // Already processed?
                if (EntryName[0] != TEXT('\0')) {
                    DEBUGMSG (ZONE_ERROR,
							  (TEXT("EntryName already specified ('%s')\r\n"),
							   pCmdLine));
                    fParmError = TRUE;
                    break;
                }
                *pCmdLine++;
                if (*pCmdLine == TEXT('\"')) {
                    *pCmdLine++;
                    fHaveQuote = TRUE;
                } else {
                    fHaveQuote = FALSE;
                }
           
                // Copy until the next space.
                for (Index = 0; pCmdLine[Index] != TEXT('\0'); Index++) {
                    if (fHaveQuote && (pCmdLine[Index] == TEXT('\"'))) {
                        pCmdLine++;
                        break;
                    }
                    if (!fHaveQuote && (pCmdLine[Index] == TEXT(' '))) {
                        break;
                    }
					if (Index < RAS_MaxEntryName) {
						EntryName[Index] = pCmdLine[Index];
					}
                }
                // Skip past any processed characters.
                pCmdLine += (Index);
                EntryName[Index] = TEXT('\0');
                break;
            default :
                // Invalid parameter.
                DEBUGMSG (ZONE_ERROR, (TEXT("Invalid option %s\r\n"),
									   pCmdLine));
                fParmError = TRUE;
                break;
            }
        } else {
			DEBUGMSG (ZONE_ERROR, (TEXT("Invalid parameter '%s'\r\n"),
								   pCmdLine));
			fParmError = TRUE;
		}
    }
    if (fParmError || (EntryName[0] == TEXT('\0'))) {
        DEBUGMSG (ZONE_ERROR, (TEXT("Parameter Error\r\n")));
		v_RNAAppInfo.ErrorCode = ERROR_INVALID_PARAMETER;
		ShowError (IDS_INVALID_PARAMETER, IDS_REM_NET);
        goto ExitApp;
    }

    // This will create the default entries if the key does not exist.
    RasEnumEntries (NULL, NULL, NULL, &cb, NULL);

    v_RasEntry.dwSize = sizeof(RASENTRY);
    cb = sizeof(RASENTRY);
    if (RasGetEntryProperties (NULL, EntryName, &(v_RasEntry),
                               &cb, NULL, NULL)) {
        DEBUGMSG (ZONE_ERROR, (TEXT("Invalid Ras Entry '%s'\r\n"), EntryName));
		v_RNAAppInfo.ErrorCode = ERROR_CANNOT_FIND_PHONEBOOK_ENTRY;
		ShowError (IDS_INVALID_PARAMETER, IDS_REM_NET);
        goto ExitApp;
    }


	// Initialize the application
    DEBUGMSG( ZONE_ERROR, ( TEXT(" About to InitApplication\r\n" )));

    if( InitApplication( hInstance ) == FALSE ) {
		v_RNAAppInfo.ErrorCode = ERROR_EVENT_INVALID;
		ShowError (IDS_INVALID_PARAMETER, IDS_REM_NET);
        goto ExitApp;
    }

    DEBUGMSG (ZONE_ERROR, (TEXT( "About to InitInstance\r\n" )));

    if( InitInstance( hInstance, nCmdShow ) == FALSE ) {
		v_RNAAppInfo.ErrorCode = ERROR_INVALID_PARAMETER;
        goto ExitApp;
    }

    PostMessage( v_hMainWnd, IDM_START_RASDIAL, 0, 0 );

   //
   // Initialize TAPI
   //
	dwDebug = 0;
#ifdef DEBUG
	dwDebug |= (ZONE_ERROR) ? TAPI_ZONE_ERROR : 0;
	dwDebug |= (ZONE_WARN) ? TAPI_ZONE_WARN : 0;
	dwDebug |= (ZONE_FUNCTION) ? TAPI_ZONE_FUNCTION : 0;
	dwDebug |= (ZONE_ALLOC) ? TAPI_ZONE_ALLOC : 0;
	dwDebug |= (ZONE_TAPI) ? TAPI_ZONE_INFO : 0;
#endif
	lReturn = TapiInitialize(hInstance, lineCallbackFunc, 
							 szAppName,dwDebug);
	TapiInitialFlg = TRUE;
   
	v_dwDeviceID = TapiFindDeviceID(v_RasEntry.szDeviceName,
									RAS_MaxDeviceName);

	DEBUGMSG(ZONE_TAPI, (TEXT("The device id is %d\n"), v_dwDeviceID));
   
    DEBUGMSG( ZONE_MISC, ( TEXT( "About to enter GetMessage Loop\r\n" )));
    while( GetMessage( &msg, NULL, 0, 0) != FALSE ) {
        if (v_hMainWnd == 0 || !IsDialogMessage(v_hMainWnd, &msg)) {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }

ExitApp:
	if (v_hLineApp && TapiInitialFlg) {
		lineShutdown (v_hLineApp);
	}

    RETAILMSG( 1, (TEXT("Posting WM_NETCONNECT(FALSE) message, ErrorCode = %d(0x%X)\r\n" ),
				   v_RNAAppInfo.ErrorCode, v_RNAAppInfo.ErrorCode));
	v_RNAAppInfo.dwSize = sizeof(v_RNAAppInfo);
	v_RNAAppInfo.hWndRNAApp = (DWORD)NULL;
	_tcscpy (v_RNAAppInfo.RasEntryName, EntryName);
    SendNotifyMessage( HWND_BROADCAST, WM_NETCONNECT, (WPARAM)FALSE,
				 		(LPARAM)&v_RNAAppInfo );

    DEBUGMSG( ZONE_MISC, (TEXT( "Exiting WinMain\r\n" )));
    return( msg.wParam );
}

⌨️ 快捷键说明

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