
ここで教えて頂き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;
No.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つのプロセスは、複数のトップレベルウィンドウを持つ可能性がある点です。
No.1
- 回答日時:
エクスプローラ、新規に立ち上がってないんじゃないんですか?
>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 …
ありがとうございます
どうも違うようです
shellexe.lpVerb = "open";
にし他のアプリケーション立ち上げてみても
だめでした
もう少し考えてみます。
ただ失敗するとNULLは返ってきているので
違うハンドルが返ってきてるのでしょうか?
SetWindowPos(shellexehandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
で立ち上げたアプリを最前面固定にしたいのですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- 釣り リールについて 19ステラsw 8000hgを購入したのですがハンドルの左右交換はできるのでしょうか 2 2022/05/07 13:01
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- 輸入車 左ハンドルや並行輸入車を買う人 11 2022/12/24 15:29
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- 車検・修理・メンテナンス 210系クラウンのハンドルについて 1 2022/09/12 16:05
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- ノートパソコン Win10 EXCEL でのエラー 2 2022/04/03 15:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CreateObjectで作成したExcelの...
-
OSPFでプロセスを分ける意義に...
-
C#でのbatファイル実行結果取得
-
ADOでアクセスのレコードに...
-
共有メモリの同時アクセスにつ...
-
バックグラウンドのプロセスの...
-
起動中の他のプログラム(orプ...
-
c言語でプロセスIDを調べたい
-
getppid()の使い方を教えてくだ...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
プロセスが実行中かどうか調べ...
-
子プロセスの状態を親プロセス...
-
Linuxのchdir(カレントディレク...
-
常駐するアプリケーションを初...
-
誤ってプロセスの終了をしてし...
-
プロセスIDの取得方法について
-
子プロセスのデータを親プロセ...
-
デスクトップ上のアイコン名の...
-
SendMessageが失敗するときがある
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VB6.0 SHELLで起動...
-
プロセスIDの取得方法について
-
C#でのbatファイル実行結果取得
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
vb.netでEXCEL起動がうまくでき...
-
SendMessageが失敗するときがある
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
explorer.exeが異様にメモリを食う
-
怪しいプロセス教えてください。
-
Process.Startの戻り値を後で取得
-
プロセスIDからウィンドウハ...
-
Linuxでのスレッド間メッセージ...
-
警告『 別のプロセスで使用され...
-
Visual C++からpingを実行して...
-
WSH.Runで待機できません
-
c言語でプロセスIDを調べたい
-
API関数 GetExitCodeProcess
おすすめ情報