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 编程的主要内容,如果未能解决你的问题,请参考以下文章

Win32 API编程——前言

无法理解普通 c++ 与 vc++、win32 编程、mfc、win32 api、CLI 之间的关系 [关闭]

Win32 API 函数以编程方式启用/禁用设备

windows程序设计和windows核心编程 哪本更适合win32 api入门

win32编程简介

Win32编程API 基础篇 -- 1.入门指南 根据英文教程翻译