кнопка выполнить из команды propmpt - PullRequest
0 голосов
/ 03 марта 2011

Я работаю над проектом vb.net, и у меня есть кнопки «Пуск» и «Пауза» на FormPost.exe

Я пытаюсь запланировать запуск пакетного процесса каждый день утром в 4:00.

Как запустить командную строку для запуска FormPost.exe и нажать кнопку «Пуск», все через командную строку?

Пожалуйста, дайте мне знать. Спасибо

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Что вы можете сделать, это переопределить 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, а затем закроет форму.Если форма является единственной в приложении, она будет прервана.

Имейте в виду, однако, что вам нужно будет добавить некоторую логику, которая ожидает завершения обработчика события click.Старайтесь избегать использования опроса или сна.Вместо этого попробуйте использовать объекты синхронизации.

0 голосов
/ 03 марта 2011

Если это ваша заявка; Вы можете изменить код так, чтобы он проверял, запускаете ли вы его из командной строки / с соответствующими аргументами, и запускаете саму кнопку click (). Это был бы самый простой подход (я думаю, что ответ Джона показывает это)

Если это не ваше приложение; Вы все еще можете сделать то же самое, но это не так красиво. Вы можете написать код, который будет выполнять winForm, а затем активировать его (чтобы он был в фокусе)

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

Затем вы можете использовать SendKeys () для имитации взаимодействия с формой. Допустим, кнопка запуска требует выбора двух клавиш «tab» ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...