如何使用 SetPrinter 修改印表機設定
// MySetPrinter // // Demonstrates how to use the SetPrinter API. This particular function changes the orienation // for the printer specified in pPrinterName to the orientation specified in dmOrientation. // // Valid values for dmOrientation are: // DMORIENT_PORTRAIT (1) // or // DMORIENT_LANDSCAPE (2) BOOL MySetPrinter(LPTSTR pPrinterName, short dmOrientation) { 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(pPrinterName, &hPrinter, &pd); if (!bFlag || (hPrinter == NULL)) 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); 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; } // If GetPrinter didn't fill in the DEVMODE, try to get it by calling // DocumentProperties... if (pi2->pDevMode == NULL) { dwNeeded = DocumentProperties(NULL, hPrinter, pPrinterName, NULL, NULL, 0); if (dwNeeded <= 0) { GlobalFree(pi2); ClosePrinter(hPrinter); return FALSE; } pDevMode = (DEVMODE *)GlobalAlloc(GPTR, dwNeeded); if (pDevMode == NULL) { GlobalFree(pi2); ClosePrinter(hPrinter); return FALSE; } lFlag = DocumentProperties(NULL, hPrinter, pPrinterName, pDevMode, NULL, DM_OUT_BUFFER); if (lFlag != IDOK || pDevMode == NULL) { GlobalFree(pDevMode); GlobalFree(pi2); ClosePrinter(hPrinter); return FALSE; } pi2->pDevMode = pDevMode; } // Driver is reporting that it doesn't support this change... if (!(pi2->pDevMode->dmFields & DM_ORIENTATION)) { GlobalFree(pi2); ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return FALSE; } // Specify exactly what we are attempting to change... pi2->pDevMode->dmFields = DM_ORIENTATION; pi2->pDevMode->dmOrientation = dmOrientation; // Do not attempt to set security descriptor... pi2->pSecurityDescriptor = NULL; // Make sure the driver-dependent part of devmode is updated... lFlag = DocumentProperties(NULL, hPrinter, pPrinterName, pi2->pDevMode, pi2->pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER); if (lFlag != IDOK) { GlobalFree(pi2); ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return FALSE; } // Update printer information... bFlag = SetPrinter(hPrinter, 2, (LPBYTE)pi2, 0); if (!bFlag) // The driver doesn't support, or it is unable to make the change... { GlobalFree(pi2); ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return FALSE; } // Tell other apps that there was a change... SendMessageTimeout(HWND_BROADCAST, WM_DEVMODECHANGE, 0L, (LPARAM)(LPCSTR)pPrinterName, SMTO_NORMAL, 1000, NULL); // Clean up... if (pi2) GlobalFree(pi2); if (hPrinter) ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return TRUE; }
相關推薦
如何使用 SetPrinter 修改印表機設定
// MySetPrinter // // Demonstrates how to use the SetPrinter API. This particular function changes the orienation // for the printer specified in pPrint
列印過程中修改印表機設定orientation等
使用ResetDC & DEVMODE 特別注意: 1)Note that a call to ResetDC resets all device context attributes back to default values. 2)The s
如何修改使用 DocumentProperties() 函式的印表機設定
LPDEVMODE GetLandscapeDevMode(HWND hWnd, char *pDevice) { HANDLE hPrinter; LPDEVMODE pDevMode; DWORD dwNeeded, dwRet; /* S
C++ 印表機設定
我在網上已不斷看到一些網友關於自定義紙張列印的問題,基本上還沒有較完美的解決方案,我在這裡提供一個WindowsNT/2000/XP下的解決辦法,供廣大同仁參考。Windows9x/Me下也有解決辦法,有興趣者可共同探討。 該方法的主要思想是在程式開始時新增自定義紙張並設為預設紙張,程式結束前刪除該自定義紙
dedecms 後臺修改系統設定,但是config.cache.inc.php檔案不能寫入
fopen居然返回false,既不是目錄或檔案許可權相關問題,也不是檔案路徑問題(相對路徑、絕對路徑)等,更不是開啟檔案的模式問題(r,w,a等)。網上搜了一會,說到返回false的原因無非都是上面三種情況之一,所以沒有找到答案。於是動手添加了PHP錯誤報告: //error handler functio
獲取印表機設定的紙張引數
PrintDialog BS = new PrintDialog(); int x = BS.PrinterSettings.DefaultPageSettings.PaperSize.Width;//印表機預設紙張大小
完美解決新版WebStorm讓人彆扭的修改偏好設定中Tab鍵的縮排無效的問題
完美解決新版WebStorm讓人彆扭的Tab鍵的縮排問題 以前WebStorm設定好code style中的Tab size 和indent後就會預設是這個設定的值,但是新版的WebStorm出現了一個怪現象,無論如何設定Tab size 和indent, tab的縮排永遠都是2個字
Android O Settings原始碼流程分析(資料載入之獲取及修改預設設定屬性值)
Android O Settings 靜態介面篇 介面渲染篇 資料載入篇之一級選單 資料載入篇之二級選單 資料載入篇之獲取及修改預設設定屬性值 搜尋欄篇 載入預設設定值及修改:(涉及SettingsProvider) 示例:(裝置自動亮
Win10和Win7共享印表機設定方法
Win10和Win7如何共享印表機呢?當局域網中同時存在Win10和Win7系統,同時區域網中只有某一臺計算機連線有印表機時,我們可以通過區域網印表機共享操作來實現印表機共享。下面就與大家分享一下區域網電腦共享印表機的具體設定方法。
Jsoup文件--修改資料(設定屬性值)
設定屬性值 問題 解析完文件,在將其儲存到硬碟或作為HTTP響應傳送之前想要更改其中一些屬性值。 解決方案 使用設定屬性的方法Element.attr(String key, String value),Elements.attr(String key, St
Jsoup文件--修改資料(設定元素包含的HTML)
設定元素包含的HTML 問題 需要修改一個元素的HTML內容。 解決方案 使用Element中HTML setter方法。 Element div = doc.select("div").first(); // <div></div> d
python3+selenium實現126郵箱登陸 _修改個人設定(未封裝)
基於火狐瀏覽器實現126郵箱登陸並修改個人設定 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support impor
springboot 修改和設定 banner
springboot 修改和設定 banner 先上圖 修改步驟 1.在src/main/resources下新建一個banner.txt文件 2.通過http://patorjk.com/software/taag網站生成需要的字元,將字元拷貝到步驟1所建立的
修改apache設定,支援UTF8和GBK
原本將apache預設設定成強制GBK編碼解釋網站,使得後來安裝UTF8的網站程式碼時出現亂碼的情況! 解決方法,修改/etc/httpd/conf/httpd.conf 檔案,將其中AddDefaultCharset行註釋掉(前面加#)。 儲存後重新啟動apache:/usr/sbin/apachectl
MYSQL-8.0.11 修改密碼 設定遠端連線
本編文章是針對MYSQL-8.0.11安裝後root賬戶無法遠端登入,和修改賬戶密碼。環境為:CentOS 7.3 + Mysql8.0.11下載後執行:sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm1:安
jquery 表格的增加刪除和修改及設定奇偶行顏色
最近一週在學了一點點HTML, CSS, javascript,用javascript的jquery完成了一個簡單的表格操作,有增加、刪除和修改功能。 表格分三列,第一列是學生編號(ID號),第二列是學生姓名,第三列為學生年齡。在姓名和年齡框內輸入資料,再點“Add”就可以增加資料(ID號會自動遞增
EBS 印表機設定——PASTA
按照Oracle的說法,PASTA解決的是通過CM直接列印到印表機的問題。換句話說如果不想通過CM直接列印到印表機,可以不使用PASTA;這個和PS中文輸出沒有關係。 確實如此,從執行過程看,我覺得完全可以這樣理解:PASTA是作業系統lp命令的擴充套件! PASTA的可
C#獲取本地印表機列表,並將指定印表機設定為預設印表機
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.W
修改tomcat設定訪問根目錄檔案
1.清除webapps\ROOT下的內容 2.修改conf下web.xml <servlet> <servlet-name>default</servlet-name> <servlet-c
針式印表機設定字號大小
我的印表機是GP-76針式印表機,使用谷歌瀏覽器測試。 使用css設定列印字號程式碼: <styletype="text/css"> @mediaprint{ .chrome_adjust{ font-size:9px; -webkit-transform:s