問題タブ [shellexecuteex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2716 参照

winapi - ShellExecuteEx with SEE_MASK_FLAG_NO_UIは、.NETのないシステムで.NETアプリを起動するとエラーを表示します

ShellExecuteExWin32関数呼び出しの構造にはフラグがSEE_MASK_FLAG_NO_UIありSHELLEXECUTEINFO、アプリケーションの起動時にエラーが発生したために表示される可能性のあるエラーダイアログを抑制します。

ここにあるMSDNのドキュメントは、それについて非常に明確です。

私の場合、.NETがインストールされていないWindowsXPシステムで.NET実行可能ファイルを起動しています。Windowsによってダイアログウィンドウに表示される次のメッセージを体系的に受け取ります。

ユーザーがこのメッセージに対処する必要はありません。むしろエラーコードを返してShellExecuteEx、プログラムで適切に処理できるようにしたいと思います。これは、外部実行可能ファイルを起動するために使用しているコードスニペットです。

Is there an official way of suppressing the error message if .NET is not present on the system? Or do I have to check for this specific condition myself before executing the application (but I do not know in advance if it is a .NET app or a native app). And what if the app I am starting is missing some DLLs, for instance?

0 投票する
1 に答える
424 参照

windows-vista - 「ShellExecuteExfailed;コード18」とはどういう意味ですか(ビスタ上)

私の仲間は、アンインストールプログラムや新しいプログラムアプリを実行しようとすると、このエラーメッセージが表示され、Windowsに「ShellExecuteExfailed; code 18」と表示され、プログラムの実行を拒否します。

0 投票する
2 に答える
962 参照

windows - ShellExecuteExで開始されたプロセスのデフォルトのアクセス権は何ですか?

で始まるプロセスで特定の操作を実行する必要があります。たとえば、待機、ハンドルの複製、情報のクエリと設定などです。渡した構造体で返されるメンバーShellExecuteExに対して、これらすべての操作を実行できるかどうか疑問に思っています。誰かがこれを知っていますか?hProcessSHELLEXECUTEINFOShellExecuteEx

返されたプロセスを使用する場合、呼び出されたプロセスには、デフォルトで、、、(など)のようShellExecuteExな権限がありますか?PROCESS_DUP_HANDLESYNCHRONIZEPROCESS_SET_INFORMATIONPROCESS_QUERY_INFORMATIONhProcess

0 投票する
3 に答える
3786 参照

windows - 作成プロセスの子ではないプロセスを作成するにはどうすればよいですか?

AとBの2つのプロセスがあります。ある時点でAはBを作成します。Bが作成された後、Aのプロセスツリーが強制終了された場合でも、Bをそのままにしておく必要があります。

CreateProcess()を使用してBを作成していますが、子でないとプロセスを作成する方法が見つからないようです。ShellExecuteEx()でも同じことが言えますが、おそらくいくつかのフラグがありません。

誰かが私がこれを行うために何を使うことができるか知っていますか?

編集:両方のプロセスが他方へのハンドルまたはプロセスIDを必要とすることを言及するのを忘れました

0 投票する
1 に答える
1324 参照

windows-7 - CreateProcess を ShellExecuteEx に変換するには?

MS detour ライブラリを使用して CreateProcess をフックすると、Win7 で正常に動作します。次に、迂回したCreateProcessをShellExecuteExに置き換えて、「runas」を使用して管理者権限でプログラムをサイレントに実行できるようにします。残念ながら、パラメーターの型は同じではありません。

これは関数のシグネチャです:

ここでは、ShellExecuteEx を呼び出します。

ただし、この割り当てにはエラーがあります: ShExecInfo.lpFile = lpszImageName; VC2005 は、データ型が同じではないと訴えています: "cannot convert from const unsigned char * to const char *"

LPCWSTRただし、 CreateProcess のパラメーター lpszImageNameのデータ型はであり、ShExecInfo.lpFile はLPCTSTRです。

(const unsigned char*) を使用して lpszImageName を変換すると、lpFile の値は lpszImageName 値の最初の文字のみになります。

たとえば、lpszImageName が「C:\windows\system32\cmd.exe」の場合。割り当て後、lpFile 値は「C」のみです。

LPCWSTR から LPCTSTR に変換するにはどうすればよいですか? または、どうすれば変換できますか?

ありがとう!!!

0 投票する
2 に答える
2960 参照

winapi - WinApi ShellExecuteEx - ファイル リストで動詞「コピー」を使用する

ShellExecuteEx を使用して、特定のディレクトリ内のファイルのグループをコピーまたはカットすることは可能ですか? Windows の機能は 1 つのファイルに対しては正常に機能しますが、この件に関するヒント (ファイル リストを含む) はどこにも見つかりません。

シェル項目固有のアクションを実行した後に Windows シェル関数の取り消し/やり直しが必要なため、代替方法 (xcopy など) は期待していません。

Microsoft msdn ライブラリにはまったく記載されていません。「lpfile」パラメーターに、PChar("Drive:\file1.fileExt","Drive:\file1.fileExt") やその他の一般的なリスト形式などの項目のリストを入力しようとしましたが、何もできませんでした実行すると、shellExecuteEx は 33 未満の値を返します。

'select' や 'addtoselection' などの動詞はありますか? フラグ SEE_MASK_IDLIST を追加する必要があります。この場合、ShellExecuteEx 動詞が実行されるファイル リストを定義できる ITEMIDLIST 構造ですか?

0 投票する
1 に答える
1422 参照

delphi - ファイルの編集が終了するまで待ちます

次の仕事があります。Microsoft Officeファイルの編集が終了するのを待つ必要があります。次の従来のアプローチを使用します:ファイルは編集中ですファイルがビジー状態のとき:

このアプローチは、Open Officeではなく、MicrosoftWordによるファイルの編集でうまく機能します。OpenOfficeは、MS Officeと同じように、多重度ファイルを開くために1つのプロセスを使用します。しかし、OpenOffice Writerにはいくつかの問題があります。関数FileIsBusyは、OpenOfficeWriterで最初にファイルを保存した直後にfalseを返します。何か提案はありますか?

============================

私は次の解決策を見つけます:

保存後、ООはしばらくの間ファイルをリリースし、再び独占的に共有します

0 投票する
3 に答える
3307 参照

windows - ShellExecuteEx で外部アプリを起動し、初期化されるまで待ちます

他のいくつかのアプリケーションをチェーンで実行する必要があるアプリケーションがあります。経由で実行していShellExecuteExます。各アプリを実行する順序は非常に重要です。これは、アプリが相互に依存しているためです。例えば:

すべて正常に動作しますが、考えられる問題が 1 つあり ShellExecuteExます。それは、アプリケーションを起動してすぐに戻ることです。たとえば、App1が適切に開始されたが、一部の内部タスクが完了していない場合や、まだ使用する準備ができていない場合に、問題が発生する可能性があります。しかし、 に依存するShellExecuteExはすでに開始されており、完全に初期化する必要があるため、適切に開始されません。App2App1App2App1

App(N-1)終了してから開始するのを待ちたくないことに注意してくださいAppN

これが ShellExecuteEx で解決できるかどうかはわかりません。使用しようとしました

しかし、何の効果もありません。

アプリケーションを起動した後AppN、プロセスへのハンドルがあります。メインウィンドウが作成された後にアプリケーションが初期化されると仮定すると(すべてのアプリにウィンドウがあります)、メッセージキューにフックを配置して、表示されるまで待つことはできますWM_CREATEWM_ACTIVATE?このようなメッセージが表示されると、アプリケーションは先に進むことができることを認識します。

それはただのアイデアです。しかし、そのようなフックの付け方がわかりません。あなたがこれで私を助けることができれば、またはあなたは素晴らしいだろうより良いアイデアを持っています:)

また、ソリューションは Windows XP 以降で動作する必要があります。

御時間ありがとうございます。

編集済み

@Cosmic Prund: なぜ回答を削除したのかわかりません。あなたのアイデアを試すかもしれません...

0 投票する
1 に答える
1039 参照

delphi - 書き込み保護された USB ドライブで ShellExecuteEx エラーが発生しましたか?

書き込み保護された USB ドライブでアプリケーションをテストしようとしています。ShellExecuteEx API (lpVerb := "runas" が必要なため、この API 呼び出しを使用する必要があります) 呼び出しを使用して 2 番目のプログラムを実行したいのですが、 ShellExecuteEx 呼び出しで「書き込み保護エラー」が発生し続けます。ドライブに何を書き込もうとしているのかわからないようです。ドライブに書き込んでいるコードはありません。また、最新のMicrosoft Standard User AnalyzerApplication Verifierを使用して、何がドライブに書き込もうとしているのかを検証してみました。成功せずに運転します。これが私が得続けるエラーです:

【ライトプロテクトエラー】

ライト プロテクト エラー

次のコードでは、このドライブに書き込もうとしているものは何もありません。ShellExecuteEx API 呼び出しは、私がやろうとしていることを行うのに間違った方法ですか? そうでない場合、このエラーがポップアップしないようにするにはどうすればよいですか。どんな助けでも大歓迎です。

[ WP-ON.reg ]

[ WP-OFF.reg ]

注:レジストリが更新されるたびに、デバイスを取り出して再挿入する必要があります。

[ project1.dpr ]

[起動.マニフェスト]

[ launch.dpr ]

0 投票する
3 に答える
10809 参照

delphi - ShellExecuteEx が hInstApp で 42 を返すが、31 を期待している (ファイルの関連付けなし)

Delphi 7 で ShellExecuteEx を使用して動詞を使用してファイルを開くと、ファイルの関連付けがないため、失敗と 31 の結果が返されると予想していても、hInstApp の結果として常に 42 が返されるようです。プロセス ハンドルで WaitForInputIdle を使用できるように、ShellExecute から ShellExecuteEx に移行しています。

Excel がインストールされていないときに XLS ファイルを開こうとすると、ShellExecute は期待どおりに 31 を返しますが、ShellExecuteEx は実際には失敗してデフォルトの Windows ファイル関連付けダイアログをポップアップしたにもかかわらず、成功して 42 を返すように見えます。

私は何か間違ったことをしていますか?WinXP および Win7 で Delphi 7 を使用する。

以下サンプルコード。Win XP 32 ビット OS で Delphi 7 を使用していますが、Win 7 64 ビットでも同じ結果が得られます。Excel がインストールされていないため、hInstApp 値に対して showmessage を実行すると、31 が返されると予想されるときに 42 が返されます。