Допустим,есть открытое окно Notepad.Необходимо передать ему сатическую строку,к примеру,"hello".Это своего рода эмуляция ввода с клавиатуры.Смог получить только дескриптор,а дальше у меня не работало.Есть конкретные примеры ? (Желательно попроще). HWND s; s = FindWindow("Notepad","Untitled - Notepad");
На ассемблере набросал, но думаю, что будет понятно. Code: .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\macros\macros.asm includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .code start: invoke FindWindow,chr$("Notepad"),chr$("Untitled - Notepad") invoke FindWindowEx,eax,0,chr$("Edit"),0 ;нашли дочернее окно - текстовое поле mov edi,eax invoke SendMessage,edi,WM_SETTEXT,0,chr$("hello") ;можно просто задать для него текст invoke SendMessage,edi,EM_SETSEL,-2,-2 ;переместим каретку в конец invoke SendMessage,edi,WM_CHAR,10,1 ;можно посимвольно слать invoke SendMessage,edi,WM_CHAR,'l',1 invoke SendMessage,edi,WM_CHAR,'o',1 invoke SendMessage,edi,WM_CHAR,'l',1 invoke SendMessage,edi,EM_SETSEL,-2,-2 ;переместим каретку в конец invoke SendMessage,edi,EM_REPLACESEL,0,chr$(13,10,"more text") ;можно дополнить текст invoke ExitProcess,0 end start
Эээ...частично понятно.Человек в привате набросал такой вариант.Я его чуток переделал,чтобы работало: #include <stdio.h> #include <conio.h> #include <windows.h> int main() { char my_text[6]="hello"; HWND okay; okay = FindWindow(NULL,"Untitled - Notepad"); SendMessage(okay, WM_SETFOCUS, 1, 0); SendMessage(okay, WM_SETTEXT, 0, (int) &my_text); getch(); } Также вопрос - как получить хэнлд квипа или мсн ? пытаюсь по заголовку получить...кто-нить может замутить ?
Ну понятно. notepad как win программа имеет главное окно а на нем так сказать подокна,т.е. элементы главного окна. Сначала находишь главное окно с помощью FindWindow(). Потом уже пользуясь хендлом главного окна вызываешь функцию FindWindowEx() и так далее пока не найдешь "text box" куда пишешь текст,потом уже остатаеться послать сообщение данному "text box" - у с определенным параметром,т.е. с текстом. Надеюсь не слишком переборшил .
Я же сразу написал рабочий пример... Какая разница, какой язык, неужели так трудно было увидеть: Code: invoke FindWindow,chr$("Notepad"),chr$("Untitled - Notepad") invoke FindWindowEx,eax,0,chr$("Edit"),0 ;нашли дочернее окно - текстовое поле