PDA

View Full Version : سوال: بدست اوردن پرینت های ارسالی صف چاپ



systam
دوشنبه 16 تیر 1393, 13:52 عصر
با عرض سلام به تمامی دوستان گلم
از عنوان پست مشخصه من میخوام زمانی که پرینت ارسال میشه به صف چاپ تعداد صفحات رو برای من نمایش
با این کد من پرینت های ارسالی رو انتخاب میکنم
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_PrintJob");
ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
ManagementObjectCollection queryCollection1 = query1.Get;
foreach (ManagementObject mo in queryCollection1) {
Label1.Text = (" F\'E ~1�F*1: " + mo("DriverName").ToString);
Label2.Text = ("F\'E 3F/ : " + mo("Document").ToString);
Label3.Text = ("*9/\'/ �D 3F/ : " + mo("TotalPages").ToString);
ListBox1.Items.Add(mo("TotalPages"));
Timer1.Enabled = false;

}
Dim query As String = "SELECT * FROM Win32_PrintJob" Dim searchPrintJobs As ManagementObjectSearcher = New ManagementObjectSearcher(query)
Dim jobs As ManagementObjectCollection = searchPrintJobs.Get
Dim int_count As Integer = jobs.Count
For Each job As ManagementObject In jobs
ListBox1.Items.Add(job.Properties("TotalPages").Value.ToString)
'Exit For
Timer1.Enabled = False
'job = Nothing
Next
و با یک حلقه For Each تمامی پرینت های صف چاب رو از قبیل نام فایل نام پرینتر تعداد صفحات میگیرم
ولی یه مشکل دارم اینه که کاربر شاید چند تا پرینت ارسال کنه چون از حلقه استفاده کردم هی تعداد صفحات رو برای من پشت سر هم لیست میکنه
چطوری میشه کاری کرد که کاربر 1 فایل ارسال کرد برای پرینت لیست کنه
این عکس رو نگاه کنید هی پشت سر هم یک فایل تعداد صفحات رو هی لیست میکنه چون از حلقه و یک تایمر استفاده کردم باید کاری کنم

برنامه رو ضمیمه کردم
دوستان ممنونم میشم راهنماییم کنید
یا علی

systam
دوشنبه 16 تیر 1393, 23:21 عصر
سلام به اساتید
من با گرفتن تعداد صفحات فایل های موجود در صف چا مشکل ندارم
چون ما از یک حلقه و یک تایمر استفاده کردیم مدام صف چاپ رو بررسی میکنه اگه تایمر متوقف نشه مدام تعداد صفحات رو برای ما نمایش میده طبق عکس پست 1
مشکل من همینه
میخوام هر موقع پرینت ارسال شد به صف چاپ برنامه به صورت هوشمند فقط تعداد صفحات ارسالی برای ما نمایش بده همین

systam
پنج شنبه 19 تیر 1393, 03:22 صبح
سلام
واقعا چی بگم !!!!!!!!!
اگه از دوستان سوالی مطرح میکنند توی تالار ها و یه مشکلی تو کارشونه به خدا از دستم بربیاد مطمئنا کمکشون میکنم تا جایی که بتونیم


ابن برنامه ای که ضمیمه کردم فقط یک مشکل داره اگه فایلی برای پرینت به صف چاپ فرستاده شد بلافاصله برنامه اون فایل رو نام ، تعداد صفحاتش ، سایزش ، و تاریخ ارسال فایل رو برای در یک
لیست ویو نمایش میده
حالا میکین در حین چاپ فایل اول یه فایل دیگه برای چاپ ارسال شد بلافاصله برنامه اون رو هم به لیست ویو اضافه کنه و یا اماده لیست کردن فایل های ارسالی به صف چاپ بشه
من هر کاری کردم بتونیم این کار رو انجام بدم نشد
حالا عزیزان تقاضا دارم یک کمک کوچیک بکنند ممنون میشم

کد برنامه
using System.Management;
using System.Collections.Specialized;
public class Form1 {

private void Timer1_Tick(object sender, System.EventArgs e) {
string query = "SELECT * FROM Win32_PrintJob";
ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(query);
ManagementObjectCollection jobs = searchPrintJobs.Get;
int int_count = jobs.Count;
foreach (ManagementObject job in jobs) {
Timer1.Enabled = true;
ListView1.Items.Clear();
string[,] str_list;
str_list[3] = job.Properties["Document"].Value.ToString;
str_list[2] = job.Properties["size"].Value.ToString;
str_list[1] = job.Properties["TotalPages"].Value;
str_list[0] = ManagementDateTimeConverter.ToDateTime(job.Propert ies["TimeSubmitted"].Value);
ListViewItem itm = new ListViewItem(str_list);
ListView1.Items.Add(itm);
}
}
}
یا علی

systam
جمعه 20 تیر 1393, 14:23 عصر
سلام از آخر درست شد و فقط یک مشکلی دیگه مونده برنامه داشتم تست میکردم اومدم یک فایل رو چند بار پرینت گرفتم
بار اول = دوبار کامل که تعداد فایل ارسالی به صف چاپ 8 صفحه بود درست تعداد صفحات رو برای من نمایش داد
بار دوم = هم تعداد رو از صفحات 1 الی 5 فرستاددم به صف چاپ بازم 5 صفحه رو درست تعداد صفحات رو نمایش دارد
بار سوم = باز همون 8 صفحه رو ارسال کردم این بار برنامه تعداد صفحات 2 صفحه برای من نمایش داد
عکسشو هم ضمیمه کردم برنامه هم ضمیمه شد

میدونم باز خودم باید دنبالش باشم کسی نیست راهنمایی کنه ولی بازم گذاشتم تا سروران عنایتی بکنند برنامه یه نگاه کوچیک بندازن ما رو راهنمایی کنند.
یا علی

systam
سه شنبه 24 تیر 1393, 23:10 عصر
دوستان کسی راه حلی نداره
برنامه زمانی که اجرا میشه چند فایل رو به صف چاپ ارسال میشه 2 فایل اول رو درست نمایش میده اطلاعاتشو ولی به بعدش هم سایز و تعداد صفحات رو اشتباه نشون میده

systam
چهارشنبه 25 تیر 1393, 00:03 صبح
تعجباتی که برنامه بسته میشه دوبار باز میشه اطلاعات رو درست نمایش میده

shahryari
شنبه 28 تیر 1393, 10:45 صبح
تعجباتی که برنامه بسته میشه دوبار باز میشه اطلاعات رو درست نمایش میده شما باید یه کاری بکنید که برنامه تون هر دو سه ثانیه یکبار ریفرش بشه یعنی کدهاییرو که در فرم لود کذاشتید رو داخل یک روال بریزید و با تایمر با اینتروال 2000 اون روال رو صدا بزنید

systam
شنبه 28 تیر 1393, 13:11 عصر
شما باید یه کاری بکنید که برنامه تون هر دو سه ثانیه یکبار ریفرش بشه یعنی کدهاییرو که در فرم لود کذاشتید رو داخل یک روال بریزید و با تایمر با اینتروال 2000 اون روال رو صدا بزنید
سلام استاد
من این کارو کردم توی تایمر که هر ثانیه رفرش میکه
یکی از دوستان گفت این روش که شما استفاده میکنید امکان خطا زیاده
بهترین راه اینه که بیای از هوک کردن این کار رو انجام بدی اگه اطلاعاتی دارید ممنون میشم راهنماییم کنید



یاعلی

systam
شنبه 04 مرداد 1393, 21:07 عصر
سلام
خیلی توی نت گشتم در باره هوک کردن اطلاعات صف چاپ یک مبحثی است که کمتر برنامه نویسی ایرانی باهاش کارکرده باشه
چند از دوستانی که این برنامه رو به صورت تجاری درست کرده و میفروشند هم حاضر به راهنمایی نشدند

ای اساتید بزرگان سایت یکی برسه به دادم

systam
دوشنبه 06 مرداد 1393, 01:23 صبح
سلام
از سروان ، بزرگان ، اساتید ، استادان
این کد رو از این سایت گرفتم چطوری باید این سایت کد رودر برنامه استفاده کنم هر کاری کردم خطا میگیره چند جاش
(http://support.microsoft.com/kb/202480)

کد ها رو هم به زبان C#‎‎‎‎‎‎ و VB ضمیمه کردم

ممنون میشم راهنمایی کنید :تشویق::لبخند::قلب::خجالت:

systam
جمعه 31 مرداد 1393, 17:08 عصر
سلام
از دوستان کسی هست بتونه این برنامه رو تبدیل کنه توی تالار vb.net کسی جواب نداد
برنامه به زبون Vb6 هست (http://binaryworld.net/Main/CodeDetail.aspx?CodeId=3643)

systam
یک شنبه 02 شهریور 1393, 22:09 عصر
سلام
من که امیدی ندارم کسی جوابمو بده بازم شایــــــــــــــــــــــ ــــــــــــــــــد کسی باشه جوابده(تیریست تو تاریکی)
با یکی از دوستان توی سایت www.codeproject.com (http://www.codeproject.com) درباره اشتباه نمایش دادن اطلاعات اینطور گفت :


حدس من این است که شما در حال گرفتن اطلاعات در مورد کار spooled (تعداد صفحات و حجم کار) قبل از کار است spooling است به پایان رسید.
شما باید برای "کار نوشته شده" رویداد صبر که در آن .Spooled درست است - در این مرحله تمامی اطلاعات برای کار چاپ در اسپولر هستند و بنا به درخواست شما خواهد شد به اندازه درست / تعداد صفحات بازگشت.

دوستی دیگه هم توی سایت http://www.vbforums.com/ اینطور گفت :

می تواند از آن به این دلیل است بازیابی صفحه و حجم زمانی که آن را در صف برای اولین بار و پس از آن داده شد هنوز به طور کامل نمی صف را تشخیص؟
در حالی که کار چاپ بزرگ است به چاپگر فرستاده می شود. شاید زمانی که سند شد هنوز به طور کامل ارسال نشده است؟ فقط یک ایده

کد استفاده شده برنامه زیر 20 صفحه درست نمایش میده ولی وقتی تعداد صفحات بالاتر میره چون چند صفحه به چند صفحه اطلاعات رو به صف چاپ ارسال میشه این برنامه هم ارسالی اول رو برای ما نمایش میده به بعد رو هیچی ؟ دوستمون هم گفت spooling به پایان نمیرسه

کد های برنامه :
VB :

Dim PrintJobSet
Dim PrintJob As Object
PrintJobSet = GetObject("winmgmts:").InstancesOf("Win32_PrintJob")
For Each PrintJob In PrintJobSet
Dim str_list(5) As String
str_list(4) = PrintJob.Owner
str_list(3) = PrintJob.Document
str_list(2) = PrintJob.size
str_list(1) = PrintJob.TotalPages
str_list(0) = (ManagementDateTimeConverter.ToDateTime(PrintJob.T imeSubmitted))
Dim itm As New ListViewItem(str_list)
ListView1.Items.Add(itm)
remove_empty_row()
Next

#C :

dynamic PrintJobSet = null;object PrintJob = null;
PrintJobSet = Interaction.GetObject("winmgmts:").InstancesOf("Win32_PrintJob");
foreach (object PrintJob_loopVariable in PrintJobSet) {
PrintJob = PrintJob_loopVariable;
string[] str_list = new string[6];
str_list[4] = PrintJob.Owner;
str_list[3] = PrintJob.Document;
str_list[2] = PrintJob.size;
str_list[1] = PrintJob.TotalPages;
str_list[0] = (ManagementDateTimeConverter.ToDateTime(PrintJob.T imeSubmitted));
ListViewItem itm = new ListViewItem(str_list);
ListView1.Items.Add(itm);
remove_empty_row(); }

تقاضا دارم از دوستان کسی هست راهنمایی کنه دریغ نکنه

ممنونم
یا علی