マウス・カーソルの制御

2016-06-19 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、0、 0、1、0、0、0(40)で、換算ポイント 87pt 。
「Firefox」7位ダウン。「Perl」「化学業界」「硝子業界」「FM COCOLO」、
「e-radio」「グルコサミン」「Python」bg値変動。「C言語」「FM青森」変化無し。
・-・ - -・

さて、本文。

前(2016-06-17)の記事「LuaCOM 代替:VBScript 利用
から、
WSH(Windows Scripting Host)で、マウス操作はどうなのか?

「WSH マウス」で検索したら、

コマンドラインからマウスを操作する方法 ( ・・・ )
が見つかった。

  Windows上でアプリケーションを自動で操作するためには,
   ・ プログラムによってマウスポインタを任意の場所へ動かし
   ・ クリックさせる
  といった制御が必要になる。

  この「マウスの自動操作」はとても汎用的な操作なので,どんな
  プログラミング言語からもライブラリとして呼び出せたり,
  いっそコマンドプロンプトから実行できれば便利だ。

  そこで,以下では
   1. マウスを動かす関数を集めてDLL化し,
   2. そのDLLをコマンドラインから実行できるようにし,
   3. その実行をバッチにして,アプリケーションの定型処理を自動化する

  といった手順で,「コマンドラインからのマウス操作」を実現してみる。

  (1) コマンドラインからDLLを実行する方法
  ・・・・・
  ・・・・・

  (2) rundll32.exe で自作DLLを呼び出す方法
  ・・・・・
  ・・・・・

  (3) マウスを操作するDLLを作成する
  ・・・・・
  ・・・・・
ここに、“MouseControll.c”ソースコードが載っている。

以降は、省略。


そこで、このソースコードを頂き、
<紙>流に若干アレンジさせて頂いた:
----- 某氏の MouseControll 相当品:mouseX.gsl -----
voidA = |x| ffi.cast( 'void*', x )
ffi.cdef[[
typedef unsigned int DWORD;
typedef struct tagPOINT{
int x; /* 正確には、LONG */
int y;
} POINT, *LPPOINT;
void Sleep( int MilliSeconds );
void SetCursorPos( /* 正確には、BOOL */
int X, // 水平位置
int Y // 垂直位置
);
void GetCursorPos( /* 正確には、BOOL */
LPPOINT lpPoint // カーソル位置
);
void mouse_event(
DWORD dwFlags, // 移動とクリックのオプション
DWORD dx, // 水平位置または移動量
DWORD dy, // 垂直位置または移動量
DWORD dwData, // ホイールの移動
int dwExtraInfo // アプリケーション定義の情報 ULONG_PTR
);
]]
function SetMouseXY( x, y ) -- マウス座標を設定する関数
ffi.C.SetCursorPos( x, y )
end
function GetMouseXY() -- マウス座標を取得する関数
pos = ffi.new('int[2]')
ffi.C.GetCursorPos( voidA(pos) )
return pos[0], pos[1]
end
function LeftClick() -- クリック動作をエミュレートする関数
-- 下げて
ffi.C.mouse_event( 2, 0, 0, 0, 0 ) -- MOUSEEVENTF_LEFTDOWN
ffi.C.Sleep(10)
-- 上げる
ffi.C.mouse_event( 4, 0, 0, 0, 0 ) -- MOUSEEVENTF_LEFTUP
end
以上です。コンパイルはイラナイ。
ここで、
  MOUSEEVENTF_<あれこれ>
のコード値は、

昔から使っている“Active Basic”の“api_window.sbp”にあった:
  &H0001:MOUSEEVENTF_MOVE
  &H0002:MOUSEEVENTF_LEFTDOWN
  &H0004:MOUSEEVENTF_LEFTUP
  &H0008:MOUSEEVENTF_RIGHTDOWN
  &H0010:MOUSEEVENTF_RIGHTUP
  &H0020:MOUSEEVENTF_MIDDLEDOWN
  &H0040:MOUSEEVENTF_MIDDLEUP
  &H0800:MOUSEEVENTF_WHEEL
  &H8000:MOUSEEVENTF_ABSOLUTE


それで、
この“mouseX.gsl”を利用するには、・・・
----- メイン:test_mouseX.gsl -----
dofile('mouseX.gsl')
ffi.C.Sleep(500)

SetMouseXY( 48, 116 )
ffi.C.Sleep(500)

x, y = GetMouseXY()
print( x, y )
LeftClick()
でしょうか。


この方式だと、
コンパイル無し“Lua(GSL Shell)”のみで、
マウス・コントロールが出来る。


蛇足:
「MouseControll.dll」を使ったお方のブログ:
マウス自動クリック - 日記
がありました。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160510
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク