当前位置:编程学习 > C#/ASP.NET >>

C#使用CreateFile打开远程共享打印机的问题

现有一个程序,使用windows的API中的CreateFile函数打开远程共享打印机,如果连接打印机的那台电脑是winxp没问题,但是如果连接打印机的那台电脑是win7,死活不行,代码如下,哪位高手指点下啊,谢谢了


//--------------------------------------------------------------------------------------以下是引用API
 public SafeFileHandle sfh;
        public IntPtr ptr;
        public StreamWriter sw;
        [DllImport("Kernel32.dll")]
        static extern IntPtr CreateFile(
        string filename,
        [MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
        [MarshalAs(UnmanagedType.U4)]FileShare fileshare,
        int securityattributes,
        [MarshalAs(UnmanagedType.U4)]FileMode creationdisposition,
        int flags,
        IntPtr template);
        [DllImport("kernel32.dll")]
        static extern bool CloseHandle(IntPtr hObject);
//--------------------------------------------------------------------------------------以下是打印代码

PrinterAddr = PrinterAddr.Replace("\\", @"\");
                sfh = null;
                ptr = CreateFile(PrinterAddr, FileAccess.Write, FileShare.Write, 0, FileMode.Open, 0, IntPtr.Zero);

                if (ptr.ToInt32() == -1)
                {
                    return "LPT1 Port Open Failed" ;
                }

                sfh = new SafeFileHandle(ptr, true);
                sw = new StreamWriter(new FileStream(sfh, FileAccess.Write));
                sw.WriteLine(str);
                sw.Flush();
                sw.Close();
--------------------编程问答-------------------- 唉,,不懂,,,没人回答,就把分给我吧。好人一生平安~~~ --------------------编程问答-------------------- 这句太搞笑了,完全是无用功
PrinterAddr = PrinterAddr.Replace("\\", @"\");
先得确定是不是可以打印,再用代码控制。 --------------------编程问答-------------------- 难道那台win7是64位??? --------------------编程问答-------------------- 所用的win7都不是64位的,确定是可以打印的,winxp都可以使用就是win7不行,我考虑是win7权限控制严格的问题,但是createfile不知道怎么使用用户名密码 --------------------编程问答--------------------
引用 4 楼 haieritboy 的回复:
所用的win7都不是64位的,确定是可以打印的,winxp都可以使用就是win7不行,我考虑是win7权限控制严格的问题,但是createfile不知道怎么使用用户名密码

可以分开嘛,先获取共享打印机权限,再用createfile --------------------编程问答--------------------
引用 4 楼 haieritboy 的回复:
所用的win7都不是64位的,确定是可以打印的,winxp都可以使用就是win7不行,我考虑是win7权限控制严格的问题,但是createfile不知道怎么使用用户名密码

刚刚试验的win7可以使用,我试验的是xp的机器使用共享打印机,是win7的机器共享出来的打印机。 --------------------编程问答--------------------
引用 6 楼 captainyanyan 的回复:
Quote: 引用 4 楼 haieritboy 的回复:

所用的win7都不是64位的,确定是可以打印的,winxp都可以使用就是win7不行,我考虑是win7权限控制严格的问题,但是createfile不知道怎么使用用户名密码

刚刚试验的win7可以使用,我试验的是xp的机器使用共享打印机,是win7的机器共享出来的打印机。

你试试在你的机器访问下win7的共享文件夹能访问到,\\192.168.x.x --------------------编程问答-------------------- 要win7开放权限才行,可能还要关了win7的防火墙等,反正win7因安全机制提升,操作起来很麻烦
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,