MCPcopy Create free account
hub / github.com/AutoHotkey/AutoHotkey-v1.0 / URLDownloadToFile

Method URLDownloadToFile

Source/script2.cpp:8615–8705  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8613
8614
8615ResultType Line::URLDownloadToFile(char *aURL, char *aFilespec)
8616// This has been adapted from the AutoIt3 source.
8617{
8618 // Check that we have IE3 and access to wininet.dll
8619 HINSTANCE hinstLib = LoadLibrary("wininet.dll");
8620 if (!hinstLib)
8621 return g_ErrorLevel->Assign(ERRORLEVEL_ERROR);
8622
8623 typedef HINTERNET (WINAPI *MyInternetOpen)(LPCTSTR, DWORD, LPCTSTR, LPCTSTR, DWORD dwFlags);
8624 typedef HINTERNET (WINAPI *MyInternetOpenUrl)(HINTERNET hInternet, LPCTSTR, LPCTSTR, DWORD, DWORD, LPDWORD);
8625 typedef BOOL (WINAPI *MyInternetCloseHandle)(HINTERNET);
8626 typedef BOOL (WINAPI *MyInternetReadFileEx)(HINTERNET, LPINTERNET_BUFFERS, DWORD, DWORD);
8627
8628 #ifndef INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY
8629 #define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4
8630 #endif
8631
8632 // Get the address of all the functions we require. It's done this way in case the system
8633 // lacks MSIE v3.0+, in which case the app would probably refuse to launch at all:
8634 MyInternetOpen lpfnInternetOpen = (MyInternetOpen)GetProcAddress(hinstLib, "InternetOpenA");
8635 MyInternetOpenUrl lpfnInternetOpenUrl = (MyInternetOpenUrl)GetProcAddress(hinstLib, "InternetOpenUrlA");
8636 MyInternetCloseHandle lpfnInternetCloseHandle = (MyInternetCloseHandle)GetProcAddress(hinstLib, "InternetCloseHandle");
8637 MyInternetReadFileEx lpfnInternetReadFileEx = (MyInternetReadFileEx)GetProcAddress(hinstLib, "InternetReadFileExA");
8638 if (!lpfnInternetOpen || !lpfnInternetOpenUrl || !lpfnInternetCloseHandle || !lpfnInternetReadFileEx)
8639 return g_ErrorLevel->Assign(ERRORLEVEL_ERROR);
8640
8641 // Open the internet session
8642 HINTERNET hInet = lpfnInternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
8643 if (!hInet)
8644 {
8645 FreeLibrary(hinstLib);
8646 return g_ErrorLevel->Assign(ERRORLEVEL_ERROR);
8647 }
8648
8649 // Open the required URL
8650 HINTERNET hFile = lpfnInternetOpenUrl(hInet, aURL, NULL, 0, 0, 0);
8651 if (!hFile)
8652 {
8653 lpfnInternetCloseHandle(hInet);
8654 FreeLibrary(hinstLib);
8655 return g_ErrorLevel->Assign(ERRORLEVEL_ERROR);
8656 }
8657
8658 // Open our output file
8659 FILE *fptr = fopen(aFilespec, "wb"); // Open in binary write/destroy mode
8660 if (!fptr)
8661 {
8662 lpfnInternetCloseHandle(hFile);
8663 lpfnInternetCloseHandle(hInet);
8664 FreeLibrary(hinstLib);
8665 return g_ErrorLevel->Assign(ERRORLEVEL_ERROR);
8666 }
8667
8668 BYTE bufData[1024 * 8];
8669 INTERNET_BUFFERS buffers = {0};
8670 buffers.dwStructSize = sizeof(INTERNET_BUFFERS);
8671 buffers.lpvBuffer = bufData;
8672 buffers.dwBufferLength = sizeof(bufData);

Callers

nothing calls this directly

Calls 1

AssignMethod · 0.80

Tested by

no test coverage detected