背景:あなたはExcelのマクロ内に含まれるC#コードを通じてExcelを開き、正常にロードすることはできませんが、マウスが開かれたとき、マクロ負荷が適切ので、WINAPIでファイルを開くために期待することはできません。
公式ウェブサイトのアドレス:https://docs.microsoft.com/zh-cn/windows/win32/api/shellapi/nf-shellapi-shellexecutea
ShellExecute関数のWINAPIは(など、またはディレクトリを開くには、登録されたファイルを開いて、ファイルを印刷)外部プログラムを実行することで、外部プログラムは、いくつかのコントロールを持っています。次のように関数は次のとおりです。
IntPtrのShellExecute(HWNDのIntPtr、文字列 lpOperation、ストリング lpFile、列 lpParameters、文字列 lpDirectory、ShowCommands nShowCmd)。
パラメータ:
HWNDは:nullの場合または0あり、親ウィンドウのハンドルを指定し、指定されていない
lpOperation:指定された操作は、値は、次のような解釈を[探索]、[印刷]を[開く]することができます。
オープン:実行プログラムで指定されたlpFileパラメータ、またはファイルまたはフォルダで指定されたオープンlpFileパラメータ; 印刷:パラメータlpFileで指定されたファイルを印刷し、 探検:フォルダlpFileパラメータで指定されたファイルを参照します。
パラメータに設定されている場合はnull、デフォルトはオープンです。
lpFileは:オープンするファイルやプログラムの指定
lpParametersを:指定されたパラメータにプログラムを開くには、ファイルを開く場合は、nullの
lpDirectory:デフォルトのディレクトリ
nShowCmd:次のようにオープン設定、特定の意味は以下のとおりです。
= SW_HIDE 0 ; //は隠し = SW_SHOWNORMALを1。 ; // 最新の起動の表示サイズと位置と SW_NORMAL = 1 ; // SW_SHOWNORMALと SW_SHOWMINIMIZED = 2 ; // 最小活性化 SW_SHOWMAXIMIZED = 3 ; //は、最大活性化 = SW_MAXIMIZE 3。 ; // SW_SHOWMAXIMIZEDと SW_SHOWNOACTIVATE = 4 ; // 最新表示サイズ及び位置と活性化されない SW_SHOW = 5 ; // 同じSW_SHOWNORMAL = SW_MINIMIZE 。6 ; // 活性化することなく最小 SW_SHOWMINNOACTIVE =を7。 ; // SW_MINIMIZEと SW_SHOWNA = 8 ; // SW_SHOWNOACTIVATEと SW_RESTORE = 9 ; // とSW_SHOWNORMAL SW_SHOWDEFAULT = 10 ; // SW_SHOWNORMALを有する SW -最大= 10 ; // 同じSW_SHOWNORMAL
戻り値:
戻り値は、成功した、すなわち、32よりも大きい場合。次のように具体的な意義の戻り値を実行するための失敗:
0 = 0 // メモリ不足の ERROR_FILE_NOT_FOUND = 2 ; // ファイル名エラー ERROR_PATH_NOT_FOUND = 3 ; // パス名エラー ERROR_BAD_FORMAT = 11 ; // EXEファイルが無効である SE_ERR_SHARE = 26 ; // 発生共有エラー SE_ERR_ASSOCINCOMPLETE = 27 ; // ファイルた不完全または無効 SE_ERR_DDETIMEOUT = 28 ; // タイムアウト SE_ERR_DDEFAIL = 29 ; // DDEトランザクションが失敗した SE_ERR_DDEBUSY = 30を; // その他の事項に対処されていないとDDE DDEトランザクションを完了できませんでした = SE_ERR_NOASSOC 31 ; // 関連付けられたアプリケーション
以下を達成するためのC#コード:
1 クラスプログラム 2 { 3 /// <要約> 4 /// 显示方式 5 /// </要約> 6 パブリック 列挙 ShowCommands:INT 7 { 8 SW_HIDE = 0 、 9 SW_SHOWNORMAL = 1 、 10 SW_NORMAL = 1 、 11 SW_SHOWMINIMIZED = 2 、 12 SW_SHOWMAXIMIZED = 3 、 13 SW_MAXIMIZE = 3 、 14 SW_SHOWNOACTIVATE = 4 、 15 SW_SHOW = 5 、 16 SW_MINIMIZE = 6 、 17 SW_SHOWMINNOACTIVE = 7 、 18 SW_SHOWNA = 8 、 19 SW_RESTORE = 9 、 20 SW_SHOWDEFAULT = 10 、 21 SW_FORCEMINIMIZE = 11 、 22 SW_MAX = 11 23 } 24 25 [DLLIMPORT(" SHELL32.DLL " )] 26 静的 にexternのIntPtrのShellExecute(HWNDのIntPtr、文字列 lpOperation、ストリング lpFile、列 lpParameters、文字列lpDirectory、ShowCommands nShowCmd)。 27 28 [DLLIMPORT(" user32.dllの"、項目CharSet = CharSet.Auto、SetLastError = 偽)] 29 プライベート 静的 にexternのIntPtrのSendMessage(のIntPtrのhWnd、UINTメッセージ、のIntPtr wParamに、のIntPtr lParamに)。// 30 31 [DLLIMPORT(" USER32 "、項目CharSet = CharSet.Ansi、エントリーポイント= " FindWindowA "、ExactSpelling = 偽、SetLastError = 真)] 32 公共 静的 にexternのIntPtrのFindWindow(ストリング lpClassName、列lpWindowName)。 33 34 [DLLIMPORT(" OLEACC.DLL " )] 35 公共 静的 にextern int型 AccessibleObjectFromWindow(INT HWND、UINT dwObjectID、バイト [] RIID、REF Microsoft.Office.Interop.Excel.WindowのPTR)。 36 37 静的 ボイドメイン(文字列[]引数) 38 { 39 列ファイルパス= @ " C:\ユーザーは管理者\デスクトップ\のddd.txtを\ " 。 40 のIntPtr結果=のShellExecute(IntPtr.Zero、" オープン"、ファイルパス、"" 、"" 、ShowCommands.SW_SHOWNORMAL)。 41 42 であれば(result.ToInt32()<= 32 ) 43 { 44 Console.WriteLineを(" オープン不良" ); 45 } 46である 47 Console.ReadKey(); 48 } 49 }