我正在使用installshield安装服务。此服务配置为在用户重新启动系统或登录时启动。现在,我需要在PC中有网络连接时启动应用程序。 有什么方法可以做到这一点??
谢谢!
答案 0 :(得分:3)
要检查网络连接,您可以致电IsNetworkAlive。 这是一个例子:
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <Sensapi.h>
#pragma comment(lib, "Sensapi.lib")
int _tmain(int argv, char *argc[])
{
DWORD dwSens;
if (IsNetworkAlive(&dwSens) == FALSE)
{
printf("No network connection");
}
else
{
switch(dwSens)
{
case NETWORK_ALIVE_LAN:
printf("LAN connection available");
break;
case NETWORK_ALIVE_WAN:
printf("WAN connection available");
break;
default:
printf("Unknown connection available");
break;
}
}
return 0;
}
从Vista开始,您还可以查看Network list manager。这将为您提供更详细的答案:
您可以调用方法INetworkListManager::GetConnectivity来检查网络连接:
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <Netlistmgr.h>
#include <atlbase.h>
int _tmain(int argv, char *argc[])
{
printf("\n");
CoInitialize(NULL);
{
CComPtr<INetworkListManager> pNLM;
HRESULT hr = CoCreateInstance(CLSID_NetworkListManager, NULL,
CLSCTX_ALL, __uuidof(INetworkListManager), (LPVOID*)&pNLM);
if (SUCCEEDED(hr))
{
NLM_CONNECTIVITY con = NLM_CONNECTIVITY_DISCONNECTED;
hr = pNLM->GetConnectivity(&con);
if SUCCEEDED(hr)
{
if (con & NLM_CONNECTIVITY_IPV4_INTERNET)
printf("IP4: Internet\n");
if (con & NLM_CONNECTIVITY_IPV4_LOCALNETWORK)
printf("IP4: Local\n");
if (con & NLM_CONNECTIVITY_IPV4_SUBNET)
printf("IP4: Subnet\n");
if (con & NLM_CONNECTIVITY_IPV6_INTERNET)
printf("IP6: Internet\n");
if (con & NLM_CONNECTIVITY_IPV6_LOCALNETWORK)
printf("IP6: Local\n");
if (con & NLM_CONNECTIVITY_IPV6_SUBNET)
printf("IP6: Subnet\n");
}
}
}
CoUninitialize();
return 0;
}
答案 1 :(得分:0)
您可以尝试ping一个网站,例如google,这是99,99%在线并对布尔值作出反应。
答案 2 :(得分:0)
每秒修改并告诉您的服务网络可用性,因为它到达您的系统,在您的代码中做任何您想做的事情。
此外,您可以使用计时器控件创建一个exe,并定期轮询以进行互联网/网络连接