我枚举了当前机子的所有打印机,但我想改变其默认的打印机,如何用vc来实现呢?我研究了setprinter,一下这个函数,始终也没有找到一个方式,可以使用的,我又找到一个setdefaultprinter的函数,这个函数是不是仅仅对网络的打印机有效呢?请高手指教一下这个简单的问题,我已经研究了有一个星期了,但是没有成功!
解决方案 »
- VC应用程序release下爆了,怎么样能获取堆栈信息?
- 通过PHD来获取CPU的使用率(总的)
- 请问这样的界面怎么做 VC MFC
- VC控件编程求助
- CSplitterWnd 中各个view一起scroll该怎么做?
- 一个奇怪的问题,大侠请进
- 最简单的问题 结构体 和 共同体的 数据类型使用问题 在线等
- 基于TCP协议的网络通讯,如果每次发送的数据包小于或等于1k的话,接收方接收的数据,会不会出现粘包的现象
- 对于工具栏中得TBBS_SEPARATOR,如何控制其在一定条件下隐藏,而在一定条件下显示出来呀?
- 添加控件问题
- 急问,vc和vb所生成的activex ocx的问题,实在搞不懂!!
- CreateThread传递参数问题
OSVERSIONINFO osv;
DWORD dwNeeded = 0;
HANDLE hPrinter = NULL;
PRINTER_INFO_2 *ppi2 = NULL;
LPTSTR pBuffer = NULL;
LONG lResult; osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osv);
if (!pPrinterName)
return FALSE; if (osv.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
bFlag = OpenPrinter(pPrinterName, &hPrinter, NULL);
if (!bFlag || !hPrinter)
return FALSE;
GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
if (dwNeeded == 0)
{
ClosePrinter(hPrinter);
return FALSE;
}
ppi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded);
if (!ppi2)
{
ClosePrinter(hPrinter);
return FALSE;
}
bFlag = GetPrinter(hPrinter, 2, (LPBYTE)ppi2, dwNeeded, &dwNeeded);
if (!bFlag)
{
ClosePrinter(hPrinter);
GlobalFree(ppi2);
return FALSE;
}
ppi2->Attributes |= PRINTER_ATTRIBUTE_DEFAULT;
bFlag = SetPrinter(hPrinter, 2, (LPBYTE)ppi2, 0);
if (!bFlag)
{
ClosePrinter(hPrinter);
GlobalFree(ppi2);
return FALSE;
} lResult = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0L,(LPARAM)(LPCTSTR)"windows", SMTO_NORMAL, 1000, NULL);
}
else if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
if (osv.dwMajorVersion >= 5)
{
bFlag = SetDefaultPrinter(pPrinterName);
if (!bFlag)
return FALSE;
}
else
{
bFlag = OpenPrinter(pPrinterName, &hPrinter, NULL);
if(!bFlag || !hPrinter)
return FALSE;
GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
if(dwNeeded == 0)
{
ClosePrinter(hPrinter);
return FALSE;
}
ppi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded);
if (!ppi2)
{
ClosePrinter(hPrinter);
return FALSE;
}
bFlag = GetPrinter(hPrinter, 2, (LPBYTE)ppi2, dwNeeded, &dwNeeded);
if ((!bFlag) || (!ppi2->pDriverName) || (!ppi2->pPortName))
{
ClosePrinter(hPrinter);
GlobalFree(ppi2);
return FALSE;
} pBuffer = (LPTSTR)GlobalAlloc(GPTR,lstrlen(pPrinterName) + lstrlen(ppi2->pDriverName) +lstrlen(ppi2->pPortName) + 3);
if (!pBuffer)
{
ClosePrinter(hPrinter);
GlobalFree(ppi2);
return FALSE;
}
lstrcpy(pBuffer, pPrinterName); lstrcat(pBuffer, ",");
lstrcat(pBuffer, ppi2->pDriverName); lstrcat(pBuffer, ",");
lstrcat(pBuffer, ppi2->pPortName);
bFlag = WriteProfileString("windows", "device", pBuffer);
if (!bFlag)
{
ClosePrinter(hPrinter);
GlobalFree(ppi2);
GlobalFree(pBuffer);
return FALSE;
}
}
lResult = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0L, 0L, SMTO_NORMAL, 1000, NULL);
}
if (hPrinter)
ClosePrinter(hPrinter);
if (ppi2)
GlobalFree(ppi2);
if (pBuffer)
GlobalFree(pBuffer);
SetPrinter是用来修改指定打印机的数据的。
_Application objWord;
objWord.SetActivePrinter(PrinterName);//PrinterName为你想设置为默认打印机的打印机名.
LPCTSTR pszPrinter // default printer name
);
SetDefaultPrinterThe SetDefaultPrinter function sets the printer name of the default printer for the current user on the local computer.BOOL SetDefaultPrinter(
LPCTSTR pszPrinter // default printer name
);ParameterspszPrinter
[in] Pointer to a null-terminated string containing the default printer name. For a remote printer, the name format is \\server\printername. For a local printer, the name format is printername. If this parameter is NULL or an empty string, that is, "", SetDefaultPrinter does nothing if there is already a default printer. However, if there is no default printer, SetDefaultPrinter sets the default printer to the first printer, if any, in an enumeration of printers installed on the local computer. Return ValuesIf the function succeeds, the return value is a nonzero value.If the function fails, the return value is zero. To get extended error information, call GetLastError.
ResTo set the default printer on Windows 2000/XP, call SetDefaultPrinter. To set the default printer to earlier operating systems, call GetProfileString, WriteProfileString, and SendNotifyMessage, as shown in the following code: