Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Invisible Print ShellExecute 1

Status
Not open for further replies.

keenanbr

Programmer
Oct 3, 2001
469
0
0
IE
i'm using ..

Success = ShellExecute(hWndDesk, sTopic, sFile, sParams, sDirectory, nShowCmd)

to print Word Documents to the default printer. It also displays the document on the screen. How can I prevent this.

Regards,

 
Look at this example:

Code:
Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_HIDE As Long = 0
Private Const SW_SHOWNORMAL As Long = 1
Private Const SW_SHOWMINIMIZE As Long = 2
Private Const SW_SHOWMAXIMIZED As Long = 3
Private Const SW_SHOWNOACTIVATE As Long = 4
Private Const SW_SHOW As Long = 5
Private Const SW_MINIMIZE As Long = 6
Private Const SW_SHOWMINNOACTIVED As Long = 7
Private Const SW_SHOWNA As Long = 8
Private Const SW_RESTORE As Long = 9
Private Const SW_SHOWDEFAULT As Long = 10

'SW_HIDE 0
'Hides the window and activates another window.
'SW_MAXIMIZE 3
'Maximizes the specified window.
'SW_MINIMIZE 6
'Minimizes the specified window and activates
'the next top-level window in the Z order.
'SW_RESTORE 9
'Activates and displays the window. If the window
'is minimized or maximized, Windows restores it
' to its original size and position. An application
'should specify this flag when restoring a minimized window.
'SW_SHOW 5
'Activates the window and displays it in its current size and position.
'SW_SHOWDEFAULT 10
'Sets the show state based on the SW_ flag
' specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
'SW_SHOWMAXIMIZED 3
'Activates the window and displays it as a maximized window.
'SW_SHOWMINIMIZE 2
'Activates the window and displays it as a minimized window.
'SW_SHOWMINNOACTIVED 7
'Displays the window as a minimized window. The active window remains active.
'SW_SHOWNA 8
'Displays the window in its current state. The active window remains active.
'SW_SHOWNOACTIVATE 4
'Displays a window in its most recent size
'and position. The active window remains active.
'SW_SHOWNORMAL 1
'Activates and displays a window. If the window is minimized or
'maximized, Windows restores it to its original size and position.
'An application should specify this flag when displaying the window
'for the first time


Private Sub Command1_Click()
  ShellExecute 0&, "OPEN", "[URL unfurl="true"]www.msn.com",[/URL] vbNullString, "C:\", SW_SHOWMINIMIZE
'    ShellExecute 0&, "OPEN", "D:\temp\pps-cd\play.bat", vbNullString, "C:\", SW_SHOWNORMAL
'    ShellExecute 0&, "OPEN", "outlook.exe", vbNullString, "C:\", SW_SHOWNORMAL
'    ShellExecute 0&, "PRINT", "D:\temp\jazz.txt", vbNullString, "D:\temp", SW_SHOWMINIMIZE
    Beep
 '  c:\program files\outlook express\msimn.exe
 '  c:\ = Destination Folder
End Sub

-David
2006 & 2007 Microsoft Most Valuable Professional (MVP)
2006 Dell Certified System Professional (CSP)
 
THanks, but that is what I have already tried. It would probably work with a text document but I am printing word documents. What I am effectively doing is to right-ckick on a word document and click print. The document displays on the screen and prints to the printer. I would like to prevent, or at least minimize, the screen output.


Regards,
 

A workaround could be automation?

Open word invisibly, open the document, print it, close it, make word visible close and destroy?

Just a thought.
 
Yes, That was my first attempt but it is too slow.

Regards,
 
This is the fastest way. It will print a word doc using word.

Code:
'    ShellExecute 0&, "PRINT", "D:\temp\jazz.txt", vbNullString, "D:\temp", SW_SHOWMINIMIZE

-David
2006 & 2007 Microsoft Most Valuable Professional (MVP)
2006 Dell Certified System Professional (CSP)
 
keenanbr,

I 'm interesting on time difference between the two methods.
If you still have your first attempt-too slow-, and David's works for you, could you share it with us?

Thank you in advance for your time.
 
Sorry for the delay. This is the slow code.

Public Sub PrintDoc(ByVal sFileName As String, ByVal sPrinter As String, ByVal iOMRID As Integer, ByVal iEnvelopes As Integer, ByVal iDocuments, ByVal iBatchRun As Integer)
Dim word_server As Word.Application
Dim sThisDoc As String
' Open the Word server.
On Error GoTo OpenServerError

If iOMRID < 0 Then
UpdateTrailerPage sFileName, iEnvelopes, iDocuments, iBatchRun
sThisDoc = Environ("TEMP") & "\TrailerPage.doc"
Else
sThisDoc = sFileName
End If



Set word_server = New Word.Application
On Error GoTo ErrorRoutine




' Open the file.
word_server.Documents.Open _
FileName:=sThisDoc, _
ConfirmConversions:=False, _
ReadOnly:=True, _
AddToRecentFiles:=False, _
PasswordDocument:="", _
PasswordTemplate:="", _
Revert:=False, _
WritePasswordDocument:="", _
WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto



'--------------------------------------

' word_server.PrintPreview = True
' word_server.Visible = True

' ' Print the document.
word_server.ActivePrinter = sPrinter
word_server.Visible = False
word_server.ActiveDocument.PrintOut _
Range:=wdPrintAllDocument, _
Item:=wdPrintDocumentContent, _
Copies:=1, _
Background:=False
'
'
'
' Close the document.
word_server.ActiveDocument.Close SaveChanges:=False
'
'
' ' Close the Word server.
word_server.Quit False
Set word_server = Nothing


Kill:
Kill sFileName
If iOMRID < 0 Then
Sleep 5000
Kill sThisDoc
End If

' MsgBox "OK"
Exit Sub

OpenServerError:
MsgBox "Error " & Format$(Err.Number) & " opening " & _
"Word.Basic" & vbCrLf & Err.Description, _
vbExclamation, "Error"
' MousePointer = vbDefault
Exit Sub
ErrorRoutine:
MsgBox ("Error: " & Err.Description & " in PrintDoc")
End Sub
 
Perhaps something like this would be quicker for the automated solution:
Code:
[blue]Public Sub PrintDoc(strFile As String)
    Dim Word_Serv As Word.Application
    Dim Created As Boolean
    
    On Error Resume Next
    Set Word_Serv = GetObject(, "word.application")
    If Word_Serv Is Nothing Then
        Created = True
        Set Word_Serv = New Word.Application
        Word_Serv.Documents.Add
    End If
        
    Word_Serv.PrintOut FileName:=strFile
    If Created Then Word_Serv.Quit False
    Set Word_Serv = Nothing
End Sub[/blue]
 
Thanks, strongm for the suggestion but that produces nothing because there is no active document.
 
Sorry, strongm for doubting you. I'm not sure what happened but I got no output when I ran this the first time. Now it works a treat. Thanks for your help.

Regards,
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top