Private Declare Function CreateProcess Lib "kernel32" _
Alias "CreateProcessA" ( _
ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As Any, _
lpThreadAttributes As Any, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION _
) As Long
で起動させたプログラムを
Private Declare Function TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, _
ByVal uExitCode As Long _
) As Long
で強制終了させると
アイコンがタスクトレイに残ったままの状態になってしまいます。
(マウスカーソルをそのアイコンにかざすと消えますが・・・)
プログラム処理で消すことは出来ないでしょうか。
よろしくお願いします。
可能性だけ・・・
マウスをかざすと消えると言うことは、何かイベントが発生して
リフレッシュ?される為、無効なアイコン表示がなくなる。
と思います。
よって、プログラムで擬似的にその動作を発生させれば、無くな
るかと。
※ それより強制終了させないといけないことを改善させれば、
そんなことしなくて済むのでは?
以上。
オショウさん、早速のレスありがとうございます。
プラットフォームSDKのSetCursorPosを使うということですね。
チョットやってみます。
他に何かありましたら引き続きよろしくお願いします。
>それより強制終了させないといけないことを改善させれば・・・
一連の自動処理で、動作がおかしくなったプログラム(他社)を再起動させて正常な動作に戻したいために強制終了が必要な訳なんです。
SetCursorPosでやってみました。
タスクバーのプロパティが「タスクバーを固定する」の場合はマウスのカーソルを動かして消すことが出来ましたが、
「タスクバーを自動的に隠す」に設定した状態ですと、ダメですね。
何とか隠れたタスクバーを表示させる方法があれば一応OKなんですが・・・
タスクバーを自動的に隠すの設定でやってみました
まず、タスクトレイのウィンドウハンドルを正しく取れれば、
SetCursorPosで、タスクトレイの領域にマウスポインタが移動
した瞬間、隠れたタスクバーがせり上がり表示されました。
ただし、隠れた状態のままでウィンドウの位置を取得している
ので、そのままでは位置が変わってしまっているのでダメです。
ここで難儀なのは、せりあがる動作中の時間を待って、表示後
に再度正しく位置を取得すると言うところでしょう。
次にタスクバーが固定の状態と同じくSetCursorPosでマウスポ
インタを移動させてみましたが・・・残念ながら期待した結果
にはなりませんでした。
何か動作が不足しているようです。
タスクトレイ上をマウスポインタが走ってしまうので、いまい
ちなんですが・・・なんとかなるような気がします。
タスクバーのウィンドウハンドルを使って、フォーカスを当て
た後、実験してみるとか、試せる内容はまだ残っているように
思います。
以上。参考まで
オショウさん、いろいろとありがとうございました。
下記のようにしたら出来るようになりました。
'マウスのポインター移動
Public Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
Dim a As Long
Dim x As Long
Dim y As Long
Dim x1 As Long
Dim y1 As Long
Dim n As Long
Dim T As Single
Dim T1 As Single
x1 = Screen.Width
y1 = Screen.Height
'カーソルの位置をワクの隅に設定
x = x1 / Screen.TwipsPerPixelX
y = (y1 - 10) / Screen.TwipsPerPixelY
a = SetCursorPos(x, y)
T1 = Timer
Do 'タイマーを入れる(重要)
T = Timer - T1
DoEvents
Loop Until T > 0.5
For n = 1 To 30 'アニメーション化
x = (x1 - 100 * n) / Screen.TwipsPerPixelX
y = y1 * 0.98 / Screen.TwipsPerPixelY
a = SetCursorPos(x, y)
T1 = Timer
Do 'タイマーを入れる(重要)
T = Timer - T1
DoEvents
Loop Until T > 0.05
Next n
End Sub
ツイート | ![]() |