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

📄 winvnc.cpp

📁 realvnc是一个非常流行的远程控制程序
💻 CPP
字号:
//  Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.////  This file is part of the VNC system.////  The VNC system is free software; you can redistribute it and/or modify//  it under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2 of the License, or//  (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,//  USA.//// If the source code for the VNC system is not available from the place // whence you received this file, check http://www.uk.research.att.com/vnc or contact// the authors on vnc@uk.research.att.com for information on obtaining it.// WinVNC.cpp// 24/11/97		WEZ// WinMain and main WndProc for the new version of WinVNC////////////////////////////// System headers#include "stdhdrs.h"////////////////////////////// Custom headers#include "VSocket.h"#include "WinVNC.h"#include "vncServer.h"#include "vncMenu.h"#include "vncInstHandler.h"#include "vncService.h"// Application instance and nameHINSTANCE	hAppInstance;const char	*szAppName = "WinVNC";DWORD		mainthreadId;// WinMain parses the command line and either calls the main App// routine or, under NT, the main service routine.int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){	setbuf(stderr, 0);	// Configure the log file, in case one is required	vnclog.SetFile("WinVNC.log", false);#ifdef _DEBUG	{		// Get current flag		int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );		// Turn on leak-checking bit		tmpFlag |= _CRTDBG_LEAK_CHECK_DF;		// Set flag to the new value		_CrtSetDbgFlag( tmpFlag );	}#endif	// Save the application instance and main thread id	hAppInstance = hInstance;	mainthreadId = GetCurrentThreadId();	// Initialise the VSocket system	VSocketSystem socksys;	if (!socksys.Initialised())	{		MessageBox(NULL, "Failed to initialise the socket system", szAppName, MB_OK);		return 0;	}	vnclog.Print(LL_STATE, VNCLOG("sockets initialised\n"));	// Make the command-line lowercase and parse it	int i;	for (i = 0; i < strlen(szCmdLine); i++)	{		szCmdLine[i] = tolower(szCmdLine[i]);	}	BOOL argfound = FALSE;	for (i = 0; i < strlen(szCmdLine); i++)	{		if (szCmdLine[i] <= ' ')			continue;		argfound = TRUE;		// Now check for command-line arguments		if (strncmp(&szCmdLine[i], winvncRunServiceHelper, strlen(winvncRunServiceHelper)) == 0)		{			// NB : This flag MUST be parsed BEFORE "-service", otherwise it will match			// the wrong option!  (This code should really be replaced with a simple			// parser machine and parse-table...)			// Run the WinVNC Service Helper app			vncService::PostUserHelperMessage();			return 0;		}		if (strncmp(&szCmdLine[i], winvncRunService, strlen(winvncRunService)) == 0)		{			// Run WinVNC as a service			return vncService::WinVNCServiceMain();		}		if (strncmp(&szCmdLine[i], winvncRunAsUserApp, strlen(winvncRunAsUserApp)) == 0)		{			// WinVNC is being run as a user-level program			return WinVNCAppMain();		}		if (strncmp(&szCmdLine[i], winvncInstallService, strlen(winvncInstallService)) == 0)		{			// Install WinVNC as a service			vncService::InstallService();			i+=strlen(winvncInstallService);			continue;		}		if (strncmp(&szCmdLine[i], winvncReinstallService, strlen(winvncReinstallService)) == 0)		{			// Silently remove WinVNC, then re-install it			vncService::ReinstallService();			i+=strlen(winvncReinstallService);			continue;		}		if (strncmp(&szCmdLine[i], winvncRemoveService, strlen(winvncRemoveService)) == 0)		{			// Remove the WinVNC service			vncService::RemoveService();			i+=strlen(winvncRemoveService);			continue;		}		if (strncmp(&szCmdLine[i], winvncShowProperties, strlen(winvncShowProperties)) == 0)		{			// Show the Properties dialog of an existing instance of WinVNC			vncService::ShowProperties();			i+=strlen(winvncShowProperties);			continue;		}		if (strncmp(&szCmdLine[i], winvncShowDefaultProperties, strlen(winvncShowDefaultProperties)) == 0)		{			// Show the Properties dialog of an existing instance of WinVNC			vncService::ShowDefaultProperties();			i+=strlen(winvncShowDefaultProperties);			continue;		}		if (strncmp(&szCmdLine[i], winvncShowAbout, strlen(winvncShowAbout)) == 0)		{			// Show the About dialog of an existing instance of WinVNC			vncService::ShowAboutBox();			i+=strlen(winvncShowAbout);			continue;		}		if (strncmp(&szCmdLine[i], winvncKillRunningCopy, strlen(winvncKillRunningCopy)) == 0)		{			// Kill any already running copy of WinVNC			vncService::KillRunningCopy();			i+=strlen(winvncKillRunningCopy);			continue;		}		if (strncmp(&szCmdLine[i], winvncAddNewClient, strlen(winvncAddNewClient)) == 0)		{			// Add a new client to an existing copy of winvnc			i+=strlen(winvncAddNewClient);			// First, we have to parse the command line to get the filename to use			int start, end;			start=i;			while (szCmdLine[start] <= ' ' && szCmdLine[start] != 0) start++;			end = start;			while (szCmdLine[end] > ' ') end++;			// Was there a filename given?			if (end-start > 0) {				char *name = new char[end-start+1];				if (name) {					strncpy(name, &(szCmdLine[start]), end-start);					name[end-start] = 0;					VCard32 address = VSocket::Resolve(name);					if (address != 0) {						// Post the IP address to the server						vncService::PostAddNewClient(address);					} else {						MessageBox(NULL, "Unable to resolve host name", "Add New Client Error", MB_OK);					}					delete [] name;				}				i=end;			} else {				// Tell the server to show the Add New Client dialog				vncService::PostAddNewClient(0);			}			continue;		}		// Either the user gave the -help option or there is something odd on the cmd-line!		// Show the usage dialog		MessageBox(NULL, winvncUsageText, "WinVNC Usage", MB_OK | MB_ICONINFORMATION);		break;	};	// If no arguments were given then just run	if (!argfound)		return WinVNCAppMain();	return 0;}// This is the main routine for WinVNC when running as an application// (under Windows 95 or Windows NT)// Under NT, WinVNC can also run as a service.  The WinVNCServerMain routine,// defined in the vncService header, is used instead when running as a service.int WinVNCAppMain(){	// Set this process to be the last application to be shut down.	SetProcessShutdownParameters(0x100, 0);		// Check for previous instances of WinVNC!  	vncInstHandler instancehan;  	if (!instancehan.Init())  	{  		// We don't allow multiple instances!  		MessageBox(NULL, "Another instance of WinVNC is already running", szAppName, MB_OK);  		return 0;  	}	// CREATE SERVER	vncServer server;	// Set the name and port number	server.SetName(szAppName);	vnclog.Print(LL_STATE, VNCLOG("server created ok\n"));	// Create tray icon & menu if we're running as an app	vncMenu *menu = new vncMenu(&server);	if (menu == NULL)	{		vnclog.Print(LL_INTERR, VNCLOG("failed to create tray menu\n"));		PostQuitMessage(0);	}	// Now enter the message handling loop until told to quit!	MSG msg;	while (GetMessage(&msg, NULL, 0,0) ) {		vnclog.Print(LL_INTINFO, VNCLOG("message %d recieved\n"), msg.message);		TranslateMessage(&msg);  // convert key ups and downs to chars		DispatchMessage(&msg);	}	vnclog.Print(LL_STATE, VNCLOG("shutting down server\n"));	if (menu != NULL)		delete menu;	return msg.wParam;};

⌨️ 快捷键说明

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