开发环境: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