C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 指定した画像にマウスカーソルを移動させるには


(過去ログ 123 を表示中)

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■73652 / inTopicNo.1)  指定した画像にマウスカーソルを移動させるには
  
□投稿者/ xlink (1回)-(2014/10/22(Wed) 14:08:20)

分類:[.NET 全般] 

画像が表示されたらそれを認識してそこにマウスカーソルを移動するコードを教えてください。できれば、移動させた後直ぐに元の位置にマウスカーソルを移動するようにしたいです。
引用返信 編集キー/
■73654 / inTopicNo.2)  Re[1]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ 魔界の仮面弁士 (152回)-(2014/10/22(Wed) 14:18:06)
No73652 (xlink さん) に返信
> 画像が表示されたら
どんな画像が、どこに表示されたときですか?
HTML ページ? ゲームウィンドウ? 画像の内容は固定? 可変?
可変だとしたら、除外したい画像と判定させたい画像との判別は必要?

> それを認識して
今回の質問の題名からすると、画像認識のためのプログラムについての
質問ではなく、マウスカーソル移動のためのプログラムの質問なのですね?

> そこにマウスカーソルを移動するコードを教えてください。
Cursor.Position プロパティに、移動先の座標を代入すれば OK です。

> できれば、移動させた後直ぐに元の位置にマウスカーソルを移動するようにしたいです。
「直ぐ」って何ミリ秒ぐらい後ですか?
待たずに続けて移動した場合、移動したことを検知できないと思いますが…。
引用返信 編集キー/
■73655 / inTopicNo.3)  Re[2]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (4回)-(2014/10/22(Wed) 16:05:30)
素早い返信ありがとうございます。
No73654 (魔界の仮面弁士 さん) に返信
> ■No73652 (xlink さん) に返信
>>画像が表示されたら
> どんな画像が、どこに表示されたときですか?
> HTML ページ? ゲームウィンドウ? 画像の内容は固定? 可変?
> 可変だとしたら、除外したい画像と判定させたい画像との判別は必要?
なんと言えば伝わるのかわからないのですが、判別はなしで
とにかくその画像が見つかったらそれに移動させたいです、
例えばfrom 1というマウスカーソルを指定した画像へ移動させるプログラムとfirefoxなどブラウザがあります。ブラウザでその指定された画像(ボタン)をあらかじめ表示させてから、from 1のbutton 1をクリックすると指定された画像にマウスカーソルを移動させるということです。
>>それを認識して
> 今回の質問の題名からすると、画像認識のためのプログラムについての
> 質問ではなく、マウスカーソル移動のためのプログラムの質問なのですね?
画像は認識させています。(読み込み)
>
>>そこにマウスカーソルを移動するコードを教えてください。
> Cursor.Position プロパティに、移動先の座標を代入すれば OK です。
座標でではなく画像を読み込んで指定された画像にマウスカーソルを移動させたいのですが。
指定された画像の位置はいつも変動するので座標は無理なのでは。やってみます。
>
>>できれば、移動させた後直ぐに元の位置にマウスカーソルを移動するようにしたいです。
> 「直ぐ」って何ミリ秒ぐらい後ですか?
> 待たずに続けて移動した場合、移動したことを検知できないと思いますが…。
最小でお願いします。もうbutton 1をくりっくしたら瞬間的に移動させるぐらいの速さで。
検知のほうはわけあって大丈夫です。


あと、画像の読み込みなんですが
パソコンのファイルなどから読み込むのではなく
プログラム自体から読み込む(プログラムに直接仕込む?)やり方で読み込みたいのですが、コードを教えてください。
引用返信 編集キー/
■73656 / inTopicNo.4)  Re[3]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (5回)-(2014/10/22(Wed) 16:14:35)
それといい忘れましたが
分類はvbになります。
引用返信 編集キー/
■73657 / inTopicNo.5)  Re[4]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (6回)-(2014/10/22(Wed) 16:19:28)
画像はjpgです。
どこに表示されたとき、ですか。。
基本的にはいつも使用するようなブラウザに表示されたときです。
表示される位置は毎回動かしたりするので固定ではなく変わります。
引用返信 編集キー/
■73658 / inTopicNo.6)  Re[3]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ 魔界の仮面弁士 (153回)-(2014/10/22(Wed) 18:23:31)
No73655 (xlink さん) に返信
> なんと言えば伝わるのかわからないのですが
何のために、その機能を実現しようとしているかを説明してみては如何でしょうか。
カーソル位置を移動するプログラムというのは「手段」に過ぎず、「目的」では無いですよね。

> 座標でではなく画像を読み込んで指定された画像にマウスカーソルを移動させたいのですが。
認識した画像の座標を調べ、それをカーソルに指定するようにしてみてください。


> 指定された画像の位置はいつも変動するので座標は無理なのでは。やってみます。
変動した後の座標を随時指定させましょう。


> 最小でお願いします。
マウスを動かす速度が速くなると、途中の経路のカーソルポインタの描画は行われませんし、
MouseMove 等のイベント通知も間引かれますが、その点は問題ないでしょうか?


この通知間隔は、マウス自身の解像度と、コントロールパネルのマウス設定、
そして画面描画処理の Windows メッセージによって変化しますので、
何を持って「最小」と呼ぶのかは微妙なところです。



/*** Sample.js ***/
import System.Drawing;
import System.Windows.Forms;
var originalPosition:Point = Cursor.Position; // 開始点を覚えておく
for(var xy:int=0; xy<1000; xy++) {
 Cursor.Position = new Point(xy, xy); // 左上から右下までウェイト無しで 1pxずつ移動
}
Cursor.Position = originalPosition; // 最初の位置に戻す


> プログラム自体から読み込む(プログラムに直接仕込む?)やり方で読み込みたいのですが、コードを教えてください。
リソースに埋め込んでおいては如何でしょう。
引用返信 編集キー/
■73659 / inTopicNo.7)  Re[4]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ 魔界の仮面弁士 (154回)-(2014/10/22(Wed) 18:31:59)
No73656 (xlink さん) に返信
> それといい忘れましたが
> 分類はvbになります。

見逃してた…。
No73658 のコードを VB 版で再掲:

'
' Sample.vb
'
Imports System.Drawing
Imports System.Windows.Forms
Public Module Sample
 Public Sub Main()
  Dim originalPosition As Point = Cursor.Position '開始点を覚えておく
  For xy As Integer = 0 To 999
   Cursor.Position = New Point(xy, xy) '左上から右下までウェイト無しで 1pxずつ移動
  Next
  Cursor.Position = originalPosition '最初の位置に戻す
 End Sub
End Module
引用返信 編集キー/
■73664 / inTopicNo.8)  Re[4]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (1回)-(2014/10/22(Wed) 19:48:50)
No73658 (魔界の仮面弁士 さん) に返信
> ■No73655 (xlink さん) に返信
もう少しで完成しそうです!
>>なんと言えば伝わるのかわからないのですが
> 何のために、その機能を実現しようとしているかを説明してみては如何でしょうか。
> カーソル位置を移動するプログラムというのは「手段」に過ぎず、「目的」では無いですよね。
おっしゃるとおりです。ボタンを押すとサイトのボタンを左クリックするためにです。
かつマウスポインタをとられず、他の作業に影響をあたえないように。
>
>>座標でではなく画像を読み込んで指定された画像にマウスカーソルを移動させたいのですが。
> 認識した画像の座標を調べ、それをカーソルに指定するようにしてみてください。
すみません。ここがわかりません。mouse_move(x,y)をつかうんですかね。。
りません。コードを掲示お願いいたします。ここがわかれば一件落着です。
>
>
>>指定された画像の位置はいつも変動するので座標は無理なのでは。やってみます。
> 変動した後の座標を随時指定させましょう。
よくわかりません。こちらも例のコードを掲示お願いいたします。
>
>
>>最小でお願いします。
> マウスを動かす速度が速くなると、途中の経路のカーソルポインタの描画は行われませんし、
> MouseMove 等のイベント通知も間引かれますが、その点は問題ないでしょうか?
問題ないです。マウスポインタはとられたくないようにしたいので。
>
>
> この通知間隔は、マウス自身の解像度と、コントロールパネルのマウス設定、
> そして画面描画処理の Windows メッセージによって変化しますので、
> 何を持って「最小」と呼ぶのかは微妙なところです。
さっきデバックしてためしに実行しましたが完璧です。
ありがとうございます。
>
>
>
> /*** Sample.js ***/
> import System.Drawing;
> import System.Windows.Forms;
> var originalPosition:Point = Cursor.Position; // 開始点を覚えておく
> for(var xy:int=0; xy<1000; xy++) {    
>  Cursor.Position = new Point(xy, xy); // 左上から右下までウェイト無しで 1pxずつ移動
> }
> Cursor.Position = originalPosition; // 最初の位置に戻す
>
>
>>プログラム自体から読み込む(プログラムに直接仕込む?)やり方で読み込みたいのですが、コードを教えてください。
> リソースに埋め込んでおいては如何でしょう。
やってみますね
引用返信 編集キー/
■73668 / inTopicNo.9)  Re[5]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ 魔界の仮面弁士 (157回)-(2014/10/22(Wed) 20:50:43)
No73664 (xlink さん) に返信
>> 何のために、その機能を実現しようとしているかを説明してみては如何でしょうか。
>> カーソル位置を移動するプログラムというのは「手段」に過ぎず、「目的」では無いですよね。
> ボタンを押すとサイトのボタンを左クリックするためにです。
それも目的ではなく「手段」ですよね。
そもそも何のために、その操作が必要なのでしょうか?


(1)「ボタンを左クリック」しなければならないのは何故か?
 ・「画像」にマウスカーソルを移動することと、「サイトのボタンを左クリック」することの関係性は?
 ・ボタン押下時に行われる処理を呼び出す方法は、ボタンクリック以外に存在しないのか?


(2)ボタンクリック相当の処理を実行するために、マウスカーソルの移動は本当に必要なのか?
 ・HTML DOM の submit メソッドや click メソッドは使えないのか?
 ・IAccessible インターフェイスの DoDefaultAction メソッドは?
 ・HTML コンテンツではなく、OS 標準のボタンだとしたら、座標に関係なく直接 PostMessage できないか?
  http://www.ne.jp/asahi/hishidama/home/tech/vcpp/clickdlg.html



>>認識した画像の座標を調べ、それをカーソルに指定するようにしてみてください。
> すみません。ここがわかりません。
「検知のほうはわけあって大丈夫」だったのでは…?


> mouse_move(x,y)をつかうんですかね。。
mouse_move とやらを選択した理由が分からないので、なんとも判断しかねます。


> りません。コードを掲示お願いいたします。ここがわかれば一件落着です。
いや、検知方法すら分からない画像の座標を調べろと言われても困るというか…。(^^;

内容次第では、動作検証用のサンプル程度のものであれば提供できるかも知れませんが、
元アプリの仕様がほとんど明かされていない現状では、内容が一切分かりません。
あまりにも情報不足で、協力しようにも、そもそもコードを提示しようが無かったりします。

なお、たとえ仕様が明かされたとしても、それが技術的な「質問」の体裁ではなく、
「作成依頼」として行われるのだとしたら、とりあえずお断りしておきます。


>>> 指定された画像の位置はいつも変動するので座標は無理なのでは。やってみます。
>> 変動した後の座標を随時指定させましょう。
> よくわかりません。こちらも例のコードを掲示お願いいたします。
画像の検知はどのようにして行われているのでしょうか?


> 問題ないです。マウスポインタはとられたくないようにしたいので。
画像のオブジェクトにすら、マウス操作を検知させたくないのだとしたら、
そもそも何のために、カーソルを移動させようとしているのでしょうか?


> さっきデバックしてためしに実行しましたが完璧です。
特定の座標に移動し、ただ戻るだけならば、
  xy = Cursor.Position
  Cursor.Position = 移動先の座標
  Cursor.Position = xy
となりますので、For ループも不要ですね。
引用返信 編集キー/
■73671 / inTopicNo.10)  Re[6]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (3回)-(2014/10/22(Wed) 21:36:59)
No73668 (魔界の仮面弁士 さん) に返信
> ■No73664 (xlink さん) に返信
> >> 何のために、その機能を実現しようとしているかを説明してみては如何でしょうか。
> >> カーソル位置を移動するプログラムというのは「手段」に過ぎず、「目的」では無いですよね。
>>ボタンを押すとサイト(ゲームでした)のボタンを左クリックするためにです。
> それも目的ではなく「手段」ですよね。
> そもそも何のために、その操作が必要なのでしょうか?
最近買ったオフゲーでつりをプログラムで自動操作させてレベルアップさせるためです。
これが目的になります。
なげる→つる→押す→とじるの繰り返しの動作です
>
>
> (1)「ボタンを左クリック」しなければならないのは何故か?
>  ・「画像」にマウスカーソルを移動することと、「サイト(ゲーム)のボタンを左クリック」することの関係性は?
>  ・ボタン押下時に行われる処理を呼び出す方法は、ボタンクリック以外に存在しないのか?
つりをプログラムで自動操作させてレベルアップさせるためです。
移動させないとゲームのボタンを左クリックできないのではと判断しまして。
>
>
> (2)ボタンクリック相当の処理を実行するために、マウスカーソルの移動は本当に必要なのか?
>  ・HTML DOM の submit メソッドや click メソッドは使えないのか?
>  ・IAccessible インターフェイスの DoDefaultAction メソッドは?
>  ・HTML コンテンツではなく、OS 標準のボタンだとしたら、座標に関係なく直接 PostMessage できないか?
>   http://www.ne.jp/asahi/hishidama/home/tech/vcpp/clickdlg.html
マウスカーソルの移動がないとおすボタンはflashなので指定された画像にマウスカーソルを移動させ、クリックするという理由です。この方法で大丈夫です。
>
>
>
> >>認識した画像の座標を調べ、それをカーソルに指定するようにしてみてください。
>>すみません。ここがわかりません。
> 「検知のほうはわけあって大丈夫」だったのでは…?
ここでいう検知というのはマウスカーソルの移動の確認だと解釈していたのですが違いますか?
>
>
>>mouse_move(x,y)をつかうんですかね。。
> mouse_move とやらを選択した理由が分からないので、なんとも判断しかねます。
これは座標でマウスカーソルを移動させるんですが、これを画像指定でマウスカーソルを移動させることはできないのかと疑問に思いまして。。
>
>
>>りません。コードを掲示お願いいたします。ここがわかれば一件落着です。
> いや、検知方法すら分からない画像の座標を調べろと言われても困るというか…。(^^;
>
> 内容次第では、動作検証用のサンプル程度のものであれば提供できるかも知れませんが、
> 元アプリの仕様がほとんど明かされていない現状では、内容が一切分かりません。
> あまりにも情報不足で、協力しようにも、そもそもコードを提示しようが無かったりします。
>
> なお、たとえ仕様が明かされたとしても、それが技術的な「質問」の体裁ではなく、
> 「作成依頼」として行われるのだとしたら、とりあえずお断りしておきます。
わからないところを援助させているつもりです。
>
>
> >>> 指定された画像の位置はいつも変動するので座標は無理なのでは。やってみます。
> >> 変動した後の座標を随時指定させましょう。
>>よくわかりません。こちらも例のコードを掲示お願いいたします。
> 画像の検知はどのようにして行われているのでしょうか?
あらかじめリソースになげる.bmpを埋めこめさせて
Dim bmp As New Bitmap(Me.GetType(), "なげる.bmp")
このようにしましたがbutton 1を押すと
リソース 'つる.bmp' がクラス 'WindowsApplication1.Form1' に見つかりません。
とエラーがでました。
そもそもこのような検知でいけるのでしょうか。
>
>
>>問題ないです。マウスポインタはとられたくないようにしたいので。
> 画像のオブジェクトにすら、マウス操作を検知させたくないのだとしたら、
> そもそも何のために、カーソルを移動させようとしているのでしょうか?
なげるぼたんを左クリックさせるためです。
>
>
>>さっきデバックしてためしに実行しましたが完璧です。
> 特定の座標に移動し、ただ戻るだけならば、
>   xy = Cursor.Position
>   Cursor.Position = 移動先の座標
>   Cursor.Position = xy
> となりますので、For ループも不要ですね。
引用返信 編集キー/
■73676 / inTopicNo.11)  Re[5]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (5回)-(2014/10/22(Wed) 22:05:05)
No73659 (魔界の仮面弁士 さん) に返信

> >>認識した画像の座標を調べ、それをカーソルに指定するようにしてみてください。
>>すみません。ここがわかりません。
> 「検知のほうはわけあって大丈夫」だったのでは…?
ここでいう検知というのはマウスカーソルの移動の確認だと解釈していたのですが違いますか?
改めましてすみません。
画像を認識させる方法(今の方法であっているのかわからないので)、画像の座標(変動します)を調べる方法、それをカーソルに指定する方法を教えてください。

何度もすみません。。
引用返信 編集キー/
■73677 / inTopicNo.12)  Re[7]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ 魔界の仮面弁士 (159回)-(2014/10/22(Wed) 22:09:33)
2014/10/22(Wed) 22:12:46 編集(投稿者)

No73671 (xlink さん) に返信
> 最近買ったオフゲーでつりをプログラムで自動操作させてレベルアップさせるためです。
その手の BOT の利用には嫌悪感を覚えるタチですので、先のコード作成依頼に
対する協力は、一切差し控えさせてもらいます。――技術的な話にのみ参加。


> ここでいう検知というのはマウスカーソルの移動の確認だと解釈していたのですが違いますか?

No73654 の「どんな画像が、どこに表示されたとき」かを検知するという話です。

その画像の上にカーソルが置かれたかどうかを、Flash 側が検知したかどうか、ではなく。



>>>> 認識した画像の座標を調べ、それをカーソルに指定するようにしてみてください。
>>> mouse_move(x,y)をつかうんですかね。。
>>mouse_move とやらを選択した理由が分からないので、なんとも判断しかねます。
> これは座標でマウスカーソルを移動させるんですが、これを画像指定でマウスカーソルを移動させることはできないのかと疑問に思いまして。。

私の提案は、
 「ある画像の座標を調べる」→「その位置に対して Cursor.Position を設定する」
という流れなので、そのために「座標を調べる行為」が必要になってきます。

その手法は使わずに、
 「mouse_move というマウス移動の命令を使って、画像指定でカーソルを移動させる」
という方法を探しているのだとしたら、私には思いつきません。誰か他の人の回答に期待。


> あらかじめリソースになげる.bmpを埋めこめさせて
であれば、
 Dim bmp As Bitmap = My.Resources.なげる
ですね。


> そもそもこのような検知でいけるのでしょうか。
用語としては検知ではなく、「リソース画像の取得」かな…。
引用返信 編集キー/
■73678 / inTopicNo.13)  Re[5]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ tinq (24回)-(2014/10/22(Wed) 22:21:54)
HTMLでしたら座標の検出やクリックは大して難しくありませんが、Flashとなると難易度は上がります。
多分、独自にプログラムを書くなりして画像の座標を割り出す必要があるのではないかと思います。

とりあえず、いくつも同時にやると混乱するので
・画像検出
・クリック
・リソース埋め込み
と分けて、順にやっていくのがいいかと思います。
引用返信 編集キー/
■73681 / inTopicNo.14)  Re[6]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (8回)-(2014/10/22(Wed) 22:36:56)
>>私の提案は、
 >>「ある画像の座標を調べる」→「その位置に対して Cursor.Position を設定する」
>>という流れなので、そのために「座標を調べる行為」が必要になってきます。
すみません。この手法がいいです!この流れのコードを教えてください。。

>>HTMLでしたら座標の検出やクリックは大して難しくありませんが、Flashとなると難易度は上がります。
>>多分、独自にプログラムを書くなりして画像の座標を割り出す必要があるのではないかと思います。
そうですね。作者の意図によって仕様が変動しちゃうのでそのときには修正が必要ですね。

>>とりあえず、いくつも同時にやると混乱するので
>>・画像検出
>>・クリック
>>・リソース埋め込み
>>と分けて、順にやっていくのがいいかと思います。

はいわかりました。今は画像検出ですね。
「ある画像の座標を調べる」→「その位置に対して Cursor.Position を設定する」ですかね。

引用返信 編集キー/
■73683 / inTopicNo.15)  Re[7]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ yoh2 (1回)-(2014/10/22(Wed) 23:48:44)
>>(2)ボタンクリック相当の処理を実行するために、マウスカーソルの移動は本当に必要なのか?
>> ・HTML DOM の submit メソッドや click メソッドは使えないのか?
>> ・IAccessible インターフェイスの DoDefaultAction メソッドは?
>> ・HTML コンテンツではなく、OS 標準のボタンだとしたら、座標に関係なく直接 PostMessage できないか?
>>  http://www.ne.jp/asahi/hishidama/home/tech/vcpp/clickdlg.html
> マウスカーソルの移動がないとおすボタンはflashなので指定された画像にマウスカーソルを移動させ、クリックするという理由です。この方法で大丈夫です。

Flashであっても、Flash を表示させているウィンドウに対して、クリックすべきボタンの
座標を指定した WM_LBUTTONDOWN と WM_LBUTTONUP を PostMessage すればよいです。
そこで指定させる座標はマウスポインタの位置と無関係なものでもよいので
マウスポインタを移動させる必要はありません。
そもそも、マウスポインタを移動させた後、どうやってクリックさせようとしてました?
結局 PostMessage または SendMessage に落ち着きそうな気がするのですが。

もし、マウスポインタがある座標に入って初めてそのボタンが有効になるようなものだったら別ですが。
その場合でも、WM_MOUSEENTER やら WM_MOUSEMOVE なんかも一緒に投げてやればよさげ。

※ 文中に出てくる PostMessage、SendMessage と WM_* はWin32で定義されている関数と定数です。

# もっとも、肝心のクリックするタイミングと座標を決定させることができていないようですが……
引用返信 編集キー/
■73684 / inTopicNo.16)  Re[8]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (9回)-(2014/10/23(Thu) 00:02:29)
No73683 (yoh2 さん) に返信
> >>(2)ボタンクリック相当の処理を実行するために、マウスカーソルの移動は本当に必要なのか?
> >> ・HTML DOM の submit メソッドや click メソッドは使えないのか?
> >> ・IAccessible インターフェイスの DoDefaultAction メソッドは?
> >> ・HTML コンテンツではなく、OS 標準のボタンだとしたら、座標に関係なく直接 PostMessage できないか?
> >>  http://www.ne.jp/asahi/hishidama/home/tech/vcpp/clickdlg.html
>>マウスカーソルの移動がないとおすボタンはflashなので指定された画像にマウスカーソルを移動させ、クリックするという理由です。この方法で大丈夫です。
>
> Flashであっても、Flash を表示させているウィンドウに対して、クリックすべきボタンの
> 座標を指定した WM_LBUTTONDOWN と WM_LBUTTONUP を PostMessage すればよいです。
> そこで指定させる座標はマウスポインタの位置と無関係なものでもよいので
> マウスポインタを移動させる必要はありません。
こういうのを待ってました。。
> そもそも、マウスポインタを移動させた後、どうやってクリックさせようとしてました?
mouse_event(mousdown, 0, 0, 0, 0) 'マウスダウン
mouse_event(mousup, 0, 0, 0, 0) 'マウスアップ
> 結局 PostMessage または SendMessage に落ち着きそうな気がするのですが。
コードを教えてください。
>
> もし、マウスポインタがある座標に入って初めてそのボタンが有効になるようなものだったら別ですが。
> その場合でも、WM_MOUSEENTER やら WM_MOUSEMOVE なんかも一緒に投げてやればよさげ。
>
> ※ 文中に出てくる PostMessage、SendMessage と WM_* はWin32で定義されている関数と定数です。
>
> # もっとも、肝心のクリックするタイミングと座標を決定させることができていないようですが……
どういうことですか?

引用返信 編集キー/
■73685 / inTopicNo.17)  Re[9]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ 魔界の仮面弁士 (160回)-(2014/10/23(Thu) 00:10:38)
No73684 (xlink さん) に返信
>>結局 PostMessage または SendMessage に落ち着きそうな気がするのですが。
> コードを教えてください。

No73668 で紹介した URL を参照してください。
VC++ の物ですが、考え方は一緒です。

# 具体的なコードの提示は、No73677 に記載した理由により拒否します。
引用返信 編集キー/
■73686 / inTopicNo.18)  Re[9]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ yoh2 (2回)-(2014/10/23(Thu) 01:09:13)
>>結局 PostMessage または SendMessage に落ち着きそうな気がするのですが。
> コードを教えてください。

丁度、任意のウィンドウをクリックしたことにするプログラムを C# で書いたことがあるので、
その時に使ったコード断片なら。 VB に書き直して失敗するのは嫌なので C# のまま。
VB の方がいいなら、「VB.NET PostMessage」あたりで検索すればいくらでも出てきます。

まずは Win32API の PostMessage やクリック関連の定数、変数を使えるように。
PostMessage に渡すウィンドウハンドルを取得するために EnumWindows など他の API
もいくつか宣言してました。
# 今見直すと lParam, wParam は IntPtr にしておいた方がよかった気が。

public static class Win32Api
{
    public delegate bool EnumWindowsDelegate(IntPtr hWnd, int lParam);
    [DllImport("user32.dll")]
    public static extern int EnumWindows(EnumWindowsDelegate enumProc, int lParam);

    [DllImport("user32.dll")]
    public static extern bool IsWindowVisible(IntPtr hWnd);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

    [DllImport("user32.dll", SetLastError = true)]
    public static extern uint GetWindowThreadProcessId(IntPtr hWnd, StringBuilder lpString, out uint lpdwProcessId);

    public struct POINT
    {
        public short x;
        public short y;
    };

    public const int WM_LBUTTONDOWN = 0x201;
    public const int WM_LBUTTONUP = 0x202;

    public const int MK_LBUTTON = 0x0001;
    public const int MK_RBUTTON = 0x0002;
    public const int MK_SHIFT = 0x0004;

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int mssg, int wParam, POINT lParam);
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int mssg, int wParam, int lParam);
    [DllImport("user32.dll")]
    public static extern int PostMessage(IntPtr hWnd, int mssg, int wParam, POINT lParam);
    [DllImport("user32.dll")]
    public static extern int PostMessage(IntPtr hWnd, int mssg, int wParam, int lParam);
}


んでクリック相当のメッセージ送信。

    IntPtr hWnd = /* ここに対象のウィンドウハンドルを入れる */
    // ここの座標はウィンドウのクライアント座標
    Win32Api.POINT pt = new Win32Api.POINT { x = /* ここにクリックしたいx座標を入れる */, y = /* ここにクリックしたいy座標を入れる */ };
    Win32Api.PostMessage(hWnd, Win32Api.WM_LBUTTONDOWN, Win32Api.MK_LBUTTON, pt););
    Win32Api.PostMessage(hWnd, Win32Api.WM_LBUTTONUP, Win32Api.MK_LBUTTON, pt);


>>もし、マウスポインタがある座標に入って初めてそのボタンが有効になるようなものだったら別ですが。
>>その場合でも、WM_MOUSEENTER やら WM_MOUSEMOVE なんかも一緒に投げてやればよさげ。
>>
>>※ 文中に出てくる PostMessage、SendMessage と WM_* はWin32で定義されている関数と定数です。
>>
>># もっとも、肝心のクリックするタイミングと座標を決定させることができていないようですが……
> どういうことですか?

「#」より前に書いた部分は変に深読みした結果おかしなことを言い出しただけなので
あまり気にしないで下さい。
xlinkさんが、Windowsのメッセージ処理の仕組みを知っているかどうか
判断付かなかったのですが、もし知った上でマウスの移動に拘っているのだとすれば
相応の理由があるはず、といった方向で理由を予想してみた結果です。

「#」以降は前の文章と特に繋りはありません。

引用返信 編集キー/
■73687 / inTopicNo.19)  Re[10]: 指定した画像にマウスカーソルを移動させるには
□投稿者/ xlink (11回)-(2014/10/23(Thu) 03:46:33)
No73686 (yoh2 さん) に返信
> >>結局 PostMessage または SendMessage に落ち着きそうな気がするのですが。
>>コードを教えてください。
>
> 丁度、任意のウィンドウをクリックしたことにするプログラムを C# で書いたことがあるので、
> その時に使ったコード断片なら。 VB に書き直して失敗するのは嫌なので C# のまま。
> VB の方がいいなら、「VB.NET PostMessage」あたりで検索すればいくらでも出てきます。
SendMessage
メッセージを転送先のウインドウのウインドウプロシージャに直接送信します。処理は同期で、転送先のウインドウプロシージャがメッセージを処理し終えるまでは呼び出し元の処理はブロックされます。

PostMessage
メッセージを転送先のウインドウのメッセージキューの末尾に送信します。処理は非同期処理で、メッセージを送信した直後から処理を継続することができます
このコード、指定した画像にマウスカーソルを持っていくコードではなくないですか?
それと座標指定ではなく位置は常に変動するので画像指定です。
>
> まずは Win32API の PostMessage やクリック関連の定数、変数を使えるように。
> PostMessage に渡すウィンドウハンドルを取得するために EnumWindows など他の API
> もいくつか宣言してました。
> # 今見直すと lParam, wParam は IntPtr にしておいた方がよかった気が。
>
> public static class Win32Api
> {
> public delegate bool EnumWindowsDelegate(IntPtr hWnd, int lParam);
> [DllImport("user32.dll")]
> public static extern int EnumWindows(EnumWindowsDelegate enumProc, int lParam);
>
> [DllImport("user32.dll")]
> public static extern bool IsWindowVisible(IntPtr hWnd);
>
> [DllImport("user32.dll", CharSet = CharSet.Auto)]
> public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
>
> [DllImport("user32.dll", SetLastError = true)]
> public static extern uint GetWindowThreadProcessId(IntPtr hWnd, StringBuilder lpString, out uint lpdwProcessId);
>
> public struct POINT
> {
> public short x;
> public short y;
> };
>
> public const int WM_LBUTTONDOWN = 0x201;
> public const int WM_LBUTTONUP = 0x202;
>
> public const int MK_LBUTTON = 0x0001;
> public const int MK_RBUTTON = 0x0002;
> public const int MK_SHIFT = 0x0004;
>
> [DllImport("user32.dll")]
> public static extern int SendMessage(IntPtr hWnd, int mssg, int wParam, POINT lParam);
> [DllImport("user32.dll")]
> public static extern int SendMessage(IntPtr hWnd, int mssg, int wParam, int lParam);
> [DllImport("user32.dll")]
> public static extern int PostMessage(IntPtr hWnd, int mssg, int wParam, POINT lParam);
> [DllImport("user32.dll")]
> public static extern int PostMessage(IntPtr hWnd, int mssg, int wParam, int lParam);
> }
>
>
> んでクリック相当のメッセージ送信。
>
> IntPtr hWnd = /* ここに対象のウィンドウハンドルを入れる */
> // ここの座標はウィンドウのクライアント座標
> Win32Api.POINT pt = new Win32Api.POINT { x = /* ここにクリックしたいx座標を入れる */, y = /* ここにクリックしたいy座標を入れる */ };
> Win32Api.PostMessage(hWnd, Win32Api.WM_LBUTTONDOWN, Win32Api.MK_LBUTTON, pt););
> Win32Api.PostMessage(hWnd, Win32Api.WM_LBUTTONUP, Win32Api.MK_LBUTTON, pt);
>
>
> >>もし、マウスポインタがある座標に入って初めてそのボタンが有効になるようなものだったら別ですが。
> >>その場合でも、WM_MOUSEENTER やら WM_MOUSEMOVE なんかも一緒に投げてやればよさげ。
> >>
> >>※ 文中に出てくる PostMessage、SendMessage と WM_* はWin32で定義されている関数と定数です。
> >>
> >># もっとも、肝心のクリックするタイミングと座標を決定させることができていないようですが……
>>どういうことですか?
>
> 「#」より前に書いた部分は変に深読みした結果おかしなことを言い出しただけなので
> あまり気にしないで下さい。
> xlinkさんが、Windowsのメッセージ処理の仕組みを知っているかどうか
> 判断付かなかったのですが、もし知った上でマウスの移動に拘っているのだとすれば
> 相応の理由があるはず、といった方向で理由を予想してみた結果です。
>
> 「#」以降は前の文章と特に繋りはありません。
引用返信 編集キー/
■73692 / inTopicNo.20)  Re[7]: 指定した画像にマウスカーソルを移動させるには
 
□投稿者/ みい (13回)-(2014/10/23(Thu) 14:07:31)
マウスはあくまで座標をクリック(実際には左ボタンダウン→アップ)です。
画像をクリックするわけではありません。
その座標位置に画像があるから画像にクリックイベントが入るだけ。

SendMessage/PostMessageはそのイベントを送り込むための手段です。

私も魔界の仮面弁士さんと同じ理由でコード提示はしません。


引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -