亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? serverdialog.cpp

?? opc client 工業(yè)自動(dòng)化控制過程的客戶端
?? CPP
字號(hào):
// ServerDialog.cpp : implementation file
//

#include "stdafx.h"
#include "CUS_OPCClient.h"
#include "ServerDialog.h"
#include "opcclientdoc.h"	//document head file
#include <LMCONS.H>
#include <lmserver.h>
//#include <winnetwk.h>		//network

const CLSID CLSID_OPCServerList = {0x13486D51,0x4821,0x11D2,{0xA4,0x94,0x3C,0xB3,0x06,0xC1,0x00,0x00}};
#define __GUID_DEFINED__
#include "OPCDa_Cats.c"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern OPCClientDoc* theDoc;

/////////////////////////////////////////////////////////////////////////////
// CServerDialog dialog


CServerDialog::CServerDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CServerDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CServerDialog)
	m_strNodeName = _T("");
	m_strServerName = _T("");
	//}}AFX_DATA_INIT
	
	server_info = 0;
	cat_id = CATID_OPCDAServer20;
	memset(&clsid, 0, sizeof(clsid));
	enumerated = false;
}
CServerDialog::CServerDialog(OPCServerInfo* info, CWnd* pParent)
:CDialog(CServerDialog::IDD, pParent)
{
	server_info = info;

	if(server_info){
		m_strNodeName = server_info->m_NodeName;
		m_strServerName = server_info->m_ProgID;
		memcpy(&clsid, &info->m_clsid, sizeof(clsid));
	}
	else{
		m_strNodeName = _T("");
		m_strServerName = _T("");
		memset(&clsid, 0, sizeof(clsid));
	}

	cat_id = CATID_OPCDAServer20;
	
	enumerated = false;
}


void CServerDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerDialog)
	DDX_Control(pDX, IDC_LST_SERVER, m_lstServer);
	DDX_CBString(pDX, IDC_CBO_NODE, m_strNodeName);
	DDV_MaxChars(pDX, m_strNodeName, 128);
	DDX_Text(pDX, IDC_EDT_SERVERNAME, m_strServerName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CServerDialog, CDialog)
	//{{AFX_MSG_MAP(CServerDialog)
	ON_BN_CLICKED(IDC_RAD_SERVER1, OnRadServer1)
	ON_BN_CLICKED(IDC_RAD_SERVER2, OnRadServer2)
	ON_LBN_SELCHANGE(IDC_LST_SERVER, OnSelchangeLstServer)
	ON_LBN_DBLCLK(IDC_LST_SERVER, OnDblclkLstServer)
	ON_BN_CLICKED(IDC_BTN_REFRESH, OnBtnRefresh)
	ON_CBN_DROPDOWN(IDC_CBO_NODE, OnDropdownCboNode)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerDialog message handlers
//選OPC1.0
void CServerDialog::OnRadServer1() 
{
	// TODO: Add your control notification handler code here
	UpdateData();

	cat_id = CATID_OPCDAServer10;

	GetOPCServers(m_strNodeName.GetBuffer(0));
}
//OPC2.0
void CServerDialog::OnRadServer2() 
{
	// TODO: Add your control notification handler code here
	UpdateData();

	cat_id = CATID_OPCDAServer20;

	GetOPCServers(m_strNodeName.GetBuffer(0));
}

//選擇服務(wù)器
void CServerDialog::OnSelchangeLstServer() 
{
	// TODO: Add your control notification handler code here
	try{
		CListBox* list = (CListBox*)GetDlgItem(IDC_LST_SERVER);
		if(list){
			int list_pos = list->GetCurSel();
			OPCServerInfo* info = (OPCServerInfo*)list->GetItemData(list_pos);
			if(list_pos >= 0 && info != NULL){
				server_info = info;

				m_strServerName = info->m_ProgID;
				m_strNodeName = info->m_NodeName;
				if(m_strNodeName.CompareNoCase(_T("127.0.0.1")) == 0)
					m_strNodeName = _T("");

				UpdateData(false);
			}
		}
	}
	catch(...){
	}
}

void CServerDialog::OnDblclkLstServer() 
{
	// TODO: Add your control notification handler code here
	
}

//刷新服務(wù)器列表
void CServerDialog::OnBtnRefresh() 
{
	// TODO: Add your control notification handler code here
	UpdateData();

	GetOPCServers(m_strNodeName.GetBuffer(0));
}

//獲取服務(wù)器列表
void CServerDialog::GetOPCServers(LPCSTR sz_node)
{
	USES_CONVERSION;
	CWaitCursor wait;

	CListBox* list = (CListBox*)GetDlgItem(IDC_LST_SERVER);
	if(!list)
		return;
	list->ResetContent();

	IOPCServerList*	server_list = 0;
	COSERVERINFO	si;
	MULTI_QI	qi;
	
	si.dwReserved1 = 0;
	si.dwReserved2 = 0;
	if(sz_node && sz_node[0] != 0)
		si.pwszName = T2OLE(sz_node);
	else
		si.pwszName = NULL;
	si.pAuthInfo = NULL;

	qi.pIID = &IID_IOPCServerList;
	qi.pItf = NULL;
	qi.hr = 0;
	
	HRESULT hr = CoCreateInstanceEx(
		CLSID_OPCServerList,
		NULL,
		CLSCTX_ALL,
		&si,
		1,
		&qi);
	if(FAILED(hr) || FAILED(qi.hr)){
		CString msg(_T("Error connecting to OPC 2.0 Server Browser."));
		if( !m_strNodeName.IsEmpty() )
			msg.Format(_T("Error connecting to OPC 2.0 Server Browser on %s."), (LPCTSTR)m_strNodeName);
		
		if( hr == REGDB_E_CLASSNOTREG )
		{
			CString msg(_T("Please install the OPC 2.0 Components."));
			if( !m_strNodeName.IsEmpty() )
				msg.Format(_T("Please install the OPC 2.0 Components on %s."), (LPCTSTR)m_strNodeName);
		}
		
		if( FAILED(hr) )
			theDoc->ReportError(msg, hr);
		else
			theDoc->ReportError(msg, qi.hr);
	}
	else{
		server_list = (IOPCServerList*)qi.pItf;
		IEnumGUID* enum_guid = NULL;
		hr = server_list->EnumClassesOfCategories(
			1,
			&cat_id,
			1,
			&cat_id,
			&enum_guid);
		if(SUCCEEDED(hr)){
			unsigned long count = 0;
			CLSID cls_id[NEXT_COUNT];
			
			do{
				hr = enum_guid->Next(NEXT_COUNT, cls_id, &count);
				for(unsigned int index = 0; index < count; index ++){
					LPOLESTR prog_id;
					LPOLESTR user_type;
					HRESULT hr2 = server_list->GetClassDetails(cls_id[index], &prog_id, &user_type);
					if(SUCCEEDED(hr2)){
						OPCServerInfo* info = new OPCServerInfo(prog_id, user_type, cls_id[index]);
						if(info){
							info->m_NodeName = sz_node;
							server_infos.AddTail(info);
							server_info = info;
						}

						CString name;
						name.Format(_T("%s"),(LPCTSTR)info->m_ProgID);
						int list_pos = list->AddString(name);
						list->SetItemData(list_pos, (DWORD)info);

						if(m_strServerName == info->m_ProgID)
							list->SetCurSel(list_pos);

						CoTaskMemFree(prog_id);
						CoTaskMemFree(user_type);
					}
				}
			}while(hr == S_OK);

			enum_guid->Release();
			server_list->Release();
		}
		else{
			CString msg(_T("EnumClassesOfCategories failed:"));
			theDoc->ReportError(msg, hr);
		}
	}
	if(list->GetCount() > 0){
		list->SetCurSel(0);
		OnSelchangeLstServer();
	}
	
	//OPC 1.0
	if( cat_id != CATID_OPCDAServer10 )
		return;
	
	HKEY hk = HKEY_CLASSES_ROOT;
	if( sz_node )
	{
		DWORD dwR = RegConnectRegistry ((LPTSTR)sz_node, HKEY_CLASSES_ROOT, &hk);
		if( dwR != ERROR_SUCCESS )
			return;
	}
	
	TCHAR key[MAX_KEYLEN];
	DWORD size = MAX_KEYLEN;
	FILETIME ft;
	for( int index=0; RegEnumKeyEx(hk, index, key, &size, 0, NULL, NULL, &ft)==ERROR_SUCCESS; index++)
	{
		HKEY hProgID=0;
		if(RegOpenKeyEx(hk, key, 0, KEY_QUERY_VALUE, &hProgID )==ERROR_SUCCESS )
		{
			// Find OPC key
			HKEY hOPC=0;
			if(RegOpenKeyEx(hProgID, _T("OPC"), 0, KEY_QUERY_VALUE, &hOPC)==ERROR_SUCCESS )
			{
				// Found OPC key, save this information
				CLSID clsid;
				DWORD type=REG_SZ;
				HKEY hCLSID=0;
				if(RegOpenKeyEx(hProgID, _T("CLSID"), 0, KEY_QUERY_VALUE, &hCLSID)==ERROR_SUCCESS )
				{
					TCHAR clsidString[MAX_KEYLEN];
					size=MAX_KEYLEN;
					if(RegQueryValueEx(hCLSID, key, 0, &type, (BYTE*)clsidString, &size )==ERROR_SUCCESS )
					{
						hr = CLSIDFromString( T2OLE(clsidString), &clsid );
						if( FAILED(hr))
						{
							theDoc->ReportError( _T("CLSIDFromString: "), hr );
							continue;
						}
					}
				}
				
				TCHAR desc[MAX_KEYLEN];
				size=MAX_KEYLEN;
				RegQueryValueEx(hOPC, key, 0, &type, (BYTE*)desc, &size);
				OPCServerInfo* pServerInfo = new OPCServerInfo(T2OLE(key), L"", clsid );
				server_infos.AddTail( pServerInfo );
				int pos = list->AddString( pServerInfo->m_ProgID );
				list->SetItemData( pos, (DWORD)pServerInfo );
				if( m_strServerName == key )
					list->SetCurSel(pos);
				RegCloseKey( hOPC );
			}
			RegCloseKey( hProgID );
		}
		size = MAX_KEYLEN;
	}
	
	if(list->GetCount() > 0){
		list->SetCurSel(0);
		OnSelchangeLstServer();
	}
}

BOOL CServerDialog::OnInitDialog() 
{
	CWaitCursor wait;

	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CheckRadioButton(IDC_RAD_SERVER2, IDC_RAD_SERVER1, IDC_RAD_SERVER2);

	GetOPCServers();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//枚舉網(wǎng)絡(luò)節(jié)點(diǎn)
bool CServerDialog::EnumerateNodes(LPNETRESOURCE lpnr)
{
	CComboBox* pNodes = (CComboBox*)GetDlgItem(IDC_CBO_NODE);
	ASSERT(pNodes);
	
	HANDLE hEnum = 0;
	DWORD dwResult = WNetOpenEnum(RESOURCE_GLOBALNET,
		RESOURCETYPE_ANY,
		RESOURCEUSAGE_CONTAINER,
		lpnr,              // NULL first time this function is called
		&hEnum);           // handle to resource
	
	if (dwResult != NO_ERROR)
	{
		return FALSE;
	}
	
	DWORD cbBuffer = 16384;      // 16K buffer
	LPNETRESOURCE lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
	do
	{
		DWORD cEntries = 0xFFFFFFFF; // enumerate all possible entries
		dwResult = WNetEnumResource(hEnum,
			&cEntries,
			lpnrLocal,
			&cbBuffer);
		
		if (dwResult == NO_ERROR)
		{
			for( DWORD i = 0; i < cEntries; i++)
			{
				// If this NETRESOURCE is a container, call the function
				// recursively.
				if(RESOURCEUSAGE_CONTAINER ==
					(lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))
				{
					if(RESOURCEDISPLAYTYPE_SERVER == lpnrLocal[i].dwDisplayType )
					{
						CString node(lpnrLocal[i].lpRemoteName);
						int index = node.Find( _T("\\") );
						if( index > -1 )
							node = node.Mid(index+2);
						if( pNodes )
							pNodes->AddString(node);
					}
					else
					{
						EnumerateNodes(&lpnrLocal[i]);
						break;   // ONLY enumerate the first "Container"
					}
				}
			}
		}
		else if (dwResult != ERROR_NO_MORE_ITEMS)
		{
			break;
		}
	}
	while(dwResult != ERROR_NO_MORE_ITEMS);
	
	GlobalFree((HGLOBAL) lpnrLocal);
	
	dwResult = WNetCloseEnum(hEnum);
	
	pNodes->SetWindowText(m_strNodeName);
	
	if (dwResult != NO_ERROR)
	{
		return FALSE;
	}
	return true;
}

void CServerDialog::OnDropdownCboNode() 
{
	// TODO: Add your control notification handler code here
	if(!enumerated){
		CWaitCursor wait;

		EnumerateNodes(NULL);

		enumerated = true;
	}
}

//獲取OPCServerInfo
OPCServerInfo* CServerDialog::GetServerInfo()
{
	return server_info;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜视频| 亚洲综合在线视频| 懂色av一区二区三区蜜臀| 久久久久久日产精品| 国内偷窥港台综合视频在线播放| 日韩欧美一区在线| 国产乱码精品一区二区三| 久久精品在线观看| 97精品国产露脸对白| 国产乱码精品一区二区三区av| 国产亚洲成年网址在线观看| 成人午夜电影小说| 亚洲国产婷婷综合在线精品| 日韩一区二区在线观看| 国产成人av网站| 一区二区国产盗摄色噜噜| 日韩欧美激情在线| 成人av在线播放网站| 亚洲电影一级黄| 精品国产欧美一区二区| 97久久精品人人澡人人爽| 日韩 欧美一区二区三区| 欧美极品另类videosde| 欧美日韩三级视频| 丰满亚洲少妇av| 亚州成人在线电影| 中文字幕免费在线观看视频一区| 在线观看视频一区二区| 国产一区二区福利| 亚洲午夜精品17c| 国产网红主播福利一区二区| 欧美日韩精品福利| 成人爽a毛片一区二区免费| 日韩中文字幕一区二区三区| 国产精品私人影院| 欧美一区二区免费| 色哟哟国产精品| 国产一本一道久久香蕉| 亚洲电影欧美电影有声小说| 国产精品久久久久久久午夜片| 在线不卡中文字幕| 色综合久久综合网97色综合| 黄色资源网久久资源365| 亚洲国产另类av| 中文字幕亚洲在| 久久精子c满五个校花| 欧美日韩三级一区| 一本色道久久综合精品竹菊| 国产91丝袜在线播放九色| 麻豆视频观看网址久久| 性久久久久久久久| 亚洲精选免费视频| 国产精品黄色在线观看| 精品99999| 欧美mv日韩mv| 欧美二区乱c少妇| 欧美日韩国产综合一区二区 | 国产欧美日韩一区二区三区在线观看 | 国产一区二区三区免费看| 日韩精品一二三| 亚洲国产精品影院| 亚洲伊人色欲综合网| 亚洲欧洲国产日韩| 中文字幕在线一区| 欧美国产日韩一二三区| 久久久久久97三级| 欧美不卡一二三| 日韩西西人体444www| 欧美韩日一区二区三区| 久久蜜桃一区二区| 久久综合久久久久88| 欧美电影免费观看高清完整版在 | 国产精品国产精品国产专区不蜜| 久久久三级国产网站| 亚洲精品在线观看网站| 欧美xxx久久| 欧美变态tickle挠乳网站| 日韩欧美一二三区| 欧美成人综合网站| 久久久一区二区| 国产日产精品1区| 国产精品福利一区二区三区| 国产精品欧美一区喷水| 亚洲三级小视频| 一区二区成人在线观看| 亚洲1区2区3区4区| 麻豆91免费看| 狠狠狠色丁香婷婷综合激情| 国产精品主播直播| 99免费精品视频| 欧美怡红院视频| 日韩精品一区二区三区蜜臀| 2020国产精品| 中文字幕中文字幕一区二区| 亚洲色图在线看| 手机精品视频在线观看| 麻豆精品新av中文字幕| 粉嫩嫩av羞羞动漫久久久 | 在线观看一区日韩| 欧美人牲a欧美精品| 日韩欧美激情在线| 中文无字幕一区二区三区| 自拍视频在线观看一区二区| 一区二区三区四区在线| 美女一区二区三区| 成人免费毛片嘿嘿连载视频| 在线观看亚洲a| 精品裸体舞一区二区三区| 国产精品美女久久久久久久网站| 一区二区不卡在线播放 | 美国十次综合导航| 懂色av中文一区二区三区| 欧美影院一区二区三区| 2023国产一二三区日本精品2022| 中文字幕第一页久久| 婷婷夜色潮精品综合在线| 国产成人免费视频网站 | 中文一区在线播放| 天天综合色天天综合| 国产传媒欧美日韩成人| 欧美日韩一区视频| 国产视频一区不卡| 亚洲成人av中文| 国产91对白在线观看九色| 欧美色视频在线观看| 26uuu精品一区二区在线观看| 亚洲另类色综合网站| 精品一区二区免费在线观看| 91免费在线看| 久久日韩精品一区二区五区| 亚洲激情自拍偷拍| 成人a级免费电影| 欧美v亚洲v综合ⅴ国产v| 亚洲最大成人综合| 成人avav影音| 欧美成人一区二区三区在线观看| 亚洲综合成人网| 成人av在线资源网| 日韩欧美亚洲一区二区| 尤物视频一区二区| 成人av午夜电影| 久久久久久久综合狠狠综合| 免费人成精品欧美精品| 欧美无砖专区一中文字| 亚洲色图一区二区三区| 激情都市一区二区| 日韩西西人体444www| 日韩电影在线观看一区| 欧美三级在线播放| 亚洲一区二区精品久久av| 91免费视频网址| 国产精品精品国产色婷婷| 国产suv精品一区二区6| 久久伊人中文字幕| 精久久久久久久久久久| 欧美一区二区日韩一区二区| 日韩电影免费在线看| 777午夜精品免费视频| 午夜成人在线视频| 国产精品高潮呻吟| 国产不卡视频一区二区三区| 精品成人私密视频| 国内外成人在线| 久久免费电影网| 国产精品一二三区| 国产亚洲一本大道中文在线| 另类欧美日韩国产在线| 精品国产在天天线2019| 精品一区二区三区香蕉蜜桃 | 国产在线不卡一卡二卡三卡四卡| 日韩精品一区二区三区老鸭窝| 欧美bbbbb| 久久精品视频免费| 成人小视频在线观看| 中文字幕在线免费不卡| 日本福利一区二区| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲一区二区三区影院| 欧美伊人精品成人久久综合97 | 麻豆91精品91久久久的内涵| 日韩一级片网站| 国产乱码字幕精品高清av | 亚洲人成网站精品片在线观看| 91美女精品福利| 亚洲国产精品久久久久秋霞影院 | 久久精品夜色噜噜亚洲aⅴ| 韩国三级电影一区二区| 国产精品无遮挡| 欧美三级一区二区| 久久成人久久爱| 国产精品麻豆一区二区| 欧美日韩亚洲国产综合| 激情综合色丁香一区二区| 中文字幕精品在线不卡| 欧美在线观看视频在线| 九色综合狠狠综合久久| 1024国产精品| 日韩手机在线导航| proumb性欧美在线观看| 日韩高清在线一区|