win32 API 编程
Posted
技术标签:
【中文标题】win32 API 编程【英文标题】:win32 Api programming 【发布时间】:2011-08-23 06:44:28 【问题描述】:我想获得一个正在运行的应用程序文本,例如,如果我正在运行记事本,那么我想获得写入其中的文本。首先我必须获得记事本的句柄,但我不知道如何获得记事本处理所以请告诉我。那我可以通过哪些函数得到它的内部文本?要包含哪些头文件?什么是必要的声明? 请帮助我,我是 Windows API 编程的新手。我已经阅读了 Windows 编程的基本教程,但这对我没有多大帮助。
【问题讨论】:
【参考方案1】:使用FindWindowEx。虽然您一定能够自己找到这个,但如果您正在寻找/谷歌搜索“在 C++ 中查找记事本句柄”的方法;)
您甚至可以在“Sending text to notepad in C++”上找到完整的示例
【讨论】:
我的基本问题是如何获取记事本窗口句柄,而且我想从记事本中检索文本 ShellExecuteA(NULL, "open", "mytext.txt", NULL, NULL, SW_SHOWNORMAL);为了完整起见,daniweb 上的示例需要请求用户打开记事本,这一行可能会为您打开它(例如,我将它用于 firefox 和“***.com/index.html”)。 'A' 后缀在我的系统上是一些奇怪的(非)ASCI-ness。 您使用 FindWindowEx 获得记事本窗口句柄,如我链接到的示例中所示。链接是我答案中的蓝色文本。您实际上可以单击它们以访问包含该信息的页面。 :) 也就是说,以这种方式控制记事本几乎没有实际用途。如果您只是在自己的表单上放置一个文本框,它会更容易和更可靠。但这是一个完全不同的教程。 您可以使用 WM_GETTEXT 消息从另一个应用程序中的控件获取文本。它在同一个文档中。 :)【参考方案2】:要扩展 GolezTrol 的答案,您可以这样做:
#include <windows.h>
#include <tchar.h>
int CALLBACK _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow )
HWND hwnd = FindWindow( _T("Notepad"), NULL);
hwnd = FindWindowEx( hwnd, NULL, _T("edit"), NULL );
TCHAR lpText[256];
SendMessage( hwnd, WM_GETTEXT, _countof(lpText), (LPARAM)lpText);
MessageBox(0, lpText, lpText, 0);
return ERROR_SUCCESS;
实际上,您可能会使用更可靠的窗口识别方法(例如,枚举所有窗口并验证它属于哪个进程)
【讨论】:
以上是关于win32 API 编程的主要内容,如果未能解决你的问题,请参考以下文章
无法理解普通 c++ 与 vc++、win32 编程、mfc、win32 api、CLI 之间的关系 [关闭]