Erwin Craps
Erwin.Craps at ithelps.be
Fri Jun 27 00:58:17 CDT 2003
I believe you should check the word object for some posibilities if printing is done or not. You will have a hard time gooing to the spooler directly. You will have no guaranty wich printer/document you did print from that word instance. There must be some code to evaluate if word has finished printing or not. Check that that value in a loop with a doevents statement in Access. -----Oorspronkelijk bericht----- Van: MartyConnelly [mailto:martyconnelly at shaw.ca] Verzonden: vrijdag 27 juni 2003 1:52 Aan: accessd at databaseadvisors.com Onderwerp: Re: [AccessD] OT: TS and Automation Look at http://www.merrioncomputing.com/Programming/WatchPrinter.htm and Example 5 - Listing all the print jobs queued by a given user http://www.merrioncomputing.com/EventVB/Example6.html They started to write this for VB6 and switched to vb.net Henry Simpson wrote: > That will take a bit of work. I'll have to figure out how to retrieve > a handle to a printer and identify specific print jobs etc. > > I'd been looking at: > > http://www.mvps.org/word/FAQs/MacrosVBA/WaitForPrint.htm > > option #2 which tells me to poll on an interval the Word object > BackgroundPrintingStatus which returns the number of print jobs in the > background printing queue and that would be adequate except: > > 'Generally, option#1 is safer, because Word can sometimes get a bit > confused if asked to background print too many documents at once." > > And option #1 is to use ActiveDocument.Printout Background:=False > which is supposed to pause automation driver code until Word completes > printing. Unfortunately, the code appears to run over this line > without hesitation. Even if the jobs are enqueued, it appears as > though the number of jobs alone may overwhelm the server. If either > approach can be made to work reliably I will safely be able to close > Word or it's documents as they are finished and not overrun the server. > > I suppose I'll look at the api calls if a test run while most of the > staff are out this long weekend flops. Thanks. > > Hen > > > >> From: MartyConnelly <martyconnelly at shaw.ca> >> Reply-To: accessd at databaseadvisors.com >> To: accessd at databaseadvisors.com >> Subject: Re: [AccessD] OT: TS and Automation >> Date: Thu, 26 Jun 2003 12:02:27 -0700 >> >> You might be able to interrogate the printer statuses via >> winspool.drv depending on how hard they have locked it down. >> >> Private Declare Function GetJob Lib "winspool.drv" Alias "GetJobA" _ >> (ByVal hPrinter As Long, _ >> ByVal JobId As Long, _ >> ByVal Level As Long, _ >> buffer As Long, _ >> ByVal pbSize As Long, _ >> pbSizeNeeded As Long) As Long >> >> Private Declare Function SetJob Lib "winspool.drv" Alias _ >> "SetJobA" (ByVal hPrinter As Long, _ >> ByVal JobId As Long, _ >> ByVal Level As Long, _ >> pJob As Long, _ >> ByVal Command As Long) As Long >> >> >> Public Enum PrintJobStatuses >> JOB_STATUS_PAUSED = &H1 >> JOB_STATUS_ERROR = &H2 >> JOB_STATUS_DELETING = &H4 >> JOB_STATUS_SPOOLING = &H8 >> JOB_STATUS_PRINTING = &H10 >> JOB_STATUS_OFFLINE = &H20 >> JOB_STATUS_PAPEROUT = &H40 >> JOB_STATUS_PRINTER = &H80 >> JOB_STATUS_DELETED = &H100 >> JOB_STATUS_BLOCKED_DEVICEQUEUE = &H200 >> JOB_STATUS_USER_INTERVENTION = &H400 >> JOB_STATUS_RESTART = &H800 >> End Enum >> >> Private Type SYSTEMTIME >> wYear As Integer >> wMonth As Integer >> wDayOfWeek As Integer >> wDay As Integer >> wHour As Integer >> wMinute As Integer >> wSecond As Integer >> wMilliseconds As Integer >> End Type >> >> Private Type JOB_INFO_1 >> JobId As Long >> lpPrinterName As String >> lpMachinename As String >> lpUserName As String >> lpDocumentName As String >> lpDataType As String >> lpStatus As String >> Status As PrintJobStatuses >> Priority As Long >> Position As Long >> TotalPages As Long >> PagesPrinted As Long >> Submitted As SYSTEMTIME >> End Type >> >> Private Type JOB_INFO_2 >> JobId As Long >> lpPrinterName As String >> lpMachinename As String >> lpUserName As String >> lpDocumentName As String >> lpNotifyName As String >> lpDataType As String >> lpPrintProcessor As String >> lpParameters As String >> lpDriverName As String >> lpDevMode As Long 'Pointer to DevMode >> lpStatus As String >> lpSecurityDescriptor As Long 'Pointer to SECURITY_DESCRIPTOR >> Status As PrintJobStatuses >> Priority As Long >> Position As Long >> StartTime As Long >> UntilTime As Long >> TotalPages As Long >> JobSize As Long >> Submitted As SYSTEMTIME >> time As Long >> PagesPrinted As Long >> End Type >> >> '\\ Included in WINNT4 and beyond >> Private Type JOB_INFO_3 >> JobId As Long >> NextJobId As Long >> Reserved As Long 'must be set to zero >> End Type >> >> Henry Simpson wrote: >> >>> I don't really know this outfit's architecture. They have a file >>> server and a terminal server, a good number of Win CE terminals at >>> the site plus off site terminals and three Lexmark laser printers >>> with NICs connected to the LAN. There is also a single workstation >>> running Win2k that was idle at the time as well as two or three >>> Win2k laptops which were doing whatever they do. I have no >>> priveleges at this security conscious site so do not have access to >>> the Pinters in Win Explorer for properites, print queues, control >>> panel or any other information. They have had spontaneous Terminal >>> server reboots when large graphics files were sent to the color >>> laser in high resolution modes and it has also rebooted once when it >>> was sent a batch of 80 Word documents in a quick loop. These >>> spontaneous reboots have only started since they switched to a thin >>> client environment. The resource crash was clearly instigated by >>> the multiple Word instances since clearing them allowed users to >>> continue working for a time. There is no doubt that printing has >>> been an issue in recent months. >>> >>> Hen >>> >>> >>>> From: Drew Wutka <DWUTKA at marlow.com> >>>> Reply-To: accessd at databaseadvisors.com >>>> To: "'accessd at databaseadvisors.com'" <accessd at databaseadvisors.com> >>>> Subject: RE: [AccessD] OT: TS and Automation >>>> Date: Thu, 26 Jun 2003 11:41:24 -0500 >>>> >>>> Where was the printer running from, was it on a print server. >>>> There is a >>>> known print server bug between NT 4.0 print servers and Windows 2000 >>>> machines. It causes a massive amount of connections, which exceeds >>>> NT 4.0's >>>> limit.....which doesn't really show up as memory or CPU resources, >>>> however, >>>> it completely blocks access to the print server (so if it is also a >>>> PDC or >>>> BDC, you just locked a lot of people out of the network) >>>> >>>> Drew >>>> >>>> -----Original Message----- >>>> From: Henry Simpson [mailto:hsimpson88 at hotmail.com] >>>> Sent: Thursday, June 26, 2003 11:24 AM >>>> To: accessd at databaseadvisors.com >>>> Subject: [AccessD] OT: TS and Automation >>>> >>>> >>>> Yesterday some users ran some automation code that creates Word >>>> instances in >>>> >>>> a loop and kills them after printing but it turns out that the >>>> printer was >>>> so slow that the number or Word instances increased to the point >>>> that the NT >>>> >>>> Terminal Server ran out of some kinds of resources and started >>>> giving spurious error messages about not finding a printer, being >>>> unable to install >>>> >>>> a printer and then User32.dll errors and path not found errors. >>>> One user >>>> was eventually unable to open any applications except that which >>>> was already >>>> >>>> open. An admin cleared the excess Word instances, as many as 18 >>>> that outran >>>> >>>> the printer, and then the user was able to work for a while. >>>> Ultimately, >>>> afflicted users logged right out and back in again as a precaution. >>>> >>>> After that, more and more users began to have problems and >>>> ultimately, no >>>> one was able to log in to the server. Before it all completely >>>> failed, an >>>> admin took a look at resource and there was plenty of memory and low >>>> processor usage and all unnecessary instances of applications were >>>> cleared >>>> yet every single person started getting the user32.dll error and, >>>> after >>>> logging out, was unable to log back in due to a time out even >>>> though the >>>> Terminal Server was on a local LAN. The admin was able to see that >>>> all >>>> users were out and no user applications were running but he also got a >>>> user32.dll error from which there was no recovery. An attempt to >>>> restart >>>> from Task Manager gave the same user32.dll errors and after 45 >>>> minutes of >>>> recovery attempts, it was finally decided to interrupt the power >>>> off the >>>> server. >>>> >>>> Ultimately Access automation code took full responsibility for the >>>> fiasco >>>> and the Terminal Server was blameless. >>>> >>>> I'm not desperate for solutions as code can revert to a single Word >>>> instance >>>> >>>> - multi Document with 20 second time delay approach that worked in >>>> the past. >>>> >>>> I could use help with code that pauses the Access automation >>>> while it >>>> waits for a print job to complete. So far I've dabbled with >>>> >>>> objWord.Options.PrintBackground = False >>>> objDoc.PrintOut Background:=False >>>> >>>> >>>> What gets me is the Admin view that the Access code is responsible >>>> for their >>>> >>>> inability to release resources that were some how used but didn't >>>> show up in >>>> >>>> any resource monitors or error logging. >>>> >>>> Hen >>>> >>>> _________________________________________________________________ >>>> Tired of spam? Get advanced junk mail protection with MSN 8. >>>> http://join.msn.com/?page=features/junkmail >>>> >>>> _______________________________________________ >>>> AccessD mailing list >>>> AccessD at databaseadvisors.com >>>> http://databaseadvisors.com/mailman/listinfo/accessd >>>> Website: http://www.databaseadvisors.com >>>> _______________________________________________ >>>> AccessD mailing list >>>> AccessD at databaseadvisors.com >>>> http://databaseadvisors.com/mailman/listinfo/accessd >>>> Website: http://www.databaseadvisors.com >>> >>> >>> >>> _________________________________________________________________ >>> The new MSN 8: advanced junk mail protection and 2 months FREE* >>> http://join.msn.com/?page=features/junkmail >>> >>> _______________________________________________ >>> AccessD mailing list >>> AccessD at databaseadvisors.com >>> http://databaseadvisors.com/mailman/listinfo/accessd >>> Website: http://www.databaseadvisors.com >>> >> >> >> _______________________________________________ >> AccessD mailing list >> AccessD at databaseadvisors.com >> http://databaseadvisors.com/mailman/listinfo/accessd >> Website: http://www.databaseadvisors.com > > > _________________________________________________________________ > Add photos to your e-mail with MSN 8. Get 2 months FREE*. > http://join.msn.com/?page=features/featuredemail > > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com