2011年12月14日水曜日

WebBrowserコントロールで要素に値を入力

WebBrowserコントロールのフォームに任意の値を自動入力する方法をメモ。
社内で使用する業務用WebアプリをWindowsアプリケーションの中で扱えないかと思い,WebBrowserコントロールを使ってみました。
アカウント認証が必要なので,アカウント情報を自動入力して送信します。

まずはテキストボックスへの入力とボタンクリックのメソッドを用意。

    ''' 
    ''' 指定のURLに接続します。
    ''' 
    ''' URL
    ''' 
    Public Sub SetUrl(ByVal url As String)

        webBrowser1.Navigate(url)

    End Sub

    ''' 
    ''' ウェブページ内のテキストボックスに文字列を入力します。
    ''' 
    ''' 要素ID
    ''' 文字列
    ''' 
    Public Sub SetStringToTextBox(ByVal elementId As String, ByVal value As String)

        Dim all As HtmlElementCollection = webBrowser1.Document.All
        Dim forms As HtmlElementCollection = all.GetElementsByName(elementId)
        If forms.Count > 0 Then
            forms(0).InnerText = value
        End If

    End Sub

    ''' 
    ''' ウェブページ内のボタンをクリックします。
    ''' 
    ''' 要素ID
    ''' 
    Public Sub ClickWebButton(ByVal elementId As String)

        Dim all As HtmlElementCollection = webBrowser1.Document.All
        Dim forms As HtmlElementCollection = all.GetElementsByName(elementId)
        If forms.Count > 0 Then
            forms(0).InvokeMember("click")
        End If

    End Sub

Webページの読み込みが完了した時点で自動入力して送信。


    Private Sub webBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles webBrowser1.DocumentCompleted

        SetStringToTextBox("Account", "myAccount")
        SetStringToTextBox("Password", "myPassword")
        ClickWebButton("Submit")

    End Sub

うまくいったのはいいけど,別ウィンドウを表示する動作で認証が途切れてしまいました。 セッションのことまで考えるとなかなか単純にはいかないようです。 別ウィンドウでのセッション維持が不要なら,使えそうです。

2011年10月12日水曜日

Trusted Drive Manager

ふとスタートアップを見てみると tdmnotify.exe とかいうプログラムが入っていました。あれ?これなんだっけ?と思って検索。以下のサイトにたどりつきました。

Trusted Drive Managerについて (Dell)

EMBASSY Trusted Drive Manager

Wave Systems Corpという会社のHDD用セキュリティシステムみたいです。
そういえばPCはデルだから,最初から入ってたのかなあ・・と思ったものの,今まで気にしてなかったことにちょっと怖くもなりました。

2011年8月9日火曜日

Windowsタブレット予約

前々から欲しいと思っていたWindowsタブレット。確かに操作性,携帯性など,さまざまな面でiPad2は勝っているとは思います。しかし,私の場合は常に持ち歩くデバイスとしてはどうしてもWindowsが必要でした。
現在持ち歩いているのは 工人舎PMシリーズ で,350gと軽量,公称値7時間のバッテリーということでとても重宝しています。とはいえこのスペックではどちらかというと電子辞書のような使い勝手になってしまい,それはそれで助かるけれどPDFや電子書籍を見るのは画面の大きさからしても無理がありました。
画面が小さいという点でいえば同じく持ち歩いているiPod TouchやT-01Cだって同じなわけで,いかに操作性がよいiOSやAndroidでもPDFは辛いわけです。こうなるとやはりタブレットということになり,ちょうどよさそうな機種が出るのを待っている状態でした。


Acerの ICONIA Tab W500 はなかなか良さそうだったけど,Amazonのカート画面で悩んだ末に断念。やはり950gは通勤用ショルダーバッグには重すぎ,ちょっとしたトレーニングになってしまいそうだったのであきらめました。

iPad2と工人舎PMを2台持つことも考えましたが,600g+350gで結局950gになってしまうので断念。それにiPadを完全に使いこなすにはやはりMacが必要なのではないかと思えるのですが(むしろMacが欲しくなるような気もします),いかにApple製品が魅力的でもシステムの重複は費用も管理コストも増大する可能性が高いので,それはできるだけ避けたいと考えます。

NECの VersaPro タイプVT はスペックも良さそうだし,デザインもシンプルで魅力的。展示会などで触らせてもらった試作機にしても,重さは程々だし,とてもいい感じでした。ただ,9月発売とはいえ5月の発表以降全然情報が更新されないので関心が遠のいてしまいました。Appleみたいに小出しで情報が出てくると関心も維持できるのですが。とてもバランスの良い機種だと思うので,会社でタブレットを使う必要が出てきた場合には改めて評価したいと思います。

そんな中,マウスコンピューターからWindowsタブレット LuvPad WN-101P が発表され,一気に関心がこちらに向いてしまいました。



気に入ったのは以下の点。
  • 750gと軽量(初代iPadと同じ程度には)
  • タブレット向けのAtom Z670(現在所有の電子手帳扱いのPCよりはいい)
  • バッテリー持続時間,公称値で6時間(自分としては運用上の最低ラインをクリア)
  • 厚み14mm(今までのWindowsタブレットより薄い)
  • UIとしてExTOUCHプリインストール(Windowsタブレットには必要だと思う)
  • 「敢えて」1024×600の解像度(1200×800は負荷が高い気がするし,タブレットとしては文字やアイコンが小さくなってしまう)
  • SSD(ハードディスクは論外)
  • 画面右側にある3つのボタンが使いやすそう

個人的にいまいちな点もあるにはあります。

  • SSDの容量が小さい(空き容量14GBほど)
  • USBが1つしかない(2つ欲しい)
  • 解像度は1024×768のほうがPDFが見やすい(と思う)
  • KINGSOFT Officeは不要(MS Office入れるし,なくてもOpenOfficeでいいし)

発売は8月上旬としか発表されていないのでいつ発売かと待っていましたが,量販店のサイトで予約開始になっていたので,さっそく予約しました。
久々に目新しいものを買うのでわくわくします。

※追記
発売日が延長になってしまいました・・。
「LuvPad WN101-P」発売開始日変更のお知らせ 2011.8.9

2011年8月5日金曜日

NetAdvantageのTextEditorのコントロール名を取得する

あるコントロールにフォーカスがあるときに何らかのキーを押すと,フォーカスが移動するとかいう機能はよく必要になりますが,NetAdvantageのTextEditorのコントロール名を取得するときはちょっと気をつける点があります。
このコントロールは親コントロールにコントロール名が収納されているため、コントロール名はControl.Parent.Nameから取得できます。普通にControl.Nameでは取得できません。
最初このことを知らずに長い時間を費やしてしまいました。
以下はF12を押した際にアクティブコントロール名を取得するコード例です。


'UltraTextEditorのコントロール名取得

Select Case e.KeyCode

    Case Keys.F12

        Dim controlName As String = Nothing

        If ActiveControl.Parent.Name = Me.Name Then
            '親コントロールのコントロール名が取得できない場合(普通のコントロール)
            controlName = ActiveControl.Name
        Else
            '親コントロールのコントロール名が取得できる場合
            controlName = ActiveControl.Parent.Name
        End If

        MsgBox("Active: " & controlName)

End Select

ユーザーコントロールの独自プロパティに付加的な情報を加える

基本的なことなんでしょうけど,久々にやろうとすると忘れてしまうのでメモ。

'プロパティの記述例

''' 
''' 表示名。
''' 説明。
''' 
''' 
''' 



 'デザイン時にプロパティを表示しない
Public Property Property1 As String
    Get
        Return Nothing
    End Get
    Set(value as String)
        _property1 = value
    End Set
End Property
 

2011年7月6日水曜日

弥生会計11にアップグレード

 弥生からけっこう前に最新版のCD-ROMが届いていたのだけど,ネットワーク版にしてからなんとなくセットアップが面倒な気がして,今になってアップグレード作業を行ないました。
複数のPCにインストールするので今後の利便性も考えてネットワークストレージにCD-ROMの内容をコピー。できるだけ容量を減らすために Account17 という本体のフォルダだけをコピーしたのだけど,これが間接的に手間取った原因になってしまいました。

まずは弥生会計11をインストール。インストール後,弥生会計10のデータを弥生会計11用に移行。動作を確認後,弥生会計10をアンインストール。すると,弥生会計11が「kaikeiapprunオブジェクトの作成に失敗しました(1)」とかエラーメッセージが表示されて起動しなくなってしまいました。修復や再インストールをしてもやはりだめで,仕方がないので直接CD-ROM内にあるインストール用画面からインストールすると直りました。

弥生会計10をアンインストールした時に 「Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ」 が消えてしまったのだろうか?と考えつつ,やはりインストーラーをきちんと使った方が無難だなーと今更ながら思いました。と言いつつも残りのPCはCD-ROMの「Runtime\vcredist_x86\vcredist_x86.exe」をインストールすると直りました。

最初にテストとして自分のパソコンにインストールした時にうまくいったのは,自分のパソコンが開発環境でもあり,ランタイムが無くても動くようになっていたからでしょう。開発環境とユーザー環境の違いは怖いです。

AutoRun.exeから起動
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージがインストールされていない

2011年7月1日金曜日

Amazon購入手順

Amazon購入手順と言っても,特に深く考えず,すいすいクリックして完了してしまうと思うのですが,誰もが「なんとなく」で作業を進められるわけではありません。

近隣では手に入りにくい書籍が速く安く手に入るということで,最近会社の人からAmazonの使い方を教えてほしいと言われ,とりあえずアカウント作成までは終わったのですが,実際の購入は今から説明することになっています。それならいっそと一般的な購入手順をまとめてみました。 とりあえず商品選択から購入手続き,注文確認とキャンセルの手順に絞って作成しました。

インターネットが普及したとはいっても利用度合いは人それぞれで,人によってはパソコンやネットワークで何かをするということが未だに障壁となるようです。いわゆる情報リテラシを向上させるのもシステム管理者的な業務ではありますが,どうしても個人差があるので難しいところです(今回の件はまったく個人的な分野ですが)。

ちなみに,情報リテラシの向上については若い人の方が有利ではありますが,意欲があるかないかのほうが重要な要素であるように思います。大抵はどんな分野でもそうだと思いますが。


Amazon購入手順(PDF)

2011年6月2日木曜日

droboを使ってバックアップ

昨年経営陣からバックアップについて尋ねられたとき,現在のストレージでは容量不足になりつつあると答えると,新しいストレージを購入してもよいということになりました。
そのときに導入したのがdroboというストレージデバイス。「ディーロボ」と読むそうですが,初めて記事で読んだときから「ドロボー」としか読めません。社内では既に愛称となっています。
いくつかグレードがあるなかで購入したのは drobo Pro。

http://www.drobojapan.jp/drobo_pro.html




3.5インチATAのHDDを8台搭載できます。最初は1台でもよく,必要に応じて追加すれば自動的に容量を拡張してくれます。しかもHDDの容量,メーカー,回転速度はばらばらでも問題なし。独自のRAID機構でHDDの故障時も別のHDDを入れ替えるだけで停止することなく回復します。


検討する上で必要な条件は単純にまとめると以下の通り。
  • 大容量
  • 高速
  • iSCSI可

そういうわけで,まずiSCSIが使えないNASは除外。社内のサーバーはほぼ全てWindows Serverなので,ファイルシステムはNTFSが望ましい。そうなるとiSCSiでWindows Serverのローカルドライブとして使うか,Windows Storage ServerをOSとした機種かということになります。まず後者を検討しましたが,バージョンが2008となると,あまり種類もなく,検索すると以下のNASが良さそうでした。ちなみにサーバーとPCで採用しているデルのストレージは予算が合わないのでパス。




iSCSIも使えるし,スペックも良さそう。ただ,droboの自由度は魅力でした。ProグレードならiSCSIでWindows Serverのローカルドライブとして使えますし,HDDも8台使えるとなれば2TBを使ったとして容量は最大で16TB(実際にはRAIDのため12.41TBになった)。ファイルサーバー内のデータ全部と仮想サーバーすべてを丸ごと保存しても問題ない容量が手に入ります。
つまりこんな結論に。

  • 16TBの大容量
  • RAIDでリスク対応
  • HDDの管理が簡易
  • 必要な容量からのスモールスタートで初期コストが低いので稟議に有利
  • そもそも価格がそんなに高くない
  • iSCSIでWindows Serverのローカルドライブとして使用可なので,共有もできるし仮想マシンのストレージにもなる
こうしてあっさりと導入ということになりました

本体の梱包を解いてHDD4台を装着。電源とLANケーブルを挿して設置。10分で終わる作業。あとはサーバーに管理用ソフトウェアをインストールし,iSCSIで接続して完了。
一部を自らのバックアップ領域とし,あとは共有して他のサーバーのバックアップ領域としました。


iSCSIイニシエータを使ってIPアドレスを設定。
成功するとこんな感じ


現在はさらに4台追加したので,計8台


まだまだ余裕があります







その後,HDDを4台追加したが,これも5分で作業終了しました。
試しに1台抜いてみましたが,まったく動作に問題はありませんでした。そのHDDをもう一度元の場所に戻すと,再び容量が戻りました。
実を言うとHDD4台追加のとき,最初は各HDDのインジケーターが点灯せず,「不良?故障?」と一瞬焦ったのですが,再起動すると正常に動作するようになり,以後問題は発生していません。

ちなみに,純粋にバックアップとして使用しているので,仮にdrobo自体が故障しても業務に影響はありません。droboをストレージとする仮想マシンもバックアップ処理専用です。
災害対策として遠隔地バックアップもしていますが,これはまた別の話。


2011年5月31日火曜日

非同期で開いたフォーム(WinForms)を閉じたときのイベント処理

マルチウィンドウで動作させる場合によく使う処理。
リストなどを使って複数保持することできめ細かな制御ができる。

    '宣言 
    Private Form1 as Form

    'フォーム起動
    Private Sub Form1_Open()

        If Form1 Is Nothing Then
            Form1 = New Form
            AddHandler Form1.FormClosed, AddressOf Form1_Closed
            Form1.Show()
        End If

        Form1.Activate()

    End Sub

    'フォーム終了時イベント
    Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs)
        Form1 = Nothing
    End Sub

2011年5月19日木曜日

ソースコードの整形を試す

いろいろとブログとか読んでいると,サンプルコードの表示がきれいに整形されている。
そこで方法を探してみた。既に実例が多いのでいくつも見つかったけれど,「Syntax Highlighter」「唐辛子」というのを試してみた。



「Syntax Highlighter」を使用

対象言語がいろいろあるし,行番号は表示されるし,設定が済めばソースコードそのまま貼り付けるだけだし,とても便利。


        Private Sub Test()

            Dim test1 As String = "Hello "
            Dim test2 As String = "World!"

            Dim hello As String = Nothing

            For Each el In test1.ToCharArray
                hello &= el
            Next

            For Each el In test2.ToCharArray
                hello &= el
            Next

            Debug.WriteLine(hello)

        End Sub

使用できる言語
Syntax Highlighter Brushes

XMLを表示する場合はHTML実体参照に変換したコードを貼り付けないと正しく表示されない。
HTML実体参照変換

「唐辛子」で変換(CSS使用)

設定が必要だけど,きれいに表示されるのでこれまた便利。
Webツールで変換したコードを貼り付けて使用。


        Private Sub Test()

            Dim test1 As String = "Hello "
            Dim test2 As String = "World!"

            Dim hello As String = Nothing

            For Each el In test1.ToCharArray
                hello &= el
            Next

            For Each el In test2.ToCharArray
                hello &= el
            Next

            Debug.WriteLine(hello)

        End Sub


「唐辛子」でStyle属性を付与して変換

Webツールで変換して使用。
シンプルな表示だが,設定も必要なく貼り付けるだけで手軽に使える。


Private Sub Test()

Dim test1 As String = "Hello "
Dim test2 As String = "World!"

Dim hello As String = Nothing

For Each el In test1.ToCharArray
hello &= el
Next

For Each el In test2.ToCharArray
hello &= el
Next

Debug.WriteLine(hello)

End Sub