• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 23,  comments - 20,  trackbacks - 0
             
                 摘要: 費了九牛二虎之力  終于讓我把二弄出來了...不好弄啊  本來都準備算了哎  技術人員  哪能那么簡單說放棄 ...最后用了一個最笨的方法終于實現了要求這次由于時間很匆忙  所以 界面方面沒有做任何工作  速度的計算也沒有  本來是準備用線程池的  試驗了一下  最后還是做老本行吧...自己創建線程沒有什么多...  閱讀全文
            posted @ 2009-08-18 17:28 李佳 閱讀(424) | 評論 (0)編輯 收藏
            最近工作比較輕松  現在沒事不能不寫代碼  呵呵 閑著沒事  想做個下載工具
            先大致分成三步做吧 
            第一步  文件的下載  最基礎
            第二步  多線程連接下載文件    提高速度的關鍵
            第三部  斷點續傳    非常實用

            今天來實現第一步吧
            文件的下載  http協議的

            使用了一個VC知識庫的Http類      不多說 上代碼
              1 //確定按鈕
              2 void CHttpDownloadDlg::OnBnClickedOk()
              3 {    
              4     ::CreateThread(NULL,0,DownloadThreadProc,(PVOID)this,NULL,NULL);    
              5 }
              6 
              7 //退出按鈕
              8 void CHttpDownloadDlg::OnBnClickedCancel()
              9 {
             10     // TODO: 在此添加控件通知處理程序代碼
             11     OnCancel();
             12 }
             13 
             14 //獲取存儲的文件夾
             15 CString CHttpDownloadDlg::GetStorgeFolde(void)
             16 {
             17     CString strFold;
             18     BROWSEINFO   bi;  
             19     TCHAR   buffer[MAX_PATH];  
             20     ZeroMemory(buffer,   MAX_PATH);  
             21     bi.hwndOwner   =   GetSafeHwnd();  
             22     bi.pidlRoot   =   NULL;  
             23     bi.pszDisplayName   =   buffer;  
             24 
             25     bi.lpszTitle   =   _T("選擇一個文件夾");  
             26     bi.ulFlags   =   BIF_EDITBOX;  
             27     bi.lpfn   =   NULL;  
             28     bi.lParam   =   0;  
             29     bi.iImage   =   0;  
             30 
             31     LPITEMIDLIST   pList   =   NULL;  
             32     if   ((pList   =   SHBrowseForFolder(&bi))   !=   NULL)  
             33     {  
             34         TCHAR   path[MAX_PATH];  
             35         ZeroMemory(path,   MAX_PATH);  
             36         SHGetPathFromIDList(pList,   path);  
             37         strFold = path;
             38         UpdateData(FALSE);        
             39     }    
             40     return strFold;
             41 }
             42 
             43 //線程函數
             44 DWORD WINAPI DownloadThreadProc(LPVOID pDate)
             45 {
             46     CHttpDownloadDlg * pMainDlg = (CHttpDownloadDlg*)pDate;
             47     //pMainDlg->m_DownloadProg.SetPos(30);
             48     CHttpSocket HttpSocket;
             49     CString strServer , strObject ;
             50     USHORT uPort;
             51     DWORD dwServerType;
             52     long lLenth;
             53     const char * pRequestHeader = NULL;
             54 
             55     //通過URL獲取相關參數
             56     AfxParseURL(pMainDlg->m_strDownloadAddr , dwServerType , strServer , strObject , uPort);
             57     pRequestHeader = HttpSocket.FormatRequestHeader((LPTSTR)(LPCTSTR)strServer , (LPTSTR)(LPCTSTR)strObject , lLenth );
             58     HttpSocket.Socket();
             59     HttpSocket.Connect((LPTSTR)(LPCTSTR)strServer );
             60     HttpSocket.SendRequest();
             61     HttpSocket.SetTimeout(100);
             62 
             63     char szLength[15];
             64     HttpSocket.GetField("Content-Length" , szLength , 15);
             65     int iServerState = HttpSocket.GetServerState();
             66     int iFileSize = atoi(szLength);
             67     pMainDlg->m_DownloadProg.SetRange(0,iFileSize/1024);    //設置進度條
             68     CFile file;
             69     file.Open(pMainDlg->m_strStorgePath , CFile::modeCreate | CFile::modeWrite);
             70     char szDate[2048];
             71     int iRecvSize = 0;    //讀取的文件大小
             72     int iCompleteSize = 0;
             73     //DWORD dwStartTime , dwEndTime;    //暫時不計算速度
             74     while (iCompleteSize < iFileSize)
             75     {
             76         //dwStartTime = GetTickCount();
             77         iRecvSize = HttpSocket.Receive(szDate , 2048);
             78         if (iRecvSize == 0)
             79         {
             80             ::AfxMessageBox("服務器關閉鏈接");
             81             break;
             82         }
             83         if (iRecvSize == -1)
             84         {
             85             ::AfxMessageBox("接收數據超時");
             86             break;
             87         }
             88         //dwEndTime = GetTickCount();
             89         file.Write(szDate , iRecvSize);
             90         iCompleteSize += iRecvSize;
             91         pMainDlg->m_DownloadProg.SetPos(iCompleteSize / 1024 );        
             92     }
             93     file.Close();
             94     pMainDlg->m_DownloadProg.SetPos(0);
             95     AfxMessageBox("下載完成");
             96     return 1;
             97 }
             98 
             99 //獲取存儲路徑   仿造迅雷的獲取存儲名稱 盡量不要用戶使用鍵盤
            100 void CHttpDownloadDlg::OnBnClickedGetStorgePath()
            101 {
            102     UpdateData(TRUE);
            103     if(m_strDownloadAddr == "")
            104     {
            105         AfxMessageBox("請輸入下載地址" , MB_OK);
            106         return ;
            107     }
            108 
            109     CString strFileName = m_strDownloadAddr;
            110     m_strStorgePath = GetStorgeFolde();
            111 
            112     while(strFileName.Find("/"!= -1)
            113     {
            114         int i = strFileName.Find("/");
            115         strFileName = strFileName.Mid(i +1 , strFileName.GetLength() - i - 1);
            116     }
            117 
            118     m_strStorgePath += strFileName;
            119     UpdateData(FALSE);
            120 }
            121 
            界面很簡陋 


            今天就先做到這

            posted @ 2009-08-17 12:10 李佳 閱讀(706) | 評論 (0)編輯 收藏
            主要是鍛煉一下自己關于進程操作方面的能力  最主要是  要用好MSDN
            不廢話 上代碼

             1 
             2 void CEnumProcessDlg::OnBnClickedOk()
             3 {
             4     DWORD dwPIDPrcess[1024];
             5 //    DWORD dwArrSize;
             6     DWORD dwSize;
             7     
             8     ::EnumProcesses(dwPIDPrcess , 1024 , &dwSize);        //枚舉進程 拿到PID 
             9     int iCount = dwSize / sizeof(DWORD);
            10     for (int i = 0 ; i < iCount ; i++)    //枚舉所有進程
            11     {
            12         HANDLE  hProcess = OpenProcess(PROCESS_ALL_ACCESS , TRUE , dwPIDPrcess[i]);
            13         HMODULE hProcessModule;
            14         DWORD dwEnumProcessModuleSize;
            15         TCHAR szProcessName[512];
            16         if (hProcess != INVALID_HANDLE_VALUE) //打開了進程
            17         {
            18             if (EnumProcessModules(hProcess , &hProcessModule , sizeof(HMODULE), &dwEnumProcessModuleSize))
            19             {
            20                 GetModuleBaseName(hProcess , hProcessModule , szProcessName , 512);                
            21                 HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE , dwPIDPrcess[i]);
            22                 if (hSnapShot == INVALID_HANDLE_VALUE)
            23                 {
            24                     CloseHandle(hProcess);
            25                     continue;
            26                 }
            27                 MODULEENTRY32 me32;
            28                 me32.dwSize = sizeof(MODULEENTRY32);
            29                 if ( !Module32First(hSnapShot , &me32))
            30                 {
            31                     //添加出錯代碼
            32                     CloseHandle(hSnapShot);
            33                     CloseHandle(hProcess);
            34                     continue;
            35                 }
            36                 CString strTemp;
            37                 strTemp.Format(_T("%d") , dwPIDPrcess[i]);
            38                 m_strProcessName += szProcessName ;    //進程名稱
            39                 m_strProcessName += _T("              ");
            40                 m_strProcessName +=me32.szExePath;        //程序的存放路徑
            41                 m_strProcessName += _T("   ");
            42                 m_strProcessName += strTemp;                //PID
            43                 m_strProcessName += _T("\r\n");
            44         
            45                 UpdateData(FALSE);
            46                 CloseHandle(hSnapShot);
            47                 CloseHandle(hProcess);
            48             }//
            49 
            50         }
            51     }
            52     //OpenProcess
            53     //OnOK();
            54 }
            代碼很短吧...
            上圖片  執行的效果圖


            posted @ 2009-08-15 17:47 李佳 閱讀(224) | 評論 (0)編輯 收藏
            僅列出標題
            共3頁: 1 2 3 
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            91精品国产乱码久久久久久| 久久国产精品成人影院| 久久精品国产第一区二区三区| 欧美精品一区二区久久| 久久精品中文字幕有码| 精品久久久久久国产免费了| 久久99亚洲综合精品首页| 99精品伊人久久久大香线蕉| 91性高湖久久久久| 久久国产香蕉一区精品| 麻豆久久| 久久AV高潮AV无码AV| 久久超碰97人人做人人爱| 久久亚洲国产精品一区二区| 99久久人人爽亚洲精品美女| 久久久精品久久久久特色影视| 人妻精品久久久久中文字幕| 久久精品一区二区三区AV| 精品国际久久久久999波多野| 99久久婷婷国产综合亚洲| 国产亚洲精久久久久久无码AV| 四虎久久影院| 婷婷五月深深久久精品| 天天久久狠狠色综合| 久久久午夜精品福利内容| 久久久久99精品成人片试看| 91久久精品国产91性色也| 久久久久久久久久久| 国产精品久久久久9999| 久久中文字幕人妻丝袜| 精品国产一区二区三区久久| 性做久久久久久久久久久| 99热成人精品热久久669| 日韩欧美亚洲综合久久影院Ds | 久久久精品国产Sm最大网站| 无码8090精品久久一区| 精品久久久久久亚洲精品 | 欧美丰满熟妇BBB久久久| 久久久精品人妻无码专区不卡| 久久久久亚洲AV无码麻豆| 午夜精品久久久久久影视777|