无法读取其他应用程序的标题
跳转我如何在主程序中找到窗口句柄...
在 C# 中,
我运行 notepad.exe 然后在其中输入一些内容,然后使用 SPY++ (0x111111) 找到主窗口句柄,
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);
.
.
.
GetWindowText((IntPtr)(0x111111), str, 1024);
此代码工作正常并返回标题主窗口的。
: : 但是当我做同样的事情来查找 notepad.exe 子项的标题时,它只是将 str 设置为空。间谍++告诉我孩子的标题有价值。
Jumping of how i will find windows handle in my main program...
in C#
I run notepad.exe then type something in it,then find the main window handle using SPY++ (0x111111) ,and
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);
.
.
.
GetWindowText((IntPtr)(0x111111), str, 1024);
this code works fine and return me the caption of the main window.
: : but when i do the same to find caption of the child of notepad.exe it just set str to nothing. the spy++ told me that the child's caption has value.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
GetWindowText 函数文档明确指出“GetWindowText 无法检索另一个应用程序中控件的文本。...要检索另一个进程中控件的文本,请直接发送 WM_GETTEXT 消息,而不是调用 GetWindowText。”
您可以使用以下代码检索控件的文本:
The GetWindowText function documentation clearly states that "GetWindowText cannot retrieve the text of a control in another application. ... To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText."
You can retrieve the control's text with the following code:
“最正确”的方法是:
注意使用
[In]
和[Out]
属性来消除编组期间不必要的复制。另请注意,您永远不应该将 p/invoke 方法暴露给外界(非公开)。
The "most correct" way to do this would be:
Note the use of
[In]
and[Out]
attributes to eliminate unnecessary copying during marshalling.Also note that you should never expose p/invoke methods to the outside world (not public).