布団が俺を呼んでいる

丘山大一のぶろぐ

別プロセスの画面キャプチャをしたい

言語はC#。実態(実体)はWinAPI。

別プロセスの画面キャプチャを取得し、画像として保存したい。

今回の対象プロセスはskype(exe名はlync)です。
こんな感じで書きました。

        [System.Runtime.InteropServices.DllImport("User32.dll")]
        private extern static bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);

        [System.Runtime.InteropServices.DllImport("User32.dll")]
        private static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

        private const string FORMAT_TIME = "yyyyMMddhhmmss";

        private void SavePicture()
        {
                    //Skypeのハンドルの取得
                    var pLst = System.Diagnostics.Process.GetProcesses().Where(p => p.ProcessName == "lync").ToArray();
                    var handle = pLst.First().MainWindowHandle;
                    RECT rec = new RECT();
                    var size = GetClientRect(handle, out rec);
                    //画像処理
                    Bitmap img = new Bitmap(rec.Right - rec.Left, rec.Bottom);
                    Graphics memg = Graphics.FromImage(img);
                    IntPtr dc = memg.GetHdc();
                    PrintWindow(handle, dc, 0);
                    memg.ReleaseHdc(dc);
                    memg.Dispose();

                    DateTime dt = DateTime.Now;
                    img.Save($@".\DATA\{dt.ToString(FORMAT_TIME)}.png");
        }

上記の問題点

プロセス名で単純に取得しているため、skype上で別ウィンドウ(例えばIM)を開いたりすると、メインウィンドウではなくそちらがキャプチャされてしまいます。
自分の用途としては許容範囲なのでOKとしました。
※上記処理では、例外処理を省いています。


プログラミングWindows 第6版 上 (Microsoft Press)

新品価格
¥7,560から
(2016/4/7 18:54時点)

コメントを書く

布団が俺を呼んでいる | Windows Phone (Windows Mobile)  OutLookのエイリアスを使ってメールを送受信したい その2

布団が俺を呼んでいる

丘山大一のぶろぐ

Windows Phone (Windows Mobile)  OutLookのエイリアスを使ってメールを送受信したい その2

前回の続き。
多分間違った方法だと思うのですが、まあ備忘として残しておく分には悪くない。はず。

Windows Mobileでのアカウントの追加

アカウントを追加するとき、つい「Outlook」を選択したくなりますが、これはダメ。
というのも、コレを選んでしまうとプライマリのアドレスと紐づいてしまいます。
たとえログイン時にエイリアスのアドレスを入力しても自動で紐づきます。
そのため、ここは一番下の「詳細セットアップ」からゴリゴリ設定していきます。

詳細セットアップ

ここからは箇条書きで。
  1. インターネットメールアカウント
  2. アカウント名:エイリアスのアドレス
  3. 表示名:お好きに。
  4. 受信メールサーバ:pop-mail.outlook.com
  5. アカウントの種類:pop3
  6. メールアドレス:エイリアスのアドレス
  7. ユーザー名:エイリアスのアドレス
  8. パスワード:Outlook(MSアカウント)にログインするときのパスワード
  9. 送信メールサーバ:smtp-mail.outlook.com
  10. チェック欄:全チェック有
こんな感じで設定すれば、エイリアスを軸とした運用は可能です。
このアカウントからメールを作成すれば、「送信者名」にエイリアスのアドレスが表示されます。

しかし、送信者名は「既定の "差出人" アドレス」に引きずられる

「送信者名」に表示されるのは、現在のエイリアスのアドレスであって、実際の送信者名ではありませんw
ですので、結局送信者名として扱われるのは既定の "差出人" アドレス」としたアドレスのようです。

うーん、中途半端。



Windows 10 Mobile 初期設定ガイドブック

コメントを書く