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

posts - 13,  comments - 16,  trackbacks - 0
cat access.log | awk '$1=strftime("%F, %T", $1)'
posted @ 2014-09-16 16:33 似水之心 閱讀(16714) | 評(píng)論 (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 似水之心 閱讀(567) | 評(píng)論 (0)編輯 收藏
1,首先通過App Store安裝Xcode;@import url(http://m.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 似水之心 閱讀(1320) | 評(píng)論 (0)編輯 收藏
posted @ 2013-09-09 08:54 似水之心 閱讀(410) | 評(píng)論 (0)編輯 收藏
 針對(duì)現(xiàn)象
1, 運(yùn)行程序提示“由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動(dòng)。重新安裝應(yīng)用程序可能會(huì)糾正這個(gè)問題”
2, 程序啟動(dòng)即發(fā)生異常,或者沒反應(yīng)。(具體現(xiàn)象跟系統(tǒng)設(shè)置有關(guān))
3, 客戶端發(fā)布必須連帶msvcr80.dll,mfc80.dll等dll和manifest文件才能正常運(yùn)行

 問題定位
  出現(xiàn)上述現(xiàn)象之后可以確定是缺少程序運(yùn)行所需的環(huán)境,可以通過安裝相應(yīng)的vcredist_x86.exe來驗(yàn)證。針對(duì)vs版本,分別有
32位的(X86),也有64位的(X64),請(qǐng)注意區(qū)別下載。
★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?
如果安裝完之后可以正常運(yùn)行程序,可以繼續(xù)往下看,如果還不行,請(qǐng)考慮其它原因。


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


舉例說明
   一個(gè)利用libtorrent庫(kù)開發(fā)的下載測(cè)試程序(以下簡(jiǎn)稱為例子)為win32項(xiàng)目,沒有使用mfc,在純凈版系統(tǒng)上運(yùn)行需要msvcr和msvcp的支持。例子編譯依賴libtorrent.lib,而libtorrent.lib又深度依賴boost庫(kù),確保例子靜態(tài)編譯,不再依賴msvcr和msvcp的支持就必須在編譯libtorrent.lib和boost庫(kù)的時(shí)候明確靜態(tài)鏈接c,c++運(yùn)行庫(kù)。經(jīng)過實(shí)際測(cè)試,例子程序已經(jīng)實(shí)現(xiàn)單獨(dú)在純凈系統(tǒng)上的運(yùn)行。
 
參考資料:
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 似水之心 閱讀(4460) | 評(píng)論 (0)編輯 收藏
1、安裝手機(jī)驅(qū)動(dòng); 
2、設(shè)置PC上的調(diào)制解調(diào)器屬性;
A, 電腦右鍵,管理,設(shè)備管理,調(diào)制解調(diào)器;
B, 設(shè)置MODEM屬性,高級(jí)-額外設(shè)置中,添加如下命令:
cmnet是:AT+CGDCONT=1,"ip","cmnet"
cmwap是:+CGDCONT=,,"cmwap"
3、cmnet撥號(hào)號(hào)碼是:*99***1#
cmwap撥號(hào)號(hào)碼是:*99#
   用戶名密碼為空
 
數(shù)據(jù)線連接PC之后新建internet連接,按上面信息輸入,撥號(hào),正常的話成功之后就可以用PC打開網(wǎng)頁(yè)了
posted @ 2013-02-02 11:47 似水之心 閱讀(1060) | 評(píng)論 (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)//網(wǎng)上有人說判斷HttpFile指針是否為空就可以判斷網(wǎng)絡(luò)文件是否存在,經(jīng)實(shí)驗(yàn)一直不為空,郁悶,是我的機(jī)器問題?
    {
        AfxThrowInternetException(
1);
    }

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


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

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"), //用的雅虎的一個(gè)IP,可能延遲會(huì)大一點(diǎn),用國(guó)內(nèi)的會(huì)小一點(diǎn)
        SendData, 
sizeof(SendData), 
        NULL, ReplyBuffer, 
        
sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
        
1000)) != 0) {
        b
=true;
    }
    free(ReplyBuffer);
    
return b;
}
很簡(jiǎn)單的幾行代碼,沒有注釋;
如果網(wǎng)絡(luò)不通的話枚舉撥號(hào)連接,進(jìn)行撥號(hào):
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);//如果函數(shù)成功,則返回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號(hào)碼
        strcpy(rdParams.szUserName,"用戶名");
        strcpy(rdParams.szPassword,
"密碼");
        strcpy(rdParams.szDomain,"");//這個(gè)也很重要,指定域,如果不指定這個(gè)的話下面注釋的兩句一定要加上,下邊兩句的意思是獲取最后一次連接成功時(shí)的參數(shù)信息,如果用下邊兩句的話連同這行和這行上面的三行都可以省略
       // BOOL fPass;
        //RasGetEntryDialParams(NULL, 
&rdParams,&fPass);
        dwRet
=RasDial(NULL,NULL,&rdParams,0L,NULL,&hConn);
        
if(dwRet!=0)
        {
            
return false;
        }
        
return true;
    }    
    
else    
    {    
        
return false;
    }
}
預(yù)先建立撥號(hào)連接,以上撥號(hào)代碼經(jīng)過修改已經(jīng)不需要保存密碼,只建立一個(gè)撥號(hào)連接即可。Windows XP or later:  Do not use the RasSetEntryDialParams function. MSDN上面的說法就是RasSetEntryDialParams 別在XP之后的系統(tǒng)上使用了。
檢查撥號(hào)連接的狀態(tài),如果已經(jīng)通過撥號(hào)連接上了網(wǎng)絡(luò)當(dāng)然不用再進(jìn)行撥號(hào)了,代碼如下:
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;
}
以上判斷是如果檢查到有一個(gè)已經(jīng)連接的撥號(hào)連接就返回了,應(yīng)該不會(huì)有兩個(gè)或者以上的撥號(hào)連接同時(shí)連接,打開端口會(huì)失敗的。
還有一個(gè)是斷線:
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);
    }
}
這個(gè)沒什么好說的,執(zhí)行關(guān)閉撥號(hào)連接的操作。
用程序創(chuàng)建連接,經(jīng)過修改,已經(jīng)可以正常創(chuàng)建連接,代碼如下:
bool RASManager::CreateRASLink()
{
    LPRASENTRY lpRasEntry 
= NULL;
    DWORD cb 
= sizeof(RASENTRY);
    DWORD dwBufferSize 
= 0;
    DWORD dwRet 
= 0;
    
    
    
// 取得entry的大小,這句也不知道是不是必須的,因?yàn)閟izeof(RASENTRY)和這里取到的dwBufferSize是一樣的,不過還是Get一下安全點(diǎn)
    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; // 這里的幾個(gè)選項(xiàng)挺重要的,RASEO_RemoteDefaultGateway這個(gè)選項(xiàng)把創(chuàng)建的連接設(shè)置為默認(rèn)連接,RASEO_PreviewPhoneNumber對(duì)應(yīng)選項(xiàng)中的提示輸入電話號(hào)碼,RASEO_PreviewUserPw對(duì)應(yīng)選項(xiàng)中的提示用戶名和密碼
    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); // 創(chuàng)建連接
//
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;
}
上面的代碼到是可以創(chuàng)建一個(gè)撥號(hào)連接,不過是個(gè)空的,里面沒用用戶名和密碼等信息,需要用上面的撥號(hào)代碼來指定撥號(hào)參數(shù),不能使用RasGetEntryDialParams來獲取了。
上面的代碼基本上是在網(wǎng)絡(luò)上搜索所得,稍加修改,在這里整理一下。

再補(bǔ)充一下刪除連接的操作,代碼如下:
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);//如果函數(shù)成功,則返回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);
        }
    }
}
要想實(shí)現(xiàn)自動(dòng)啟動(dòng)撥號(hào)網(wǎng)絡(luò),就要使用Remote Access Service (RAS) API,這個(gè)API最早是在Windows for Workgroup 3.11中出現(xiàn)的,現(xiàn)在它已經(jīng)成為Win32 API的一個(gè)組成部分。該API將整個(gè)撥號(hào)網(wǎng)絡(luò)稱為Phonebook,而每一個(gè)連接稱為PhonebookEntry。你可以使用RasCreatePhonebookEntry來創(chuàng)建新的連接,用RasDial來?yè)芴?hào),而RasEnumEntries可以獲得當(dāng)前系統(tǒng)已有的所有連接,使用其它的RAS函數(shù)還可以獲取或設(shè)置連接的參數(shù)。 RasEditPhonebookEntry函數(shù)將激活標(biāo)準(zhǔn)的Windows 95/NT屬性對(duì)話框來修改連接的屬性。你可以從Win32 API的手冊(cè)找到所有相關(guān)函數(shù)的詳細(xì)介紹。

補(bǔ)充:在windows中一個(gè)撥號(hào)連接即為一個(gè)PhonrbookEntry以下稱為電話薄記錄或是連接。總的這些稱為Phonebook。

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

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

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

return 0;
}
posted @ 2009-09-24 11:14 似水之心 閱讀(422) | 評(píng)論 (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   就是打印機(jī)的狀態(tài),詳細(xì)的代碼可以  
            //參見winspool.h中以PRINTER_STATUS開頭的宏定義  
            if(pInfo->Status==PRINTER_STATUS_PAUSED)  
                AfxMessageBox("a");  
            else   if(pInfo->Status==PRINTER_STATUS_PENDING_DELETION)  
                AfxMessageBox("b");  
            ///////////以上pInfo->Status代碼試驗(yàn)不成功,哪位知道原因請(qǐng)告知,謝謝
            if (pInfo->Attributes&PRINTER_ATTRIBUTE_WORK_OFFLINE)//測(cè)試成功
            {
                AfxMessageBox("offline");
            }
            else
            {
                AfxMessageBox("online");
            }
        }  
        ClosePrinter(PrnHandle);
    }

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

響應(yīng)函數(shù):
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 似水之心 閱讀(5945) | 評(píng)論 (3)編輯 收藏
僅列出標(biāo)題  下一頁(yè)

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美在线播放高清精品| 一区二区激情小说| 黄色工厂这里只有精品| 国产欧美精品国产国产专区| 国产精品家教| 国产视频精品免费播放| 狠狠狠色丁香婷婷综合激情| 国产嫩草一区二区三区在线观看 | 久久美女艺术照精彩视频福利播放| 香蕉久久一区二区不卡无毒影院| 欧美在线观看一区二区三区| 久久久久一区二区| 亚洲欧洲日产国码二区| 日韩一级精品视频在线观看| 亚洲自拍偷拍视频| 欧美91视频| 国产噜噜噜噜噜久久久久久久久| 精品电影在线观看| 亚洲无毛电影| 欧美 亚欧 日韩视频在线| 亚洲免费av网站| 久久精品理论片| 欧美午夜美女看片| 亚洲国产二区| 久久精品九九| 99爱精品视频| 免费观看成人| 国产偷国产偷精品高清尤物| 国产一区二区三区直播精品电影 | 欧美va天堂在线| 亚洲一二三四区| 欧美成人免费全部| 国内外成人免费激情在线视频| 9久草视频在线视频精品| 久久久久久久久久久久久9999| 亚洲人成在线观看网站高清| 久久久久久999| 国产亚洲精品一区二555| 国产美女扒开尿口久久久| 99天天综合性| 欧美国产日韩一区| 欧美一级成年大片在线观看| 欧美韩日一区二区三区| 国产偷久久久精品专区| 亚洲嫩草精品久久| 亚洲高清视频在线| 久久亚洲私人国产精品va| 国产日韩欧美精品综合| 亚洲制服少妇| 亚洲视频在线视频| 欧美色视频一区| 一区二区av在线| 亚洲高清色综合| 欧美精品一级| 正在播放亚洲| 亚洲精品在线视频观看| 欧美日韩国产精品成人| 亚洲第一伊人| 免费视频亚洲| 欧美jjzz| 亚洲全黄一级网站| 久久人人九九| 麻豆freexxxx性91精品| 最新日韩av| 日韩视频在线观看| 欧美色图麻豆| 久久精品国产91精品亚洲| 欧美在线播放一区| 亚洲大片av| 免费看成人av| 玖玖玖国产精品| 99爱精品视频| 亚洲影院在线观看| 精久久久久久久久久久| 美女日韩在线中文字幕| 老司机aⅴ在线精品导航| 亚洲精品乱码久久久久久蜜桃91| 亚洲丰满在线| 欧美视频中文字幕在线| 欧美中文字幕精品| 麻豆av福利av久久av| 在线亚洲观看| 久久精品91久久久久久再现| 亚洲国产专区| 亚洲一区免费网站| 亚洲国产精品嫩草影院| 一区二区三区日韩在线观看| 国产一区二区日韩| 亚洲欧洲一区二区三区在线观看 | 亚洲视频在线观看视频| 亚洲一区视频在线观看视频| 国产婷婷97碰碰久久人人蜜臀| 欧美电影在线播放| 国产精品久久久久久超碰| 亚洲欧美日韩精品在线| 久久综合久久88| 久久只有精品| 极品尤物av久久免费看| 亚洲裸体视频| 在线观看成人小视频| 一本色道久久| 亚洲电影网站| 亚洲欧美日韩在线观看a三区| 亚洲国产精品va| 亚洲女女女同性video| 亚洲欧洲在线一区| 午夜日韩在线| 中文国产成人精品| 两个人的视频www国产精品| 欧美一区国产一区| 欧美肉体xxxx裸体137大胆| 麻豆精品传媒视频| 欧美色欧美亚洲另类二区| 欧美黑人在线观看| 欧美精品九九| 免费在线观看一区二区| 国产日韩av在线播放| 一区二区三区|亚洲午夜| 亚洲精品1区2区| 久久久久久色| 玖玖玖国产精品| 国产一区二三区| 亚洲视频在线观看| 亚洲一区二区精品在线| 欧美精品在线网站| 亚洲国产一区二区a毛片| 亚洲大片一区二区三区| 欧美综合77777色婷婷| 久久超碰97人人做人人爱| 国产精品毛片va一区二区三区| 亚洲免费久久| 亚洲视频在线观看一区| 欧美性色综合| 亚洲免费在线观看| 久久精品国产久精国产一老狼| 国产精品爽爽爽| 亚洲专区一区| 久久精品道一区二区三区| 国产欧美日韩一区| 欧美一区二区三区啪啪| 久久五月天婷婷| 亚洲国产欧洲综合997久久| 美脚丝袜一区二区三区在线观看 | 亚洲一区二区久久| 国产精品亚洲第一区在线暖暖韩国| av成人黄色| 欧美影院成年免费版| 国产一区二区按摩在线观看| 欧美一区=区| 欧美国产日韩二区| 亚洲人成网站在线观看播放| 欧美极品色图| 亚洲调教视频在线观看| 久久久福利视频| 亚洲国产综合视频在线观看| 欧美激情偷拍| 亚洲一区免费视频| 久久精品国产精品亚洲综合| 亚洲福利av| 亚洲美女一区| 国产欧美日韩免费看aⅴ视频| 亚洲欧美日本伦理| 久久综合给合| 亚洲精品视频一区二区三区| 欧美色视频日本高清在线观看| 性欧美xxxx视频在线观看| 久久综合给合久久狠狠色| 亚洲精品四区| 国产亚洲毛片在线| 欧美精品在线看| 久久丁香综合五月国产三级网站| 亚洲盗摄视频| 久久精品二区| 亚洲午夜电影| 亚洲激情社区| 国产午夜精品美女视频明星a级 | 午夜视频久久久| 亚洲韩国日本中文字幕| 国产精品女主播一区二区三区| 久久先锋影音av| 亚洲欧美日韩直播| 亚洲精品少妇30p| 毛片av中文字幕一区二区| 亚洲午夜一区二区三区| 亚洲二区免费| 国产小视频国产精品| 欧美日韩午夜剧场| 美女爽到呻吟久久久久| 欧美一区二区三区啪啪| 亚洲午夜极品| 亚洲三级电影在线观看| 免费不卡在线观看av| 性欧美1819sex性高清| 一区二区三区三区在线| 亚洲激情一区| 亚洲国产精彩中文乱码av在线播放| 国产日产欧产精品推荐色 | 亚洲女人天堂av| 亚洲影院在线| 亚洲性av在线|