Category: 開発日記

今まで.NETのソフトを結構作ってきたけど、それらはほぼ「.NET Framework」上で動作するものだった。
が、しかし、この「.NET Framework」が今後のOSでは無くなるらしい。
ここ最近、全く勉強不足でそんなこと知らなかった。

「.NET 5」に統合されていくとのこと。
で、その.NET 5は2020年11月10日に正式リリース済み。

かつてのVisual Basic 6が、Visual Basic.NETに代わり、実質VB6が絶滅した時と同じか!?
(必須ランタイムもVB6ランタイムから、.NET Frameworkに変更)

これはまずい。

今更ながら調べ始めてみると、ASP.NETは、ほぼ移行不可能らしい。ひどい。
で、肝心なWindowsデスクトップアプリ(Formアプリケーション)は、どうかというと、
一応、.NET 5(.NET Core3相当)でも存在するらしい。

ただ、大元がMono Project(.NET Frameworkの互換OSS版)の物らしく、一部、機能差があったり表示崩れがある模様。

悪い事ばかりではない。
今まで、Windowsでしか動作しなかった.NET Frameworkのアプリが、Linuxや、Macで動くようになる。
更に.NET 6ではモバイルでも動作するらしい。

まぁ、でも自作ソフトの場合、ほぼ全てWindows固有の機能を使っているので、他プラットフォームでは動かない。
でも、Windowsだけでも今まで通り動かすことができそうなので助かった。

という訳で、本当に動くのか動作検証を兼ね小さなアプリで実験開始。

(さらに…)

約10年前に、スポーツ新聞作成Webサイトの公開したけど、それ以来
サイトのプログラム自体の改版は一切行っていなかった。
いろいろ不具合もあり、いつかサイトを閉鎖しようとも考えていたけど、
少しずつアクセス数が増えてきたので、手直しすることに。

見た目はあまり変わっていないけど、主に記事登録の処理を大幅に改良。
今までは、PHPサーバ側で画像処理を行っていたけど、今回はブラウザ側の
HTML5の機能を使って画像処理を行うようにした。
今までは、一度登録を行わないと完成イメージを確認できなかったけど、
今度は記事入力中にリアルタイムに表示確認できるようになった。

地味な改善だけど、結構頑張って作り直しました。

スポメカ

 
 

写真をGoogleマップで管理するWebシステムを作ってみたを密かに改良し、Googleマップ以外の地図「OpenStreetMap」でも表示できるよう作り込んでみた。

OpenStreetMap

 
 
まだ全然ゴールできていない東海道の写真とともにデモサイトを作ってみた。
デモサイト:東海道ウォークマップ

(さらに…)

Excelの列名は、通常「A」「AB」などアルファベット表示(A1形式)になっている。
Excelのオプション(※)を変更することによって「1」「28」など番号表示(R1C1形式)にもできる。

 

※ファイル>オプション>数式>数式の処理>R1C1参照形式を使用する

 

アルファベット表示(A1形式)

 

番号表示(R1C1形式)

 
 
(さらに…)

ExcelのVBAマクロを使って簡単なカレンダを作ってみたので、備忘録として残しておきます。

VBAマクロでカレンダ
 

カレンダを作るためには、主に以下のような処理が必要。
・曜日を求める
・その月の最終日を求める(特に2月の閏年計算)
・祝日、休日などを求める
 - 固定日(毎年変わらない祝日)
 - ハッピーマンデー(第〇月曜日)
 - 振替休日
 - 春分の日、秋分の日(毎年変わるが計算で求められる)
 - 国民の休日(祝日で挟まれた日)

(さらに…)

Windowsフォームのアプリで、Windowsエクスプローラのようなフォルダやドライブ一覧をツリー表示する方法を調べてみた。

nugetの「ExpTreeLib」というライブラリを使うことによってC#やVB.NETで簡単?に実現できるらしい。
[C#] エクスプローラ風のツリービュー表示
(さらに…)

Google Maps APIを使って
地図で写真を管理するWebサイトを作ってみました。

写真マップ

地図で写真を管理するWebサイト

 
(さらに…)

Windows10の大型アップデート「April 2018 Update」(バージョン1803)を適用すると、
C#から、うまくイベントログを拾えなくなってしまった。

イベントログ取得できない

例えば、以下のソースを実行すると、イベントログを途中まで読み込んで
勝手にループを抜けてしまう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            EventLog evlog = new EventLog("System", ".");
            Debug.WriteLine("件数:" + evlog.Entries.Count);
            foreach (EventLogEntry et in evlog.Entries)
            {
                Debug.WriteLine(et.TimeGenerated);
            }
        }
    }
}

実行結果:

件数:2433
2018/05/11 20:10:55
2018/05/11 20:11:25
2018/05/11 20:11:25
2018/05/11 20:10:55
:
2018/05/11 20:13:16
'WindowsFormsApp1.exe' (CLR v4.0.30319: WindowsFormsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\System.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
例外がスローされました: 'System.InvalidOperationException' (System.dll の中)
'WindowsFormsApp1.exe' (CLR v4.0.30319: WindowsFormsApp1.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
プログラム '[3968] WindowsFormsApp1.exe' はコード 0 (0x0) で終了しました。

⇒イベントログ2433件あるのに、123件しか取得できない。
(さらに…)

WSHを使用した、Excel操作の備忘録。
 

新規Excelブックを作成し、セルB2に、現在日時を表示し、保存するまでの処理。

WSHでExcel操作

 

前に、C#からの操作を紹介したけど、これの簡易版。
[C#] プログラムからExcelファイルを読み書きする方法

 
(さらに…)

Visual Studioで作成したWindows Formアプリケーションのインストーラ作成方法を備忘録としてまとめてみた。

 

setup

過去にも自作ソフトを配布する際、何度かインストーラを作成して配布していたこもあったけど、ここ最近は、インストーラを作成せず、exeなどをzipで固めて配布していた。
その方が楽だし、利用者も抵抗感が少ないと思ったから。

でも、たまに実行権限の問題や、スタートアップ登録方法など問い合わせを受けることもある。
場合によっては、インストーラ付きでの配布を求められるシーンもある。
そんな訳で、また忘れてしまうであろうインストーラ作成方法をメモっておくことに。

(さらに…)

C#で、Windowsフォームの角を丸くして表示する方法。
 

普通のWindowsフォームは、タイトルバーとか境界線が付き、角も角ばっている。
角ばったWindowsフォーム

 

それを、こんな感じに角を丸くして表示する。
フォームの角を丸くする

 
(さらに…)

開発環境をVisual Studio Community 2013から、
Visual Studio Community 2015に切り替えてみた。
Visual Studio Community 2015
 

[Microsoft:無料開発ツール – Visual Studio Community 2015]
https://www.visualstudio.com/products/visual-studio-community-vs
 

(さらに…)

スタートアップメニューにショートカットを登録

Windows起動時にアプリを起動させたい場合、スタートアップメニューにアプリを登録することは良くあると思う。

でも、Windows 10や8.1などでは、スタートアップメニューへの登録方法が面倒というか分かりにくく、自作ソフトでもたまに問い合わせが来る。

インストーラでスタートアップに登録すれば確実なんだけど、フリーソフトでインストーラとかは嫌がられる場合も多く、作る手間も掛かる。

そんな訳で、アプリケーション側で、自分自身のショートカットをスタートアップメニューに登録する方法を調べてみた。

 
 

まずは、スタートメニューのフォルダを調べる方法。

// 特殊ディレクトリ(スタートアップ)のパスを取得する
Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)

Stringの値が返される。
例)C:\Users\<ユーザ名>\AppData\Roaming\Microsoft\Windows\Start Menu

 
 

そして、アプリ自身のexeファイル名の取得方法。

Path.GetFileName(Application.ExecutablePath)

Stringの値が返される。
例)sampleApl.EXE

 
 

あとは、exeのショートカットをスタートメニューのフォルダにコピーするだけ。

・・・。

あれ、どうやらC#やVB.NETではファイルのショートカットを作る機能が無いっぽい。

 

そういえば、前も似たようなことをやった記憶が。。

そうだ、これだ。
[C#] 送るメニューにショートカットを登録/解除する方法

この時も、ショートカット作成に苦労した。

なので、ショートカットの作成は、上記記事の「方法4」を流用し、WSH(Windows Script Host)でショートカットを作成する。
いろいろ方法があるので、詳しくは上記記事を参照。
(さらに…)

前に、Windows 10 Enterprise Technical PreviewをVMware Playerにインストールしたことはあったけど、今度は7/29正式版のWindows10をメインPCにインストールしてみた。
まだインストールトラブルもちらほら聞く中、自作ソフトの動作確認をしなければならないので人柱覚悟でインストール。
 

Windows10
 

と言っても、環境ぶっ壊れるといろいろ面倒なことになるので、手動で可能な限りファイルバックアップ。
に加え、以下のサイトを参考に、PCを丸ごとバックアップ。
Windows 10を入れる直前の状態で復元できるイメージバックアップのつくりかた
USBメモリに「回復ドライブ」を作成し、
外付けHDDに「システム イメージ」をごっそりバックアップ。

やらなくてもいいけど、念のため。。

 

そしてWindows10のインストール作業へ。

Windows10への無償アップグレードの予約をし、タスクトレイにWindowsアイコンが表示されている状態。
Windows10への無償アップグレードの予約

 
(さらに…)

Windows Vista78と、新OSが出る度にVMで自作ソフトの動作確認をしていたけど、
今回もWindows10環境を構築してみることにした。

プレビュー版を入れるような空きPCも無いので、今回も仮想環境にWindows10をインストール。

 

windows10

 
(さらに…)

ListViewコントロールで、詳細表示(ViewプロパティをDetails)し、アイテムを追加していくと描画処理が異常に重くなる現象が発生。
この問題を解決するのに少しハマったので覚書としてメモっておく。

自作ソフトRSS速報のListView表示で、数十件の項目を表示するのに数分かかることもある。

ListView
描画時にGUIがほぼ固まってしまう。

遅い処理部分をデバッグで調べてみると、

ListViewItem lItm = listView1.Items.Add(FormMain.saveItems[i, j, 0]);

の行で、数秒が掛かっている。
しかも、件数が増えれば増えるほど遅くなっていく。
(さらに…)

エクスプローラーなどでファイルを右クリックしたときに出てくる「送る」メニュー。
この送るメニューにアプリケーションを登録しておくと、選択したファイルの情報を
アプリケーションに渡して起動できるため、使い方によっては便利な機能。
01
例えば、logファイルを”メモ帳”に送って起動するといったことができる。

(さらに…)

Windowsストアアプリ

Windowsストアアプリと言っても、Windows8用とWindows8.1用と異なり、
Windows8用のストアアプリはVisual Studio 2012で開発し、
Windows8.1用のストアアプリはVisual Studio 2013で開発する必要がある。

Windows8は無料アップデートでWindows8.1になるので、もうWin8用ストアアプリを態々作る必要も無いだろう。
なので、最初からWin8.1向けWindowsストアアプリ開発に挑戦してみる。
(さらに…)

.NETが一部OSS化され、.NET開発環境であるVisual Studio 2013も条件付きで無料版がリリースされた。

ずっと、そーなればいいなとは思っていたけど、まさか本当に実現するとは。凄い。
.NETも、やっと少しようやく何とな~くJavaに近付いてきた。ような気がする。

サーバーサイドの.NET Core Runtimeは、LinuxとかMac OS Xにも対応。

で、Visual Studioの方は無料化された。
とは言っても、もともとVisual Studio Expressは無料だった。
まぁ、こちらは「for Web」とか「for Windows」「for Windows Desktop」など、作りたい物によってモノが分かれていたため、1つ1つインストールしなければならなかったけど。

それが、今回Visual Studio 2013 Professionalみたいな感じで1つになっている。

更にVisual Studio Community 2013では、Android、iOS向けのアプリも開発できるとのこと。

でも、このVisual Studio Community 2013は、利用者に制限を設けていて、個人開発者、大学関係者、非営利団体従事者、オープンソース開発者、中堅・中小企業などに該当しなければならないので注意が必要。

 

Visual Studio Community 2013

 

そんな訳で、開発環境をVisual Studio Community 2013に乗り換えてみることにした。

 
(さらに…)

C#でExcelファイルを読み書きするプログラムと、そのプログラム(exe)を配布するためのインストーラを作ってみた。

C#でExcelファイルを読み書きするプログラム
何故態々インストーラを作成するのか?

それは、作成したExcelを使ったプログラムは、exeの配布だけでは他のPCでは動かないため。
Excel関連のDLLも一緒に配布する必要がある。

例えば、前に作成したサンプルアプリの場合、配布時は以下のDLLが必要。

  • Microsoft.Office.Interop.Excel.dll
  • Microsoft.Vbe.Interop.dll
  • office.dll
  • stdole.dll

 

⇒これ、後から気づいたけど実は認識誤り(.NET Framework 3.5までの話)。
 .NET Framework 4以降ではDLL配布を不要にする方法がある。
 説明も後記するので最後までちゃんと読んでね。

 

昔のVisual Studioではセットアッププロジェクト(Windows ベースのアプリケーションのmsiインストーラ)を作成する際、必要なDLLを自動で抽出してくれていた。

インストーラ付きで配布するのが嫌という場合、exeと抽出されたDLLだけを他PCにコピーしても動作する。
ただ、インストーラ無しで、抽出されたDLLを勝手に再配布するのはNGかも知れない。
あと、勿論、配布先PCにもMicrosoft Excelをインストールしておく必要はある。

じゃぁ、昔みたいにインストーラを作ればいい。

と、思ったら、、
Visual Studio 2012以降では、セットアップ プロジェクトが無くなり、ウィザードでインストーラ作成(ディプロイメント)することが出来なくなってしまったらしい。

・・・それは困った。

必要なDLLはMSDNとかに載っているかもしれないけど、前と同じような方法ができないか調べてみた。

 

すると、従来のセットアッププロジェクトに代わり、InstallShield Limited Editionを使ってインストーラを作れることが分かった。
でも、InstallShieldって有料じゃなの?

と思ったけど、このLimited Editionってのは簡易版で無料らしい。

ただ、無料版のVisual Studio Expressでは使えず、Visual Studio Professional以降じゃないと、InstallShield Limited Editionは使えないようだ。

 

という事で、おさらいも兼ねてVisual Studio 2013を使ってExcelを使ったプログラムと、インストーラをInstallShieldで作ってみることにした。

 
 

Excel用のプログラム作成

まずは、C#でExcelを使ったプログラムを作成。
exeの作成方法は、ほぼ前回と同じ。
(さらに…)

くしけん
前に、Ajaxを使い複数のネットショップを一括検索するサイト「くしけん」を作ったんだけど、ここ最近は放置気味で殆どメンテできていなかった。

ああしたい。こうしたい。という案はいろいろあったんだけど。
(さらに…)

C#やVB.NETなどのアプリケーションで、WebサイトやHTMLなどを表示したい場合に使うWebBrowserコントロール。
このWebBrowserコントロールを使えば、簡単にInternet Explorer同等のWebページを表示できる。

でも、最近このWebBrowserコントロールで表示崩れが増えてきたような気がする。

例えば、ここのホームページを表示すると、メニューのスタイルが崩れてしまう。

 

↓WebBrowserコントロールで表示
WebBrowserコントロールで表示

 

(さらに…)

自作フリーソフトについて、最新の開発環境であるVisual Studio 2013でリビルドし、最新OSのWindows8.1上で問題なく動作するか確認してみた。
Windows8.1 + Visual Studio 2013
(さらに…)

本日、Windows8.1がリリースされた。
Windows8からのアップグレードは無料ということで、早速インストールしてみた。

Windows8.1

(さらに…)

今年も凄く暑くなってきて、節電も気になり始めたんで、また電力ネタを。
以前、電力使用率を表示するガジェットを作成したけど、Windows8からデスクトップガジェットが使えなくなってしまった
なので、Windows8上でも簡単に表示できるよう、HTML上で表示できる電力メーターを作ってみた。
丁度、HTML5のスキルアップもしたかったので、Flashのような絵が描ける<canvas>を使って作ることに。
でも、テキストエディタのみで、メーターのイメージを想像しながら作るのは、ちょっと難しかった。。
かなり試行錯誤を繰り返す羽目に。
それでも、なんとかイメージに近いものが出来上がった。
meter
一応グラデーションとか光沢など余計なものも作り込んである。
針と文字は、もうちょい何とかしたかったけど。
特にアプリ化する予定も無く、これで終わりだけど、勿体ないのでOsadaSoft実験室というページを作り、そこに載せて置くことにした。
HTML5+Ajaxによる電力メーター

(さらに…)

自作ソフトのWindows8対応がまだ完全には終わっていないため、少しずつ進めているが、
RSS速報と、アフィリサーチのヘルプが文字化けすることに気付いた。
01

(さらに…)

Excelに保存したデータを利用して、何かプログラムを作ろうとした場合、通常はExcelマクロなんかを使うことが多いと思う。

実際、マクロはVBA(言語的には旧Visual Basic 6.0)を利用するため、コーディングの難易度が低く、ちょっとした表計算やグラフ作成なら簡単に扱うことができ便利。

だけど、既存のExcelにマクロ追加など手を加えたくなかったり、複数のExcelデータを利用した処理を行いたかったり、他システムとの連携や、ちょっと複雑な処理を加えたいといった場合は、マクロはでは役不足。

C#からExcelを利用するプログラムについて作り方をよく忘れてしまうんで、覚書きとしてメモっておくことにした。
10
開発言語はC#(VB.NETなども同様)で、実行環境にはExcelが必要。

今回は、Visual Studio 2010 Professional + Microsoft Office Excel 2007
の組み合わせで実行したけど、
Visual Studio 2012 Express for Windows Desktop + Microsoft Excel 2010
の組み合わせでも問題なく動作した。

<追記>
Visual Studio 2013+Microsoft Excel 2013とかも基本的に同じようなやり方で動作する。

作成方法

(さらに…)