VS Code的扩展名,用于启动EXE并插入从EXE返回的文本

问题描述 投票:1回答:1

我们有一个用于Eclipse的插件/扩展(VB.NET窗体exe应用程序),但现在也希望将其用于Visual Studio Code。简单地说,exe组成了一些代码行(文本),可以在光标处插入。

所以我必须:

  1. 从VS Code启动VB.NET exe(通过键绑定或菜单)
  2. 以某种方式将文本从exe转换为VS Code
  3. 在当前光标位置插入文本

有人知道该怎么做吗? ...并且可能有一个正在运行的示例吗?

编辑:这就是我所拥有的,并且可以正常工作...唯一的问题是启动VB.NET可执行文件:

// Get the active text editor
let editor = vscode.window.activeTextEditor;

if (editor) {
    let selection = editor.selection;
    // start VB.NET exe here ... but how ?
    // insert a text at current position
    editor.edit(editBuilder => {
        editBuilder.insert(selection.start, 'text inserted');
    });
}
visual-studio-code vscode-extensions add-on
1个回答
0
投票

已经有一段时间了,但是由于我一直在努力解决相同的问题,而现在我已经弄清楚了,所以认为留下答案会很好。我还假设您的问题不是texteditor本身,而是如何从exe获取文本。

我完成此操作的方式是创建一个控制台应用程序,将结果序列化为JSON,然后将其输出到控制台,然后从vsc扩展端读取进程中的缓冲区,并将其解析回对象可以使用。

我的应用程序:

class Program
{
    public class TMSCheckResult
    {
        public bool ValidationSucceeded { get; set; }
        public string ResultMessage { get; set; }
        public int ErrorColumn { get; set; }
        public int ErrorRow { get; set; }
    }

    static void Main(string[] args)
    { 
        var result = new TMSChecker().Validate(args[0], args[1]);            
        var serializedResult = JsonConvert.SerializeObject(result);
        Console.WriteLine(serializedResult);
    }
}

我的扩展名:

import * as child from 'child_process';

    interface TMSCheckResult {
    ValidationSucceeded: boolean;
    ResultMessage: string;
    ErrorColumn: number;
    ErrorRow: number;
}

export class TMSChecker {
    runValidation() {            
        const res = child.execFileSync('myapppath.exe', ['arg0', 'arg1']);
        let result: TMSCheckResult = JSON.parse(res.toString());
        if (!result.ValidationSucceeded) {
            vscode.window.showErrorMessage(result.ResultMessage);
            //... work on the texteditor to show where the error is
        }
        else {
            vscode.window.showInformationMessage('Syntax is correct.');
        }
    }
}

PS 1:您的exe必须始终以0退出-只需将Main保留为void-否则扩展名会出现异常。

PS 2:如果结果文本太大,则可能需要将结果写入文件,然后在扩展名上读取该文件,否则可能最终不得不处理缓冲区大小限制。 >

© www.soinside.com 2019 - 2024. All rights reserved.