|
分類:[C#]
肝心なところを見逃してしまい大変申し訳ありませんでした m(__)m (決して意図的ではありませんのでご勘弁を・・・)
再度内容を確認し、以下のようにすることで読み書きができました。 勉強不足のためまだ不安なところがありますが、ひとまず動くようになりましたのでホッとしています。
以下、現在のソースと不安なところです。
# APIの宣言と、ロックを解放〜に自信がありません。 # GlobalUnlock()、SetHdevmode()、GlobalFree()の引数はhMemでいいのでしょうか? # 私が試した限りでは、devmodePtrでも正しく動作しています。
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] public struct DEVMODE { ・・・ };
[DllImport("kernel32.dll")] private static extern IntPtr GlobalLock(IntPtr hMem); [DllImport("kernel32.dll")] private static extern bool GlobalUnlock(IntPtr hMem); [DllImport("kernel32.dll")] private static extern IntPtr GlobalFree(IntPtr hMem);
private void btnTest_Click(object sender, System.EventArgs e) { IntPtr hMem = this.printDocument.PrinterSettings.GetHdevmode(); // ハンドル取得 IntPtr devmodePtr = GlobalLock(hMem); // ロック・ハンドルからポインタを取得 DEVMODE dm = (DEVMODE)Marshal.PtrToStructure(devmodePtr, typeof(DEVMODE)); // ポインタから構造体にコピー
dm.dmCopies = 10; // 印刷部数を10部に設定 dm.dmCollate = 1; // 部単位で印刷 Marshal.WriteByte(devmodePtr, dm.dmSize+720, 0); // ドライバ固定の720Byte目を0 Marshal.StructureToPtr(dm, devmodePtr, true); // 構造体からポインタにコピー
GlobalUnlock(hMem); // ロックを解放 this.printDocument.PrinterSettings.SetHdevmode(hMem); // PriterSetteingsにコピー GlobalFree(hMem); // ハンドルを解放 }
よろしくお願いします。
|