Есть Edit (находится в другом приложении) из своего приложения пытаюсь получить текст GetWindowText получаю пустую строку(. HWND определил правильно(подставлял значение из Spy++). Также найти этот Edit через FindFindow не удается. Код (Text): HWND SearchWindow(PWSTR text,PWSTR classname) { HWND hwnd = 0; DWORD id; while(1){ hwnd = FindWindow(classname,text); if (hwnd == NULL) Sleep(32); GetWindowThreadProcessId(hwnd,&id); if (isSetupProccess(id)) break; }; return hwnd; }; BOOL isSetupProccess(DWORD id) { // ExecuteProcessId идентификатор нужного процесса return ExecuteProcessId == id; }; edit=SearchWindow(TEXT("Edit..."),TEXT("edit"))) Какие еще есть варианты ?...
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 назначение этой строки мне вообще непонятно. У тебя как-то странно циклы организованы
такой вариант тоже текст не выдает(, но нужный hwnd находит. Код (Text): BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) { WCHAR Text[MAX_PATH] = {0} ; if(GetWindowText(hwnd,Text,sizeof(Text))) { MessageBox(NULL,Text,TEXT(""),0); }; return TRUE; }; EnumChildWindows(parent,&EnumChildProc,NULL); MSoft Это нужно для того чтоб подождать пока нужное окно будет создано. Еще делал вот так: path = FindWindowEx(parent,NULL,TEXT("edit") ,NULL); возвращает 0.
Уверен что класс окна "edit" ? Для работы с окнами помогает программа InqSoft Window Scanner. Как то писал "сниффер" для поиска регистрационного ключика в памяти процесса, вот кусок кода Код (Text): start: push offset ProcInfo push offset buffer2 push 0 push 0 push 0 push 0 push 0 push 0 push 0 push offset procname Call CreateProcessA; Создадим процесс push 1000 call Sleep mov eax, dword ptr ds:[buffer2 + 4] mov pid, eax push offset textokna push offset Class1 Call FindWindowA ; найдем окно регистрации mov dword ptr ds:[hwnd1], eax push 0 push offset Class2 push 0 push dword ptr ds:[hwnd1] Call FindWindowExA ; Найдем editbox ключа запроса mov dword ptr ds:[hwnd2], eax push offset myname push 0 push WM_SETTEXT push dword ptr ds:[hwnd2] Call SendMessageA ; Установим имя во втором EditBox push 1000 call Sleep mov ecx, 5 cicle1: push ecx push GW_HWNDNEXT push dword ptr ds:[hwnd2] Call GetWindow mov dword ptr ds:[hwnd2], eax pop ecx loop cicle1 push 38h push offset buff push dword ptr ds:[hwnd2] Call GetWindowTextW ; Прочитаем ключ запроса
Читал, но ... не отгадал ни одной буквы ? В ремарках, черным по белому сказано, что для окна чужого приложения GetWindowText выдает только caption окна (название окна, хранящееся в его дискрипторе). Поэтому и "надписи с кнопок отлично показывает", т.к. это и есть их caption и никакого другого текста у кнопок просто нет. А вот у эдит-контролов и комбобоксов кроме (обычно не используемого) caption, есть еще и текст, который ес-но хранится не в дискрипторе, а в куче процесса
вот : http://www.download3k.com/Install-NetLimiter-2.html там при установке нужно свой путь другой указать автоматом.
Если ты это имеешь ввиду перевод, то ты меня не удивил ). Так как нужный текст Spy++ показывает именно в заголовке то я и заголовок ищу.
Что значит "почему" ? Почему вообще показывает - козе понятно, на то он и Spy А почему именно в поле "Caption", а не в отдельном поле "Text" - тоже козе понятно, чтобы не плодить лишние поля В чем проблема то - юзай для эдита SendMessage(hwnd,WM_GETTEXT,...), как рекомендует мсдн, и будет тебе счастие
Код (Text): .686 .model flat, stdcall option casemap :none assume fs:nothing assume gs:nothing assume ds:nothing include \MASM32\INCLUDE\kernel32.inc include \MASM32\INCLUDE\user32.inc include \MASM32\INCLUDE\windows.inc includelib \MASM32\LIB\kernel32.lib includelib \MASM32\LIB\user32.lib .data textokna db "NetLimiter 2 Pro Setup ", 0 Class1 db "#32770", 0 Class2 db "#32770", 0 Class3 db "Edit", 0 mytext db "My Text", 0 .data? hwnd1 db 4 dup (?) hwnd2 db 4 dup (?) hwnd3 db 4 dup (?) buff db 260 dup (?) .code start: push offset textokna push offset Class1 Call FindWindowA ; найдем окно NetLimiter 2 Pro Setup mov dword ptr ds:[hwnd1], eax push 0 push offset Class2 push 0 push dword ptr ds:[hwnd1] Call FindWindowExA ; Найдем #32770 mov dword ptr ds:[hwnd2], eax push 0 push offset Class3 push 0 push dword ptr ds:[hwnd2] Call FindWindowExA ; Найдем Edit mov dword ptr ds:[hwnd3], eax push offset buff push 260 push WM_GETTEXT push dword ptr ds:[hwnd3] Call SendMessageA ; Прочитаем текст Edit push offset mytext push 0 push WM_SETTEXT push dword ptr ds:[hwnd3] Call SendMessageA ; Установим текст Edit push 0 Call ExitProcess end start Думаю допилишь сам что тут к чему )