获取打印机状态,急!!!!!!!

浩南_哥 2010-07-28 01:27:23
我想获取打印机的状态,于是我就用了如下的代码
openPrinter(...);//成功返回
GetPrinter(hPrinter, 2, pPrinterInfo, dwNeeded, &dwNeeded);
现在的问题是不管打印实际处于什么状态,pPrinterInfo^.status总是为0,这让我十分的郁闷,
打印机型号:三星 ML-2010 端口是USB001。请各位大侠帮帮忙。
...全文
531 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdejtod 2010-12-09
  • 打赏
  • 举报
回复
同问,楼主问题解决了吗?
chuxuecharp 2010-11-18
  • 打赏
  • 举报
回复
楼主问题解决了吗。
qq82557566 2010-09-16
  • 打赏
  • 举报
回复
又挖一空坟
浩南_哥 2010-07-29
  • 打赏
  • 举报
回复
还有个重要情况忘了说了,这个打印机是共享的打印机,并不是跟我的主机相连,刚才又看了下Getprinter函数,上面有这么句话:只有在发出调用的应用程序有足够的权限时,PRINTER_INFO_x结构中的一些字段才能够被读取。这种权限由系统当前的安全设置决定。我感觉是不是权限不够啊。
浩南_哥 2010-07-29
  • 打赏
  • 举报
回复
昨天由于下班所以没能及时回帖描述情况,谢谢各位关注小弟的情况。
现在的情况是运行代码,PRINTER_INFO_2结构的结果如下:
(“\\test”, “\\test\Samsung ML-2010 Series”, “SamsungM”, “USB001”, “Samsung ML-2010 Series”, “”, “”, $B8CE04, “”, “WinPrint”, “RAW”, “”, $B8CD04, 2584, 1, 0, 0, 0, 0, 0, 0). ↓ ↓
内存地址 内存地址

各位大侠在给分析分析。是不是哪里出错了
山伟 2010-07-28
  • 打赏
  • 举报
回复
xueer8835

(小妖)
是正确的!!!
gege45 2010-07-28
  • 打赏
  • 举报
回复
应该这样:

::GetPrinter(hPrinter, 2, NULL, 0, &dwNeeded);
if(0 < dwNeeded) {
if (::GetPrinter(hPrinter, 2, pPrinterInfo, dwNeeded, &dwNeeded)){
// here you will get "pPrinterInfo"
}

}
xueer8835 2010-07-28
  • 打赏
  • 举报
回复

HANDLE hPrinter = NULL;
DWORD dwNeeded = 0;
PRINTER_INFO_2 *pi2 = NULL;
DEVMODE *pDevMode = NULL;
PRINTER_DEFAULTS pd;
BOOL bFlag;
LONG lFlag;

// Open printer handle (on Windows NT, you need full-access because you
// will eventually use SetPrinter)...
ZeroMemory(&pd, sizeof(pd));
pd.DesiredAccess = PRINTER_ALL_ACCESS;
bFlag = OpenPrinter(lpPrinterName, &hPrinter, &pd);
if(!bFlag || (hPrinter == NULL)) {
AfxMessageBox( "无法打开指定的打印机!" ) ;
return FALSE;
}
// The first GetPrinter tells you how big the buffer should be in
// order to hold all of PRINTER_INFO_2. Note that this should fail with
// ERROR_INSUFFICIENT_BUFFER. If GetPrinter fails for any other reason
// or dwNeeded isn't set for some reason, then there is a problem...
SetLastError(0);
bFlag = GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
if((!bFlag) && (GetLastError() != ERROR_INSUFFICIENT_BUFFER) || (dwNeeded == 0))
{
ClosePrinter(hPrinter);
AfxMessageBox( "Cannot get the size of the DEVMODE structure" ) ;
return FALSE;
}

// Allocate enough space for PRINTER_INFO_2...
pi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded);
if(pi2 == NULL)
{
ClosePrinter(hPrinter);
return FALSE;
}
// The second GetPrinter fills in all the current settings, so all you
// need to do is modify what you're interested in...
bFlag = GetPrinter(hPrinter, 2, (LPBYTE)pi2, dwNeeded, &dwNeeded);
if (!bFlag)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return FALSE;
}
xueer8835 2010-07-28
  • 打赏
  • 举报
回复
HANDLE hPrinter = NULL;
DWORD dwNeeded = 0;
PRINTER_INFO_2 *pi2 = NULL;
DEVMODE *pDevMode = NULL;
PRINTER_DEFAULTS pd;
BOOL bFlag;
LONG lFlag;

// Open printer handle (on Windows NT, you need full-access because you
// will eventually use SetPrinter)...
ZeroMemory(&pd, sizeof(pd));
pd.DesiredAccess = PRINTER_ALL_ACCESS;
bFlag = OpenPrinter(lpPrinterName, &hPrinter, &pd);
if(!bFlag || (hPrinter == NULL)) {
AfxMessageBox( "无法打开指定的打印机!" ) ;
return FALSE;
}
// The first GetPrinter tells you how big the buffer should be in
// order to hold all of PRINTER_INFO_2. Note that this should fail with
// ERROR_INSUFFICIENT_BUFFER. If GetPrinter fails for any other reason
// or dwNeeded isn't set for some reason, then there is a problem...
SetLastError(0);
bFlag = GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
if((!bFlag) && (GetLastError() != ERROR_INSUFFICIENT_BUFFER) || (dwNeeded == 0))
{
ClosePrinter(hPrinter);
AfxMessageBox( "Cannot get the size of the DEVMODE structure" ) ;
return FALSE;
}

// Allocate enough space for PRINTER_INFO_2...
pi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded);
if(pi2 == NULL)
{
ClosePrinter(hPrinter);
return FALSE;
}
// The second GetPrinter fills in all the current settings, so all you
// need to do is modify what you're interested in...
bFlag = GetPrinter(hPrinter, 2, (LPBYTE)pi2, dwNeeded, &dwNeeded);
if (!bFlag)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return FALSE;
}
浩南_哥 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 stonewater 的回复:]

GetLastError()看看什么错误
[/Quote]
没有出错,函数成功调用,pPrinterInfo里的其他属性的值都是正常的跟打印机的属性相符,唯独这个status出问题
stonewater 2010-07-28
  • 打赏
  • 举报
回复
GetLastError()看看什么错误
stonewater 2010-07-28
  • 打赏
  • 举报
回复
DWORD cByteNeeded,cByteUsed;
if (!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded))
{
DWORD dwErrorCode = ::GetLastError();
}

PRINTER_INFO_2 *pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);

if (!GetPrinter(hPrinter,
2,
(LPBYTE)pPrinterInfo,
cByteNeeded,
&cByteUsed))
{
DWORD dwErrorCode = ::GetLastError();
}


浩南_哥 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 stonewater 的回复:]

http://blog.sina.com.cn/s/blog_4b44e1c00100ge82.html
[/Quote]
谢谢 关注 他用的方法跟我用的一样都是GetPrinter函数的调用 然后取得Status的值,现在的问题关键是这个值他总是0
qq4218699 2010-07-28
  • 打赏
  • 举报
回复
11没做过,帮顶,学习~~
VC_ZSY 2010-07-28
  • 打赏
  • 举报
回复
没做过,帮顶,学习~~
浩南_哥 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 w174504744 的回复:]

帮你顶!
[/Quote]
谢了,高手赶紧来啊
yowang_ 2010-07-28
  • 打赏
  • 举报
回复
帮你顶!
浩南_哥 2010-07-28
  • 打赏
  • 举报
回复
怎么没人回答呢,分不够可以加啊

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧