C#がExcelの方法で開くことのShellExecuteを呼び出しWINAPI

背景:あなたは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      }
コードの表示
 

おすすめ

転載: www.cnblogs.com/daochangone/p/11364775.html
おすすめ