精华内容
下载资源
问答
  • ///返回 JOB_INFO_1 指针,和任务记录数 pLength JOB_INFO_1* CControlPrinterDlg::ListJobsArray(LPTSTR szPrinterName,LPDWORD pLength) //CControlPrinterDlg::你的类名 { HANDLE hPrinter; DWORD ...
    ///返回 JOB_INFO_1 指针,和任务记录数 pLength 
    JOB_INFO_1* CControlPrinterDlg::ListJobsArray(LPTSTR szPrinterName,LPDWORD pLength) //CControlPrinterDlg::你的类名
    {
            HANDLE hPrinter;
    	DWORD  dwNeeded,dwReturned,i;
    	JOB_INFO_1* pJobInfo;
    	if(!OpenPrinter(szPrinterName,&hPrinter,NULL)) //打开打印机
    	{
    		return NULL;
    	}
    	//
    	if(!EnumJobs(hPrinter,0,0xFFFFFFFF,1,NULL,0,&dwNeeded,&dwReturned))
    	{
    		if(GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
    		{
                         ClosePrinter(hPrinter);
    	             return NULL;
    		}
    	}
    
    	if((pJobInfo=(JOB_INFO_1*)malloc(dwNeeded))==NULL)
    	{
    		 ClosePrinter(hPrinter);
    		 return NULL;
    	}
    	if(!EnumJobs(hPrinter,0,0xFFFFFFFF,1,(LPBYTE)pJobInfo,dwNeeded,&dwNeeded,&dwReturned))
    	{
    		ClosePrinter(hPrinter);
    		free(pJobInfo);
    		return NULL;
    	}
    	ClosePrinter(hPrinter);
    	*pLength=dwReturned;
    	return pJobInfo;
    }
    

      

    调用:

    void CControlPrinterDlg::OnSelchangePrinters() 
    {
    	// TODO: Add your control notification handler code here
    	int nIndex=m_listbox.GetCurSel();
    	CString strPrinterName;
    	m_listBox_job.ResetContent();
    	if(nIndex!=CB_ERR)
    	{
    		m_listbox.GetText(nIndex,strPrinterName);
    		if(!strPrinterName.IsEmpty())
    		{
    			DWORD length;
    			JOB_INFO_1* jobs=ListJobsArray((LPTSTR)(LPCSTR)strPrinterName,&length);  //这里调用
    			if(jobs!=NULL)
    			{
    				for(int i=0;i<length;i++)
    				{		
    					m_listBox_job.AddString(jobs[i].pDocument);
    				}
    			}
    			free(jobs); //释放
    		}
    
    	}
    }
    

      

    转载于:https://www.cnblogs.com/ericyi/p/4402369.html

    展开全文
  • 打印机 Brother MFC-1810 连接方式 USB 打印机驱动方式 CUPS 问题的发现 前一段时间发现办公室的MFC-1810打印机无法插入电脑无法打印,由于没有时间就没有去管它。但是后来发现无论是什么打印机打印都有问题,就想着...

    开始

    系统

    Ubuntu 18

    打印机

    Brother MFC-1810

    连接方式

    USB

    打印机驱动方式

    CUPS

    问题的发现

    前一段时间发现办公室的MFC-1810打印机无法插入电脑无法打印,由于没有时间就没有去管它。但是后来发现无论是什么打印机打印都有问题,就想着着手去解决这个问题。

    由于打印机采用的是CUPS驱动,进而打开了CUPS的管理界面:localhost:631在管理界面中发现问题叫做filter Failed问题就着手看是查询相关资料。
    在这里插入图片描述


    问题探索

    在搜索很多论坛后,在这里 发现了有人也讨论同样的错误。其实总结起来就是升降级cups-filters就能解决。
    可是查了半天发现apt安装的软件不是想降级就能降级的。故而想着那要不就升级好了。
    然而,在apt install的列表里,我的cups-filters已经是最新版了(1.20.x)

    升级CUPS-FILTER

    在搜了搜cups-filters后,发现它的源码还是有po在github上的,所以,就想着从源码安装它。
    cups-filters的源码地址是: https://github.com/OpenPrinting/cups-filters
    git clone后,切到对应的目录,然后执行安装命令。
    安装命令为(因为我装的是1.27.4,所以docdir也用1.27.4,你们如果装新版本,就用新版本号,不过改不改没影响):

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --localstatedir=/var \
                --without-rcdir      \
                --disable-static     \
                --disable-avahi      \
                --docdir=/usr/share/doc/cups-filters-1.27.4 &&
    make
    sudo make install
    

    安装过程中的问题

    在安装过程中发现有好多包电脑都没有,大部分用sudo apt install 对应的包都能解决,有一些比较偏门的包我也在这里记录下:

    sudo apt install cups-config
    sudo apt install libcups2-dev
    sudo apt install *lcms* # 这里因为是实在找不到lcms的具体名字,就用了wildcard
    sudo apt install *freetype* # freetype也同lcms的道理
    sudo apt install libfontconfig1-dev
    

    升级qpdf

    就是发现还有qpdf还要升级,然而这个包在apt上也已经认为是最新版本,所以需要通过源码编译安装:

    git clone https://github.com/qpdf/qpdf
    cd qpdf
    make -j$(nproc) #这里是为了加速make速度
    sudo make install
    

    总结

    目前Ubuntu的使用和Windows和Mac比起来还是有些差强人意,本来即插即用的打印机也要如此折腾。不过目前因为做项目需要确实也离不开这个系统。希望在驱动这方面ubuntu能像windows看齐,越做越好。

    展开全文
  • 当打印任务中出现优先级高的任务则先打印 当打印任务的份数超过最大容量时还能记忆已打印份数 当打印队列的任务数不超过最大容量时 当打印任务还没全部打印完时出现比它优先级更高的任务 当打印任务优先级相同...

    效果图:

    • 当打印任务中出现优先级高的任务则先打印
      在这里插入图片描述
    • 当打印任务的份数超过最大容量时还能记忆已打印份数
      在这里插入图片描述
    • 当打印队列的任务数不超过最大容量时
      在这里插入图片描述
    • 当打印任务还没全部打印完时出现比它优先级更高的任务

    在这里插入图片描述

    • 当打印任务优先级相同时优先打印内容少的
      在这里插入图片描述
    #include<stdio.h>
    #include<iostream>
    #include<queue>
    #include<Windows.h>
    #include<string>
    #include<time.h>
    using namespace std;
    int error = 0;
    int cnt = 0;//用来记录总任务数
    int n;//用来记录当次输入的任务数量
    int cur = 0;
    int pre = 0;
    CRITICAL_SECTION Printer; //定义Printer临界区资源变量
    #define MAXSIZE  2 //打印队列的最大长度
    struct Job {
        int id;//任务的序号
        int level;//任务的优先级
        int capacity;//打印内容的大小
        int amount = 0;
        string print_work;
    };//任务结构体的创建
    priority_queue<Job> work, q;
    Job job[100000];
    int done[100000];
    DWORD thread_1, thread_2;
    HANDLE hThread_1, hThread_2;
    bool operator<(const Job& s1, const Job& s2) {
        if (s1.level == s2.level)//优先度相同返回打印内容少的
            return s1.capacity> s2.capacity;
        return s1.level < s2.level;//返回优先度高的任务
    }
    void lock()
    {
        EnterCriticalSection(&Printer);
    }
    void unlock()
    {
        LeaveCriticalSection(&Printer);
    }
    DWORD CALLBACK work_add(LPVOID param)
    {
        while (!error)
        {
            lock();//work_add线程占用临界区资源
            {
                cout << "请输入需要添加的打印任务个数(输入0则打印完剩下任务)";
                cin >> n;
                cur =cur+n-pre;
                if (n == 0) //不再有新的打印任务
                {
                    unlock();//停止占用临界区资源
                    while (!work.empty())
                        Sleep(0);//如果打印队列中还有剩余的任务,则令work_print线程打印完所有剩余的任务
                    error = 1;//跳出循环
                    break;
                }
                for (int i = cnt; i < n + cnt; i++)
                {
                    string st;
                    job[i].id = i + 1;
                    cout << "请输入第" << i + 1 << "个任务的优先级、打印份数、打印内容:";
                    cin >> job[i].level >> job[i].amount;
                    if (job[i].level > 7)
                        job[i].level = 7;
                    getline(cin, st);//预防打印内容带有空格cin无法接收的情况
                    job[i].print_work = st;
                    job[i].capacity = job[i].print_work.size();//打印内容的大小
                }
                for (int i = cnt; i < n + cnt; i++)
                {
                    cur+= job[i].amount-1;
                    for (int j = 1; j <= job[i].amount; j++)
                    {
                        q.push(job[i]);//将job的任务插入临时队列
                    }
                }
               if (work.size()>0)
                {
                   while (!work.empty())
                   {
                       q.push(work.top());
                       work.pop();
                   }
    
                }
                for (int i = 0; i < cur; i++) {
                    if (work.size() == MAXSIZE) {//如果work打印队列满了
                        unlock();//停止占用临界区资源
                        while (work.size() == MAXSIZE)
                            Sleep(0);//让其他线程运行
                        lock();//再次占用临界区资源
                    }
                    work.push(q.top());//打印任务入队
                    int x = q.top().id;
                    q.pop();
                    cout << "作业序号" << x << "进入打印队列准备打印" << endl;
                }
                cnt += n;//记录总任务数
            }
            unlock();//停止占用临界区资源
        }
        return 0;
    }
    DWORD CALLBACK work_print(LPVOID param)
    {
        while (!error) 
        {
            lock();//work_print线程占用临界区资源
            {
                cout <<endl<< "开始打印........" << endl;
                  while (!work.empty()) {//将当前work打印任务队列中所有任务打印完成
                    auto t1 = clock();
                    cout << "任务序号" << work.top().id << " 正在打印...";
                    cout << '[';
                    for (int i = 0; i < 100; i += 10)
                    {
                        Sleep(work.top().capacity * 25);
                        cout << (char)0xa8 << (char)0x80;
                    }
                    auto t2 = clock();
                    cout << "] 100%" << "  打印耗时:"<<(t2 - t1)/1000<<"s"<< endl;
                    cout << "第"<<done[work.top().id]+1<< "份 "<< "任务序号" << work.top().id << " 打印完成:" << work.top().print_work << endl;
                    done[work.top().id]++;
                    work.pop();
                    pre++;
                }
            }
            cout << "打印结束........" << endl << endl;
            unlock();
            while (work.empty())
                Sleep(0);
        }
        return 0;
    }
    void CreatePrinterThread()
    {
        hThread_1 = CreateThread(NULL, 0, work_add, NULL, 0, &thread_1);
        if (hThread_1 == NULL)
        {
            cout << "线程创建失败..." << endl;
            error = 1;
            exit(error);
        }
        hThread_2 = CreateThread(NULL, 0, work_print, NULL, 0, &thread_2);
        if (hThread_2 == NULL)
        {
            cout << "线程创建失败..." << endl;
            error = 1;
            exit(error);
        }
    }
    int main()
    {
        cout << "--------------------------欢迎使用打印机--------------------------" << endl;
        cout << " 注意事项:打印队列最大容量为:" << MAXSIZE << " 任务优先级为:1-7(数字越大越紧急)" << endl << endl;
        InitializeCriticalSection(&Printer);//初始化打印机临界区资源
        CreatePrinterThread();//开始创建添加任务、打印任务两条线程
        while (!error)
            Sleep(0);
        system("pause");
        cout << "--------------------------打印机已退出--------------------------" << endl;
        DeleteCriticalSection(&Printer);//摧毁打印机临界区资源
        return 0;
    }
    
    
    展开全文
  • 前几天碰到一个怪异事件,公司有个网络打印机一直打乱码,拔了网线就不打,一插起又打,一台一台看了所有的PC都没找到有打印任务,最后通过网络抓包,发现是其中一台PC发过来的,又在这个PC上看,还是没有打印任务,...

       前几天碰到一个怪异事件,公司有个网络打印机一直打乱码,拔了网线就不打,一插起又打,一台一台看了所有的PC都没找到有打印任务,最后通过网络抓包,发现是其中一台PC发过来的,又在这个PC上看,还是没有打印任务,停止打印服务,重启,都不能解决。

       最后还是度娘解决所有问题:

    1 停止打印服务print spooler

    2 在运行输入spool,在弹出的文件夹中打开PRINTERS文件夹,删除里面所有文件(含隐藏文件)

    3 重新启动打印服务print spooler

    搞定,打完收工!

    
    展开全文
  • 任务背景:任意的一个小时里,大约有十名学生会在这一小时里,每人发起2次的打印任务,每次打印1-20页,而打印机有两种模式: 1、以草稿模式打印,每分钟打印十页; 2、以正常模式打印,每分钟打印五页 求两种方案的...
  • powershehll删除并重装打印机01 前言02 过程1、打印机图标是灰的,底下状态栏——“打印机状态:脱机”2、刚删除打印机,过一会图标又冒出来,死活删不掉3、添加新的打印机03 后记 01 前言 故事发生在XXXX年XX月XX...
  • 同时反映打印机不能打印,于是过去看看。 过程: 1、看了之后,没发现什么异常。 2、测试打印,发现确实不能打印。打印机上可以手工装纸、退纸。可以控制联机、脱机。 3、拔插电源、拔插数据线两端,仍然不...
  • 模拟打印机

    2020-05-25 17:13:47
    我们首先要搞清楚,接到打印任务并排队等待的过程与打印机进行打印工作的过程是相互独立的,举个例子来理解一下: 如上面的图,时间从0开始记,第一秒的时刻我们会做以下两个工作(这两个工作同
  • 解决打印机问题如果你无法在 Windows 10 中进行打印或连接到你的打印机,请按照以下步骤来尝试解决该问题:1.请确保打印机已接入电源并打开。请检查(有线打印机的)USB 连接或(无线打印机的)无线连接。有关详细信息,...
  • 打印机编程

    千次阅读 2013-07-19 10:59:56
    1.1--打印机编程  1.1 .1 打印机介绍 1.打印术语  cpi(characters Per Inch) 每英寸内所含的字符数,用来表示字符的大小、  间距。  cpl(Characters Per Line) 每行中所含的字符个数,用来在横向表示...
  • 电脑在一次异常关机之后,就一直无法... 2、在电脑任务栏右下角选择打印机通知图标双击,弹出(图2)对话框。 3、在(图2)对话框中选择工具栏的【打印机】按钮,去掉暂停打印的勾选。 这样就可以恢复正常打印了。...
  • 针对如今企事业单位局域网内部打印机...当系统检测到非法用户,将会自动删除打印任务,并记录打印日志。经过测试证明,该方案能实现对用户和打印任务进行有效的监控,为企业内部的打印机管理提供了方便、快捷的途径。
  • 针对如今企事业单位局域网内部打印机管理...当系统检测到非法用户,将会自动删除打印任务,并记录打印 日志。经过测试证明,该方案能实现对用户和打印任务进行有效的监控,为企业内部的打印机管理提供了方便、 快捷的途径。
  • 想实现对打印纸消耗的监控记录,但是采取打印者自己登记,就总有人不自觉,不能很好地执行。刚好最近开始在学python,就想着学习写个这样的程序,既能解决问题,也能实际练练手。只是不知道要实现以上功能都需要哪些...
  • 最近跟着项目组在做项目,分到了打印机这个任务,顺便记录一下。 首先本地最好安装一下打印机的驱动,然后连上打印机开始测试! Java调用打印机打印图片,文本都是很简单的,如下代码: /** * 通过 IP+端口 连接...
  • 攻击网络打印机

    2017-11-07 16:52:00
    网络打印机是中小型组织减少打印机维护采购成本、提供设备使用率的好方案(这里说的网络打印机指的是不需要打印服务器的单一打印机)但是作为网络设备之一,它的安全却又常常被管理员所忽视,管理员只重视打印机是否...
  • 打印机驱动开发笔记

    千次阅读 2019-09-18 15:41:02
    Windows打印体系结构以打印池为中心,打印机图形dll的打印接口是打印驱动程序的... GDI将应用程序的绘图调用保存在EMF文件中,记录完毕将之发送给打印池; GDI返回应用程序完成一次假脱机打印过程,可以进行其他任务; ...
  • 所以,作为打印机的主人,我们有必要学会处理这些日常故障。事实上,故障处理并不困难,难的是你有没有这个决心。自己动手不求人 日常打印机故障全知晓一、纸张故障处理1、卡纸故障卡纸是日常打印中最常见的打印故障...
  • 一个朋友经常遇到打印文件时,打印出错后,每次都需要先停止打印服务(Print Spooler)后,才能删除打印任务,然后再启动打印服务。这样才能继续打印,否则,即使打印机重启,计算机重启都没办法删除。因为他打印的...
  • [Java]打印机服务程序

    千次阅读 2016-06-10 17:36:06
    打印机服务程序,采取动态优先级方案,有三种调度策略。 动态优先级方法: 任何时刻, 用户都可以向服务器发送打印请求 每个请求包含打印文件的文件名字, 页数. 服务器根据文件页数初始化该请求的优先级, 并将该...
  • MatterControl是一款3D打印机控制软件,可以帮助用户进行打印,包括打印设计,切片,可以发送短信和邮件进行通知,支持对3D打印进行预览,有需要可以下载。MatterControl是一款3D打印机控制软件,可以帮助用户进行...
  • 扫码打印机项目

    2020-07-16 22:55:30
    之前做的一个项目,贴片LED配粉机每次工人操作需要手动写下产品信息和制作人还有时间,这个过程耗费了时间,而且有的坏粉还会被人为修改错误记录导致无法追查,所以设计一种扫码和自动打印标签的装置能把产品信息...
  • 针对如今企事业单位局域网内部打印机...当系统检测到非法用户,将会自动删除打印任务,并记录打印日志。经过测试证明,该方案能实现对用户和打印任务进行有效的监控,为企业内部的打印机管理提供了方便、快捷的途径。
  • 第14章 使用打印机

    千次阅读 2018-08-22 20:24:36
    为了处理文字和图形而使用视讯显示器时,设备无关的概念看来非常完美,但对于打印机,设备无关的概念又怎样呢? 总的说来,效果也很好。在Windows程序中,用于视讯显示器的GDI函数一样可以在印表纸上打印文字和图形...
  • //打印机状态 [FlagsAttribute] internal enum PrinterStatus { PRINTER_STATUS_BUSY = 0x00000200, PRINTER_STATUS_DOOR_OPEN = 0x00400000, PRINTER_STATUS_ERROR = 0x00000002, PRINTER_STATUS_INITIALIZING = ...
  • 获取打印机信息

    2019-03-06 09:46:00
    要查询的打印机任务的名称 /// <returns></returns> public static List< string > GetPrinterTask( string printerToPeek) { List < string > nameList = new List< string > (); IntPtr handle;...
  • LODOP设置打印机不存在不打印

    千次阅读 2019-02-13 09:58:00
    LODOP中打印机的选择有优先级的存在,如果程序中指定的是错误的打印机,那么会走下...第二优先级:上次在预览界面的打印设置中选择的打印机,Lodop按任务名对应记忆下来。第三优先级:操作系统选择的默认打印机。默...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,254
精华内容 9,301
关键字:

如何删除打印机任务记录