Просмотр полной версии : API - передать сообщение окну.
Допустим,есть открытое окно Notepad.Необходимо передать ему сатическую строку,к примеру,"hello".Это своего рода эмуляция ввода с клавиатуры.Смог получить только дескриптор,а дальше у меня не работало.Есть конкретные примеры ? (Желательно попроще).
HWND s;
s = FindWindow("Notepad","Untitled - Notepad");
На ассемблере набросал, но думаю, что будет понятно.
.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
Пример для дельфи:
SendMessage('дескриптор твоего окна', WM_SETTEXT, 0, lparam(PChar('текст который нужно послать'));
Эээ...частично понятно.Человек в привате набросал такой вариант.Я его чуток переделал,чтобы работало:
#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();
}
Также вопрос - как получить хэнлд квипа или мсн ? пытаюсь по заголовку получить...кто-нить может замутить ?
Мне тут подсказали,что я передаю текст родительскому окну,а не дочернему.Блин...
xismyname
16.10.2009, 02:58
Мне тут подсказали,что я передаю текст родительскому окну,а не дочернему.Блин...
Ну понятно.
notepad как win программа имеет главное окно а на нем так сказать подокна,т.е. элементы главного окна.
Сначала находишь главное окно с помощью FindWindow().
Потом уже пользуясь хендлом главного окна вызываешь функцию FindWindowEx() и так далее пока не найдешь "text box" куда пишешь текст,потом уже остатаеться послать сообщение данному "text box" - у с определенным параметром,т.е. с текстом.
Надеюсь не слишком переборшил :D.
Я же сразу написал рабочий пример... Какая разница, какой язык, неужели так трудно было увидеть:
invoke FindWindow,chr$("Notepad"),chr$("Untitled - Notepad")
invoke FindWindowEx,eax,0,chr$("Edit"),0 ;нашли дочернее окно - текстовое поле
xismyname
16.10.2009, 03:04
Я же сразу написал рабочий пример... Какая разница, какой язык, неужели так трудно было увидеть:
invoke FindWindow,chr$("Notepad"),chr$("Untitled - Notepad")
invoke FindWindowEx,eax,0,chr$("Edit"),0 ;нашли дочернее окно - текстовое поле
Ну я то сразу заметил то что ты закинул, а вот люди разные :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot