人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Visual BASIC 2008】で、禁断のCalc呼出し電卓プログラムを作りました。下記コードでは、MsgBoxを使って、Calcが終了するのを待っていますが、Calcが終了するのを自分で待ってOKボタンを押さなければなりません。これをMsgBoxを使わずに自動で待ってCalc終了後、クリップボックスの内容を取得するように変えるにはどうすればいいでしょうか。
問題の電卓プログラムは、Form1.vb[デザイン]にボタン1つと入力用TextBox1と出力用TextBox2をつけて下記コードで作りました。
※質問が長すぎるとのことで、コードはコメント欄にあります。

●質問者: rsc
●カテゴリ:コンピュータ ネタ・ジョーク
✍キーワード:Calc VB Visual Basic クリップ コメント欄
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ohmix1
●10ポイント

[VB] Shell 関数で起動したプログラムの終了を待つ方法

http://ameblo.jp/archive-redo-blog/entry-10033356292.html

VB2008でもたぶんいけると思うのですが...

◎質問者からの返答

回答ありがとうございました。試してみましたが、駄目でした。

「1+1」を入力してボタンを押したらたら、「1+1=」と返してきました。MsgBoxを復活させたら、「2」を返してします。


2 ● makeworld
●100ポイント ベストアンサー

こんな感じでしょうか?

(なぜか%{F4}を取りこぼす場合があるようなので、%{F4}のリトライ処理を入れています)

Public Class Form1
 Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Integer) As Integer

  'お約束のボタン
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 TextBox2.Text = CCalc(TextBox1.Text)
 TextBox1.Focus()
 End Sub

  'Windowsアクセサリの電卓Calcを呼出して計算結果を文字列で取得する関数
 Private Function CCalc(ByVal expr As String) As String
 Dim res As String = ""
 Dim newProc As Diagnostics.Process

 If Microsoft.VisualBasic.Right(expr, 1) <> "=" Then expr += "="
  'クリップボードに文字列をコピー
 Clipboard.SetDataObject(expr)

  'Windowsアクセサリの電卓Calcを呼出す
 newProc = Diagnostics.Process.Start("C:\WINDOWS\system32\Calc.exe")

 newProc.WaitForInputIdle(1000)
 SetForegroundWindow(newProc.MainWindowHandle)

  'SendKeysで計算式を送って計算結果をクリップボードにコピーしてCalcを終了
 My.Computer.Keyboard.SendKeys("^v^c%{F4}", True)

  'Calcが計算終了するのを待つ
  'MsgBox("Ready ?", MsgBoxStyle.Question)
 While newProc.WaitForExit(500) = False
 SetForegroundWindow(newProc.MainWindowHandle)
 My.Computer.Keyboard.SendKeys("%{F4}", True)
 End While

  'クリップボードに文字列データがあるか確認して文字列データがあれば取得
 If Clipboard.ContainsText() Then res = Clipboard.GetText()

 CCalc = res
 End Function

End Class
◎質問者からの返答

回答ありがとうございます。試してみたら、実際、動作しました。ちょっと欲張りですが、Calcを使っていることが分からないように隠して使うのはやっぱり無理でしょうか。(^_^;


3 ● an_shoku_panman
●10ポイント

まだまだVBは勉強中なので的外れだったら済みません。

↓が参考になれば幸いです。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1015045...

◎質問者からの返答

回答ありがとうございます。うーん、ちょっと違うような。(^_^;

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ