遇到问题:在做一个项目时由于打印机硬件提供商无法提供对应的SDK驱动文件,只能当作Windows标准打印机进行使用,在用户领取时我们需要进行打出小票的程序,现在没有办法进行屏蔽打印页面!

解决办法:

首先我们先内置好默认打印机

1、控制面板中删除无关的设备,只保留我们的打印机

2、使用C#程序屏蔽对应页面(注意使用.NET3.5版本,因为客户机器是Win7_64  IE8)

新建一个 WinForm项目

需要1个托盘控件及 右键菜单的控件,绑定一下事件:

 private void CheckWindows(){Thread myThread = new Thread(PrintViewConnect);myThread.Start();}// 循环检测窗口private void PrintViewConnect(){while (true){CheckPrintView();}}/// <summary>/// 找到窗口/// </summary>/// <param name="lpClassName">窗口类名(例:Button)</param>/// <param name="lpWindowName">窗口标题</param>/// <returns></returns>[DllImport("user32.dll", EntryPoint = "FindWindow")]private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);/// <summary>/// 找到窗口/// </summary>/// <param name="hwndParent">父窗口句柄(如果为空,则为桌面窗口)</param>/// <param name="hwndChildAfter">子窗口句柄(从该子窗口之后查找)</param>/// <param name="lpszClass">窗口类名(例:Button</param>/// <param name="lpszWindow">窗口标题</param>/// <returns></returns>[DllImport("user32.dll", EntryPoint = "FindWindowEx")]private extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);/// <summary>/// 发送消息/// </summary>/// <param name="hwnd">消息接受窗口句柄</param>/// <param name="wMsg">消息</param>/// <param name="wParam">指定附加的消息特定信息</param>/// <param name="lParam">指定附加的消息特定信息</param>/// <returns></returns>[DllImport("user32.dll", EntryPoint = "SendMessageA")]private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);//窗口发送给按钮控件的消息,让按钮执行点击操作,可以模拟按钮点击private const int BM_CLICK = 0xF5;private void CheckPrintView(){//获取IE浏览器弹出的打印页面IntPtr maindHwnd = FindWindow(null, "打印");//看看能不能获取到if (maindHwnd != IntPtr.Zero){//如果获取到了查找 【打印】 按钮IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "打印(&P)");//按钮控件标题//检测能不能找到if (childHwnd != IntPtr.Zero){//如果找到了模拟点击SendMessage(childHwnd, BM_CLICK, 0, 0);}else {//debug的时候使用//MessageBox.Show("父窗口已经找到,但未找到按钮");}}else{   //debug的时候使用//MessageBox.Show("全部未找到");}}

在程序入口调用一下:

核心代码为:

--- 解决问题的方法至此结束了,下面是全部代码包含:屏蔽打印页面、开机自启、托盘运行-------------------------------------------------------(权当是垃圾筐备用,你要是直接复制不能用的话自行检查一下)----------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;namespace SocketServerToolc
{public partial class Form1 : Form{public Form1(){InitializeComponent();AutoStart();//窗体最小化显示this.WindowState = FormWindowState.Minimized;CheckWindows();}/// <summary>/// 不再显示窗体/// </summary>/// <param name="value"></param>protected override void SetVisibleCore(bool value){base.SetVisibleCore(false);}/// <summary>/// 让程序不显示在alt+Tab视图窗体中/// </summary>protected override CreateParams CreateParams{get{const int WS_EX_APPWINDOW = 0x40000;const int WS_EX_TOOLWINDOW = 0x80;CreateParams cp = base.CreateParams;cp.ExStyle &= (~WS_EX_APPWINDOW);    // 不显示在TaskBarcp.ExStyle |= WS_EX_TOOLWINDOW;      // 不显示在Alt+Tabreturn cp;}}/// <summary>/// 设置开机自启动/// </summary>private void AutoStart(){try{string regPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";string path = Application.ExecutablePath.ToLower(); //将当前程序起动路径  string name = System.IO.Path.GetFileName(path);  //获得应用程序名称  var regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regPath, true);if (regKey == null) regKey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(regPath);regKey.SetValue(name, path);}catch{}}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){Application.Exit();}private void CheckWindows(){Thread myThread = new Thread(PrintViewConnect);myThread.Start();}// 监听客户端是否连接  private void PrintViewConnect(){while (true){CheckPrintView();}}/// <summary>/// 找到窗口/// </summary>/// <param name="lpClassName">窗口类名(例:Button)</param>/// <param name="lpWindowName">窗口标题</param>/// <returns></returns>[DllImport("user32.dll", EntryPoint = "FindWindow")]private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);/// <summary>/// 找到窗口/// </summary>/// <param name="hwndParent">父窗口句柄(如果为空,则为桌面窗口)</param>/// <param name="hwndChildAfter">子窗口句柄(从该子窗口之后查找)</param>/// <param name="lpszClass">窗口类名(例:Button</param>/// <param name="lpszWindow">窗口标题</param>/// <returns></returns>[DllImport("user32.dll", EntryPoint = "FindWindowEx")]private extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);/// <summary>/// 发送消息/// </summary>/// <param name="hwnd">消息接受窗口句柄</param>/// <param name="wMsg">消息</param>/// <param name="wParam">指定附加的消息特定信息</param>/// <param name="lParam">指定附加的消息特定信息</param>/// <returns></returns>[DllImport("user32.dll", EntryPoint = "SendMessageA")]private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);//窗口发送给按钮控件的消息,让按钮执行点击操作,可以模拟按钮点击private const int BM_CLICK = 0xF5;private void CheckPrintView(){//获取IE浏览器弹出的打印页面IntPtr maindHwnd = FindWindow(null, "打印");//看看能不能获取到if (maindHwnd != IntPtr.Zero){//如果获取到了查找 【打印】 按钮IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "打印(&P)");//按钮控件标题//检测能不能找到if (childHwnd != IntPtr.Zero){//如果找到了模拟点击SendMessage(childHwnd, BM_CLICK, 0, 0);}else {//debug的时候使用//MessageBox.Show("父窗口已经找到,但未找到按钮");}}else{   //debug的时候使用//MessageBox.Show("全部未找到");}}private void contextMenuStrip1_Opening(object sender, CancelEventArgs e){}}
}

IE 浏览器阻止打印页面的方法相关推荐

  1. 设置vue运行npm run dev时候,项目在浏览器自动打开页面的方法

    在config/index.js找到dev:{}里面的autoOpenBrowser: 设置为true,重新npm run dev一次就自动弹出浏览器页面啦!

  2. jqprint 分页打印_javascript如何实现打印页面?

    我们在网页开发过程中经常会有打印页面的需求,通过JS来实现的方法有很多.下面本篇文章就来给大家介绍几种使用JavaScript打印页面的方法,希望对大家有所帮助. 方式一:window.print() ...

  3. html页面如何打印,javascript如何打印页面?

    我们在网页开发过程中经常会有打印页面的需求,通过JS来实现的方法有很多,下面我们看一下JavaScript中通过window.print()方法与jqprint()插件打印页面的方法. 方式一:win ...

  4. php如何禁用浏览器的缓存,php如何禁止浏览器使用缓存页面

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  5. 调用浏览器的打印方法打印页面内容

    2018-08-30 直接调用浏览器的打印方法 1.打印按钮 <a href="#" target="_self" οnclick="print ...

  6. php中怎样阻止网页进行跳转,阻止php页面跳转方法

    阻止php页面跳转方法 一. header 函数 header()函数的主要功能是将HTTP协议标头(header)输出到浏览器. 参数 void header (string string [,bo ...

  7. javascript 调用浏览器的打印方法。并设置打印为横向打印

    最近做一个简单的打印功能,要使用JavaScript调用浏览器的打印功能.并设置打印为横向打印: 为了适应A4纸的宽和高这里设置: body{margin:0 auto; width: 1010px; ...

  8. php离开界面监听,js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)...

    本文实例讲述了js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件).分享给大家供大家参考.具体如下: 用户离开页面前,提示是否离开此页面(包括浏览器按钮事件) window.onbef ...

  9. 搜狗高速浏览器怎么设置页面字体 设置方法介绍

    搜狗高速浏览器是由搜狗公司开发的一款浏览器应用,我们在使用电脑或者手机等设备时都是离不开浏览器应用的,并且在很多浏览器中有的功能都是可以根据用户的使用习惯和喜好来设置的,就比如页面字体,所以小编今天就 ...

  10. Chrome浏览器可以修改特定页面背景色吗?Chrome浏览器修改特定页面背景色的方法

    在使用浏览器的时候,长时间面对一个内容和颜色会很容易产生视觉疲劳,那么在这个时候,要如何更改浏览器的背景呢,用户可以将自己的浏览器背景设置一下,更改浏览器的背景颜色,让用户使用起来更加的方便,用户可以 ...

最新文章

  1. 科技公司狂挖高校AI学者:涸泽而渔还是产学双赢
  2. Abstract Factory(抽象工厂)实践
  3. python画激活函数图像
  4. Python小白的数学建模课-07.选址问题
  5. ubuntu16 黑主题_给Ubuntu 8.10安装超炫酷黑色新主题
  6. 基于AE的SimpleGIS框架的搭建
  7. OneDrive更换要同步文件夹
  8. 【转载】回首大学四年,一个电工对大学课程的见解
  9. hi3798 run linux,EC6108V9(HI3798MV100)刷(linux)ubuntu16.04
  10. 【趣味实践】自动补帧算法——RIFE的使用
  11. 基于微信小程序的教学评价平台开发
  12. *基于类平衡自我训练的无监督域自适应用于语义分割
  13. Eclipse如何从官网获取历史版本
  14. excel两个表格数据对比_用Excel一键抓取网页表格数据
  15. npm install时cb() never called!错误解决方法
  16. 陶泓达:周五黄金原油白银走势分析及操作建议
  17. cool start
  18. iText 新年新版:截图识别文字后,翻译为 100+ 种语言
  19. Oracle EBS 汇率类型解释
  20. 基于Tomcat环境下运行JSP文件(基础版)

热门文章

  1. 线上CPU飙高问题排查 (Java)
  2. shell的logo含义_华为logo的寓意是什么
  3. 2022年调味品行业研究报告
  4. 斐波那契数列C语言设计步骤,斐波那契数列c语言函数
  5. 在硅谷初创公司怎么找投资人
  6. 服务器vga连接笔记本显示器,为什么用vga线链接笔记本和显示器,显示器的画质根本没法直视...
  7. QChart修改标题颜色,修改X轴Y轴字体颜色
  8. mib浏览器_大众汽车的第二代MIB信息娱乐系统图解
  9. 在自己订阅的GOOGLE快讯中,看到自己的文章
  10. matlab plotyy legend,一幅图中画两个legend及plotyy标注问题