【问题标题】:win32 Api programmingwin32 API 编程
【发布时间】:2011-08-23 06:44:28
【问题描述】:

我想获得一个正在运行的应用程序文本,例如,如果我正在运行记事本,那么我想获得写入其中的文本。首先我必须获得记事本的句柄,但我不知道如何获得记事本处理所以请告诉我。那我可以通过哪些函数得到它的内部文本?要包含哪些头文件?什么是必要的声明? 请帮助我,我是 Windows API 编程的新手。我已经阅读了 Windows 编程的基本教程,但这对我没有多大帮助。

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    使用FindWindowEx。虽然您一定能够自己找到这个,但如果您正在寻找/谷歌搜索“在 C++ 中查找记事本句柄”的方法;)

    您甚至可以在“Sending text to notepad in C++”上找到完整的示例

    【讨论】:

    • 我的基本问题是如何获取记事本窗口句柄,而且我想从记事本中检索文本
    • ShellExecuteA(NULL, "open", "mytext.txt", NULL, NULL, SW_SHOWNORMAL);为了完整起见,daniweb 上的示例需要请求用户打开记​​事本,这一行可能会为您打开它(例如,我将它用于 firefox 和“stackoverflow.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;
    }
    

    实际上,您可能会使用更可靠的窗口识别方法(例如,枚举所有窗口并验证它属于哪个进程)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多