API , читаем тип Edit из другого приложения ( проблема ) - страница 2

 
getch >>:

Здесь было бы лучше сначала попробовать, а потом уже при желании читать документацию.


ну Русские инженеры не читаю документацию :-)

я конечно сначала попробовал

потом google расказал мне как я ошибался


GetWindowTextA - не читает окна чужих приложений!

 
jartmailru >>:

buffer overrun'а на Вас нету :-)

GetWindowTextA(hWnd, p1, sizeof(p1));

Если p1 правильного типа, конечно. А не char *.

Написал для MQL4, не для C++.

 
YuraZ >>:


ну Русские инженеры не читаю документацию :-)

я конечно сначала попробовал

потом google расказал мне как я ошибался


GetWindowTextA - не читает окна чужих приложений!



Только что попробовал. Все работает!

 
jartmailru >>:

Привожу работающий код:

Немного юникодовый, но у меня с 2006-ого всё юникодовое :-)

Андрей большое спасибо

поправили, все пошло!

--

 
getch >>:

Только что попробовал. Все работает!

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

 	// TODO: Place code here.
	MSG msg;
	HACCEL hAccelTable;


   wchar_t a[] = L"                          ";

    SendMessage( (HWND)0x0b0bc4, WM_GETTEXT, sizeof(a) , (LPARAM)a );  --- это работает  - читает Edit ЧУЖОГО!  приложения

   // GetWindowTextA(    (HWND)0x0b0bc4, (LPSTR)a , sizeof(a) );   //  ---  это не работает
  return(0);
}

я не поленился проверил!

Вы код исходный дайте которым пробовали

и еще вы читаете Edit своего приложения ??? или чужого



грузите например калькулятор

и из MQL4 достаньте GetWindowsTextA содержимое вбитой циферки

попробуйте!

 

Не за что!

.

А насчет char * p = "_______";

При переходе на С++ строковые литералы становятся констными

и их нельзя использовать в качестве буферов.

.

Ниже- пара страничек из стандарта.

.

.

Вот специально выдержка из совместимости Си и Си++.

.


.

Вот только почему-то оставили возможность старой записи.

.

ИМХО, лучше использовать std::vector<char>.

 
jartmailru >>:

Не за что!

.

А насчет char * p = "_______";

При переходе на С++ строковые литералы становятся констными

и их нельзя использовать в качестве буферов.

.

Ниже- пара страничек из стандарта.

.

.


.

Вот только почему-то оставили возможность старой записи.

.

ИМХО, лучше использовать std::vector<char>..

думаю это особенности реализаци MQL4 ... там у меня нормально код работает - пример приводил

хотя наверно лучше делать как положенно




----

getch


посмотрите поиском в гугле

http://forum.sources.ru/index.php?showtopic=255483

почему не пашет


Rouse_ну и в чем противоречие?
я говорю что
1. "SetWindowText, GetWindowText это оболочка для SendMessage с нужными параметрами" - так оно и есть
2. "типа не твой процесс пошел нафиг" -так оно и есть, о чем и говорится в ваших ссылках
3. а так же в них говорится что хочеш послать текст наружу, сам пользуй SendMessage с WM_SETTEXT :P
--

 
YuraZ >>:

думаю это особенности реализаци MQL4 ... там у меня нормально код работает - пример приводил

У Mql есть еще одна особенность :-)

Раз уж зашёл разговор- прочитайте

'Файловые операции через WINAPI. Разработчикам - НЕ СМЕШНО !!!'

Там всё несмешно :-).

.

Они заоптимизировали строчки - и если где-то инициализируются

string'и одинаковыми строками (например, 8 пробелов),

то во-первых, у всех этих строк будет общий буфер памяти,

а во-вторых, значение в строке после инициализации (!)

будет таким же как после последнего вызова Dll.

.

Осторожно :-).

 


посмотрите поиском в гугле

http://forum.sources.ru/index.php?showtopic=255483

почему не пашет

Посмотрите реализацию, например, StatementClose, которая пашет без проблем.

 
getch >>:

Посмотрите реализацию, например, StatementClose, которая пашет без проблем.

http://blogs.msdn.com/oldnewthing/archive/2003/08/21/54675.aspx

Видите, какие интересные перцы-

если в том же процессе- то они сами шлют WM_GETTEXT.

А если из другого процесса- то они будут доставать текст,

прикрепленный к окну через специальное хранилище,

и- как видите- для имен окошек это проходит, а для edit'ов- нет.