2011-03-02 87 views
0

我一個vb.net項目工作,我有一個「開始」,並在FormPost.exe「暫停」按鈕從命令propmpt執行按鈕

我想安排一個批處理過程每天運行在凌晨4點。

如何運行命令提示符來執行FormPost.exe,並且它們都通過命令提示符單擊「開始」按鈕?

請讓我知道。由於

+1

聽起來,這將更好地工作,作爲一個控制檯應用程序不是作爲一個WinForms應用程序... – PhilPursglove 2011-03-02 21:57:42

+0

是否使用WPF或形式? – Manfred 2011-03-02 21:59:12

回答

1

你可以做的是此覆蓋的OnControlCreateMethod()如下:

Public Class Form1 
    Public Sub New() 
    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 

    End Sub 

    Protected Overrides Sub OnCreateControl() 
     MyBase.OnCreateControl() 
     If Environment.CommandLine.Contains("/clickme") Then 
     ClickMeButton.PerformClick() 
     // ... need to wait here until click event handler has finished, e.g. 
     // using synchronization objects 
     Close() 
     End If 
    End Sub 
End Class 

如果傳遞「/ clickme」在命令行上會執行點擊事件,然後關閉窗體。如果表單是應用程序中的唯一一個,它將終止。

但請注意,您將需要添加一些等待click事件處理程序完成的邏輯。儘量避免使用投票或睡眠。請嘗試使用同步對象。

0

如果這是您的應用程序;你可以修改代碼,以便它檢查你是否從命令行/使用適當的參數運行它並激發按鈕click()本身。這將是最簡單的方法(我認爲約翰的答案顯示了這一點)

如果它不是你的應用程序;你仍然可以完成同樣的事情,但它並不漂亮。您可以編寫代碼,將執行WinForm的,然後激活它(以確保它具有焦點)

Public Shared Sub ActivateWoW() 
    Dim myApp As Process = Process.GetProcessesByName("MyApp").First 
    AppActivate(myApp.Id) 
End Sub 

然後,你可以使用的SendKeys()來模擬與形式的互動。比方說,開始按鈕將兩個「標籤」鍵來進行選擇......

SendKeys.Send("{TAB}{TAB}") 

然後快速暫停...

Thread.Sleep(25) 

然後按下回車鍵(這是幾乎總是一樣當按鈕被選中時,鼠標點擊良好)

SendKeys.Send("{ENTER}") 

如果你想獲得更多的參與,您需要開始使用WIN32 API調用。下面是一個鼠標點擊一些示例代碼...

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 

Private Const WM_LBUTTONUP As Long = &H202 
Private Const WM_RBUTTONUP As Long = &H205 

Private Const WM_LBUTTONDOWN As Long = &H201 
Private Const WM_RBUTTONDOWN As Long = &H204 

Private Shared Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long 
    Return (HiWord * &H10000) Or (LoWord And &HFFFF&) 
End Function 

Public Shared Sub SendMouseClick() 
    Dim Wow As Long = FindWindow("GxWindowClass", "MyWindow") 
    Dim dWord As Long = MakeDWord(LastX - LastRectX, LastY - LastRectY) 

    SendMessage(Wow, WM_RBUTTONDOWN, 1&, dWord) 
    Threading.Thread.Sleep(100) 
    SendMessage(Wow, WM_RBUTTONUP, 1&, dWord) 

End Sub