2012年09月11日

32/64bit両方でネイティブに動作するプログラムを作る

今まで32bitか64bitか意識しなくてもちゃんと64bit版OSで動いていたのだが、ある時レジストリの編集をしていてどういうわけか64bit版Windows7で更新されていないのに気が付いた。全てのレジストリではない、ある特定のレジストリである。なぜ更新されないのか調べていくうちに、意外なことが判った。
実は更新されていないのではなく、別のところに更新されていたのだ。

もともと更新したかったのは
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.....だった。
ところが実際に更新されていたのは
\HKEY_LOCAL_MACHINE\Wow6432Node\SOFTWARE\Microsoft\.....だった。

原因はプログラムが32bit用アプリケーションだったためだった。
このレジストリはどうやら64bit用アプリでないと本来の場所に書き込まないらしい。
そこで64bit用にコンパイルし直す必要が出てきたのだが、32bitと64bit別々に作るのは煩わしい。
調べてみると両方で動作するコンパイル方法があることが判った。

ビルドメニューの「構成マネージャ」からプラットフォームで「Any CPU」を指定すればいいのである。
Any CPU

64bit対応アプリの作成方法の参考ページ
http://code.msdn.microsoft.com/windowsdesktop/10-64-NET-VB-ae70ffc1

ここには以下の表が掲載されている。これで一目瞭然。
AnyCPU

posted by なっちゃん at 19:09| 静岡 ☀| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2012年09月07日

起動時にフォームを表示せず、タスクトレイ(通知領域)にアイコン表示させる

ずっと以前「VB.NETではForm1(最初に起動させるフォーム)を非表示で起動できない?」というTipsを紹介した。ところがVB2010ではこの方法でもフォームが小さく表示してしまうことが判明、別の対策をすることになった。

今回の見つけた方法はvb2005〜2010全てで動作する。(初期vb.netやvb2003は開発環境が無いため確認不能)

デザイン時のForm1のプロパティ設定は以下の3つ
Opacity = 0
・ShowInTaskbar = False
・WindowState = Minimized 'これはForm_Loadイベント内でも可

実行時のイベントでの処理

Private Sub NotifyIcon1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles NotifyIcon1.Click
Me.WindowState = FormWindowState.Normal
End Sub
 
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Resize
If Me.WindowState = FormWindowState.Minimized Then
Me.Opacity = 0
Else
Me.Opacity = 100
End If

End Sub

このTipsの肝要はOpcityの使用である。コントロールの不透明度を利用して見えなくするのだ。
posted by なっちゃん at 10:45| 静岡 ☀| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。