易语言获取其他程序中某按钮句柄

易语言获取其他程序中某按钮句柄,第1张

首先要知道其他程序窗口的类名腔竖竖和标题

.版本 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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12488821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存