アプリ版:「スタンプのみでお礼する」機能のリリースについて

ここで教えて頂きhpを見ながら
下記のようにしてみましたが
hProcessからハンドルが取れません
エクスプローラは立ち上がりますし
わざとエラーを起こさせても返ってきます
でもハンドルは取れません
宜しくお願いいたします

SHELLEXECUTEINFO shellexe;
HANDLE shellexehandle;


memset( &shellexe, 0, sizeof(SHELLEXECUTEINFO) );
shellexe.cbSize = sizeof(SHELLEXECUTEINFO);
shellexe.fMask = SEE_MASK_NOCLOSEPROCESS;
shellexe.hwnd = HWND_DESKTOP;
shellexe.lpVerb = "explore";
shellexe.lpFile = "C:\\";
shellexe.lpParameters = NULL;
shellexe.lpDirectory = NULL;
shellexe.nShow = SW_SHOWNORMAL;

ShellExecuteEx( &shellexe );

hShell = shellexe.hInstApp;
shellexehandle = shellexe.hProcess;

A 回答 (2件)

>違うハンドルが返ってきてるのでしょうか?


>SetWindowPos(shellexehandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
>で立ち上げたアプリを最前面固定にしたいのですが

hProcessは、プロセスハンドルです。で、hInstAppはインスタンスハンドルです。SetWindowPosで使用するのはウィンドウハンドルで、すべて別物です。

で、ご希望の処理を実現するには実はShellExecuteExを
使うことは出来ません。理由は、起動したプロセスの
プロセスIDが取得できないからです。


で、どのようにすればいいかというと、
1.FindExecutableで、関連付けされているアプリケーションを取得
2.CreateProcessで起動(CreateProcessならプロセスIDを取得できる)
3.EnumWindowsでウィンドウを列挙
4.列挙したウィンドウから、GetWindowThreadProcessIdで
そのウィンドウを持っているプロセスのプロセスIDを取得
5.起動したアプリのプロセスIDと同じかどうかチェックし、
同じだったらそのウィンドウのウィンドウハンドルを
引数にしてSetWindowPosを呼び出す

てな事をする必要があります。

注意が必要なのは、プロセスが起動直後にウィンドウを表示していない可能性がある点と、1つのプロセスは、複数のトップレベルウィンドウを持つ可能性がある点です。
    • good
    • 1
この回答へのお礼

ありがとうございます
ハンドルの種類が違うのですね(涙
がんばって勉強します
ありがとうございました

お礼日時:2003/06/06 01:48

エクスプローラ、新規に立ち上がってないんじゃないんですか?



>shellexe.lpVerb = "explore";
となっているので、おそらくこういうことだと。

>For example, if a document to be launched is a URL and an instance of Microsoft Internet Explorer is already running, it will display the document.
>No new process is launched, and hProcess will be NULL.

lpVervに指定するのではなくて、lpFileにexplorer.exeを指定しないとまずいようですね。

http://msdn.microsoft.com/library/default.asp?ur …
    • good
    • 0
この回答へのお礼

ありがとうございます
どうも違うようです
shellexe.lpVerb = "open";
にし他のアプリケーション立ち上げてみても
だめでした
もう少し考えてみます。
ただ失敗するとNULLは返ってきているので
違うハンドルが返ってきてるのでしょうか?
SetWindowPos(shellexehandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
で立ち上げたアプリを最前面固定にしたいのですが

お礼日時:2003/06/05 17:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!