2016年5月24日火曜日

sumatrapdfの用紙でB5が認識しない

sumatraPDFでB5用紙をコマンドライン印刷すると何故かA4用紙になる。

sumatrapdfのコマンドライン印刷でB5が認識しない


理由
用紙サイズにB5が設定されていない。

sumatraPDFからForkした、muPDFには、B5用紙が設定されていた。

Windowsプリンターの部数変更 コマンドラインから変更出来る用に

// SetPrinterCopy.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <wtypes.h>
#include <Windows.h>

int main(int argc, char *argv[])
{
 //printf("引数の総個数 = %d\n", argc);
 //for (i = 0; i < argc; i++) {
 // printf("%d番目の引数 = %s\n", i, argv[i]);
 //}

 if (argc == 1) {
  printf("プリンター名が未設定です。\n");
  return 0;
 }

 //プリンター名をLPWSTRへ変換
 char* wStrC = argv[1];
 //char* wStrC = "DocuCentre-IV C5575";
 WCHAR wStrW[100];

 size_t wLen = 0;
 errno_t err = 0;

 err = mbstowcs_s(&wLen, wStrW, 100, wStrC, _TRUNCATE);
 LPWSTR ptr = wStrW;

 //親ウインドウハンドル取得
 HWND hWnd = NULL;
 GetParent(hWnd);

 //
 HGLOBAL hGlobal = NULL;
 HGLOBAL hGlobal2 = NULL;
 HANDLE hPrinter = NULL;
 DWORD dwNeeded = 0;
 PRINTER_INFO_2 *pi2 = NULL;
 PRINTER_DEFAULTS pd;
 BOOL bFlag;
 LONG lFlag;

 /* プリンタのハンドルをオープン
 (Windows NT の場合、SetPrinter にはすべての権限 (ALL_ACCESS) が必要になります)
 */

 ZeroMemory(&pd, sizeof(pd));
 pd.DesiredAccess = PRINTER_ALL_ACCESS;
 bFlag = OpenPrinter(ptr, &hPrinter, &pd);
 if (!bFlag || (hPrinter == NULL))
  goto ABORT;

 /* 最初の GetPrinter() で、PRINTER_INFO_2 全体を格納するのに必要なバッファの
 サイズを取得します。この呼び出しでは、FALSE が返ることに注意してください。
 */

 GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
 if (dwNeeded == 0)
  goto ABORT;

 /* PRINTER_INFO_2 に十分なスペースの確保 */

 hGlobal = GlobalAlloc(GHND, dwNeeded);
 if (hGlobal == NULL)
  goto ABORT;
 pi2 = (PRINTER_INFO_2 *)GlobalLock(hGlobal);
 if (pi2 == NULL)
  goto ABORT;

 /* 2 回目の GetPrinter() の呼び出しで、現在の設定値を取得します。
 アプリケーションでは必要な個所のみ変更することになります。
 */

 bFlag = GetPrinter(hPrinter, 2, (LPBYTE)pi2, dwNeeded, &dwNeeded);
 if (!bFlag)
  goto ABORT;

 /* もし GetPrinter で、DEVMODE が取得できなかった場合、DocumentProperties で
 取得する
 */

 if (!pi2->pDevMode)
 {
  dwNeeded = DocumentProperties(hWnd, hPrinter,
   ptr,
   NULL, NULL, 0);
  if (dwNeeded <= 0)
   goto ABORT;

  hGlobal2 = GlobalAlloc(GHND, dwNeeded);
  if (!hGlobal2)
   goto ABORT;
  pi2->pDevMode = (DEVMODE *)GlobalLock(hGlobal2);
  if (!pi2->pDevMode)
   goto ABORT;

  lFlag = DocumentProperties(hWnd, hPrinter,
   ptr,
   pi2->pDevMode, NULL,
   DM_OUT_BUFFER);
  if (lFlag != IDOK)
   goto ABORT;
 }

 /* DEVMODE の変更 */
 //pi2->pDevMode->dmFields = DM_ORIENTATION;
 //pi2->pDevMode->dmOrientation = DMORIENT_LANDSCAPE;

 pi2->pDevMode->dmCopies = atoi(argv[2]);  //部数の設定

 /* DEVMODE のデバイス依存部分のアップデート */
 lFlag = DocumentProperties(hWnd, hPrinter,
  ptr,
  pi2->pDevMode, pi2->pDevMode,
  DM_IN_BUFFER | DM_OUT_BUFFER);
 if (lFlag != IDOK)
  goto ABORT;

 /* プリンタ情報のアップデート */
 bFlag = SetPrinter(hPrinter, 2, (LPBYTE)pi2, 0);
 if (!bFlag)
  /* ドライバがサポートしていないか、変更の失敗 */
  goto ABORT;

 /* 後処理 */
ABORT:
 if (hGlobal2 != NULL) {
  if (pi2->pDevMode)
   GlobalUnlock(hGlobal2);
  GlobalFree(hGlobal2);
 }
 if (pi2 != NULL)
  GlobalUnlock(hGlobal);
 if (hGlobal != NULL)
  GlobalFree(hGlobal);
 if (hPrinter != NULL)
  ClosePrinter(hPrinter);

    return 0;
}

2016年5月20日金曜日

VBScriptでデフォルトプリンターを変更

Option Explicit

Dim oWNetwork

Set oWNetwork = CreateObject("WScript.Network")
oWNetwork.SetDefaultPrinter "RICOH MP C2503 JPN"

Set oWNetwork = Nothing

VBScriptでリモートディスクトップ接続(RDP)

Option Explicit

Dim oWShell

Set oWShell=Wscript.CreateObject("Wscript.Shell")
oWShell.Run "MSTSC C:\RD_Connection.rdp", 3, False

Set oWShell = Nothing

2016年5月18日水曜日

Windows10で .NET Framework 3.5をofflineでinstallする方法

Windows10で .NET Framework 3.5をofflineでinstallする方法

元ネタ
http://winaero.com/blog/offline-install-of-net-framework-3-5-in-windows-10-using-dism/

windows10のCDをD ドライブにマウントしておく

cmd(管理者モード)で以下のコマンドを実行する

Dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess


2016年4月26日火曜日

「ハーバード大学の図書館の壁に 書かれている言葉」

「ハーバード大学の図書館の壁に書かれている言葉」

1. 今居眠りすれば、あなたは夢をみる。今学習すれば、あなたは夢が叶う。
2. あなたが無駄にした今日は、どれだけの人が願っても叶わなかった未来である。
3. 物事に取りかかるべき一番早い時は、あなたが「遅かった」と感じた瞬間である。
4. 今日やるほうが、明日やるよりも何倍も良い。
5. 勉強の苦しみは一瞬のものだが、勉強しなかった苦しみは一生続く。
6. 勉強するのに足りないのは時間ではない。努力だ。
7. 幸福には順位はないが、成功には順位がある。 
8. 学習は人生の全てではないが、人生の一部として続くものである。
9. 苦しみが避けられないのであれば、むしろそれを楽しめ。
10. 人より早く起き、人より努力して、初めて成功の味を真に噛みしめる事ができる。
11. 怠惰な人が成功する事は決してない、
真に成功を収める者は徹底した自己管理と忍耐力を備えた者である。
12. 時間は、一瞬で過ぎていく。
13. 今の涎は将来の涙となる。
14. 犬の様に学び、紳士の様に遊べ。 
15. 今日歩くのを止めれば、明日からは走るしかない。
16. 一番現実的な人は、自分の未来に投資する。
17. 教育の優劣が収入の優劣。
18. 過ぎ去った今日は二度と帰ってこない。
19. 今この瞬間も相手は読書をして力を身につけている。
20. 苦しんでこそはじめて進める。

2016年4月21日木曜日

XMPP C# Library Sharp.XMPP

XMPP C# Library で S22.XMPPを使用してたが
Sharp.XMPPが、S22.XMPPのFork版だった。

Sharp.XMPPがForkしたのは、S22.XMPPが更新されないからだそうな。
ライセンスは MIT

後、Clientに Chat(Windows Appに登録されている)

GitHubにソースが公開されていた。
ライセンスは MIT