> とりあえずメモ帳1つとIEなどその他イロイロを起動した状態で
> 試してみたのですが、ボタンを押してもメモ帳がアクティブにならず、
> 自身がアクティブ?(デスクトップにフォーカスしてるのかも)に、
> なってしまう事があります。WinXP P SP3v3264 で確認。
> (今回指定したメモ帳と自身以外は最小化はされる)
∑( ̄□ ̄;)
そうでしたそうでした...。アクティブにしたいんでしたよね...。忘れてました。
ウィンドウをアクティブにするには
SetForegroundWindow()関数を使います。
SetActiveWindow()関数と違うということを覚えていてください。
以下修正部分。
コード: 全て選択
If lstrcmp(className,"Notepad")=0 Then
ShowWindow(hWnd,SW_RESTORE)
SetForegroundWindow(hWnd)
End If
> 教えていただいたコードをコピー&ペーストするだけでは、納得
> いかないもので、基本的な事かも知りませんが、幾つか質問しても
> よいでしょうか。
納得するということは理解することで、理解するということは応用できるということに繋がるのでドンドンしてもらって構いません。
そもそも、忙しくてササッと返信してしまうので説明不足なんですよね。
> ・毎回ハンドルを取得する理由。
> ShowWindow(2098862,SW_RESTORE) のような書き方は不可?
> ハンドルは固定ではない?
これは目的によってハンドルを毎回取得するかどうかを判断します。
一度メモ帳のハンドルを取得したらずっとそれを使い続けても構いません。
ただ、メモ帳のハンドルを取得した後にメモ帳を終了した場合、そのハンドルはもう使えません。もう一度メモ帳を起動してハンドルを再取得する必要があります。
2098862と書いた所から察するに、ウィンドウ ハンドルをアプリケーションの識別番号みたいな感じで捉えているかもしれませんが、それは間違いです。
ウィンドウ ハンドルはアプリケーションが起動する度にWindows(?)から与えられるもので、固定された値ではありません。
アプリケーションが起動してるうちは有効ですが、再起動したアプリケーションのウィンドウ ハンドルに再度その値が与えられるとは限りません。
> ・クラス名はどのように調べばよい?メモ帳以外も操作したいので。
> クラス名≠タイトルバーの文字列?
クラス名とタイトル名は必ずしもイコールであるとは限らないですね。
インターネットで「メモ帳 クラス名」とか「IE クラス名」って調べるという手もありますが、クラス名を見るだけのソフトを用意しました。
getclassname.lzh
※もし暇なら
ブログもどうぞ。
そのうちもっと綺麗な物を作ってプロジェクト毎公開しようかと思います...。
> ・コードの目的。
> If lstrcmp(className,"Progman")=0 Then Exit Function
これはプログラム マネージャーのウィンドウを対象から外すのが目的です。
自分が昔書いたコードから引っ張ってきたので、消しても問題無いかもしれません。
たしか、TerminateProcess()関数でウッカリ強制終了させたりしない為に書いてた気がします。
> タスクバーの [メモ帳] をクリックした時の動作(と同じ効果)
> をするのに、ここまで悩むとは、まだまだ勉強不足です・・・
むーさんは勉強したらバキバキ伸びて、いつの間にか回答専門になってると思います(笑)