簡體   English   中英

如何使用VBScirpt在已打開的CMD窗口中執行命令

[英]How to execute a command in already open CMD window using VBScirpt

我正在嘗試自動執行每天必須執行的備份。 我有一個在CMD中運行的程序,需要在運行備份之前將其正確關閉。 它需要關閉的兩個命令是:shutdown yes(確認操作)

然后可以關閉該CMD窗口,並且我已經編寫了.bat文件來執行備份。

除了非常簡單的腳本外,我從未編寫過VBScript,因此,如果我的問題不夠清楚,我感到抱歉。

想法是-使用VBScript,輸入shutdown {Enter}和yes {Enter},然后關閉該CMD窗口,然后執行備份批處理文件,該文件已設置為在完成備份后啟動CMD程序。

操作系統-Windows XP Professional

謝謝!

您可以通過將擊鍵作為Windows消息發送到運行程序的CMD窗口來嘗試以編程方式鍵入命令。

我不知道VBS,也許它具有映射到系統API函數PostMessage和/或SendMessage或多個SendMessage 如果這樣做的話會很棒,特別是如果有人發布了解釋如何使用它們的答案。 同時,我可以在批處理文件中借助名為SendMessage實用工具向您展示如何使用此方法。

基本上,該實用程序允許您將任意Windows消息發送到任意窗口,如下所示:

SendMessage.exe  /message: /wparam: /lparam: 

稍后我將解決target_specification位,其他參數是:

  • – the message being sent, specified by code . /message: –要發送的消息,由code指定。 在您的情況下,可能是以下兩種情況之一:

     /message:WM_CHAR /message:258 /message:0x0102 

    所有這些都指定WM_CHAR消息

  • – for the WM_CHAR message, this one should be the code of the keystroke being sent. /wparam: –對於WM_CHAR消息,此消息應為正在發送的擊鍵的代碼。

    在您的情況下,由於您的命令僅包含ASCII字符,因此所有代碼都將與相應字符的ASCII代碼匹配。 因此,您可以使用ASCII圖表來轉換命令中的字符。 s例如

     /wparam:115 

    h

     /wparam:104 

    等等。

    請注意,您還需要發送Enter鍵。 根據ASCII控制代碼表

     /wparam:13 
  • – you can see from the WM_CHAR's manual page that the LPARAM parameter is actually supposed to carry multiple pieces of information as a single numeric value. /lparam: -您可以從WM_CHAR的手冊頁中看到,LPARAM參數實際上應該攜帶多個信息作為單個數值。 但是,對於您的特定情況,僅記住該參數應簡單地指定為

     /lparam:1 

現在到目標規范部分。 這可能很棘手。 您將從工具網頁上的描述中了解到,可以使用不同的方法來指定目標窗口。 但是,並非每種方法都對您有用。

例如,您可以嘗試通過進程名稱指定目標:

/processname:

但是,如果您不是直接調用程序,而是在例如批處理文件中調用它,則該程序將不會在自己的窗口中運行,而是會借用托管CMD會話的窗口,因此該方法可能不會工作。

如果確實是調用程序的方式,則可以嘗試使用窗口標題指定目標:

/windowtitle:

這里唯一要記住的警告是,標題必須唯一地標識所需的窗口,否則擊鍵將發送到與指定標題匹配的所有窗口。 您可以嘗試通過在調用程序的批處理中使用title命令來唯一化title (在調用程序之前進行設置)。

因此,總而言之,這是完整備份腳本( 批處理腳本)的外觀,假設出於示例目的,目標窗口將由其標題指定:

@ECHO OFF
:: s
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:115 /lparam:1
:: h
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:104 /lparam:1
:: u
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:117 /lparam:1
:: t
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:116 /lparam:1
:: d
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:100 /lparam:1
:: o
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:111 /lparam:1
:: w
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:119 /lparam:1
:: n
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:110 /lparam:1
:: ENTER
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:13 /lparam:1

:: y
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:121 /lparam:1
:: e
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:101 /lparam:1
:: s
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:115 /lparam:1
:: ENTER
SendMessage.exe /windowtitle:"My Title" /message:WM_CHAR /wparam:13 /lparam:1

:: wait for some time (~3 sec) till the program shuts down, if necessary
PING -n 4 localhost 1>NUL

:: proceed with the back-up
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM