.版本 2
.DLL命令 FindWindow, 整数型, "user32", "FindWindowA"
.参数纤携 lpClassName, 文本型
.参数 lpWindowName, 文本型
其他程序窗口句柄 = FindWindow (类名伍大, 标题)
最小化窗口process
p
=
new
process()
p.startinfo.filename
=
@"外部程序位稿皮和置"
p.startinfo.windowstyle
=
processwindowstyle.minimized
p.start()
隐藏窗握培口process
p
=
new
process()
p.startinfo.filename
=
@"键盯例如:c:\alltry.exe"
p.startinfo.windowstyle
=
processwindowstyle.hidden
p.start()
注意需要
using
system.diagnostics
static extern IntPtr FindWindow(string lpClassName,string lpWindowName)[DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow)
[STAThread]
static void Main(string[] args)
{
string path = "键启..\\..\\..\\AUT3\\bin\\Debug\\AUT3.exe"
Process p = Process.Start(path)
if (p==null)
Console.WriteLine("Warning:process may already exist")
Console.WriteLine("Finding main window handle")
IntPtr mwh = FindMainWindowHandle("Form1", 100, 25)
Console.WriteLine("Handle to main window is " + mwh)
//有名字控件句柄
Console.WriteLine("Findding handle to textbox1")
IntPtr tb = FindWindowEx(mwh, IntPtr.Zero, null, "<enter color>")
if (tb == IntPtr.Zero)
throw new Exception("Unable to find textbox1")
else
Console.WriteLine("Handle to textbox1 is " + tb)
Console.WriteLine("Findding handle to button1")
IntPtr butt = FindWindowEx(mwh, IntPtr.Zero, null, "button1")
if (butt == IntPtr.Zero)
throw new Exception("Unable to find button1")
else
Console.WriteLine("胡旅Handle to button1 is " + butt)
//稿做如没有名字或者重名控件
Console.WriteLine("Findding handle to listbox1")
IntPtr lb = FindWindowByIndex(mwh,3)
if (lb == IntPtr.Zero)
throw new Exception("Unable to find listbox1")
else
Console.WriteLine("Handle to listbox1 is " + lb)
}
方法:
//通过索引查找相应控件句柄
static IntPtr FindWindowByIndex(IntPtr hwndParent,int index)
{
if (index == 0)
{
return hwndParent
}
else
{
int ct = 0
IntPtr result = IntPtr.Zero
do
{
result = FindWindowEx(hwndParent,result,null,null)
if (result != IntPtr.Zero)
{
++ct
}
} while (ct<index&&result!=IntPtr.Zero)
return result
}
}
//获得待测程序主窗体句柄
private static IntPtr FindMainWindowHandle(string caption,int delay,int maxTries)
{
IntPtr mwh = IntPtr.Zero
bool formFound = false
int attempts = 0
while (!formFound &&attempts <maxTries)
{
if (mwh == IntPtr.Zero)
{
Console.WriteLine("Form not yet found")
Thread.Sleep(delay)
++attempts
mwh = FindWindow(null, caption)
}
else
{
Console.WriteLine("Form has been found")
formFound = true
}
}
if (mwh == IntPtr.Zero)
throw new Exception("Could not find main window")
else
return mwh
FindWindow
FindWindowEx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)