即程序中运行一个程序。
代码实现
.386 ;汇编语言的伪指令
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include wininet.inc
includelib wininet.lib
.data?
hintInternetOpen dd ?
hintInternetOpenUrl dd ?
hCreateFile dd ?
dwBytesRead dd ?
dwWritten dd ?
bWriteFile dd ?
szDownBuffer db 4096 dup (?)
.const
szAgent db "Microsoft Internet Explorer",0
URL db "https://baike.baidu.com/item/win32/4894730?fr=aladdin",0
szFilePath db "E:\1.txt",0
szCreateFileError db "CreateFile Error!",0
szErrorCaption db "Error",0
szInternetOpenError db "InternetOpen Error!",0
szInternetOpenURLError db "InternetOpenURL Error!",0
.code
;输出出错信息,并退出
ErrorExit proc ErrorMsg
invoke MessageBox,NULL,ErrorMsg,offset szErrorCaption,MB_OK
invoke ExitProcess,NULL
ErrorExit endp
start:
invoke InternetOpen, offset szAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0
mov hintInternetOpen,eax
.if eax == NULL
invoke InternetCloseHandle,hintInternetOpen
invoke ErrorExit,offset szInternetOpenError
.endif
invoke InternetOpenUrl, hintInternetOpen, offset URL, NULL, 0, 0, 0
mov hintInternetOpenUrl,eax
.if eax == NULL
invoke InternetCloseHandle,hintInternetOpen
invoke InternetCloseHandle,hintInternetOpenUrl
invoke ErrorExit,offset szInternetOpenError
.endif
invoke CreateFile,offset szFilePath,GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
.if eax == INVALID_HANDLE_VALUE
invoke InternetCloseHandle,hintInternetOpen
invoke InternetCloseHandle,hintInternetOpenUrl
invoke ErrorExit,szCreateFileError
.endif
mov hCreateFile,eax
mov dwBytesRead,0
mov bWriteFile,1
.while 1
invoke InternetReadFile,hintInternetOpenUrl,offset szDownBuffer, sizeof szDownBuffer, offset dwBytesRead
.if dwBytesRead == 0
.break
.endif
invoke WriteFile,hCreateFile, offset szDownBuffer, dwBytesRead, offset dwWritten, NULL
mov bWriteFile,eax
.if eax == 0
.break
.endif
.endw
invoke InternetCloseHandle,hintInternetOpen
invoke InternetCloseHandle,hintInternetOpenUrl
invoke CloseHandle,hCreateFile
invoke ExitProcess,NULL
end start
参考C语言
#include <windows.h>
#include <wininet.h>
#define URL "https://baike.baidu.com/item/win32/4894730?fr=aladdin"
#define PATH "E:\1.txt"
#define szAgnet "Microsoft Internet Explorer"
int main()
{
DWORD dwByteRead = 0;
char szDownBuffer[4096];
memset(szDownBuffer, 0, 4096);
BOOL bIntNetReadFile = TRUE;
BOOL bWriteFile = TRUE;
DWORD dwWritten = 0;
HINTERNET hintInternetOpen = InternetOpen("Testing", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (!hintInternetOpen)
{
InternetCloseHandle(hintInternetOpen);
return 1;
}
HINTERNET hintInternetOpenUrl = InternetOpenUrl(hintInternetOpen, URL, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (!hintInternetOpenUrl)
{
InternetCloseHandle(hintInternetOpen);
InternetCloseHandle(hintInternetOpenUrl);
return 1;
}
HANDLE hCreateFile = CreateFile(PATH, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hCreateFile == INVALID_HANDLE_VALUE)
{
InternetCloseHandle(hintInternetOpen);
InternetCloseHandle(hintInternetOpenUrl);
return 1;
}
while (bIntNetReadFile && bWriteFile)
{
bIntNetReadFile = InternetReadFile(hintInternetOpenUrl, szDownBuffer, sizeof(szDownBuffer), &dwByteRead);
if (!dwByteRead)
{
break;
}
bWriteFile = WriteFile(hCreateFile, szDownBuffer, sizeof(szDownBuffer), &dwWritten, NULL);
if (!dwWritten)
{
break;
}
}
InternetCloseHandle(hintInternetOpen);
InternetCloseHandle(hintInternetOpenUrl);
return 0;
}