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

📄 rasdial.c

📁 1.wince下的拨号程序..
💻 C
📖 第 1 页 / 共 2 页
字号:
    }
	return FALSE;
}

DWORD WINAPI
MsgThread(LPVOID pvarg)
{
	HINSTANCE	hInst = (HINSTANCE)GetCurrentProcessId();
    MSG msg;
    WNDCLASS		wc;

#define RASDIAL_CLASS_NAME TEXT("RasDialWin")
	
	wc.style = 0;
	wc.lpfnWndProc = (WNDPROC) WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInst;
	wc.hIcon = 0;
	wc.hCursor = 0;
	wc.hbrBackground = NULL;
	wc.lpszMenuName = 0;
	wc.lpszClassName = RASDIAL_CLASS_NAME;
		
	// What if it fails?
	RegisterClass(&wc);
	
	v_hWnd = CreateWindow (RASDIAL_CLASS_NAME,
						   TEXT("This is a lame static window"),
						   0, 0, 0, 5, 5, NULL, NULL, hInst, NULL);
	if (NULL == v_hWnd) {
		OutputMessage (TEXT("Error from CreateWindow %d\r\n"),
					   GetLastError());
	}
	while ( GetMessage(&msg, NULL, 0, 0) != FALSE ) {
		TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

	return 0;
}

void
usage()
{
	OutputMessage (TEXT("USAGE:\r\n"));
	OutputMessage (TEXT("    rasdial entryname [username [password]]")
				   TEXT(" [/DOMAIN:domain] [/DEBUG:num]\r\n"));
	OutputMessage (TEXT("    rasdial [entryname] /DISCONNECT\r\n"));
	OutputMessage (TEXT("    rasdial [/STATS]\r\n\r\n"));
}


int WINAPI
_tmain (int argc, TCHAR	**argv)
{
	DWORD		ParmNum = 0;
	BOOL		fDisconnect = FALSE;
	DWORD		i;
	BOOL		fPassword;
	LPRASCONN	pRasConn;
	DWORD		Connections;
	DWORD		cb;
	BYTE		RasConnData[10*sizeof(RASCONN)];
	HRASCONN	hRasConn;
	DWORD		RetVal;
	RASCONNSTATUS RasConnStatus;
	RASDIALPARAMS RasDialParams;
	HANDLE		hThread;
	DWORD		ThrdId;
	BOOL		fNoWin = FALSE;
	BOOL		fStats = FALSE;
	RAS_STATS	RasStats;
	BOOL pF=FALSE;

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

	memset ((char *)&RasDialParams, 0, sizeof(RasDialParams));
	RasDialParams.dwSize = sizeof(RasDialParams);

	for (i=1; i < (DWORD)argc; i++) {
		if ((argv[i][0] == TEXT('-')) || (argv[i][0] == TEXT('/'))) {

			// Check for Debug redirect
			if ((argv[i][2] == '\0') && ((argv[i][1] == 'd') || (argv[i][1] == 'D'))) {
				v_fDebugOut = TRUE;
				continue;
			}

			// Done with EntryName/UserName/Password
			ParmNum = 3;
			
			if (!_tcsnicmp (&argv[i][1], TEXT("Domain:"), 6)) {
				// Copy the domain name over
				if (_tcslen(&argv[i][7]) >= NUM_ELEMENTS(RasDialParams.szDomain)) {
					OutputMessage (TEXT("Domain name too long\r\n"));
					return 0;
				}
				_tcscpy (RasDialParams.szDomain, &argv[i][7]);
				
			} else if (!_tcsnicmp (&argv[i][1], TEXT("Disconnect"), 10)) {
				fDisconnect = TRUE;
				
			} else if (!_tcsnicmp (&argv[i][1], TEXT("Debug:"), 6)) {
				v_DebugFlag = 0;
				v_DebugFlag = _ttoi (&argv[i][7]);
				OutputMessage (TEXT("Debug flag set to %d\r\n"), v_DebugFlag);
				
			} else if (!_tcsnicmp (&argv[i][1], TEXT("NoWin"), 5)) {
				fNoWin = TRUE;
				OutputMessage (TEXT("No Window option specified\r\n"));
			} else if (!_tcsnicmp (&argv[i][1], TEXT("Stats"), 5)) {
				fStats = TRUE;
			} else {
				OutputMessage (TEXT("Invalid cmdline '%s'\r\n"), &argv[i][1]);
				usage();
				return 0;
			}
		} else if (ParmNum == 0) {
			// Get the entryname
			if (_tcslen(argv[i]) >= NUM_ELEMENTS(RasDialParams.szEntryName)) {
				OutputMessage (TEXT("Entry name too long\r\n"));
				return 0;
			}
			_tcscpy (RasDialParams.szEntryName, argv[i]);
			
			// Load the dial params for this entry.
			RasGetEntryDialParams( NULL, &RasDialParams, &fPassword );

			OutputMessage (TEXT("Opened RasEntry '%s', UserName='%s' PW='%s' Domain='%s'\r\n"),
						   RasDialParams.szEntryName, RasDialParams.szUserName,
						   RasDialParams.szPassword, RasDialParams.szDomain);
			// Prepare for UserName.
			ParmNum = 1;
		} else if (ParmNum == 1) {
			if (_tcslen(argv[i]) >= NUM_ELEMENTS(RasDialParams.szUserName)) {
				OutputMessage (TEXT("User name too long\r\n"));
				return 0;
			}
			_tcscpy (RasDialParams.szUserName, argv[i]);
			ParmNum = 2;
		} else if (ParmNum == 2) {
			if (_tcslen(argv[i]) >= NUM_ELEMENTS(RasDialParams.szPassword)) {
				OutputMessage (TEXT("Password too long\r\n"));
				return 0;
			}
			_tcscpy (RasDialParams.szPassword, argv[i]);
			
			// All done with normal params
			ParmNum = 3;
		} else {
			OutputMessage (TEXT("Invalid cmdline '%s'\r\n"), argv[i]);
			usage();
			return 0;
		}
	}

	// Get the current list of connections
	pRasConn = (LPRASCONN) RasConnData;
	pRasConn->dwSize = sizeof(RASCONN);
	Connections = 0;
	cb = sizeof(RasConnData);
	if ( RasEnumConnections(pRasConn, &cb, &Connections)) {
		OutputMessage (TEXT("Error from RasEnumConnections %d\r\n"),
					   GetLastError());
		return 0;	
	}
	
	if (fDisconnect) {
		// Was an entryname specified?
		if (RasDialParams.szEntryName[0]) {
			for (i=0; i < Connections; i++) {
				if (!_tcscmp (RasDialParams.szEntryName,
							  pRasConn[i].szEntryName)) {
					break;
				}
			}
			if (i == Connections) {
				OutputMessage (TEXT("Error entry '%s' not found\r\n"),
							   RasDialParams.szEntryName);
				return 0;
			}
			hRasConn = pRasConn[i].hrasconn;
		} else {
			// If one then disconnect it
			if (Connections != 1) {
				OutputMessage (TEXT("Error %d connections active\r\n"),
							   Connections);
				for (i=0; i < Connections; i++) {
					OutputMessage (TEXT(" 0x%08X  '%s' \r\n"),
								   pRasConn[i].hrasconn,
								   pRasConn[i].szEntryName);
				}
				return 0;
			}
			hRasConn = pRasConn->hrasconn;
			_tcscpy (RasDialParams.szEntryName, pRasConn->szEntryName);
		}
		// Hangup the RAS connection
		OutputMessage (TEXT("Hanging up 0x%08X '%s'\r\n"), hRasConn,
					   RasDialParams.szEntryName);
		RasHangUp (hRasConn);
		return 0;
	}

	if (RasDialParams.szEntryName[0] == TEXT('\0')) {
		// Just list the connections.
		OutputMessage (TEXT("%d Active connections\r\n"), Connections);
		for (i=0; i < Connections; i++) {
			OutputMessage (TEXT(" 0x%08X  '%s' "),
						   pRasConn[i].hrasconn,
						   pRasConn[i].szEntryName);
			RasConnStatus.dwSize = sizeof(RasConnStatus);
			if (RasGetConnectStatus (pRasConn[i].hrasconn, &RasConnStatus)) {
				OutputMessage (TEXT("Error getting Connection Status\r\n"));
			} else {
				OutputMessage (TEXT("%s Error=%d DeviceName='%s' DeviceType='%s'\r\n"),
							   GetStateStr(RasConnStatus.rasconnstate),
							   RasConnStatus.dwError,
							   RasConnStatus.szDeviceName,
							   RasConnStatus.szDeviceType);
				if (fStats) {
					RasStats.dwSize = sizeof(RasStats);
					if (RasGetLinkStatistics (pRasConn[i].hrasconn, 0, &RasStats)) {
						OutputMessage (TEXT("Error getting link statistics\r\n"));
					} else {
						DWORD	dwMin, dwSecs, dwMSecs;
						dwMin = RasStats.dwConnectDuration / (1000*60);
						dwSecs = (RasStats.dwConnectDuration/1000) % 60;
						dwMSecs = RasStats.dwConnectDuration % 1000;
						
						OutputMessage (TEXT(" Bytes S=%d, R=%d\r\n")
									   TEXT(" Frames S=%d, R=%d\r\n")
									   TEXT(" Compression I=%d%% O=%d%%\r\n")
									   TEXT(" Duration %d:%02d.%03d\r\n"),
									   RasStats.dwBytesXmited, RasStats.dwBytesRcved,
									   RasStats.dwFramesXmited, RasStats.dwFramesRcved,
									   RasStats.dwCompressionRatioIn,
									   RasStats.dwCompressionRatioOut,
									   dwMin, dwSecs, dwMSecs);
									  
									  
					}
				}
			}
			
		}
		return 0;
	}

	// About to dial
	OutputMessage (TEXT("Dialing RasEntry '%s', UserName='%s' PW='%s' Domain='%s'\r\n"),
				   RasDialParams.szEntryName, RasDialParams.szUserName,
				   RasDialParams.szPassword, RasDialParams.szDomain);

	// Actually want to connect.
	RasDialParams.dwSize = sizeof(RASDIALPARAMS);

	if (fNoWin == FALSE) {
		hThread = CreateThread (NULL, 0, MsgThread, (LPVOID)0,
								0, &ThrdId);
		// We don't want a handle.
		CloseHandle (hThread);
	
		// Sleep and let the window get created.
		while (NULL == v_hWnd) {
			Sleep(250);
		}
	} else {
		// Don't bother waiting around if we're not going get callback messages
		fExit = TRUE;
	}
	
//	pF=PortInitialize (_T("COM8:"));
	
	RetVal = RasDial (NULL, NULL, &RasDialParams, 0xFFFFFFFF, v_hWnd, &hRasConn);

	if (RetVal) {
		OutputMessage (TEXT("Error from RasDial=%d\r\n"), RetVal);
		if (hRasConn) {
			RasHangUp (hRasConn);
		}
	} else {
		OutputMessage (TEXT("RasDial successful, hRasConn = 0x%08X\r\n"),
					   hRasConn);
	}

	// Wait for the Connect or disconnect message
	while (!fExit) {
		Sleep (1000);
	}
	OutputMessage (TEXT("Exiting\r\n"));
	if (fDisconnected) {
		RasHangUp (hRasConn);
	}
	DestroyWindow (v_hWnd);
	return 0;
}

⌨️ 快捷键说明

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