読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

C#でお手軽に言語判定を行いたい

要は、以前記載したこちらをC#化しただけです。
お手軽に言語判定を行いたい - C#ATIA

ファイル間リンク取得の為に必要になったので作っていたのですが、
"ドキュメントのリンク" ウィンドウを表示させている(とか、コマンドの最中)と
ステータスバーの文字が異なっていて、正しく取得できない状況に。

ESCキーを2回押せばコマンド類も終了してくれるようなので、こんな感じ
にしてみました。

//C#
//言語取得
private static string GetLanguage(INFITF.Application cat) {
    //実行中コマンドを中止させる
    Microsoft.VisualBasic.Interaction.AppActivate(cat.get_Caption());
    SendKeys.SendWait("{ESC}");
    SendKeys.SendWait("{ESC}");

    //言語チェック
    if(cat.Windows.Count < 1) { return "non"; }
    cat.ActiveDocument.Selection.Clear();
    var st = cat.get_StatusBar();
    if(st.Contains("object")) { return "en"; }//英語
    if(st.Contains("objet")) { return "fr"; }//フランス語
    if(st.Contains("Objekt")) { return "de"; }//ドイツ語
    if(st.Contains("oggetto")) { return "it"; }//イタリア語
    if(st.Contains("オブジェクト")) { return "ja"; }//日本語
    if(st.Contains("объект")) { return "ru"; }//ロシア語
    if(st.Contains("象或")) { return "zh"; }//中国語
    switch(st.Length) {
        case 13://韓国語
            return "ko";
        case 23://日本語-日本語版以外のため
            return "ja";
        default:
            break;
    }
    return "other";
}

ESCキーを送るところは、こちらのサイトを参考にさせてもらいました。
C#でキーボード操作する(SendKeysクラスによる方法) - whoopsidaisies's diary

    SendKeys.Send("{ESC}");

では、上手く行かなかったので何となく "SendWait" にしたら上手く行きました。

VBAでは

'vba
    Select Case True
    ・
    ・
    ・

と書けるんですが、C#では

//c# これはNGです
switch(true) {
    case st.Contains("object"):
    ・
    ・
    ・

って書けないんですね。お陰さまでIf文連発。VB意外と優秀なんですねw
(C#もっとスマートな書き方が有ったら、教えてください)