Согласно моему исследованию, когда я запускаю исполняемый файл C #, который открывает WinForm, в .NET, они не предлагают функцию доступа к этим объектам WinForm из отдельного процесса c # (я имею в виду отдельный файл), но Win32 API делает.
Затем я наткнулся на 3 функции из API.
FindWindow();
GetWindowLong();
CallWindowProc()
Мне нужно вызвать его сверху вниз, но затем я застрял на CallWIndowProc()
, потому что не могу понять, что ядолжен передать последние 3 аргумента.
private static extern UIntPtr CallWindowProc(IntPtr a, IntPtr b, uint c, IntPtr d, IntPtr e);
c, d and e
Согласно документу, это должно быть какое-то "сообщение", которое является int.Но где взять такое значение ???
http://msdn.microsoft.com/en-us/library/ms633571(v=vs.85).aspx
Код:
[DllImportAttribute("User32.dll")]
private static extern IntPtr FindWindow(String ClassName, String WindowName);
[DllImportAttribute("User32.dll")]
private static extern long GetWindowLong(IntPtr a, int b);
[DllImportAttribute("User32.dll")]
private static extern UIntPtr CallWindowProc(IntPtr a, IntPtr b, uint c, IntPtr d, IntPtr e);
[STAThread]
static void Main(string[] args)
{
IntPtr lResult;
uint lMsg = 0;
IntPtr HWND = FindWindow("WindowsFormsApplication1.Form1", "Form1");
int GWL_WNDPROC = -4;
long WNDPROC = GetWindowLong(HWND, GWL_WNDPROC);
lResult = CallWindowProc(WNDPROC, HWND, lMsg, 0, 0);
}
Разъяснение
ОК. Я должен был прояснить это. Моя цель - запустить следующий фрагмент кода против выполняемой WebForm.(Я хочу)
var t = new Thread(() =>
{
Settings.AutoStartDialogWatcher = false;
var ie = new IE(form1.webBrowser1.ActiveXInstance);
ie.GoTo("http://www.google.com");
ie.TextField(Find.ByClass("lst")).TypeText("this is awesome!!");
ie.Button(Find.ByName("btnG")).Click();
});
t.SetApartmentState(ApartmentState.STA);
t.Start();