檢測打印機(jī)待打印文檔_第1頁
檢測打印機(jī)待打印文檔_第2頁
檢測打印機(jī)待打印文檔_第3頁
檢測打印機(jī)待打印文檔_第4頁
檢測打印機(jī)待打印文檔_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第第頁檢測打印機(jī)待打印文檔

306、如何得知某一臺(tái)網(wǎng)絡(luò)打印機(jī)尚有幾份等待打印的報(bào)表?

307、如何每天下載Internet上某一個(gè)網(wǎng)頁中的圖片來更換桌面的圖案?

308、如何呼叫系統(tǒng)的掌握面板?

309、如何完全模擬系統(tǒng)的掌握面板?

310、如何設(shè)定MsgBo*在假設(shè)干時(shí)間之后假設(shè)無回應(yīng)那么自動(dòng)關(guān)閉?

306、如何得知某一臺(tái)網(wǎng)絡(luò)打印機(jī)尚有幾份等待打印的報(bào)表?

當(dāng)我們要打印報(bào)表時(shí),假如打印機(jī)是本機(jī)的打印機(jī)的話,當(dāng)然立刻就會(huì)將報(bào)表打印出來,反正打印機(jī)就只有您一個(gè)人在運(yùn)用而已!但是假如是在一個(gè)人數(shù)許多的公司或企業(yè)時(shí),往往就需要許多人來共享某一部打印機(jī)了,而且打印機(jī)也不肯定就放在舉目可及之處!

當(dāng)您將報(bào)表丟到網(wǎng)絡(luò)打印機(jī)之后,由于不肯定看得到打印機(jī),您需要特別到擺放打印機(jī)的地方去拿報(bào)表,這時(shí)候您最關(guān)懷的,就是報(bào)表印了沒有,假如還沒有的話,那還有幾份還沒打印的報(bào)表排在您的報(bào)表之前呢?

下面這一段程序,可以讓您知道某一臺(tái)網(wǎng)絡(luò)打印機(jī)尚有幾份等待打印的報(bào)表?在您的程序丟出報(bào)表的同時(shí),您可以告知您的User,他的報(bào)表排在第幾份!

'在.bas文件中加入以下聲明及模組:

'ConstantsDefinition

PublicConstCCHDEVICENAME=32

PublicConstCCHFORMNAME=32

PublicConstPRINTER_ACCESS_ADMINISTER=H4

PublicConstPRINTER_ACCESS_USE=H8

'TypesDefinition

PublicTypeDEVMODE

dmDeviceNameAsString*CCHDEVICENAME

dmSpecVersionAsInteger

dmDriverVersionAsInteger

dmSizeAsInteger

dmDriverE*traAsInteger

dmFieldsAsLong

dmOrientationAsInteger

dmPaperSizeAsInteger

dmPaperLengthAsInteger

dmPaperWidthAsInteger

dmScaleAsInteger

dmCopiesAsInteger

dmDefaultSourceAsInteger

dmPrintQualityAsInteger

dmColorAsInteger

dmDuple*AsInteger

dmYResolutionAsInteger

dmTTOptionAsInteger

dmCollateAsInteger

dmFormNameAsString*CCHFORMNAME

dmUnusedPaddingAsInteger

dmBitsPerPelAsLong

dmPelsWidthAsLong

dmPelsHeightAsLong

dmDisplayFlagsAsLong

dmDisplayFrequencyAsLong

EndType

PublicTypePRINTER_DEFAULTS

pDatatypeAsString

pDevModeAsDEVMODE

DesiredAccessAsLong

EndType

'APIDeclarations

PublicDeclareFunctionOpenPrinterLibwinspool.drvAliasOpenPrinterA(ByValpPrinterNameAsString,phPrinterAsLong,pDefaultAsPRINTER_DEFAULTS)AsLong

PublicDeclareFunctionEnumJobsLibwinspool.drvAliasEnumJobsA(ByValHPrinterAsLong,ByValFirstJobAsLong,ByValNoJobsAsLong,ByValLevelAsLong,pJobAsByte,ByValcdBufAsLong,pcbNeededAsLong,pcReturnedAsLong)AsLong

PublicDeclareFunctionCloseHandleLibkernel32(B

yValhObjectAsLong)AsLong

'取得指定的打印機(jī),目前有多少Jobs(最大值為128)

'打印機(jī)的名稱可以是mapping的網(wǎng)絡(luò)路徑名稱,例如:\\myserver\myprinter

FunctionGet

PrinterQueue(PrinterNameAsString)AsLong

DimPrinterStructAsPRINTER_DEFAULTS

DimHPrinterAsLong

DimretAsBoolean

DimJobStruct(0To127)AsByte

DimpcbNeededAsLong

DimpcReturnedAsLong

DimTempByteAsByte

'設(shè)定Printerstructure初值

PrinterStruct.pDatatype=vbNullString

PrinterStruct.pDevMode.dmSize=Len(PrinterStruct.pDevMode)

PrinterStruct.DesiredAccess=PRINTER_ACCESS_USE

'取得打印機(jī)的Handle

ret=OpenPrinter(PrinterName,HPrinter,PrinterStruct)

'取得打印機(jī)的activejobs

ret=EnumJobs(HPrinter,0,127,1,TempByte,0,pcbNeeded,pcReturned)

IfpcbNeeded=0Then

GetPrinterQueue=0

Else

ret=EnumJobs(HPrinter,0,127,1,JobStruct(0),pcbNeeded,pcbNeeded,pcReturned)

GetPrinterQueue=pcReturned

EndIf

'關(guān)閉打印機(jī)

ret=CloseHandle(HPrinter)

EndFunction

'在表單中放一個(gè)CommandButton,程序碼如下:

PrivateSubCommand1_Click()

'測試預(yù)設(shè)打印機(jī)的Queue(Printer.DeviceName)

Msgbo*打印機(jī)中尚有GetPrinterQueue(Printer.DeviceName)份報(bào)表,64,訊息

EndSub

'好了,試試看吧!

307、如何每天下載Internet上某一個(gè)網(wǎng)頁中的圖片來更換桌面的圖案?

有些處理圖片的軟件,尤其是可以處理桌面圖片的軟件,會(huì)提供您每天自動(dòng)到Internet上的某一個(gè)網(wǎng)址,去下載它的網(wǎng)站所提供,每天更換的圖片,來更改桌面的底圖,這是一個(gè)很炫的功能,而我們用VB也可以很簡單的做到這樣的功能,您相信嗎?

這個(gè)主題會(huì)運(yùn)用到之前我們提過的幾個(gè)功能:

問題:如何讓程序在Windows啟動(dòng)時(shí)自動(dòng)執(zhí)行?

問題:如何從Internet上下載某一個(gè)網(wǎng)頁的內(nèi)容?

問題:如何移除或更改桌面背景的底色圖案(Wallpaper)?

讓我們徑直來練習(xí)吧!

'請?jiān)?BAS中加入以下聲明:

PrivateDeclareFunctionSystemParametersInfoLibuser32AliasSystemParametersInfoA(ByValuActionAsLong,ByValuParamAsLong,ByVallpvParamAsAny,ByValfuWinIniAsLong)AsLong

ConstSPI_SETDESKWALLPAPER=20

ConstSPIF_UPDATEINIFILE=H1

ConstSPIF_SENDWININICHANGE=H2

'請?jiān)诒韱沃蟹湃胍粋€(gè)Te*tBo*及一個(gè)InternetTransferControl

PrivateSubForm_Load()

DimPosAsInteger

DimPos2AsInteger

DimBilden()AsByte

DimNrStringAsString

Te*t1.Te*t=Inet1.OpenURL(/)'Downloadthepage.

Pos=InStr(1,Te*t1.Te*t,/preblem/61-80)

Pos2=InStr(Pos,Te*t1.Te*t,.gif)

NrString=Mid(Te*t1.Te*t,Pos,Pos2-Pos)

Te*t1.Te*t=+NrString+.gif'Debugfilename

Bilden()=Inet1.OpenURL(+NrString+.gif,icByteArray)'Downloadpicture.

OpenC:\dilbert.gifForBinaryAccessWriteAs#1'Savethefile.

Put#1,,Bilden()

Close#1

Picture1.Pi

cture=LoadPicture(c:\dilbert.gif)'ReloaditToPictureBo*

SavePicturePicture1.Picture,c:\dilbert.bmp'ConvertedTo

bmp..

CallSystemParametersInfo(SPI_SETDESKWALLPAPER,0,c:\dilbert.bmp,SPIF_UPDATEINIFILEOrSPIF_SENDWININICHANGE)'Changethewallpaper.

UnloadMe'E*itprogram

EndSub

至于其中的網(wǎng)址及圖片的文件名,請自行更改。假設(shè)是您徑直運(yùn)用以上的程序碼的話,也可以,您每天都可以看到一篇漫畫!!

308、如何呼叫系統(tǒng)的掌握面板?

在Windows的系統(tǒng)中,從許多地方,您有許多方式去叫出系統(tǒng)的掌握面板,例如從【我的電腦】、【資源管理器】或是【開始】功能表中的【設(shè)置】選項(xiàng)中都可以看到掌握面板。

運(yùn)用VB您也可以在程序中叫出掌握面板來運(yùn)用!而且程序碼很簡約,只要一行就可以了,如下:

PrivateSubCommand1_Click()

Shellrundll32.e*eshell32.dll,Control_RunDLL,vbNormalFocus

EndSub

上面的程序碼,不管您是運(yùn)用Windows95/98/NT都可以適用的!

309、如何完全模擬系統(tǒng)的掌握面板?

在上一個(gè)主題:如何呼叫系統(tǒng)的掌握面板?中,我們告知您如何徑直叫用系統(tǒng)的掌握面板,但是,假如您只是想要叫用掌握面板中的某一個(gè)單一功能設(shè)定畫面的話,您也可以做到的!

其實(shí),掌握面板的那么多的功能,是分別叫用您電腦中的一些擴(kuò)展文件名為.CPL的文件,這些文件在Windows95/98/NT中存放的位置有一些不同,分別說明如下:

Windows95/98:文件位置在c:\windows\system

WindowsNT:文件位置在c:\winnt\system32

下面的程序碼以Windows98為例來說明,假如您是在WindowsNT中,請自行略微修改。在表單上放一個(gè)CommandButton及一個(gè)FileListBo*,程序碼如下:

PrivateSubForm_Load()

File1.Pattern=*.CPL

File1.FileName=C:\WINdows\SYSTEM'假設(shè)是NT的話請改這里

EndSub

PrivateSubCommand1_Click()

Shellrundll32.e*eshell32.dll,Control_RunDLLFile1.FileName,vbNormalFocus

EndSub

好了,別驚異,程序碼就是這么短而已!請先在FileListBo*中選擇一個(gè)文件,每一個(gè)文件分別代表掌握面板中的某一個(gè)功能設(shè)定程序,然后按下Command1就可以執(zhí)行了!

310、如何設(shè)定MsgBo*在假設(shè)干時(shí)間之后假設(shè)無回應(yīng)那么自動(dòng)關(guān)閉?

在我們的印象中,VB所提供的MsgBo*是一個(gè)強(qiáng)制回應(yīng)的視窗,您肯定要按了其中的某一個(gè)CommandButton之后,它才會(huì)關(guān)閉!但是在某些軟體中,我們會(huì)看到,明明是運(yùn)用系統(tǒng)的MsgBo*,可是您假如不理它,幾秒鐘之后,它就自行關(guān)閉了!別人是如何做到的呢?這個(gè)問題偶而會(huì)涌現(xiàn)在

爭論區(qū)中,有的人會(huì)回答:

只要自己做一個(gè)類似MsgBo*的視窗,就可以自己用Timer來掌握這個(gè)視窗何時(shí)要關(guān)閉了!

但是,其實(shí)不用這么麻煩的,只要運(yùn)用系統(tǒng)的MsgBo*再加一個(gè)Timer就可以掌握了!

我們都知道MsgBo*可以設(shè)定成許多不同的樣子,

可以有許多不同的圖示,不同的按鈕,其中掌握按鈕的部份,可以設(shè)定的常數(shù)如下:

常數(shù)值說明

vbOKOnly0只顯示OK按鈕。

VbOKCancel1顯示OK及Cancel按鈕。

VbAbortRetryIgnore2顯示Abort、Retry及Ignore按鈕。

VbYesNoCancel3顯示Yes、No及Cancel按鈕。

VbYesNo4顯示Yes及No按鈕。

VbRetryCancel5顯示Retry及Cancel按鈕。

為什么要特別提到MsgBo*的常數(shù)呢?由于下面我們要告知您的方法,還是有一點(diǎn)點(diǎn)限制的!當(dāng)您設(shè)定的常數(shù)是VbAbortRetryIgnore或VbYesNo時(shí),下面的方法也是沒用的!

'在表單的聲明區(qū)中加入以下的聲明

PrivateDeclareFunctionFindWindowLibuser32AliasFindWindowA(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong

PrivateDeclareFunctionSendMessageLibuser32AliasSendMessageA(ByValhWndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong

PrivateConstWM_CLOSE=H10

PrivateConstMsgTitleAsString=TestMessage

'在表單中加入一個(gè)CommandButton及一個(gè)Timer掌握項(xiàng),加入以下程序碼:

PrivateSubCommand1_Click()

DimnRetAsLong

Timer1.Interval=3000

Timer1.Enabled=True

nRet=MsgBo*(假設(shè)您不回應(yīng)的話,3秒后此MsgBo*會(huì)自動(dòng)關(guān)閉,64,MsgTitle)

Timer1.Enabled=False

EndSub

PrivateSubTimer1_Timer()

DimhWndAsLong

hWnd=FindWindow(vbNullString,MsgTitle)

CallSendMessage(hWnd,WM_CLOSE,0,ByVal0)

EndSub

好了,很簡

單吧!您執(zhí)行程序時(shí),當(dāng)MsgBo*涌現(xiàn)3秒之后,就會(huì)自動(dòng)關(guān)閉了!

留意:此方法的限制說明:

1、當(dāng)常數(shù)設(shè)定為VbAbortRetryIgnore或VbYesNo時(shí),無效!

2、在DesignTime時(shí),無效,需要MakeE*E之后才有效!

306、如何得知某一臺(tái)網(wǎng)絡(luò)打印機(jī)尚有幾份等待打印的報(bào)表?

307、如何每天下載Internet上某一個(gè)網(wǎng)頁中的圖片來更換桌面的圖案?

308、如何呼叫系統(tǒng)的掌握面板?

309、如何完全模擬系統(tǒng)的掌握面板?

310、如何設(shè)定MsgBo*在假設(shè)干時(shí)間之后假設(shè)無回應(yīng)那么自動(dòng)關(guān)閉?

306、如何得知某一臺(tái)網(wǎng)絡(luò)打印機(jī)尚有幾份等待打印的報(bào)表?

當(dāng)我們要打印報(bào)表時(shí),假如打印機(jī)是本機(jī)的打印機(jī)的話,當(dāng)然立刻就會(huì)將報(bào)表打印出來,反正打印機(jī)就只有您一個(gè)人在運(yùn)用而已!但是假如是在一個(gè)人數(shù)許多的公司或企業(yè)時(shí),往往就需要許多人來共享某一部打印機(jī)了,而且打印機(jī)也不肯定就放在舉目可及之處!

當(dāng)您將報(bào)表丟到網(wǎng)絡(luò)打印機(jī)之后,由于不肯定看得到打印機(jī),您需要特別到擺放打印機(jī)的地方去拿報(bào)表,這時(shí)候您最關(guān)懷的,就是報(bào)表印了沒有,假如還沒有的話,那還有幾份還沒打印的報(bào)表排在您的報(bào)表之前呢?

下面這一段程序,可以讓您知道某一臺(tái)網(wǎng)絡(luò)打印機(jī)尚有幾份等待打印的報(bào)表?在您的程序丟出報(bào)表的同時(shí),您可以告知您的User,他的報(bào)表排在第幾份!

'在.bas文件中加入以下聲明及模組:

'ConstantsDefinition

PublicConstCCHDEVICENAME=32

PublicConstCCHFORMNAME=32

PublicConstPRINTER_ACCESS_ADMINISTER=H4

PublicConstPRINTER_ACCESS_USE=H8

'TypesDefinition

PublicTypeDEVMODE

dmDeviceNameAsString*CCHDEVICENAME

dmSpecVersionAsInteger

dmDriverVersionAsInteger

dmSizeAsInteger

dmDriverE*traAsInteger

dmFieldsAsLong

dmOrientationAsInteger

dmPaperSizeAsInteger

dmPaperLengthAsInteger

dmPaperWidthAsInteger

dmScaleAsInteger

dmCopiesAsInteger

dmDefaultSourceAsInteger

dmPrintQualityAsInteger

dmColorAsInteger

dmDuple*AsInteger

dmYResolutionAsInteger

dmTTOptionAsInteger

dmCollateA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論