by くまくん » 2006年12月19日(火) 14:09
(長文ですみません)
MessageBox は,ボタンを押すまで存在し続け,プログラムは停止状態に
なりますが,一定時間の後自動で消えるようにすることは出来ないでしょうか。
いろいろ調べましたが,苦しまぎれに別プログラムとして,マウスが自動で動いて
ボタンをクリックするものを作り,これを ShellExecute コマンドで働かせるように
しましたが,不満があります。
・マウスが自動で移動中,砂時計が伴って表示される( → これは消したい)
・手動でOKボタンをクリックしたときも,マウスの自動動作を中断できない。
何かもっとよい方法があるような気がするのですが,力不足です。
良い方法があれば教えて下さい。
------------------------------------------------
(以下,苦しまぎれの方法, 1.2.をファイルにすればコンパイル可)
次の 1.AutoOKMsg.abp,2.mvMOUSE.abp の2つのファイルをそれぞれ
コンパイルし,AutoOKMsg.exe,mvMOUSE.exe を作ります。
AutoOKMsg.exe を走らせます。
動作:
AutoOKMsg.exe を走らせると,(この中からmvMOUSE.exe を呼ぶ)
メッセージボックスが表示され,数秒後に自動でマウスがOKボタンをクリック
してメッセージボックスが閉じます。
1. "AutoOKMsg.abp"
' マウス移動,クリックプログラムをスタート
ShellExecute(NULL,NULL,"mvMOUSE.exe","",NULL,SW_HIDE)
' (MessageBoxより先に走らせておく)
' メッセージボックス表示
Dim Msg As String
Msg = Ex" MessageBox\n\n\n_
数秒後に,別プログラム mvMOUSE.exe が \n\n_
〔OK〕 をクリックする"
MessageBox(0, Msg, " AutoOKMsg.exe", MB_OK)
' --- ここまで
2. "mvMOUSE.abp"
' 自動で,マウス移動,クリック
' MESSAGEBOX の OKボタンを数秒後に自動で押す。
' マウス(X,Y)へ自動移動
' 絶対座標 全画面 X = 0 ~ 65535 Y = 0 ~ 65535
Sub mvXY(ByVal X As DWord, ByVal Y As DWord)
mouse_event(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE,X,Y,0,0)
End Sub
Sub Lclick()' マウス自動左クリック
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0)' 押下
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0)' 放す
End Sub
Dim I As Word, J As Word, K As Word, DMY As Double
Dim X As Word, Y As Word
Dim X1 As Word, X2 As Word, Y1 As Word, Y2 As Word
Dim X3 As Word, Y3 As Word
' 位置(X1,Y1) → (X2,Y2) マウス自動移動
'(絶対座標 全画面 X = 0 ~ 65535 Y = 0 ~ 65535)
X1=23000: Y1=26000
X2=33000: Y2=37600
FOR X=X1 TO X2
Y=(X-X1)/(X2-X1)*(Y2-Y1)+Y1
mvXY(X,Y)
FOR J=1 TO 30:DMY=Sin(J):NEXT' 移動速度(時間)調整
NEXT
'数秒待って自動クリック
FOR K=1 TO 1500
FOR J=1 TO 3000:DMY=Sin(J):NEXT J' 待ち時間作成
NEXT K
BEEP
Lclick()' マウス左自動クリック
' マウスを他所へ移動して終了
X3=33000: Y3=26000
mvXY(X3,Y3)
'Lclick()
' --- ここまで
(長文ですみません)
MessageBox は,ボタンを押すまで存在し続け,プログラムは停止状態に
なりますが,一定時間の後自動で消えるようにすることは出来ないでしょうか。
いろいろ調べましたが,苦しまぎれに別プログラムとして,マウスが自動で動いて
ボタンをクリックするものを作り,これを ShellExecute コマンドで働かせるように
しましたが,不満があります。
・マウスが自動で移動中,砂時計が伴って表示される( → これは消したい)
・手動でOKボタンをクリックしたときも,マウスの自動動作を中断できない。
何かもっとよい方法があるような気がするのですが,力不足です。
良い方法があれば教えて下さい。
------------------------------------------------
(以下,苦しまぎれの方法, 1.2.をファイルにすればコンパイル可)
次の 1.AutoOKMsg.abp,2.mvMOUSE.abp の2つのファイルをそれぞれ
コンパイルし,AutoOKMsg.exe,mvMOUSE.exe を作ります。
AutoOKMsg.exe を走らせます。
動作:
AutoOKMsg.exe を走らせると,(この中からmvMOUSE.exe を呼ぶ)
メッセージボックスが表示され,数秒後に自動でマウスがOKボタンをクリック
してメッセージボックスが閉じます。
1. "AutoOKMsg.abp"
' マウス移動,クリックプログラムをスタート
ShellExecute(NULL,NULL,"mvMOUSE.exe","",NULL,SW_HIDE)
' (MessageBoxより先に走らせておく)
' メッセージボックス表示
Dim Msg As String
Msg = Ex" MessageBox\n\n\n_
数秒後に,別プログラム mvMOUSE.exe が \n\n_
〔OK〕 をクリックする"
MessageBox(0, Msg, " AutoOKMsg.exe", MB_OK)
' --- ここまで
2. "mvMOUSE.abp"
' 自動で,マウス移動,クリック
' MESSAGEBOX の OKボタンを数秒後に自動で押す。
' マウス(X,Y)へ自動移動
' 絶対座標 全画面 X = 0 ~ 65535 Y = 0 ~ 65535
Sub mvXY(ByVal X As DWord, ByVal Y As DWord)
mouse_event(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE,X,Y,0,0)
End Sub
Sub Lclick()' マウス自動左クリック
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0)' 押下
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0)' 放す
End Sub
Dim I As Word, J As Word, K As Word, DMY As Double
Dim X As Word, Y As Word
Dim X1 As Word, X2 As Word, Y1 As Word, Y2 As Word
Dim X3 As Word, Y3 As Word
' 位置(X1,Y1) → (X2,Y2) マウス自動移動
'(絶対座標 全画面 X = 0 ~ 65535 Y = 0 ~ 65535)
X1=23000: Y1=26000
X2=33000: Y2=37600
FOR X=X1 TO X2
Y=(X-X1)/(X2-X1)*(Y2-Y1)+Y1
mvXY(X,Y)
FOR J=1 TO 30:DMY=Sin(J):NEXT' 移動速度(時間)調整
NEXT
'数秒待って自動クリック
FOR K=1 TO 1500
FOR J=1 TO 3000:DMY=Sin(J):NEXT J' 待ち時間作成
NEXT K
BEEP
Lclick()' マウス左自動クリック
' マウスを他所へ移動して終了
X3=33000: Y3=26000
mvXY(X3,Y3)
'Lclick()
' --- ここまで