[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/02/10(Sat) 01:23
投稿者名:sakusaku
Eメール:
URL :
タイトル:
SendMassageの変数(引数?)について
お世話になっております

Private Declare Function SendMassage Lib "user32" _
    Alias "SendMassageA" (ByVal hwnd As Long, _
    ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long

のhwndを他の変数(引数?)に変えるとうまく動かなくなるのでしょうか?
ちなみにwnなどに変えると実行時エラー435が出ます

同プログラム内でホットキーを使うので
Public Declare Function SetWindowLong Lib "user32" _
    Alias "SetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function CallWindowProc Lib "user32" _
    Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
    ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Declare Function RegisterHotKey Lib "user32" _
    (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long

Public Declare Function UnregisterHotKey Lib "user32" _
    (ByVal hwnd As Long, ByVal id As Long) As Long

などがある関係でSendMassageの方をhwndのままにしておくと
コンパイルエラー
関数またはインターフェイスが予約されているか、またはVisualBasicで
サポートされていないオートメーションタイプが関数で使用されています
とエラーになっってしまいます

ホットキー関係のコードをすべて削除すると正常にSendMassageが送られます
やりたいことはあるアプリケーションにWM_CLOSEを送りたいと思っています
もしだめなようならアプリの×ボタンをカーソル移動で押させる方法で
やろうと思っています(そのコードはできてますがスマートじゃないので
なんとかならないかと思っています)

vb6,WinXP
よろしくお願いします

投稿時間:2007/02/10(Sat) 10:32
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: SendMassageの変数(引数?)について
関数の宣言部分より使い方に問題があるのでは。
変数が重複して使用されているとか?

投稿時間:2007/02/10(Sat) 11:36
投稿者名:sakusaku
Eメール:
URL :
タイトル:
Re^2: SendMassageの変数(引数?)について
早速のご回答ありがとうございます

> 関数の宣言部分より使い方に問題があるのでは。
> 変数が重複して使用されているとか?

いまいち宣言部分というのがまだよくわかっておりません

Private Declare Function SendMassage Lib "user32" _
    Alias "SendMassageA" (ByVal hwnd As Long, _
    ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long

のByVal hwnd As Longの部分はhwndという変数をLong型で宣言している
ということですか?
もしそうでしたらhwndはSendMassageとSetWindowLong Libと
CallWindowProc LibとRegisterHotKey LibとUnregisterHotKey Libで
重複していることになってしまいます

ですのでSendMassageのhwndを他の変数に変えたいのですが
変えるとエラーになる・・・ということなんですが

甚大な勘違いをしていたら申し訳ありません
よろしくお願いします

投稿時間:2007/02/10(Sat) 13:10
投稿者名:sakusaku
Eメール:
URL :
タイトル:
Re^3: SendMassageの変数(引数?)について
> 関数の宣言部分より使い方に問題があるのでは。
で、ちょっと思い当たりまして、正常にSendMassageが
動作しているコードからコピペしてみたところ
動くようになってしまいました。
はっきりとした原因が突き止められないままですが
スペルミスでもあったのかなという結論に達しました。
お騒がせしました

で、関連というか追加の質問になりますが
hwnd = FindWindow(vbNullString, "*************")
    If hwnd <> 0 Then
        ret = SendMessage(hwnd, WM_CLOSE, 0&, 0&)
というコードでアプリを閉じようと思っていたのですが
終了します。よろしいですか?みたいな確認の小窓が開いて
OKを押さないとアプリが閉じないのですが、
ret = SendMessage(hwnd, WM_CLOSE, 0&, 0&)のところで
アプリが閉じるのを待っているようで小窓を閉じるための
コードが実行できない状態となっています
アプリの終了を待たずに次のコードを実行させたりは
できないのでしょうか?

よろしくお願いします

投稿時間:2007/02/10(Sat) 14:00
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: SendMassageの変数(引数?)について
> アプリの終了を待たずに次のコードを実行させたりは
> できないのでしょうか?

どのアプリをどのように使用してどのような状態で終了させようとしているのか
解りませんが、アプリ側で確認が必要だからメッセージがでているのであって
そのメッセージがでないようにしてから終了するのが常套手段かと思うのですが。
後で問題が起きてもいいのなら、プロセスを取得して強制終了すればできます。

投稿時間:2007/02/11(Sun) 17:22
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^4: SendMassageの変数(引数?)について
> ret = SendMessage(hwnd, WM_CLOSE, 0&, 0&)のところで
> アプリが閉じるのを待っているようで小窓を閉じるための
> コードが実行できない状態となっています
> アプリの終了を待たずに次のコードを実行させたりは
> できないのでしょうか?

SendMessage の代わりに、PostMessage では、どうでしょうか?

投稿時間:2007/02/11(Sun) 21:44
投稿者名:sakusaku
Eメール:
URL :
タイトル:
[解決]Re^5: SendMassageの変数(引数?)について
皆様ありがとうございます

>  SendMessage の代わりに、PostMessage では、どうでしょうか?

無事PostMessageでうまくいきました
ありがとうございました