如何在使用stdio和stdout的vba中执行shell命令?

时间:2011-06-15 03:43:24

标签: visual-studio vba dos

在visual studio中我需要一个宏来获取所选文本,将其传递给dos命令,捕获生成的流并用它替换所选文本。

像这样......

Dim objSel As TextSelection = DTE.ActiveDocument.Selection
objSel.Text = RunShellCommand("beautify.rb", objSel.Text)

..我不知道如何实施RunShellCommand

似乎Shell("beautify.rb", 1)会执行一个命令并返回输出,在这种情况下我需要的只是..“你如何将文本流式传输到shell命令?”

1 个答案:

答案 0 :(得分:0)

我有一个使用AutoHotKey(一个优秀的工具)并更改beautify.rb来获取文件的工作。

;window ctrl R  - beautify sql
#^R::
ClipSaved := ClipboardAll   
clipboard = ; Start off empty to allow ClipWait to detect when the text has arrived.
Send ^c
ClipWait  ; Wait for the clipboard to contain text.
FileDelete , c:\tmp\tmp_ahk_clip.txt
FileAppend , %clipboard% , c:\tmp\tmp_ahk_clip.txt
RunWait, %comspec% /c ""C:\...\Database\beautify.rb" c:\tmp\tmp_ahk_clip.txt > c:\tmp\tmp_ahk_clip_out.txt" ,,Hide
FileRead, clipboard, c:\tmp\tmp_ahk_clip_out.txt
Send ^v
Clipboard := ClipSaved 
ClipSaved = ; Free the memory 
return 

现在任何带有sql的应用程序中的任何文本字段都可以很漂亮:)