青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 13,  comments - 16,  trackbacks - 0
cat access.log | awk '$1=strftime("%F, %T", $1)'
posted @ 2014-09-16 16:33 似水之心 閱讀(16719) | 評論 (0)編輯 收藏

.torrent: A .torrent fille contains all the info you need to download the file you want. For example, a torrent file has info on the size, the filename, and how to connect to other people (tracker). Another important function of the .torrent file is that it has a “hash” (sort of a digital signature) of each part of the file to make sure you don’t download corrupt of fake data but “the real thing”.

Client: The BitTorrent client is the application you use to “load” the .torrent file so that you can connect to other people. There are a lot of different torrent clients available. The three most popular clients are BitcometAzureus and uTorrent. If you’re new to
BitTorrent I would recommend uTorrent, It’s light and has a great settings wizard to help you on your way.

Indexer: Indexers are websites which list (index) .torrent files (myBitTorrent, Torrentz, Mininova etc.).

Leecher: A leecher is someone who is downloading (and uploading) a file. You are a leecher if you do not have a complete copy of the file you’re trying to get. Note that a leecher normally is someone who’s not uploading, that’s not true in the BitTorrent jargon.

Peer: A peer is the same as a leecher, but without the negative connotation.

Ratio: The data you uploaded divided by the data you downloaded. A ratio higher than 1.00 means that you upload more than you download, which is a good thing. Most private trackers keep track of your ratio and will ban or block you if you have a bad ratio. Try to get at least a 1.00 or higher ratio.

Scrape: Scraping means that your BitTorrent client is requesting info from the “tracker” about other people who are down- or uploading the file. This is important because you need to know who has pieces of the file you still need.

Seeder: A seeder is someone who has a complete version of the file you are downloading. If there are no seeders, you probably wont be able to get the file. So seeders are extremely important, make sure to “seed” the torrent once you finished downloading.

Tracker: The tracker is a server that has all the info about the people that are down- and uploading the file. The tracker itself does not have a copy of the file, it only tracks the up- and dowloaders and makes sure people are able to connect to each other. A tracker is not the same as a website that hosts torrents. Mininova for example is not a tracker, just a “torrent-site”.

Super-Seed: Some clients have the option to “super-seed”. Super seeding is different from seeding because it tries to send out pieces of the file that have not been sent before. So instead of sending the same piece to several peers, it tries to send a unique piece to everyone so that other peers can swap those pieces.

Swarm: The swarm are all seeds and peers that are connected together. So if your client shows 5 seeds and 10 peers then that’s your swarm.

Azureus has a plugin to visualize the swarm

azureus BitTorrent swarm

Now let’s see if you learned something. If you can understand the next sentence you probably have.

DHT: DHT stands for “Distributed Hash Table”. DHT layers “decentralize” torrents what make them more stable and less reliant on the web based trackers. If a web based tracker goes down, the torrents stay alive because peers can act as “nodes” keeping the swarm intact.


原文地址:http://torrentfreak.com/bittorrent-jargon/



posted @ 2014-02-18 12:31 似水之心 閱讀(573) | 評論 (0)編輯 收藏
1,首先通過App Store安裝Xcode;@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
2,再安裝Xcode command line tools;
3,下載squid源碼,解包;
4,到源碼目錄,mkdir build, cd build;
5,sudo LIBS=-lresolv ../configure --prefix=/usr/squid
6,sudo make
7,sudo make install

安裝完成
posted @ 2013-12-20 13:16 似水之心 閱讀(1326) | 評論 (0)編輯 收藏
posted @ 2013-09-09 08:54 似水之心 閱讀(415) | 評論 (0)編輯 收藏
 針對現象
1, 運行程序提示“由于應用程序配置不正確,應用程序未能啟動。重新安裝應用程序可能會糾正這個問題”
2, 程序啟動即發生異常,或者沒反應。(具體現象跟系統設置有關)
3, 客戶端發布必須連帶msvcr80.dll,mfc80.dll等dll和manifest文件才能正常運行

 問題定位
  出現上述現象之后可以確定是缺少程序運行所需的環境,可以通過安裝相應的vcredist_x86.exe來驗證。針對vs版本,分別有
32位的(X86),也有64位的(X64),請注意區別下載。
★Microsoft Visual C++ 2005 Redistributable Package下載地址:
(x86):http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=zh-cn
(x64):http://www.microsoft.com/downloads/details.aspx?familyid=90548130-4468-4BBC-9673-D6ACABD5D13B&displaylang=zh-cn
★Microsoft Visual C++ 2008 Redistributable Package的下載地址:
(x86):http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5582
★Microsoft Visual C++ 2010 Redistributable Package
(x86):http://www.microsoft.com/download/en/details.aspx?id=5555?
(x64):http://www.microsoft.com/download/en/details.aspx?id=14632?
如果安裝完之后可以正常運行程序,可以繼續往下看,如果還不行,請考慮其它原因。


 解決辦法
  如果可以接受,讓用戶自行下載VC運行庫也是一種辦法。
  其次,可以把程序所需的dll一并發布。
  如果不想帶很多文件一起發布,可以使用靜態鏈接發布程序。
  
  靜態鏈接MFC和ATL庫的方法是:
  Alt+F7打開Project Property,展開:
  Configuration Properties
  General
  Use of MFC
  Use of ATL
  然后改成Static Library即可.如果已經是“在靜態庫中使用 MFC”了,生成之后在目標機器還是會有現象1的提示,那么很有可能就是沒有靜態鏈接C,C++運行庫,
  msvcr是C運行庫,msvcp是C++運行庫。如果你使用了STL之類C++的東西,msvcp就是必須的。修改方法如下:
  靜態鏈接MSVCR和MSVCP的辦法是:
  Alt+F7打開Project Property,展開:
  Configuration Properties
  C/C++
  Code Generation
  Runtime Library
  然后將選項由/MD改為 "Multi-threaded (/MT)"
*再如果。。。。。按照上面操作完成之后程序依然有問題,請考慮:程序有沒有靜態連接其它的lib,而這些lib是不是也是同樣靜態連接的C,C++運行庫,如果連接的lib還依賴和其它的lib,那么被依賴的lib是不是同樣靜態鏈接了C,C++運行庫.*


舉例說明
   一個利用libtorrent庫開發的下載測試程序(以下簡稱為例子)為win32項目,沒有使用mfc,在純凈版系統上運行需要msvcr和msvcp的支持。例子編譯依賴libtorrent.lib,而libtorrent.lib又深度依賴boost庫,確保例子靜態編譯,不再依賴msvcr和msvcp的支持就必須在編譯libtorrent.lib和boost庫的時候明確靜態鏈接c,c++運行庫。經過實際測試,例子程序已經實現單獨在純凈系統上的運行。
 
參考資料:
http://wylht.blogspot.com/2012_03_01_archive.html (需fan墻訪問)
http://gamebabyrocksun.blog.163.com/blog/static/57153463201081101856593/
http://www.cnblogs.com/dementia/archive/2009/04/10/1433217.html
posted @ 2013-09-09 08:48 似水之心 閱讀(4464) | 評論 (0)編輯 收藏
1、安裝手機驅動; 
2、設置PC上的調制解調器屬性;
A, 電腦右鍵,管理,設備管理,調制解調器;
B, 設置MODEM屬性,高級-額外設置中,添加如下命令:
cmnet是:AT+CGDCONT=1,"ip","cmnet"
cmwap是:+CGDCONT=,,"cmwap"
3、cmnet撥號號碼是:*99***1#
cmwap撥號號碼是:*99#
   用戶名密碼為空
 
數據線連接PC之后新建internet連接,按上面信息輸入,撥號,正常的話成功之后就可以用PC打開網頁了
posted @ 2013-02-02 11:47 似水之心 閱讀(1064) | 評論 (0)編輯 收藏
需要引用頭文件:#include <afxinet.h>
CInternetSession sess ;
    DWORD dwFlag 
= INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD ;
    CHttpFile 
*pF = (CHttpFile*)sess.OpenURL("http://www.google.cn/images/na666v_logo7.png",
        
1, dwFlag);
    ASSERT(pF);
    
if(!pF)//網上有人說判斷HttpFile指針是否為空就可以判斷網絡文件是否存在,經實驗一直不為空,郁悶,是我的機器問題?
    {
        AfxThrowInternetException(
1);
    }

    CString str;
    pF
->QueryInfo (HTTP_QUERY_STATUS_CODE, str);//HTTP_QUERY_STATUS_CODE查詢狀態信息,這里可以查詢文件的大小等等,具體的在HTTP_QUERY_STATUS_CODE上右鍵,轉到定義,有很多可選項
    int b = _ttoi(str);
    
if (b==404)
    {
        AfxMessageBox(
"文件不存在");
    } 
    
else
    {
        AfxMessageBox(
"存在");
    }


posted @ 2009-10-20 16:09 似水之心 閱讀(1556) | 評論 (0)編輯 收藏
首先是用ICMP檢查網絡是否連通:

bool Util::CheckInternet()
{
    
char *SendData = "Data Buffer";
    LPVOID ReplyBuffer;
    DWORD dwRetVal;
    HANDLE hIcmpFile;
    
bool b=false;
    
if ((hIcmpFile = IcmpCreateFile()) == INVALID_HANDLE_VALUE)
        
return false;

    ReplyBuffer 
= (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
    
if ((dwRetVal = IcmpSendEcho(hIcmpFile, 
        inet_addr(
"209.131.36.158"), //用的雅虎的一個IP,可能延遲會大一點,用國內的會小一點
        SendData, 
sizeof(SendData), 
        NULL, ReplyBuffer, 
        
sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
        
1000)) != 0) {
        b
=true;
    }
    free(ReplyBuffer);
    
return b;
}
很簡單的幾行代碼,沒有注釋;
如果網絡不通的話枚舉撥號連接,進行撥號:
bool RASManager::ConnectNetwork()
{
    RASENTRYNAME Entries[
15];   
    DWORD cb,cEntries,dwRet;   
    Entries[
0].dwSize=sizeof(RASENTRYNAME);   
    cb
=sizeof(Entries);   
    cEntries
=0;   
    
    dwRet
=::RasEnumEntries(NULL, NULL, &Entries[0], &cb, &cEntries);//如果函數成功,則返回0   
    
    
if(dwRet == 0)   
    {
        CHAR  szRasEntryName[RAS_MaxEntryName 
+ 1]={0};
        
for(UINT i=0;i<cEntries;i++)
            strcpy(szRasEntryName,Entries[i].szEntryName);
        RASDIALPARAMS rdParams;
        DWORD dwRet;
        hConn
=NULL;
        rdParams.dwSize
=sizeof(RASDIALPARAMS);
        strcpy(rdParams.szEntryName,szRasEntryName);
        strcpy(rdParams.szPhoneNumber,
"#777");//我用的3G卡,撥#777號碼
        strcpy(rdParams.szUserName,"用戶名");
        strcpy(rdParams.szPassword,
"密碼");
        strcpy(rdParams.szDomain,"");//這個也很重要,指定域,如果不指定這個的話下面注釋的兩句一定要加上,下邊兩句的意思是獲取最后一次連接成功時的參數信息,如果用下邊兩句的話連同這行和這行上面的三行都可以省略
       // BOOL fPass;
        //RasGetEntryDialParams(NULL, 
&rdParams,&fPass);
        dwRet
=RasDial(NULL,NULL,&rdParams,0L,NULL,&hConn);
        
if(dwRet!=0)
        {
            
return false;
        }
        
return true;
    }    
    
else    
    {    
        
return false;
    }
}
預先建立撥號連接,以上撥號代碼經過修改已經不需要保存密碼,只建立一個撥號連接即可。Windows XP or later:  Do not use the RasSetEntryDialParams function. MSDN上面的說法就是RasSetEntryDialParams 別在XP之后的系統上使用了。
檢查撥號連接的狀態,如果已經通過撥號連接上了網絡當然不用再進行撥號了,代碼如下:
bool RASManager::RasGetConnectStatus()
{
    LPRASCONN lpRasConn 
= NULL;    
    DWORD   cbBuf   
=   0;    
    DWORD   cConn   
=   0;    
    DWORD   dwRet   
=   0;    
    HRASCONN  hrasconn;
    
bool    bResult=FALSE;
    RASCONNSTATUS rasStatus;    
    UINT   ndx;
    cbBuf 
= sizeof(RASCONN);
    lpRasConn 
= (LPRASCONN)malloc((UINT)cbBuf);  
    
if (lpRasConn != NULL)
    {    
        lpRasConn
->dwSize = sizeof(RASCONN);    
        dwRet 
= RasEnumConnections(lpRasConn,&cbBuf,&cConn);  
        
for(ndx=0;ndx<cConn;ndx++)      
        {
            hrasconn 
= lpRasConn[ndx].hrasconn;            
            rasStatus.dwSize 
= sizeof(RASCONNSTATUS);
            dwRet 
= ::RasGetConnectStatus(hrasconn,&rasStatus);
            
if(dwRet)    
                bResult
=FALSE;    
            
else
            {    
                
if(rasStatus.rasconnstate == RASCS_Connected)    
                    bResult
=TRUE;    
                
else
                    bResult
=FALSE;    
            }
        }
    }
    
else
        bResult
=FALSE;
    free(lpRasConn);
    
return bResult;
}
以上判斷是如果檢查到有一個已經連接的撥號連接就返回了,應該不會有兩個或者以上的撥號連接同時連接,打開端口會失敗的。
還有一個是斷線:
void RASManager::HungUP()
{
    LPRASCONN lpRasConn
=NULL;
    DWORD   cbBuf 
= 0;
    DWORD   cConn 
= 0;
    DWORD   dwRet 
= 0;
    HRASCONN   hrasconn;
    RASCONNSTATUS rasStatus;
    UINT   ndx;
    
    cbBuf 
= sizeof(RASCONN);
    lpRasConn 
= (LPRASCONN)malloc((UINT)cbBuf);
    
if(lpRasConn != NULL)
    {
        lpRasConn
->dwSize = sizeof(RASCONN);    
        dwRet 
= RasEnumConnections(lpRasConn,&cbBuf,&cConn);  
        
        
for(ndx=0;ndx<cConn;ndx++)
        {
            hrasconn 
= lpRasConn[ndx].hrasconn;
            rasStatus.dwSize 
= sizeof(RASCONNSTATUS);
            dwRet 
= ::RasGetConnectStatus(hrasconn,&rasStatus);
            
if(!dwRet)
            {
                
if(rasStatus.rasconnstate == RASCS_Connected)
                    RasHangUp(hrasconn);
            }
        }
        free(lpRasConn);
    }
}
這個沒什么好說的,執行關閉撥號連接的操作。
用程序創建連接,經過修改,已經可以正常創建連接,代碼如下:
bool RASManager::CreateRASLink()
{
    LPRASENTRY lpRasEntry 
= NULL;
    DWORD cb 
= sizeof(RASENTRY);
    DWORD dwBufferSize 
= 0;
    DWORD dwRet 
= 0;
    
    
    
// 取得entry的大小,這句也不知道是不是必須的,因為sizeof(RASENTRY)和這里取到的dwBufferSize是一樣的,不過還是Get一下安全點
    RasGetEntryProperties(NULL,"", NULL, &dwBufferSize, NULL, NULL); 
    
if (dwBufferSize == 0)
        
return false;
    
    lpRasEntry 
= (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufferSize);
    
if (lpRasEntry == NULL)
        
return false;
    
    ZeroMemory(lpRasEntry, 
sizeof(RASENTRY));
    lpRasEntry
->dwSize = dwBufferSize;
    lpRasEntry
->dwfOptions = RASEO_RemoteDefaultGateway|RASEO_PreviewPhoneNumber|RASEO_PreviewUserPw; // 這里的幾個選項挺重要的,RASEO_RemoteDefaultGateway這個選項把創建的連接設置為默認連接,RASEO_PreviewPhoneNumber對應選項中的提示輸入電話號碼,RASEO_PreviewUserPw對應選項中的提示用戶名和密碼
    lpRasEntry->dwType = RASET_Phone;
    
    lstrcpy(lpRasEntry
->szDeviceType, RASDT_Modem);
    lstrcpy(lpRasEntry
->szDeviceName,"www");
    lpRasEntry
->dwfNetProtocols = RASNP_Ip;
    lpRasEntry
->dwFramingProtocol = RASFP_Ppp;
    
    dwRet 
= RasSetEntryProperties(NULL, "www", lpRasEntry, dwBufferSize, NULL, 0); // 創建連接
//
The RasSetEntryProperties function changes the connection information for an entry in the phone book or creates a new phone-book entry.(reference MSDN)
    HeapFree(GetProcessHeap(), 0, (LPVOID)lpRasEntry);
    
    
if (dwRet != 0)
        
return false;
    
return true;
}
上面的代碼到是可以創建一個撥號連接,不過是個空的,里面沒用用戶名和密碼等信息,需要用上面的撥號代碼來指定撥號參數,不能使用RasGetEntryDialParams來獲取了。
上面的代碼基本上是在網絡上搜索所得,稍加修改,在這里整理一下。

再補充一下刪除連接的操作,代碼如下:
void RASManager::DeletePhoneBookEntry()
{
    RASENTRYNAME Entries[
15];   
    DWORD cb,cEntries,dwRet;
    Entries[
0].dwSize=sizeof(RASENTRYNAME);   
    cb
=sizeof(Entries);
    cEntries
=0;   
    
    dwRet
=::RasEnumEntries(NULL, NULL, &Entries[0], &cb, &cEntries);//如果函數成功,則返回0   
    
    
if(dwRet == 0)   
    {
        CHAR  szRasEntryName[RAS_MaxEntryName 
+ 1]={0};
        
for(UINT i=0;i<cEntries;i++)
        {
            strcpy(szRasEntryName,Entries[i].szEntryName);
            RasDeleteEntry(NULL,szRasEntryName);
        }
    }
}
要想實現自動啟動撥號網絡,就要使用Remote Access Service (RAS) API,這個API最早是在Windows for Workgroup 3.11中出現的,現在它已經成為Win32 API的一個組成部分。該API將整個撥號網絡稱為Phonebook,而每一個連接稱為PhonebookEntry。你可以使用RasCreatePhonebookEntry來創建新的連接,用RasDial來撥號,而RasEnumEntries可以獲得當前系統已有的所有連接,使用其它的RAS函數還可以獲取或設置連接的參數。 RasEditPhonebookEntry函數將激活標準的Windows 95/NT屬性對話框來修改連接的屬性。你可以從Win32 API的手冊找到所有相關函數的詳細介紹。

補充:在windows中一個撥號連接即為一個PhonrbookEntry以下稱為電話薄記錄或是連接。總的這些稱為Phonebook。

posted @ 2009-10-10 17:27 似水之心 閱讀(1616) | 評論 (0)編輯 收藏
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
// a本身就為一個數組的地址,其值=&a[0],即數組第一個元素的地址,對a再取址
// &a = a,似乎沒什么不同,其實這里發生了對齊變更,a+1的對齊是以int為界的
// 而&a+1是以整個數組為單位的,即5個int=20字節,這是關鍵!!!
// 那么&a+1實際是跨越了整個數組,可得ptr1存儲了數組a最后一個元素5緊跟著的一個int的地址

int *ptr2=(int *)((int )a+1);
// 同理,(int)a先將其值(地址)轉為整型值,再加一成為一個新的整數
// (int *)將這個值轉換為一個指向int型變量的指針(地址)
// ptr2即存儲了這個地址和指向的變量的類型

printf("%x,%x",ptr1[-1],*ptr2);
// 先解釋一下a[-1],即將數組向前偏差一個類型大小的距離
// 數組a的內存布局(16進制):01000000 02000000 03000000 04000000 05000000
// ptr1[-1]
// 你說這里等于什么呢?數組a最后一個元素(5)緊跟著一個int的前面一個元素當然就是5了。
// *ptr2
// ptr2的值為a保存的地址值的絕對值+1,假設a=1000,那么(int)a+1=1001。
// 而后將其再轉為(int *)指針,那么指針指向的內存布局為000000 02,即向后移了一個字節
// 那么在little-enddian架構下顯示出來為02000000,低位在高地址。

return 0;
}
posted @ 2009-09-24 11:14 似水之心 閱讀(431) | 評論 (0)編輯 收藏
    HANDLE   PrnHandle;  
    if   (OpenPrinter("EPSON Stylus Photo R270 Series",&PrnHandle,NULL))  
    {  
        unsigned    char   buf[8192];  
        DWORD   dwSize;  
        if   (GetPrinter(PrnHandle,2,buf,sizeof(buf),  
            &dwSize))   {  
            PRINTER_INFO_2*   pInfo;  
            pInfo   =   (PRINTER_INFO_2*)buf;  
            //pInfo->Status   就是打印機的狀態,詳細的代碼可以  
            //參見winspool.h中以PRINTER_STATUS開頭的宏定義  
            if(pInfo->Status==PRINTER_STATUS_PAUSED)  
                AfxMessageBox("a");  
            else   if(pInfo->Status==PRINTER_STATUS_PENDING_DELETION)  
                AfxMessageBox("b");  
            ///////////以上pInfo->Status代碼試驗不成功,哪位知道原因請告知,謝謝
            if (pInfo->Attributes&PRINTER_ATTRIBUTE_WORK_OFFLINE)//測試成功
            {
                AfxMessageBox("offline");
            }
            else
            {
                AfxMessageBox("online");
            }
        }  
        ClosePrinter(PrnHandle);
    }

上面是判斷打印機是否連機的。
下面是判斷打印任務是否正常完成的:
    SetTimer(1,500,NULL);//用定時器來完成

響應函數:
switch(nIDEvent)
    {
    case 1:
        {
            JOB_INFO_2  *pJobs;
       int         cJobs,
                   i;
       DWORD       dwPrinterStatus;
       if (!GetJobs(hPrinter, &pJobs, &cJobs, &dwPrinterStatus))
            return ;

       for (i=0; i < cJobs; i++)
       {
           if (pJobs[i].Status &
                   (JOB_STATUS_ERROR |
                   JOB_STATUS_OFFLINE |
                   JOB_STATUS_PAPEROUT |
                   JOB_STATUS_BLOCKED_DEVQ))
               {                  
                   KillTimer(1);
                   AfxMessageBox(pJobs[i].pDocument);
                   free( pJobs );
                   return ;
               }
       }
       free( pJobs );
        }
        break;
    default:
        break;
    }

用到的方法:
BOOL GetJobs(HANDLE hPrinter,        /* Handle to the printer. */
                JOB_INFO_2 **ppJobInfo, /* Pointer to be filled.  */
                int *pcJobs,            /* Count of jobs filled.  */
                DWORD *pStatus)         /* Print Queue status.    */
   {

   DWORD               cByteNeeded,
                        nReturned,
                        cByteUsed;
    JOB_INFO_2          *pJobStorage = NULL;
    PRINTER_INFO_2       *pPrinterInfo = NULL;

   /* Get the buffer size needed. */
       if (!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded))
       {
           if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
               return FALSE;
       }

       pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
       if (!(pPrinterInfo))
           /* Failure to allocate memory. */
           return FALSE;

       LPCSTR str="sssssssssss";
       /* Get the printer information. */
       if (!GetPrinter(hPrinter,2,(unsigned char *)(LPSTR)pPrinterInfo,cByteNeeded,&cByteUsed))
       {
           /* Failure to access the printer. */
           free(pPrinterInfo);
           pPrinterInfo = NULL;
           return FALSE;
       }

       /* Get job storage space. */
       if (!EnumJobs(hPrinter,
               0,
               pPrinterInfo->cJobs,
               2,
               NULL,
               0,
               (LPDWORD)&cByteNeeded,
               (LPDWORD)&nReturned))
       {
           if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
           {
               free(pPrinterInfo);
               pPrinterInfo = NULL;
               return FALSE;
           }
       }

       pJobStorage = (JOB_INFO_2 *)malloc(cByteNeeded);
       if (!pJobStorage)
       {
           /* Failure to allocate Job storage space. */
           free(pPrinterInfo);
           pPrinterInfo = NULL;
           return FALSE;
       }

       ZeroMemory(pJobStorage, cByteNeeded);

       /* Get the list of jobs. */
       if (!EnumJobs(hPrinter,
               0,
               pPrinterInfo->cJobs,
               2,
               (LPBYTE)pJobStorage,
               cByteNeeded,
               (LPDWORD)&cByteUsed,
               (LPDWORD)&nReturned))
       {
           free(pPrinterInfo);
           free(pJobStorage);
           pJobStorage = NULL;
           pPrinterInfo = NULL;
           return FALSE;
       }

       /*
        *  Return the information.
        */
       *pcJobs = nReturned;
       *pStatus = pPrinterInfo->Status;
       *ppJobInfo = pJobStorage;
       free(pPrinterInfo);

       return TRUE;

   }


需要插入頭文件#include <winspool.h>

posted @ 2009-07-15 17:49 似水之心 閱讀(5955) | 評論 (3)編輯 收藏
僅列出標題  下一頁

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美亚洲专区| 亚洲日本国产| 亚洲国产欧美日韩| 久久xxxx| 亚洲砖区区免费| 国产麻豆精品在线观看| 亚洲欧美视频在线观看视频| 中文在线资源观看视频网站免费不卡| 欧美日韩精品不卡| 欧美一区成人| 久久精品99国产精品日本| 精品成人一区| 亚洲人成人一区二区在线观看 | 一区二区三区四区国产| 亚洲精品一区二区三区99| 欧美日韩视频在线第一区| 午夜国产精品影院在线观看| 欧美一区午夜视频在线观看| 在线不卡亚洲| 日韩视频在线观看免费| 国产美女搞久久| 欧美成人精品福利| 国产精品久久久久久久久久久久 | 亚洲综合精品一区二区| 性刺激综合网| 亚洲美女性视频| 先锋资源久久| 亚洲裸体在线观看| 性欧美8khd高清极品| 亚洲国产一区二区三区青草影视| 日韩视频一区二区三区在线播放| 国产欧美亚洲日本| 亚洲国内欧美| 国内精品嫩模av私拍在线观看 | 午夜宅男欧美| 美女主播精品视频一二三四| 亚洲欧美日韩精品久久久| 久久全国免费视频| 亚洲女性裸体视频| 老妇喷水一区二区三区| 欧美一级大片在线免费观看| 欧美aⅴ99久久黑人专区| 欧美怡红院视频| 欧美精品一区二区三区蜜桃| 久久精品夜色噜噜亚洲a∨| 欧美日韩免费看| 欧美成人高清视频| 国产午夜精品视频| 一区二区三区视频在线观看| 亚洲欧洲视频| 久久香蕉精品| 久久久久久久波多野高潮日日| 欧美日韩在线综合| 亚洲国产欧洲综合997久久| 狠狠色综合色区| 先锋影音久久| 欧美综合激情网| 国产精品美女久久久浪潮软件| 亚洲国产99| 亚洲欧洲综合另类| 欧美fxxxxxx另类| 免费成人av资源网| 在线播放日韩专区| 久久精品国产亚洲精品| 久久精选视频| 极品少妇一区二区三区| 欧美在线不卡| 久久这里只有精品视频首页| 国产日韩亚洲欧美综合| 新狼窝色av性久久久久久| 欧美在线视频不卡| 国产日韩欧美三区| 性欧美xxxx大乳国产app| 久久精品国产亚洲高清剧情介绍 | 亚洲欧美日韩精品久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美国产日韩精品| 亚洲精品视频在线看| 中日韩高清电影网| 国产精品v日韩精品| 亚洲一区国产| 久久久久久精| 亚洲国产成人精品女人久久久| 久久久噜噜噜久久中文字幕色伊伊| 久久婷婷亚洲| 亚洲精品色图| 欧美视频一区二区在线观看| 这里只有精品丝袜| 久久精品一区中文字幕| 亚洲成人在线视频播放| 欧美成人中文| 亚洲五月六月| 久久婷婷丁香| 日韩一区二区高清| 国产精品视频自拍| 久久九九99| 亚洲美女免费精品视频在线观看| 亚洲夜晚福利在线观看| 国产在线麻豆精品观看| 欧美成人在线网站| 亚洲欧美日韩国产中文在线| 久久伊人精品天天| 亚洲色在线视频| 韩国在线一区| 欧美性色视频在线| 久久精品亚洲精品| 一本色道久久88综合亚洲精品ⅰ| 久久精品视频免费播放| 亚洲精品视频中文字幕| 国产精品一区二区三区久久| 久久亚洲国产精品一区二区| 中日韩男男gay无套| 欧美~级网站不卡| 欧美亚洲一区二区在线| 亚洲日本aⅴ片在线观看香蕉| 国产精品久久久久av免费| 久久综合婷婷| 欧美在线视频二区| 一本久道久久综合中文字幕| 欧美大片免费观看| 久久精品国产综合精品| 中文网丁香综合网| 亚洲精品黄网在线观看| 狠狠色狠狠色综合系列| 国产精品久久久久久久午夜| 欧美~级网站不卡| 欧美亚洲网站| 亚洲一区二区三区四区五区午夜| 欧美国产日韩xxxxx| 久久综合给合久久狠狠色 | 国一区二区在线观看| 欧美系列电影免费观看| 欧美精品久久久久久久| 久久综合给合| 久久久99爱| 欧美亚洲在线播放| 亚洲专区在线| 亚洲一区二区三区成人在线视频精品| 亚洲黄色影院| 欧美激情国产日韩精品一区18| 久久一区二区精品| 久久视频在线视频| 久久久久久久一区| 久久久久久久激情视频| 久久国产福利国产秒拍| 欧美一区二区福利在线| 欧美一区二区三区啪啪| 亚洲综合好骚| 欧美一区二区视频97| 欧美一区二区三区在线看| 亚洲欧美成人一区二区在线电影| 亚洲一区二区三区高清不卡| 一区二区av在线| 亚洲午夜电影在线观看| 亚洲免费视频在线观看| 西西裸体人体做爰大胆久久久| 欧美一区二区三区免费观看| 欧美在线播放| 久久综合色8888| 亚洲第一色中文字幕| 亚洲国内自拍| 在线一区日本视频| 欧美一级大片在线免费观看| 久久大香伊蕉在人线观看热2| 久久久久久久高潮| 欧美激情国产日韩| 欧美网站在线| 韩国v欧美v日本v亚洲v| 91久久精品国产91久久性色tv | 国产一区日韩二区欧美三区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国产高清高潮精品美女| 亚洲精品视频一区| 午夜久久99| 欧美成人精品h版在线观看| 亚洲精品护士| 亚洲欧洲av一区二区| 麻豆久久久9性大片| 欧美午夜视频| 亚洲高清视频一区二区| 一区二区三区视频观看| 久久精品人人做人人综合| 亚洲国产福利在线| 亚洲欧美成人| 欧美成人首页| 国产日韩欧美视频在线| 亚洲精品乱码| 久久久久久久久一区二区| 亚洲三级性片| 久久婷婷人人澡人人喊人人爽| 欧美日韩国产bt| 黄色成人片子| 亚洲欧美一区二区三区极速播放| 老司机午夜免费精品视频| 99国内精品久久| 欧美777四色影视在线| 国产精品视频免费在线观看| 亚洲精选成人| 欧美成熟视频| 欧美一级午夜免费电影|