📄 rnaapp.c
字号:
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 + -