Получить текст из Edit

Тема в разделе "WASM.BEGINNERS", создана пользователем XshStasX, 20 сен 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Есть Edit (находится в другом приложении) из своего приложения пытаюсь получить текст
    GetWindowText получаю пустую строку(.
    HWND определил правильно(подставлял значение из Spy++).

    Также найти этот Edit через FindFindow не удается.
    Код (Text):
    1. HWND SearchWindow(PWSTR text,PWSTR classname)
    2. {
    3.     HWND hwnd = 0;
    4.     DWORD id;
    5.     while(1){
    6.         hwnd = FindWindow(classname,text);
    7.         if (hwnd == NULL) Sleep(32);
    8.         GetWindowThreadProcessId(hwnd,&id);
    9.         if (isSetupProccess(id))
    10.             break;
    11.     };
    12.   return hwnd;
    13. };
    14.  
    15. BOOL isSetupProccess(DWORD id)
    16. {
    17. // ExecuteProcessId идентификатор нужного процесса
    18.  return ExecuteProcessId == id;
    19. };
    20.  
    21. edit=SearchWindow(TEXT("Edit..."),TEXT("edit")))
    Какие еще есть варианты ?...
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows

    назначение этой строки мне вообще непонятно. У тебя как-то странно циклы организованы
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    такой вариант тоже текст не выдает(, но нужный hwnd находит.

    Код (Text):
    1. BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
    2. {
    3.  
    4.     WCHAR Text[MAX_PATH] = {0} ;
    5.    
    6.     if(GetWindowText(hwnd,Text,sizeof(Text)))
    7.     {
    8.         MessageBox(NULL,Text,TEXT(""),0);
    9.     };
    10.     return TRUE;
    11. };
    12.  
    13. EnumChildWindows(parent,&EnumChildProc,NULL);
    MSoft
    Это нужно для того чтоб подождать пока нужное окно будет создано.

    Еще делал вот так:
    path = FindWindowEx(parent,NULL,TEXT("edit") ,NULL);
    возвращает 0.
     
  4. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    А в msdn об этом написано:
     
  5. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Уверен что класс окна "edit" ? Для работы с окнами помогает программа InqSoft Window Scanner.

    Как то писал "сниффер" для поиска регистрационного ключика в памяти процесса, вот кусок кода
    Код (Text):
    1. start:
    2. push offset ProcInfo
    3. push offset buffer2
    4. push 0
    5. push 0
    6. push 0
    7. push 0
    8. push 0
    9. push 0
    10. push 0
    11. push offset procname
    12. Call CreateProcessA; Создадим процесс
    13. push 1000
    14. call Sleep
    15.  
    16. mov eax, dword ptr ds:[buffer2 + 4]
    17. mov pid, eax
    18.  
    19.  
    20. push offset textokna
    21. push offset Class1
    22. Call FindWindowA ; найдем окно регистрации
    23. mov dword ptr ds:[hwnd1], eax
    24.  
    25.  
    26. push 0
    27. push offset Class2
    28. push 0
    29. push dword ptr ds:[hwnd1]
    30. Call FindWindowExA ; Найдем editbox ключа запроса
    31. mov dword ptr ds:[hwnd2], eax
    32.  
    33. push offset myname
    34. push 0
    35. push WM_SETTEXT
    36. push dword ptr ds:[hwnd2]
    37. Call SendMessageA ; Установим имя во втором EditBox
    38.  
    39. push 1000
    40. call Sleep
    41.  
    42. mov ecx, 5
    43. cicle1:
    44. push ecx
    45. push GW_HWNDNEXT
    46. push dword ptr ds:[hwnd2]
    47. Call GetWindow
    48. mov dword ptr ds:[hwnd2], eax
    49. pop ecx
    50. loop cicle1
    51.  
    52.  
    53. push 38h
    54. push offset buff
    55. push dword ptr ds:[hwnd2]
    56. Call GetWindowTextW ; Прочитаем ключ запроса
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Читал, но!
    Другие надписи с кнопок отлично показывает.
    Spy++ говорит что да.
     
  7. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Думаю стоит приложить тут программу, editbox которой хочешь прочитать.
     
  8. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Flint_ta
    что?...
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    сорцы выложи, говорят :)

    П.С.: запятые - это сила
     
  10. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Не сорцы ) А
    вот ее и выложи
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Читал, но ... не отгадал ни одной буквы ? ;)
    В ремарках, черным по белому сказано, что для окна чужого приложения GetWindowText выдает только caption окна (название окна, хранящееся в его дискрипторе). Поэтому и "надписи с кнопок отлично показывает", т.к. это и есть их caption и никакого другого текста у кнопок просто нет. А вот у эдит-контролов и комбобоксов кроме (обычно не используемого) caption, есть еще и текст, который ес-но хранится не в дискрипторе, а в куче процесса
     
  12. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
  13. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    leo
    А почему тогда Spy++ тогда показывает содержимое(поле "Заголовок окна" в Spy++) edit?
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Заголовок = caption
    Содержимое = text

    как-то так :)
     
  15. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Если ты это имеешь ввиду перевод, то ты меня не удивил ).
    Так как нужный текст Spy++ показывает именно в заголовке то я и заголовок ищу.
     
  16. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Что значит "почему" ? Почему вообще показывает - козе понятно, на то он и Spy ;) А почему именно в поле "Caption", а не в отдельном поле "Text" - тоже козе понятно, чтобы не плодить лишние поля
    В чем проблема то - юзай для эдита SendMessage(hwnd,WM_GETTEXT,...), как рекомендует мсдн, и будет тебе счастие :)
     
  17. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Код (Text):
    1.     .686
    2.     .model flat, stdcall
    3.     option casemap :none
    4.     assume fs:nothing
    5.     assume gs:nothing
    6.     assume ds:nothing
    7.     include \MASM32\INCLUDE\kernel32.inc
    8.     include \MASM32\INCLUDE\user32.inc
    9.     include \MASM32\INCLUDE\windows.inc
    10.    
    11.     includelib \MASM32\LIB\kernel32.lib
    12.     includelib \MASM32\LIB\user32.lib
    13.    
    14.    
    15.    
    16.  
    17. .data
    18. textokna db "NetLimiter 2 Pro Setup ", 0
    19. Class1 db "#32770", 0
    20. Class2 db "#32770", 0
    21. Class3 db "Edit", 0
    22. mytext db "My Text", 0
    23.  
    24. .data?
    25. hwnd1 db 4 dup (?)
    26. hwnd2 db 4 dup (?)
    27. hwnd3 db 4 dup (?)
    28. buff db 260 dup (?)
    29.  
    30. .code
    31.  
    32. start:
    33.  
    34. push offset textokna
    35. push offset Class1
    36. Call FindWindowA ; найдем окно NetLimiter 2 Pro Setup
    37. mov dword ptr ds:[hwnd1], eax
    38.  
    39.  
    40. push 0
    41. push offset Class2
    42. push 0
    43. push dword ptr ds:[hwnd1]
    44. Call FindWindowExA ; Найдем #32770
    45. mov dword ptr ds:[hwnd2], eax
    46.  
    47. push 0
    48. push offset Class3
    49. push 0
    50. push dword ptr ds:[hwnd2]
    51. Call FindWindowExA ; Найдем Edit
    52. mov dword ptr ds:[hwnd3], eax
    53.  
    54. push offset buff
    55. push 260
    56. push WM_GETTEXT
    57. push dword ptr ds:[hwnd3]
    58. Call SendMessageA ; Прочитаем текст Edit
    59.  
    60.  
    61. push offset mytext
    62. push 0
    63. push WM_SETTEXT
    64. push dword ptr ds:[hwnd3]
    65. Call SendMessageA ; Установим текст Edit
    66.  
    67. push 0
    68. Call ExitProcess
    69.  
    70.  
    71. end start
    Думаю допилишь сам что тут к чему )