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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ftpdemo.cpp

?? 利用輔助線程從匿名FTP服務器上下載文件
?? CPP
字號:
// FTPDemo.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

//全局變量
HINSTANCE   hInst ;
TCHAR       szAppName[] = TEXT ("FTPDEMO");

//函數聲明
LRESULT CALLBACK    WndProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL    CALLBACK    DlgProc (HWND, UINT, WPARAM, LPARAM) ;
VOID                FtpThread (PVOID) ;
VOID                ButtonSwitch (HWND, HWND, TCHAR *) ;
FILELIST *          GetFileList (VOID) ;
int                 Compare (const void * pinfo1, const void * pinfo2) ;


int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     hInst = hInstance ;

     wndclass.style         = 0 ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = NULL ;
     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("從匿名服務器下載文件的Demo"),
                          WS_OVERLAPPEDWINDOW | WS_VSCROLL,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;

     ShowWindow (hwnd, nCmdShow) ;
     UpdateWindow (hwnd) ;

     //此句用于窗口顯示后立即檢查本地是否有新的文件

     SendMessage (hwnd, WM_USER_CHECKFILES, 0, 0) ;

     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static FILELIST * plist ;
     static int        cxClient, cyClient, cxChar, cyChar ;
     HDC               hdc ;
     int               i ;
     PAINTSTRUCT       ps ;
     SCROLLINFO        si ;
     SYSTEMTIME        st ;
     TCHAR             szFilename [MAX_PATH] ;

     switch (message)
     {
     case WM_CREATE:
          cxChar = LOWORD (GetDialogBaseUnits ()) ;
          cyChar = HIWORD (GetDialogBaseUnits ()) ;
          return 0 ;

     case WM_SIZE:
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;

          si.cbSize = sizeof (SCROLLINFO) ;
          si.fMask  = SIF_RANGE | SIF_PAGE ;
          si.nMin   = 0 ;
          si.nMax   = plist ? plist->iNum - 1 : 0 ;
          si.nPage  = cyClient / cyChar ;

          SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
          return 0 ;

     case WM_VSCROLL:
          si.cbSize = sizeof (SCROLLINFO) ;
          si.fMask  = SIF_POS | SIF_RANGE | SIF_PAGE ;
          GetScrollInfo (hwnd, SB_VERT, &si) ;

          switch (LOWORD (wParam))
          {
          case SB_LINEDOWN:       si.nPos += 1 ;              break ;
          case SB_LINEUP:         si.nPos -= 1 ;              break ;
          case SB_PAGEDOWN:       si.nPos += si.nPage ;       break ;
          case SB_PAGEUP:         si.nPos -= si.nPage ;       break ;
          case SB_THUMBPOSITION:  si.nPos = HIWORD (wParam) ; break ;
          default:                return 0 ;
          }
          si.fMask = SIF_POS ;
          SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
          InvalidateRect (hwnd, NULL, TRUE) ;
          return 0 ;



     case WM_USER_CHECKFILES:
         //得到系統日期并用以組織文件名字

          GetSystemTime (&st);
          wsprintf (szFilename, TEXT ("FTPDEMO%04i%02i.TXT"), st.wYear, st.wMonth);//每月更新FTPDEMOyyyymm.TXT

          //檢查當前目錄是否存在該文件,如果存在則讀取所有文件
          //函數GetFileAttributes調用失敗后將返回0xFFFFFFFF
          if (GetFileAttributes (szFilename) != (DWORD) -1)
          {
               SendMessage (hwnd, WM_USER_GETFILES, 0, 0) ;
               return 0 ;
          }
          //否則從Internet得到該文件
          //測試當前目錄所在驅動器是否是CD-ROM類型,因為一般來說CD-ROM不可寫
          if (GetDriveType (NULL) == DRIVE_CDROM)
          {
               MessageBox (hwnd, TEXT ("Cannot run this program from CD-ROM!"),szAppName, MB_OK | MB_ICONEXCLAMATION) ;
               return 0 ;
          }
          //詢問用戶是否下載文件
          if (IDYES == MessageBox (hwnd, TEXT ("從Internet下載新文件?"),szAppName, MB_YESNO | MB_ICONQUESTION))
			  DialogBox (hInst, szAppName, hwnd, DlgProc);

          //更新主窗口
          SendMessage (hwnd, WM_USER_GETFILES, 0, 0);
          return 0 ;

     case WM_USER_GETFILES:
          SetCursor (LoadCursor (NULL, IDC_WAIT));
          ShowCursor (TRUE) ;

          //將所有的FTPDEMOyyyymm.TXT檔案讀到動態配置的FILELIST型態結構中

          plist = GetFileList () ;

          ShowCursor (FALSE) ;
          SetCursor (LoadCursor (NULL, IDC_ARROW)) ;

          //模擬WM_SIZE message,然後在其顯示區域顯示這些檔案的內容

          SendMessage (hwnd, WM_SIZE, 0, MAKELONG (cxClient, cyClient)) ;
          InvalidateRect (hwnd, NULL, TRUE) ;
          return 0 ;

     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;
          SetTextAlign (hdc, TA_UPDATECP) ;

          si.cbSize = sizeof (SCROLLINFO) ;
          si.fMask  = SIF_POS ;
          GetScrollInfo (hwnd, SB_VERT, &si) ;

          if (plist)
          {
               for (i = 0 ; i < plist->iNum ; i++)
               {
                    MoveToEx (hdc, cxChar, (i - si.nPos) * cyChar, NULL) ;
                    TextOut  (hdc, 0, 0, plist->info[i].szFilename,lstrlen (plist->info[i].szFilename)) ;
                    TextOut  (hdc, 0, 0, TEXT (": "), 2) ;
                    TextOutA (hdc, 0, 0, plist->info[i].szContents,strlen (plist->info[i].szContents)) ;
               }
          }
          EndPaint (hwnd, &ps) ;
          return 0 ;

     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

BOOL CALLBACK DlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static PARAMS params ;

     switch (message)
     {
     case WM_INITDIALOG:
          params.bContinue = TRUE ;
          params.hwnd = hwnd;
          _beginthread (FtpThread, 0, &params);
          return TRUE ;

     case WM_COMMAND:
          switch (LOWORD (wParam))
          {
          case IDCANCEL:           //取消下載
               params.bContinue = FALSE ;
               return TRUE ;

          case IDOK:               //退出模態對話框
               EndDialog (hwnd, 0) ;
               return TRUE ;
          }
     }
     return FALSE ;
}

/*----------------------------------------------------------------------
   FtpThread: 從FTP server上讀取文件并將他們拷貝到本地磁盤中
  ----------------------------------------------------------------------*/

void FtpThread (PVOID parg)
{
     BOOL            bSuccess ;
     HINTERNET       hIntSession, hFtpSession, hFind ;
     HWND            hwndStatus, hwndButton ;
     PARAMS *        pparams;
     TCHAR           szBuffer [64] ;
     WIN32_FIND_DATA finddata ;

     pparams = (PARAMS *)parg ;
	 //用hwndStatus代號呼叫SetWindowText來讓使用者知道進展情況,這里指的是對話方塊中間的靜態文字區
     hwndButton = GetDlgItem (pparams->hwnd, IDCANCEL);
     hwndStatus = GetDlgItem (pparams->hwnd, IDC_MYSTATUS);

     hIntSession = InternetOpen (szAppName, INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, INTERNET_FLAG_ASYNC) ;

     if (hIntSession == NULL)
     {
          wsprintf (szBuffer, TEXT ("InternetOpen error %i"), GetLastError ()) ;
          ButtonSwitch (hwndStatus, hwndButton, szBuffer) ;
          _endthread () ;
     }

     SetWindowText (hwndStatus, TEXT ("Internet session opened...")) ;

     //檢查用戶是否按下了CANCEL

     if (!pparams->bContinue)
     {
          InternetCloseHandle (hIntSession) ;
          ButtonSwitch (hwndStatus, hwndButton, NULL) ;
          _endthread () ;
     }

     hFtpSession = InternetConnect (hIntSession, FTPSERVER,INTERNET_DEFAULT_FTP_PORT,
                                    NULL, NULL, INTERNET_SERVICE_FTP, 0, 0) ;
     if (hFtpSession == NULL)
     {
          InternetCloseHandle (hIntSession) ;
          wsprintf (szBuffer,TEXT ("InternetConnect error %i"),GetLastError ()) ;
          ButtonSwitch (hwndStatus, hwndButton, szBuffer) ;
          _endthread () ;
     }

     SetWindowText (hwndStatus, TEXT ("FTP Session opened...")) ;
     
     //檢查用戶是否按下了CANCEL

     if (!pparams->bContinue)
     {
          InternetCloseHandle (hFtpSession) ;
          InternetCloseHandle (hIntSession) ;
          ButtonSwitch (hwndStatus, hwndButton, NULL) ;
          _endthread () ;
     }

     //設置目錄
     
     bSuccess = FtpSetCurrentDirectory (hFtpSession, DIRECTORY);

     if (!bSuccess)
     {
          InternetCloseHandle (hFtpSession) ;
          InternetCloseHandle (hIntSession) ;
          wsprintf (szBuffer, TEXT ("Cannot set directory to %s"),DIRECTORY);
          ButtonSwitch (hwndStatus, hwndButton, szBuffer) ;
          _endthread () ;
     }

     SetWindowText (hwndStatus, TEXT ("Directory found...")) ;

     //檢查用戶是否按下了CANCEL

     if (!pparams->bContinue)
     {
          InternetCloseHandle (hFtpSession) ;
          InternetCloseHandle (hIntSession) ;
          ButtonSwitch (hwndStatus, hwndButton, NULL) ;
          _endthread () ;
     }

     //得到符合TEMPLATE文件名要求得第一個文件
     hFind = FtpFindFirstFile (hFtpSession, TEMPLATE, &finddata, 0, 0) ;

     if (hFind == NULL)
     {
          InternetCloseHandle (hFtpSession) ;
          InternetCloseHandle (hIntSession) ;
          ButtonSwitch (hwndStatus, hwndButton, TEXT ("Cannot find files")) ;
          _endthread () ;
     }

     do 
     {
          //檢查用戶是否按下了CANCEL
          if (!pparams->bContinue)
          {
               InternetCloseHandle (hFind) ;
               InternetCloseHandle (hFtpSession) ;
               InternetCloseHandle (hIntSession) ;
               ButtonSwitch (hwndStatus, hwndButton, NULL) ;
               _endthread () ;
          }
          //從internet復制文件到本地磁盤, 當本地磁盤上已經存在這個文件得時候返回NULL
          wsprintf (szBuffer, TEXT ("Reading file %s..."), finddata.cFileName);
          SetWindowText (hwndStatus, szBuffer) ;

          FtpGetFile (hFtpSession, finddata.cFileName, finddata.cFileName, TRUE, 
                      FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0) ;
     }
     while (InternetFindNextFile (hFind, &finddata)) ;

     InternetCloseHandle (hFind) ;
     InternetCloseHandle (hFtpSession) ;
     InternetCloseHandle (hIntSession) ;

     ButtonSwitch (hwndStatus, hwndButton, TEXT ("Internet Download Complete"));
}

/*-----------------------------------------------------------------------
   ButtonSwitch:  在狀態信息框中顯示信息并將Cancel按鈕改變為IDOK按鈕
  -----------------------------------------------------------------------*/

VOID ButtonSwitch (HWND hwndStatus, HWND hwndButton, TCHAR * szText) 
{
     if (szText)
          SetWindowText (hwndStatus, szText) ;
     else
          SetWindowText (hwndStatus, TEXT ("Internet Session Cancelled")) ;

     SetWindowText (hwndButton, TEXT ("OK")) ;
     SetWindowLong (hwndButton, GWL_ID, IDOK) ;
}

/*-----------------------------------------------------------------------
   GetFileList: 從本地磁盤中讀文件并保存他們得名字和內容
  -----------------------------------------------------------------------*/

FILELIST * GetFileList (void)
{
     DWORD           dwRead ;
     FILELIST      * plist ;
     HANDLE          hFile, hFind ;
     int             iSize, iNum  ;
     WIN32_FIND_DATA finddata ;

     hFind = FindFirstFile (TEMPLATE, &finddata) ;

     if (hFind == INVALID_HANDLE_VALUE)
          return NULL ;
     
     plist = NULL ;
     iNum  = 0 ;

     do
     {
          //打開文件
          hFile = CreateFile (finddata.cFileName, GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, 0, NULL) ;

          if (hFile == INVALID_HANDLE_VALUE)
               continue ;
          //得到文件大小
          iSize = GetFileSize (hFile, NULL) ;

          if (iSize == (DWORD) -1)
          {
               CloseHandle (hFile) ;
               continue ;
          }
          //為FILELIST類型得變量plist分配內存塊

          plist = (FILELIST *)realloc (plist, sizeof (FILELIST) + iNum * sizeof (FILEINFO));

          //分配空間以保存文件名 
          plist->info[iNum].szFilename = (char *)malloc (lstrlen (finddata.cFileName) +sizeof (TCHAR)) ;
          lstrcpy (plist->info[iNum].szFilename, finddata.cFileName) ;

          //分配空間以保存文件內容
          plist->info[iNum].szContents = (char *)malloc (iSize + 1) ;
          ReadFile (hFile, plist->info[iNum].szContents, iSize, &dwRead, NULL);
          plist->info[iNum].szContents[iSize] = 0 ;

          CloseHandle (hFile) ;
          iNum ++ ;
     }
     while (FindNextFile (hFind, &finddata)) ;

     FindClose (hFind) ;

     //按文件名排序
     qsort (plist->info, iNum, sizeof (FILEINFO), Compare) ;

     plist->iNum = iNum ;

     return plist ;
}

/*----------------------------
   Compare function for qsort
  ----------------------------*/

int Compare (const void * pinfo1, const void * pinfo2)
{
     return lstrcmp (((const FILEINFO *)pinfo2)->szFilename, ((const FILEINFO *)pinfo1)->szFilename) ;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线免费视屏| 日韩午夜av电影| 老司机精品视频一区二区三区| 国产清纯白嫩初高生在线观看91| 欧美理论片在线| 99国产精品久久久久| 蜜桃视频在线观看一区| 亚洲综合色网站| 国产日韩欧美制服另类| 欧美一区二区免费视频| 色综合激情五月| 成人午夜免费电影| 精品在线播放午夜| 日韩电影在线免费看| 亚洲婷婷综合色高清在线| 国产亚洲人成网站| 日韩一级完整毛片| 9191成人精品久久| 欧美亚洲高清一区| 色久优优欧美色久优优| 国产成人av影院| 黑人巨大精品欧美黑白配亚洲| 日韩二区在线观看| 五月婷婷综合激情| 亚洲一卡二卡三卡四卡五卡| 亚洲免费在线播放| 中文字幕一区av| 国产精品三级久久久久三级| 国产视频一区在线播放| 日韩女优毛片在线| 日韩一区二区三区在线观看| 欧美喷水一区二区| 欧美日韩一级黄| 欧美日韩国产精品自在自线| 在线观看视频一区二区| 日本大香伊一区二区三区| 97久久精品人人做人人爽| av资源站一区| 色噜噜狠狠色综合欧洲selulu| 成人av资源站| 91麻豆产精品久久久久久| 99在线视频精品| 92国产精品观看| 色88888久久久久久影院按摩 | 国产片一区二区| 久久久久久久久久电影| 国产欧美日韩精品a在线观看| 日韩一区二区电影网| 欧美变态口味重另类| 久久综合九色综合97婷婷女人| 2021国产精品久久精品| 国产欧美视频一区二区三区| 中文字幕av资源一区| 国产精品福利电影一区二区三区四区 | 97久久精品人人做人人爽| 91丝袜美腿高跟国产极品老师| jizzjizzjizz欧美| 日本韩国欧美三级| 91精品久久久久久久91蜜桃| 日韩久久久精品| 国产欧美1区2区3区| 亚洲精选一二三| 日韩精品一二三四| 国产一区二区三区蝌蚪| heyzo一本久久综合| 欧美日韩五月天| 欧美成人aa大片| 国产精品免费久久| 亚洲国产成人高清精品| 韩国一区二区三区| 91麻豆国产福利精品| 欧美一区二区三区四区高清| 国产清纯白嫩初高生在线观看91 | 欧美一区二区视频在线观看2022| 欧美精品一区二区三区视频| 国产精品国产三级国产普通话99 | 日本中文一区二区三区| 国产伦精一区二区三区| 在线视频你懂得一区二区三区| 欧美一区二区三区四区在线观看| 国产视频视频一区| 亚洲高清在线视频| 黄网站免费久久| 日本高清不卡aⅴ免费网站| 日韩一区二区三区免费看| 亚洲婷婷综合色高清在线| 蜜桃久久精品一区二区| 99国产精品一区| 欧美不卡激情三级在线观看| 一区二区三区在线观看欧美| 美国欧美日韩国产在线播放| 99久久久国产精品| 精品美女被调教视频大全网站| 亚洲精品精品亚洲| 韩国欧美国产1区| 欧美午夜精品久久久| 国产精品天干天干在观线| 天天色 色综合| 色综合久久中文字幕| 欧美精品一区二区三区在线播放| 亚洲一区日韩精品中文字幕| 国产精品一区一区三区| 欧美美女一区二区在线观看| 国产精品午夜在线| 狠狠色丁香久久婷婷综合_中| 欧美日韩久久不卡| 亚洲麻豆国产自偷在线| 国产成人免费视频精品含羞草妖精| 91精品国产综合久久久久久久 | 亚洲成人av中文| 91在线精品一区二区| 日韩欧美电影一二三| 午夜视频久久久久久| 色综合久久综合| 国产精品无人区| 国产美女视频一区| 久久综合久久久久88| 久久精品国产精品亚洲红杏| 欧美老肥妇做.爰bbww视频| 亚洲精品国产精品乱码不99| 成人美女视频在线观看18| 久久久久久久综合日本| 麻豆中文一区二区| 日韩欧美美女一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 人人精品人人爱| 欧美日韩一区二区三区视频| 亚洲三级电影网站| 91老师片黄在线观看| 国产精品成人一区二区三区夜夜夜| 国产成人自拍网| 久久精品亚洲国产奇米99| 国产在线日韩欧美| 精品国产99国产精品| 国产伦精品一区二区三区在线观看| 精品美女在线观看| 国产精品一区在线| 国产精品毛片大码女人| 成人激情文学综合网| 国产精品妹子av| 91香蕉视频在线| 亚洲欧美激情一区二区| 欧美系列一区二区| 丝袜亚洲另类欧美| 日韩一区二区三区四区| 韩国毛片一区二区三区| 日本一二三不卡| 99久久综合色| 一区二区三区在线观看欧美| 欧美日韩一二三区| 久久成人免费网站| 国产精品美女久久久久久久久| 本田岬高潮一区二区三区| 亚洲精品日韩一| 欧美一区二区视频网站| 国产一区二区导航在线播放| 国产精品欧美久久久久无广告| 91高清视频在线| 日本aⅴ亚洲精品中文乱码| 久久精品亚洲精品国产欧美kt∨| 不卡的av电影在线观看| 亚洲综合无码一区二区| 欧美一区二区三区免费观看视频| 精久久久久久久久久久| 亚洲欧洲国产日韩| 欧美日韩黄视频| 久久国产成人午夜av影院| 国产精品嫩草影院av蜜臀| 欧美午夜一区二区三区免费大片| 蜜臀久久99精品久久久久久9| 久久精品一区四区| 欧美午夜免费电影| 国产乱码精品一区二区三区av| 亚洲精品中文在线| 亚洲精品一区二区三区精华液| 99九九99九九九视频精品| 青青草国产精品亚洲专区无| 中文一区一区三区高中清不卡| 精品视频在线看| 国产成人精品在线看| 亚洲第一主播视频| 久久精品欧美一区二区三区麻豆| 欧美亚洲综合另类| 国产麻豆精品一区二区| 亚洲综合小说图片| 国产欧美中文在线| 欧美老人xxxx18| eeuss鲁一区二区三区| 男女性色大片免费观看一区二区| 国产精品免费免费| 精品欧美久久久| 欧美艳星brazzers| 成人av在线影院| 久久精品国产精品亚洲红杏| 亚洲最大成人网4388xx| 国产欧美一区二区三区鸳鸯浴| 91精品国产综合久久精品图片 | 精品国产乱码久久久久久牛牛| 色网综合在线观看| 国产电影一区在线|