
環境:Win XP,VB.net 2003
sendmessageを使用して電卓を閉じるプログラムを作成しているのですが、どうもあと少しでうまくいかないので質問させていただきます。
Dim hfwnd As Long
hfwnd = FindWindowEx(0, 0, "SciCalc", "電卓")
If FindWindowEx(0, 0, vbNullString, "電卓") Then
MsgBox("電卓動いてます。")
Call SendMessage(hfwnd, WM_CLOSE, 0&, 0&)
end if
この時点で電卓が開いているかどうかの判定はうまくいっています。
ですが、sendmessageのところでうまくいっておらず、hfwndに取得したウインドハンドルが代入されていない?と思いGetWindowTextでタイトル取得してみたところ空白でした。電卓をSendMessageを使用して終了させるにはどのようにしたら良いのでしょうか?
No.2ベストアンサー
- 回答日時:
> クラス名を同じにしても電卓をいうキャプションを持っているのがcalcだけの為、結局は同じ結果になってしまうのです。
貴方のおっしゃりたい事は分かりますが・・・
でしたら、ちゃんと、同じにしたコードを提示してください。
それから、「hfwnd」の値は確認されましたか?ちゃんと「有効な値」になってますか?
> おそらく問題はifで判断している時は成功しているということは、ハンドルは正常に持ってきているので
このIf文で分かるのは、『「FindWindowEx」の結果が「True」と判断されるものである。』と言うだけであって、
『ハンドルは正常』かどうかは分からないのでは?
#全然関係ないWindowのハンドルを持ってきている可能性だってあります。
#いや、実際「GetWindowTextでタイトル取得してみたところ空白でした。」って事は、全然関係ないハンドルって事でしょうね。
「FindWindowEx」や「SendMessage」の宣言はどうしてますか?
また、
> Dim hfwnd As Long
となってますが、WindowのハンドルってIntegerの範囲なのでは・・・
#VB6までなら、Long型で良かったですが、
#VB.NETでは、型の有効範囲が変わってますのでLongだと誤動作する可能性が・・・
#特に「FindWindowEx」や「SendMessage」の宣言でLong型にしていると、
#ほぼ確実に誤動作を起こすでしょうね。
ご回答ありがとうございました。
無事プログラムを完成することができました。
原因はコードを書く際の雑さで、APIをあまり使用したことがない為
同じAPIに対しての宣言を複数していたためでした;
適切な回答本当にありがとうございました。
No.3
- 回答日時:
私もdsuekichiさんと同じことを感じました。
longや使用しているAPIを見ると、VB6でやっているようなイメージですねー
強制終了でよいのであれば、APIを使用しないでも、フレームだけでできちゃいます。
でもやはり、通常終了がよいと思うので、APIを利用したサンプルをあげておきます。
Imports System.Runtime.InteropServices
Module Module1
Public Const WM_CLOSE As Integer = &H10
<DllImport("user32")> _
Private Function SendMessage( _
ByVal hwnd As IntPtr, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As Integer _
) As Integer
End Function
Sub Main()
For Each l_proc As Process In Process.GetProcessesByName("calc")
If l_proc.MainWindowTitle.Equals("電卓") Then
'通常終了
Call SendMessage(l_proc.MainWindowHandle, WM_CLOSE, 0, 0)
'↓強制終了でもよないらこれ
'l_proc.Kill()
End If
Next
End Sub
End Module
ご回答ありがとうございます。
今回のプログラム作成でコードを記述する際の記述構成の大切さと
VB.NETとVB6の大きな違いを改めて感じることができました。
本当にありがとうございました。
No.1
- 回答日時:
> この時点で電卓が開いているかどうかの判定はうまくいっています。
との事ですが、その確認に使用している
> If FindWindowEx(0, 0, vbNullString, "電卓") Then
の第三引数には「vbNullString」を使用してるのに、
実際にクローズを行う、
> Call SendMessage(hfwnd, WM_CLOSE, 0&, 0&)
で対称にしている「hfwnd」を参照する、
> hfwnd = FindWindowEx(0, 0, "SciCalc", "電卓")
の第三引数が「"SciCalc"」なのは、何故ですか?
同じ条件にしないと意味が無いのではありませんか?
この回答への補足
参考意見ありがとうございます。
クラス名を同じにしても電卓をいうキャプションを持っているのがcalcだけの為、結局は同じ結果になってしまうのです。
おそらく問題はifで判断している時は成功しているということは、ハンドルは正常に持ってきているのでhfwndの変数に代入する時点で問題が起きているのではないかと思われます。それかSendMessageの問題かですね・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 時計・電卓・電子辞書 電卓 5 2023/08/16 05:38
- 時計・電卓・電子辞書 電卓 4 2022/04/29 06:26
- バッテリー・充電器・電池 電卓のボタン電池種類について。 電卓の内部基板上に、ボタン電池を挟んでとめる電池ホルダーが、ハンダ接 4 2022/11/05 17:03
- 時計・電卓・電子辞書 関数電卓についての質問です 大学で食品について学んでいるのですが 学生実験で関数電卓が必要と言われま 7 2022/10/07 16:47
- 夫婦 昨日旦那と口論になり、旦那にいつも使っていた電卓を壊されてしまいました。旦那はむずかしい計算をしない 5 2023/02/05 21:09
- バッテリー・充電器・電池 電卓の内部基板上に、ボタン電池を挟んでとめるホルダーが、ハンダ接合で付けられています。 使用したいボ 1 2022/11/05 08:17
- 時計・電卓・電子辞書 電卓の使い方について伺います。 下記のような計算を電卓でする場合、 電卓のボタンはどのように押せばよ 3 2022/04/12 19:42
- 夫婦 1、ジャージの裾あげについて質問です。 私は、ジャージやズボンを買うとき、お店に裾あげをお願いしてい 1 2023/02/06 15:34
- 簿記検定・漢字検定・秘書検定 簿記検定用の電卓って普通の電卓とは違うんですか?関数電卓を持ってますが簿記検定3級に対応できますか? 1 2022/08/24 14:27
- 時計・電卓・電子辞書 電卓 2 2023/04/20 21:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスでコンテキス...
-
タスクバーの並び替え
-
VB.netでFindWindowExやると・...
-
Buffer overrun, data ..
-
マウスフックについて
-
マウスの左クリックの内容を知...
-
DLL VB Wheel ホイール
-
マウスホイールをフックしたい
-
WINDOWを最前面に出したい!!
-
vbaから他のアプリを終了
-
グローバルフックについて
-
モーダルウインドウとモードレ...
-
MQプログラミング MQGetの手法...
-
キーボード・フックのアプリを...
-
HTMLの書換方法を教えてください。
-
メッセージハンドラ
-
MFC利用/WinMainCRTStartup
-
ウィンドウプロシージャの書き...
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
msgboxの表示位置
-
SendMessage で ESC など
-
VBAでコントロールのハンドルを...
-
SetWindowText関数について
-
VBA 複数セルが空白なら印刷さ...
-
点滅で知らせる方法
-
チェックボックスのキーダウン...
-
デスクトップ上のアイコンの位...
-
CloseHandle()
-
メッセージループについて
-
メッセージハンドラ
-
VB.netでSendMessageを使用して...
-
システム例外のメッセージを変...
-
Excel VBA で外部アプリケーシ...
-
マウスの右クリック+Shiftキー...
-
キーボード・フックのアプリを...
-
windowsメールスロットについて...
おすすめ情報