- ベストアンサー
WindowsXpでAppActivate
お世話になります。 WindowsXpにてAppActivate関数をコールすると 実行時エラー5が出てしまいます。 Windows2000では問題なく動作します。 何がいけないのでしょうか?また代用できる関数等ありましたら お教えいただきたいです。宜しくお願いします。 mspaint = Shell("mspaint.exe " & "d:\sample.bmp", 1) AppActivate mspaint 環境) WindowsXp VB6(SP5)
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
種々試してみました。 結論: mspaint = Shell("mspaint.exe " & "d:\sample.bmp", 1) この間、1秒以上空ける AppActivate mspaint でした。 IDもタイトル行の文字列も試してみました。 が、いずれも実行OKでした。 1) AppActivate を独立したボタンに定義しshell文が実行されてから数秒経過してボタンをクリックする。 2) 一度だけ起動のTimerイベントを使い、そのTimer内部で Disabledにし、AppActivateを実行。 ちなみに タイトル文字列を利用する場合 AppActivate "sample.bmp - ペイント" でOKです。 IDを使う場合(mspaint)、Formのgeneralでdim定義もしくはglobalで定義すること。 理由は専門家に任せるとして。 参考になれば。
その他の回答 (4)
- O_cyan
- ベストアンサー率59% (745/1260)
>WinXPではAppActivateが呼べないのでしょうか WinXPでもAppActivateは使えるはずです。 #4のSUPERGさんを拝借して mspaint = Shell("mspaint.exe " & "d:\sample.bmp", 1) StopTime (100) 'アクティブになるまで待つ AppActivate mspaint としてみては
お礼
O_cyan様、有難うございます。 #4様にアドバイスいただき、解決いたしました。 Stoptime(100)はVBの有名サイトサンプルですね。 http://www.bcap.co.jp/hanafusa/VBHLP/keybdeve.htm また、宜しくお願いします。
- O_cyan
- ベストアンサー率59% (745/1260)
>実行時エラー5が出てしまいます 実行時エラー5はプロシジャーや引数の不正ですよね。 実行中のプログラムを識別するタスクIDをAppActivate ステートメントで使用するですよね。 Dim Ret As Long Ret = Shell("C:\Program Files\Accessories\mspaint.exe" & "d:\sample.bmp", 1) AppActivate Ret か Dim Ret As Long Dim MyFile As String MyFile = Chr$(34) & "D:\sample.bmp" & Chr$(34) Ret = Shell("C:\Program Files\Accessories\mspaint.exe" & MyFile, 1) ではどうでしょうか。
補足
お返事有難うございます。 アドバイスに習ってプロシージャの引数を疑ってみたのですが、結果変わらずでした。 WinXPではAppActivateが呼べないのでしょうか、疑問です。。 #2さんの示されたAPI32でコードを組もうとしているのですが、いまいち使い方わからず 実装できてませんといったところです・・ ご助言いただけることがありましたら、又よろしくお願いします。
- piyo2000
- ベストアンサー率49% (144/293)
AppActivateの引数は、Shell()が返すタスクIDではなくタイトルバーの文字列ですよ。 例えば電卓なら「電卓」ですね。 ペイントの場合開くアプリケーションによってタイトルバーが変わるので、この場合はShell()やAppActivateを使わずに、OpenProcess(),SetForgroundWindow()やGetWindowThreadProcessId()などのAPIを使ったほうが確実です。
お礼
おっしゃる通り、標準は文字列を渡すようですが、MSDNヘルプで、Shellが返すIDを引数にすることもできるみたいです。 piyo様の示されたAPIを調べようと思います。ありがとうございました。
- kiki_s
- ベストアンサー率59% (147/248)
mspaint = Shell("mspaint.exe " & "d:\sample.bmp", vbNormalFocus) これでは駄目でしょうか? AppActivate mspaintのコードは不要ではないかと思います(絶対とは云えません)
補足
回答有難うございます。 >mspaint = Shell("mspaint.exe " & "d:\sample.bmp", 1) やってみましたが、だめでした。。Shellの引数"1"はvbNormalFocusを示すです。。 ちなみに、mspaintにフォーカスをあてるのはこの後sendkeysを実行します。
お礼
できました!! mspaintを実行してから、waitが必要なのですね。 デバッグ時に"1644"のようなIDが取得できたので、waitは考えませんでした。 その後にAPI32実装したsendkeyを実行するのですが、こちらはwaitかけてたのですが。。 SUPERS様、どうもありがとう御座いました。