No.1
- 回答日時:
電卓アプリに、結果を外部に返すインターフェイスが無ければ、無理だと思いますよ。
もしインターフェイスが無いのに電卓内部の処理を盗み見られるのであれば、ソフトウェアとしてのセキュリティに問題があることになりますよね(ブラウザアプリ内部のデータを盗み見できるのであれば、それを会社のPCなどに仕掛ければ、パスワードや昼休みの個人利用時のID、パスワードなどが収集できてしまいます)。
もしかしたら的外れかもしれません。
ありがとうございます。そうですか。まだまだ未熟者で知識が浅いので勉強になりす。
でももう少しAPIなどの勉強もかねてねばってみようと思います。
No.3ベストアンサー
- 回答日時:
・電卓のウィンドウハンドル取得
・電卓ウィンドウの中のEditコントロールのウィンドウハンドル取得
・取得したEditコントロールのウィンドウハンドルめがけてWM_GETTEXTメッセージを送る
このような手順になります。
後半二つについては、C++ですが、以下のページが参考になります。
http://homepage2.nifty.com/DSS/VCPP/API/GetWindo …
最初の、電卓のウィンドウハンドルについては、手っ取り早いのは「電卓」という文字列でFindWindow APIを使うことですが、他にも方法はあります。
APIについてそれ相応の知識が必要になります。
ここに全てのソースを記すのはちょっと厳しいので、色々探してみてください。
ありがとうございます。
APIを使っていろいろと試しているのですが以下の記述(長くなってしまったので一部分ですが・・・)でテキストに値が返ってきました。ですが、問題なのが値が返ってきたり返ってこなかったりするのです。まだAPIというものを良く理解していないので何故なのか検討もつきません。もし何かお気づきの点がありましたら教えてください。よろしくお願いします。
Private Sub Command1_Click()
Dim INST As Long
Dim PROCESS As Long
Dim MODORITI As Long
Dim ENDWORK As Long
Dim lngWindWnd As Long 'ウィンドウハンドル
Dim ret As Long
Dim hCalc As Long
Dim TextBuff(20) As Byte 'メモ帳の文字列格納バイト配列
Dim EditTextLen As Long 'メモ帳の文字列サイズ
Dim gTextBuff As String '取得した文字列
' システムエディタを起動
INST = Shell("Calc", 2)
'システムエディタのプロセスを取得する
PROCESS = OpenProcess(1024 Or 1048576, True, INST)
'アプリケーションタイトルより、ウィンドウハンドルを得ます
lngWindWnd = FindWindow(vbNullString, "電卓")
hCalc = FindWindowEx(lngWindWnd, 0, "Edit", "")
'システムエディタが閉じられるまで処理を中断(ループさせる)
Do While 1
'メモ帳の文字列サイズ取得
EditTextLen = GetEditboxLenB(hCalc)
'メモ帳からテキスト取得
ret = SendMessage(hCalc, WM_GETTEXT, EditTextLen + 1, TextBuff(0))
MODORITI = GetExitCodeProcess(PROCESS, ENDWORK)
'システムエディタが終了したら処理中断(ループ)を解除する
If ENDWORK <> 259 Then
MsgBox "shori end"
Exit Do
End If
Loop
'ANSI→ UNICODE変換
gTextBuff = StrConv(TextBuff(), vbUnicode)
'GetEditboxText = strNullCut(gTextBuff)
Text1.Text = strNullCut(gTextBuff)
End Sub
No.5
- 回答日時:
No.3のspace_needleです。
ソースを拝見したのですが、もしかしたら電卓を閉じる寸前に表示されていた内容を取得したい、ということでしょうか。
私はてっきり、「内容の取得」ボタンのようなものがあって、それを押したときに取得するのかと思っていました。
もし閉じる寸前の内容、ということであれば、値が返ってきたり返ってこなかったり、という問題を解決するのは、私が知る限り不可能です。
電卓が閉じられるときに、Editコントロールの内容は破棄されます。
破棄されるのが先か、取得するのが先か、という競争になってしまうからです。
また、ループ中でメッセージを投げ続けるのも、動作が不安定になる原因になりますので、危険な処理です。
No.2のpopesyu様の回答のように、電卓を自作するほうが良いかと思います。
ご回答ありがとうございました。
電卓を閉じる寸前に表示されていた内容を取得したかったのですが、あきらめました。でもspace_needlさんのおっしゃるような「内容の取得」ボタンを使用して取得することにしました。結果、上手くいきました。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 時計・電卓・電子辞書 電卓の使い方について伺います。 下記のような計算を電卓でする場合、 電卓のボタンはどのように押せばよ 3 2022/04/12 19:42
- 時計・電卓・電子辞書 電卓 4 2022/04/29 06:26
- 日用品・生活雑貨 ヘバーデン結節と電卓 1 2022/05/29 17:50
- 時計・電卓・電子辞書 電卓この関数電卓を使ってsin 14、2°を計算したいんですけど14、2の°の出し方がわかりません。 3 2023/07/26 13:44
- 時計・電卓・電子辞書 電卓 2 2023/04/20 21:44
- 数学 冪乗の計算について教えてください 5 2023/04/22 22:36
- 計算機科学 この計算合っていますか? 1 2022/07/28 06:27
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
- 夫婦 昨日旦那と口論になり、旦那にいつも使っていた電卓を壊されてしまいました。旦那はむずかしい計算をしない 5 2023/02/05 21:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
CTなどでいう,ウィンドウレベ...
-
ウィンドウハンドルって途中で...
-
ラジオボタンの初期指定
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
勝手にウィンドウが開いて止ま...
-
MFC ダイアログ上のID取得につ...
-
Console.WriteLine で表示されない
-
エクセルで複数のウィンドウ枠...
-
EnumChildWindowsの使い方(VBA)
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
Alt+P,Alt+NをPostmessageで送...
-
他のアプリケーションの終了処理
-
ダイアログをスクロールさせるには
-
Excel VBA での画面最大化のロ...
-
C#でファイル転送プログラムWin...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
Vba LongPtrについて教えてくだ...
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
ラジオボタンの初期指定
-
「&HFFFF」「&H1A」とは?
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
UWSCで特定のChromeのタブをア...
-
ボタンのハンドルウィンド取得...
-
ExcelVBAでAPIを使って外部ウイ...
おすすめ情報