HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0228
こいる外部アプリのウィンドウメッセージを横取りしたい4解決


こいる

リンク

2020/2/28(Fri) 15:40:03|NO.89573

外部アプリのウィンドウメッセージを横取りしたいです。


SetWindowsHookExでメッセージをフックすればいいということまでは分かったのですが、
いまいちどう使えばいいのかが分かりません。(特に引数)


それっぽいスレッドは見つけたのですが、
メッセージをフックする方法は書かれていなかったです。

http://hsp.tv/play/pforum.php?mode=pastwch&num=746
http://hsp.tv/play/pforum.php?mode=pastwch&num=84110


それ以外に調べても、C言語のや、DLLを作るようなものばかりで全く分かりませんでした。



この記事に返信する


あらや

リンク

2020/2/28(Fri) 19:22:02|NO.89578

私のソースの場合は
hhook = SetWindowsHookEx( WH_GETMESSAGE, clbkptr, NULL, 対象のスレッド );
こんな感じにすれば特定のアプリのメッセージを取れますが。。。

取った後の処理をちゃんとやらないとキー操作や、
終了ができないウィンドウが出来てしまう可能性があります。

最低でもウィンドウプロシージャの知識が無いと厳しいのではないかと思います。



こいる

リンク

2020/2/28(Fri) 21:15:27|NO.89580

返信ありがとうございます。
分からないことだらけなので質問させていただきます。


メッセージを横取りした場合、
そのメッセージの処理は、全て横取りした側(自分)が代わりにやらないといけないのですか?


特定のウィンドウの、特定のメッセージだけ横取りする
ということをしたいのですが、可能ですか?
また、可能ならば、どうすればできるのでしょうか?


「ウィンドウプロシージャ」とは聞きなれない言葉なのですが、どんなものなのですか?
(調べたところ、受け取ったメッセージを処理する関数らしいですが、メッセージの処理の仕組みを知れということでしょうか?)
また、知識を付けるとしたら、どんなことを、どうやって学習するべきでしょうか?


これは返信内容は関係ないのですが、
いろいろ調べていると「コールバック関数」というワードをよく見かけました。

これは一体どんなものなのですか?
また、どんなことができるのしょうか?


ご教授ください。



あらや

リンク

2020/2/28(Fri) 23:29:49|NO.89585

まず訂正を……
>hhook = SetWindowsHookEx( WH_GETMESSAGE, clbkptr, NULL, 対象のスレッド );
ミスしてました。
コールバックの箇所をDLL化しないといけないようです。
HSPだけでローカルフックは厳しいかもしれません。



>メッセージを横取りした場合、
>そのメッセージの処理は、全て横取りした側(自分)が代わりにやらないといけないのですか?
その通りですが、
横取りしたメッセージを再度そのまま流す(元のウィンドウに返す)事で
済む場合もあります。



>特定のウィンドウの、特定のメッセージだけ横取りする
>ということをしたいのですが、可能ですか?
>また、可能ならば、どうすればできるのでしょうか?
先の訂正でフックは難しそうなので
GetMessage関数やPeekMessage関数を使えば出来るかもしれません。



>「ウィンドウプロシージャ」とは聞きなれない言葉なのですが、どんなものなのですか?
ウィンドウのコールバック関数(後述)だと思ってください。
ウィンドウプロシージャは、
HSPで言うoncmdでウィンドウメッセージを処理するための物だと考えてください。
また、ウィンドウプロシージャの勉強は
C言語などでウィンドウを作る所からやった方がわかりやすいと思います。



>いろいろ調べていると「コールバック関数」というワードをよく見かけました。
>これは一体どんなものなのですか?
>また、どんなことができるのしょうか?
言葉にすると「ほかの関数に引数を渡すための関数」という意味の分からない事になります。
HSPだけだと馴染みが薄いですが、APIを使うと時々出てきます。

よく見るのは先のウィンドウプロシージャ、
EnumWindow関数を使用する場合、
フックなどもコールバック関数を使っています。

関数を使う場合に、その関数の中で更に何か別の処理を行なう場合に必要な関数
という感じにちょっと面倒な何かくらいに覚えておいてください。



こいる

リンク

2020/2/29(Sat) 10:07:53|NO.89589

返信ありがとうございます。

返信内容をみて、いろいろ調べてみたりして、
メッセージフックをするのは相当難しいことが分かったので、諦めようと思います。

良い勉強になりました。
お付き合いいたがきありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.