Skip to main content

C# print file on LAN Printer

If you want to print any file on network printer then you can try with this code block



  // Change Default Printer  
         System.Management.ManagementObjectSearcher search =  
                 default(System.Management.ManagementObjectSearcher);  
         System.Management.ManagementObjectCollection results =  
                 default(System.Management.ManagementObjectCollection);  
         System.Management.ManagementObject printer =  
                 default(System.Management.ManagementObject);  
         search =  
          new System.Management.ManagementObjectSearcher("select * from win32_printer");  
         results = search.Get();  
         //Get Default Printer  
         System.Management.ManagementObject defaultPrinter = null;  
         foreach (System.Management.ManagementObject foundPrinter in results)  
         {  
           System.Management.PropertyDataCollection  
              propertyDataCollection = foundPrinter.Properties;  
           System.Diagnostics.Debug.WriteLine(foundPrinter["Name"]);  
           if ((bool)foundPrinter["Default"]) // DEFAULT PRINTER  
           {  
             System.Diagnostics.Debug.WriteLine(foundPrinter["Name"]);  
             System.Diagnostics.Debug.WriteLine(foundPrinter["Location"]);  
           }  
         }  
         // Set Default printer  
         foreach (System.Management.ManagementObject foundPrinter in results)  
         {  
           System.Diagnostics.Debug.Print(foundPrinter["Name"].ToString());  
           if (foundPrinter["Name"].Equals(@"\\192.168.10.139\HP DeskJet 2130 series"))  
           {  
             System.Management.ManagementBaseObject outParams =  
                foundPrinter.InvokeMethod("SetDefaultPrinter", null, null);  
             if (outParams == null)  
               System.Diagnostics.Debug.WriteLine("Unable to set default printer");  
             Int32 retVal = (int)(uint)outParams.Properties["ReturnValue"].Value;  
             //if (retVal == 0)  
             //  return true;  
             //else  
             //  return false;  
             break;  
           }  
         }  
  try  
         {  
           ProcessStartInfo info = new ProcessStartInfo();  
           info.UseShellExecute = true;  
           info.Verb = "printto";  
           info.FileName = CurrentEmailFilePath;  
           info.CreateNoWindow = true;  
           info.WindowStyle = ProcessWindowStyle.Hidden;  
           Process p = new Process();  
           p.StartInfo = info;  
           p.Start();  
           p.WaitForInputIdle();  
           System.Threading.Thread.Sleep(3000);  
           if (false == p.CloseMainWindow())  
             p.Kill();  
         }  
         catch (Exception ex)  
         {  
           throw;  
         }  



Comments

Popular posts from this blog

mvvm double click event in listview

If you want to get the double click event on a listview item you can try with this code; <ListView Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" Width="250" Height="200" HorizontalAlignment="Stretch" VerticalAlignment="Top" AlternationCount="2" BorderBrush="#FFA8CC7B" ItemContainerStyle="{StaticResource alternatingStyle}" ItemsSource="{Binding FromPayerNameList}" SelectedItem="{Binding SelectedFromPayer, Mode=TwoWay}"> <ListView.ItemTemplate> <DataTemplate> <TextBlock Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" Text=...

WPF datagrid cell textbox change event

Entity/Class: public class FeesDetails : INotifyPropertyChanged { public int Id { get; set; } public string FeesName { get; set;} public string FeesDetailsName { get; set; } public int? PaidAmount { get; set; } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(System.String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } public int feesAmount { get; set; } public int FeesAmount { get { return this.feesAmount; } set { if (value != this.feesAmount) { this.feesAmount = value; NotifyPropertyChanged("FeesAmount"); } } } } XAML: <DataGrid AutoGenerateColumns="False" Height="21...

The calling thread must be STA, because many UI components require this.

Using Thread: // Create a thread Thread newWindowThread = new Thread(new ThreadStart(() => { // You can use your code // Create and show the Window FaxImageLoad obj = new FaxImageLoad(destination); obj.Show(); // Start the Dispatcher Processing System.Windows.Threading.Dispatcher.Run(); })); // Set the apartment state newWindowThread.SetApartmentState(ApartmentState.STA); // Make the thread a background thread newWindowThread.IsBackground = true; // Start the thread newWindowThread.Start(); Using Task and Thread: // Creating Task Pool, Each task will work asyn and as an indivisual thread component Task[] tasks = new Task[3]; // Control drug data disc UI load optimize tasks[0] = Task.Run(() => { //This will handle the ui thread :The calling thread must be STA, because many U...