Как найти и ссылаться на определенную форму? (VB.NET) - PullRequest
0 голосов
/ 27 января 2012

В настоящее время я делаю заявление, чтобы помочь мне в тестировании другого отдельного приложения (оба они сделаны в VB.NET). Я хочу, чтобы мое приложение-тестер могло вводить информацию в форме моего другого приложения. Поскольку я знаком с обоими приложениями, я знаю имя и все, что касается формы, с которой я хочу что-то делать в своем приложении для тестирования. Моя проблема в том, что мне нужен способ использовать эту информацию из формы тестируемого, чтобы получить дескриптор или что-то, с чем я мог бы фактически сослаться на эту форму в коде для моего приложения тестера.

Как я могу получить эту форму? мой единственный опыт с чем-то похожим - получить управление главным окном процесса, но сделать это было немного проще:

Dim iTunesID as intptr
    for each process as process in process.getprocesses
if proc.mainwindowtitle = "iTunes" then iTunesID = proc.MainwindowHandle
next

Однако даже этим я не очень доволен, потому что он должен проходить через каждый процесс. и даже из-за этого я не совсем уверен, как ссылаться на мое конкретное окно, поскольку в данном случае это не главное окно. Я пытался найти способ сделать это, но мой поиск слишком расплывчатый, я думаю, потому что я просто не знаю, какие методы можно использовать, чтобы сделать это или помочь в этом.

Моей первой мыслью было нечто похожее на описанное выше, но с чем-то вроде "для каждой формы как формы.формы в" формах. Формах "", но я даже не знаю команды для запуска форм, и хотя Я думаю, я мог бы найти один, я надеюсь на лучшее решение, чем итерация по всем процессам / формам.

Спасибо за любую помощь заранее! :)

Ответы [ 2 ]

1 голос
/ 27 января 2012

Если я правильно слежу за вашими вопросами, могут помочь следующие фрагменты кода VB.NET:

Dim procNameSought As String = "Notepad2"

'
' Use LINQ to get the Process ID for the Application whose window should
' be brought into focus if you don't already have the Process ID...
'
Dim processID As Integer = (From proc As Process In Process.GetProcesses
                            Where proc.ProcessName.Trim() = procNameSought
                            Select proc.Id).FirstOrDefault()

'
' Use AppActivate to bring the Main Window for the Process into Focus.... 
'
Microsoft.VisualBasic.AppActivate(processID)

Если главное окно приложения не свернуто до панели задач (например,главное окно скрыто другим приложением), оно будет выведено на передний план и будет иметь фокус.Однако, если главное окно процесса свернуто до панели задач, вам может потребоваться использовать PInvoke для вызова функции Windows API SetActiveWindow (http://msdn.microsoft.com/en-us/library/ms939986.aspx).

объяснение caeasy здесь охватывает один подход ккак это сделать: Правильный способ (в .NET) переключить фокус на другое приложение

Для использования SetActiveWindow () вам необходимо указать экземпляр дескриптора Windows, который вы используете.пытаясь установить фокус, который можно получить с помощью следующих вызовов:

'
' 32-Bit Window Handle : You may need to change this over to Int64 if 
' you're running on a 64-Bit OS...
'
Dim windowHandle As Int32 = (From proc As Process In Process.GetProcesses
                             Where proc.ProcessName.Trim() = procNameSought
                             Select proc.MainWindowHandle).FirstOrDefault()

Dim winHandlePtr As New IntPtr(windowHandle)

Я надеюсь, что это помогло и заинтересовало ...

0 голосов
/ 27 января 2012

Если у вас есть время, вы можете взглянуть на источник Соколиного Глаза (http://hawkeye.codeplex.com/) Это утилита с открытым исходным кодом, позволяющая подключиться к работающему приложению .Net и изменить значение свойства, метод вызова и т. Д. *

Ястребиный глаз фактически подключается к работающему приложению с помощью действия «укажи и щелкни».

Вы можете найти работающее приложение, использующее цикл в существующем процессе, затем, возможно, вы сможете использовать некоторые ноу-хау из исходного кода Hawkeye, чтобы подключиться к этому приложению и начать изменять значения, вызывать методы и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...