在网页中点击连接打开vnc链接

开发环境:vc++6.0

测试运行环境:win7,win10

vnc viewer版本:vnc-4_6_3-x86_win32_viewer.exe

【vnc://协议注册代码】

@ECHO OFF
REG DELETE HKEY_CLASSES_ROOT\vnc /f
cd /d "%~dp0"
> "vnc.reg" ECHO Windows Registry Editor Version 5.00
>>"vnc.reg" ECHO.
>>"vnc.reg" ECHO [HKEY_CLASSES_ROOT\vnc]
>>"vnc.reg" ECHO @="URL:vnc Protocol Handler"
>>"vnc.reg" ECHO "URL Protocol"=""
>>"vnc.reg" ECHO [HKEY_CLASSES_ROOT\vnc\shell]
>>"vnc.reg" ECHO [HKEY_CLASSES_ROOT\vnc\shell\open]
>>"vnc.reg" ECHO [HKEY_CLASSES_ROOT\vnc\shell\open\command]
>>"vnc.reg" ECHO @="\"%cd:\=\\%\\vncme.exe\" %%1"
START /WAIT REGEDIT /S "vnc.reg"
DEL "vnc.reg"

上述代码保存为“installme.bat”,并双击运行,这样,在网页中就会启动vnc viewer

若win7下不能打开vnc协议,尝试新建vncme.reg文件,再双击运行,内容如下:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\vnc]
"URL Protocol"=""
@="vnc protocol"
[HKEY_CLASSES_ROOT\vnc\DefaultIcon]
@="c:\\1\\vncme.exe"
[HKEY_CLASSES_ROOT\vnc\shell]
[HKEY_CLASSES_ROOT\vnc\shell\open]
[HKEY_CLASSES_ROOT\vnc\shell\open\command]
@="\"C:\\1\\vncme.exe\" %1"

【html部分】

<a href="vnc://ip:5900 123456">启动vnc</a>

其中:ip为vnc server ip,123456为密码,中间已空格分隔,vmware开启虚拟机方式参照:开启vmware中的vnc_vmware vnc_hifhf的博客-CSDN博客

【vc++部分】

新建工程:Win32 Console Application

代码部分:

// vncme.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#include "windows.h"
#include <shellapi.h>
#include <string>
using namespace std;

//遍历所有窗口
BOOL CALLBACK window_callback(HWND window, LPARAM lParam) {
	char title[255];
	GetWindowTextA(window, title, sizeof(title));	
	string t=title;
	//std::cout << t << std::endl;
	if(t=="VNC Viewer"){
		cout<<window<<endl;
		return FALSE;
	}
	else{
		return TRUE;	
	}
}
int n=0; //n=2是第二个文本框,跳出遍历
HWND hwEdit;
//遍历子窗口
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
	
	char szClsName[64];
	GetClassName(hwnd,szClsName,sizeof(szClsName));
	//cout<<hwnd<<szClsName<<endl;
	
	if (strcmp(szClsName,"Edit")==0)
	{
		n++;
		//cout<<n<<endl;
		if(n==2){
			hwEdit=hwnd;
			return FALSE;
		}

		
	}
	return TRUE;
}


int main(int argc, char* argv[])
{
	string str=argv[1];
	cout<<"host:"<<str<<endl;
	int pos2=str.find("%20");
	cout<<pos2<<endl;
	string str1=str.substr(0,pos2);
	cout<<"str1:"<<str1<<endl;
	string str2=str.substr(pos2+3);
	cout<<"str2:"<<str2<<endl;
	string str3="vnc-4_6_3-x86_win32_viewer.exe ";
	str3=str3.append(str1.substr(6,sizeof(str1)+7).append(" ").append(str2));
	WinExec(str3.c_str(), SW_SHOW);  //正常运行代码
	Sleep(500);
	HWND hq=FindWindow(NULL,"Authentication Credentials"); 
	if(hq){
		char title[255];
		GetWindowTextA(hq, title, sizeof(title));			
		EnumChildWindows(hq,EnumChildProc,0);
		char* ch = (char*)str2.data();
		SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM)ch);

		/*点击确定按钮*/
		HWND hBtnOK;
		hBtnOK=GetDlgItem(hq,1);
		PostMessage(hBtnOK,BM_CLICK,NULL,NULL);		
	}
	else{
		cout<<"VNC Viewer客户端打开失败,请重试!"<<endl;
	}
	return 0;
}

c++部分的exe资源下载:https://download.csdn.net/download/hifhf/87806958

### 如何使用 VNC Viewer 进行远程连接 #### 准备工作 为了成功建立 VNC Viewer 的远程连接,需要确保目标设备已正确配置好 VNC Server 并运行正常。VNC Viewer 是一种客户端工具,用于通过网络访问和控制其他计算机的桌面环境[^2]。 #### 配置 VNC Server 在目标设备(如树莓派、CentOS 或 Ubuntu 服务器)上安装并设置 VNC Server 是必要的前提条件。以下是常见的几个场景: 1. **树莓派上的 VNC 设置** - 启动树莓派的操作系统,并启用内置的 VNC 功能。 - 使用 `sudo raspi-config` 命令进入配置菜单,在其中找到 “Interfacing Options”,然后选择 “VNC” 来激活该功能[^1]。 - 如果希望自定义分辨率或其他参数,则可以通过命令行启动 VNC Server: ```bash vncserver :1 -geometry 1920x1080 -depth 24 ``` 2. **Linux CentOS 上的 VNC 设置** - 安装 TigerVNC 或 TightVNC 软件包: ```bash sudo yum install tigervnc-server ``` - 创建一个新的 VNC 用户实例并设定密码: ```bash vncpasswd ``` - 编辑 `/etc/systemd/system/vncserver@:1.service` 文件来指定用户和服务端口[^3]。 - 启动服务并通过防火墙开放对应端口号(默认为 5901 对应显示编号 :1)。 #### 执行 VNC Viewer 连接 完成上述准备工作之后,按照以下流程操作即可实现远程连接: - 下载并打开适用于您当前系统的 VNC Viewer 应用程序。 - 输入目标主机地址或者 IP 地址加上冒号加屏幕号码的形式,例如 `192.168.x.x:1` 表示第 1 号显示器。 - 当提示输入用户名与密码时,请提供之前创建好的认证凭证。 - 成功登录后即可见到被控机器的画面;如果遇到无法加载 GUI 图形界面的情况,可参照特定错误排查指南尝试修复[^5]。 ```python import subprocess def start_vnc_server(): try: result = subprocess.run(['vncserver', ':1'], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(result.stdout.decode()) except Exception as e: print(f"Error starting VNC server: {e}") start_vnc_server() ``` 以上脚本可用于自动化开启 Linux 中的一个基本 VNC session。 #### 注意事项 - 确认双方网络连通状况良好,必要时调整路由器 NAT 规则以便外部访问内部局域网中的计算资源。 - 加强安全性措施,比如利用 SSH 隧道加密传输数据流,防止敏感信息泄露给潜在攻击者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hifhf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值