ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

API - передать сообщение окну.
  #1  
Старый 15.10.2009, 01:18
Аватар для GenTao
GenTao
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме:
143706

Репутация: -1
По умолчанию API - передать сообщение окну.

Допустим,есть открытое окно Notepad.Необходимо передать ему сатическую строку,к примеру,"hello".Это своего рода эмуляция ввода с клавиатуры.Смог получить только дескриптор,а дальше у меня не работало.Есть конкретные примеры ? (Желательно попроще).

HWND s;
s = FindWindow("Notepad","Untitled - Notepad");
 
Ответить с цитированием

  #2  
Старый 15.10.2009, 02:58
Аватар для d_x
d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме:
4137635

Репутация: 2407


По умолчанию

На ассемблере набросал, но думаю, что будет понятно.
Код:
      .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
 
Ответить с цитированием

  #3  
Старый 15.10.2009, 06:53
Аватар для $Atlet$
$Atlet$
Участник форума
Регистрация: 25.10.2008
Сообщений: 215
Провел на форуме:
2483773

Репутация: 78
Отправить сообщение для $Atlet$ с помощью ICQ
По умолчанию

Пример для дельфи:
SendMessage('дескриптор твоего окна', WM_SETTEXT, 0, lparam(PChar('текст который нужно послать'));
 
Ответить с цитированием

  #4  
Старый 15.10.2009, 18:55
Аватар для GenTao
GenTao
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме:
143706

Репутация: -1
По умолчанию

Эээ...частично понятно.Человек в привате набросал такой вариант.Я его чуток переделал,чтобы работало:

#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();

}

Также вопрос - как получить хэнлд квипа или мсн ? пытаюсь по заголовку получить...кто-нить может замутить ?
 
Ответить с цитированием

  #5  
Старый 15.10.2009, 21:07
Аватар для GenTao
GenTao
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме:
143706

Репутация: -1
По умолчанию

Мне тут подсказали,что я передаю текст родительскому окну,а не дочернему.Блин...
 
Ответить с цитированием

  #6  
Старый 16.10.2009, 02:58
Аватар для xismyname
xismyname
Познающий
Регистрация: 07.09.2008
Сообщений: 79
Провел на форуме:
272452

Репутация: 10
По умолчанию

Цитата:
Сообщение от GenTao  
Мне тут подсказали,что я передаю текст родительскому окну,а не дочернему.Блин...
Ну понятно.
notepad как win программа имеет главное окно а на нем так сказать подокна,т.е. элементы главного окна.

Сначала находишь главное окно с помощью FindWindow().
Потом уже пользуясь хендлом главного окна вызываешь функцию FindWindowEx() и так далее пока не найдешь "text box" куда пишешь текст,потом уже остатаеться послать сообщение данному "text box" - у с определенным параметром,т.е. с текстом.
Надеюсь не слишком переборшил .
 
Ответить с цитированием

  #7  
Старый 16.10.2009, 03:02
Аватар для d_x
d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме:
4137635

Репутация: 2407


По умолчанию

Я же сразу написал рабочий пример... Какая разница, какой язык, неужели так трудно было увидеть:

Код:
invoke FindWindow,chr$("Notepad"),chr$("Untitled - Notepad")
invoke FindWindowEx,eax,0,chr$("Edit"),0 ;нашли дочернее окно - текстовое поле
 
Ответить с цитированием

  #8  
Старый 16.10.2009, 03:04
Аватар для xismyname
xismyname
Познающий
Регистрация: 07.09.2008
Сообщений: 79
Провел на форуме:
272452

Репутация: 10
По умолчанию

Цитата:
Сообщение от d_x  
Я же сразу написал рабочий пример... Какая разница, какой язык, неужели так трудно было увидеть:

Код:
invoke FindWindow,chr$("Notepad"),chr$("Untitled - Notepad")
invoke FindWindowEx,eax,0,chr$("Edit"),0 ;нашли дочернее окно - текстовое поле
Ну я то сразу заметил то что ты закинул, а вот люди разные
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы API Вконтакте SoulReaver Социальные сети 0 12.08.2009 15:46
Очень красиво опустили СекЛабовцев =) SladerNon Мировые новости 28 16.07.2008 06:19



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ