• 获得其他程序控件中的信息 WM_GETTEXT消息


    获得其他程序控件中的信息,尤其跨进程,这个着实让我头疼捯饬了一阵,最后才明白只能通过WM_GETTEXT消息获取文本。

    SendMessage(h, WM_GETTEXT, 260, Longint(@Caption));(h:要获取信息的控件句柄;Caption: array [0 .. MAX_PATH] of Char;)此消息即发送给系统并获取控件文本信息至Caption里。

    以下是自己的代码:

    View Code
     1 procedure TSSoUtils.InsertHwnd(h: HWND);
    2 var
    3 level, Num: integer;
    4 Y: integer;
    5 str: string;
    6 ParentWnd: HWND;
    7 ClassName: array [0 .. MAX_PATH] of Char;
    8 Caption: array [0 .. MAX_PATH] of Char;
    9 ParentClassName: array [0 .. MAX_PATH] of Char;
    10 ParentCaption: array [0 .. MAX_PATH] of Char;
    11 begin
    12
    13 Timer1.Enabled := FALSE;
    14 Timer1.Enabled := TRUE;
    15
    16 // Sleep(100000);
    17 Timer1.Interval := 2000;
    18
    19 Num := GetParents(h);
    20 wnd_x[Num].level := GetNum(h); // 获取位于当前层的位置
    21 Y := wnd_x[Num].level;
    22 ParentWnd := GetParent(h);
    23 GetClassName(h, ClassName, sizeof(ClassName));
    24 // GetWindowText(h, Caption, sizeof(Caption));
    25 GetClassName(ParentWnd, ParentClassName, sizeof(ParentClassName));
    26 // GetWindowText(ParentWnd, ParentCaption, sizeof(ParentCaption));
    27
    28 SendMessage(h, WM_GETTEXT, 260, Longint(@Caption));
    29 // 获得其他程序控件中的信息只能通过WM_GETTEXT消息获取文本
    30 SendMessage(ParentWnd, WM_GETTEXT, 260, Longint(@ParentCaption));
    31
    32 OutputDebugString(pchar('Caption00: ' + Caption));
    33 OutputDebugString(pchar('ClassName00: ' + ClassName));
    34 OutputDebugString(pchar('ParentCaption00: ' + ParentCaption));
    35 OutputDebugString(pchar('ParentClassName00: ' + ParentClassName));
    36
    37 InsertOpe(Num, Y, h, Caption, ClassName, ParentCaption, ParentClassName);
    38
    39 wnd_x[Num].Wnd_y[Y].h := h;
    40
    41 wnd_x[Num].level := wnd_x[Num].level - 1; str := string(Caption) + '' + string(ClassName) + '' + 'level:' +
    42 inttostr(Num) + ' Y:' + inttostr(Y) + ' HWND:' + inttostr(h);
    43 OutputDebugString(pchar(str));
    44 end;


     

    以下是参考的代码:

    View Code
     1 #include <windows.h>
    2 BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam);
    3 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
    4 {
    5 char className[]="notepad";
    6 HWND hWnd=::FindWindow(className,NULL);
    7 if(hWnd)
    8 {
    9 ::EnumChildWindows(hWnd,EnumChildProc,0);
    10 return 0;
    11 }
    12 MessageBox(NULL,"fail!","fail",MB_OK);
    13 return 0;
    14 }
    15 BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam)
    16 {
    17 char temp1[256],temp2[256];
    18 ::GetClassName(hWnd,temp1,255);
    19 if(!::strcmp(temp1,"Edit"))
    20 {
    21 ::SendMessage(hWnd,WM_GETTEXT,sizeof(temp2)/sizeof(char),(LPARAM)temp2);//EDIT的句柄,消息,接收缓冲区大小,接收缓冲区指针
    22 ::MessageBox(NULL,temp2,"get",MB_OK);
    23 return 0;
    24 }
    25 ::wsprintf(temp2,"classname: %s",temp1);
    26 MessageBox(NULL,temp2,"cwnd",MB_OK);
    27 return true;
    28 }
  • 相关阅读:
    Altium Designer如何从已有的PCB图中导出封装库
    获得内核函数地址的四种方法
    poj2976 Dropping tests
    poj3045 Cow Acrobats
    CF916C Jamie and Interesting Graph
    poj3104 Drying
    poj2455 Secret Milking Machine
    poj2289 Jamie's Contact Groups
    网络流最小路径覆盖
    CF897C Nephren gives a riddle
  • 原文地址:https://www.cnblogs.com/IceKernel/p/2373101.html
Copyright © 2020-2023  润新知