· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Програмное "нажатие" кнопок приложения ?

Посл.отвђт Сообщенiе


Дата: Сен 28, 2004 09:52:40

Допустим у меня работает некое приложение.
Могу ли я из другой программы посылать сообщения которые бы имитировали действия пользователя ?
Нажимали на кнопки приложения,заполняли текстовые поля, выбирали значения из радиобутоннов и т.д.
Интересны примеры кода для XP, W2K.


Дата: Сен 28, 2004 10:03:12

Можешь == RTFM


Дата: Сен 28, 2004 11:42:53

Можно посылать сообщения из другого приложения (но не все они будут обрабатываться). сначала тебе нужно найти хэндл окна (или утилитой типа spyxx, или через FindWindow - в зависимости от задачи), a далее - например, если это диалог и известен ид кнопки - посылаешь окну с этим хэндлом типа SendDlgItemMessage,hWnd,but_id,BM_CLICK,0,0 - и наблюдаешь эффект ;) также можно и тексты в эдиты вписывать, и т.п. если это чужое приложение, ид можно выяснить той же spyxx.


Дата: Сен 28, 2004 16:25:22

asmlamo:
Допустим у меня работает некое приложение.
Могу ли я из другой программы посылать сообщения которые бы имитировали действия пользователя ?

Можно конечно. По крайней мере, я такое уже написал. Обычно это делается сообщениями Windows BM_CLICK и WM_SETTEXT (на самом деле полезных для автоматизации сообщений несколько больше), если номер не проходит - эмулируешь работу с клавиатурой (keybd_event вроде бы) и мышью.


Дата: Сен 28, 2004 18:32:59

Вот совсем примитивный пример.
Когда-то один чел на работе очень любил в пасьянс-косынку играть, написал такую вот фигню, что бы его отучить:
.386
.model flat, stdcall
option casemap :none

szText	MACRO	Name, Text:VARARG
.data
Name	db	Text,0
.code
ENDM

MsgBox	MACRO	HWnd, Message, MB_Title, uStyle
local	t1, t2
	szText	t1, Message
	szText	t2, MB_Title
	invoke	MessageBox, HWnd, ADDR t1, ADDR t2, uStyle
ENDM

.data
TreadID	dd 0
TargetClass	db "Solitaire",0

.code
;this does some fun
Play	proc	TargetHandle:DWORD
	mov	ebx, 3
Rep1:	invoke	Sleep, 1000*10
	invoke	PostMessage, TargetHandle, WM_COMMAND, 1000, 0
	dec	ebx
	jnz	Rep1
	invoke	ShowWindow, TargetHandle,SW_MAXIMIZE
	MsgBox	TargetHandle, "Матрица следит за тобой!", "The Matrix", MB_APPLMODAL or MB_ICONEXCLAMATION
	invoke	ShowWindow, TargetHandle,SW_NORMAL
	invoke	Sleep, 1000*10
Rep3:	mov	ebx, 10
Rep2:	invoke	Sleep, 1000*1
;	invoke	ShowWindow, TargetHandle,SW_HIDE
	invoke	PostMessage, TargetHandle, WM_COMMAND, 1000, 0
;	invoke	Sleep, 1000*1
;	invoke	ShowWindow, TargetHandle,SW_SHOW
	dec	ebx
	jnz	Rep2
	MsgBox	TargetHandle, "Повторим?", "ГЫ-ГЫ-ГЫ!!!", MB_APPLMODAL or MB_ICONQUESTION or MB_RETRYCANCEL
	cmp	eax, IDRETRY
	je	Rep3
	invoke	PostMessage, TargetHandle, WM_QUIT, 0, 0		; close window
	invoke	ExitThread,eax
	ret
Play endp

;proc runs from here
start:	mov	ebx, 1
Find:	invoke	Sleep, 1000*5
	invoke	FindWindow, ADDR TargetClass, 0
	or	eax, eax
	je	Find		; target window not found
	mov	ecx, ebx
TestFound:				
	cmp	[esp+ecx*4-4], eax	; now look is it already found window?
	je	Find	; stop! no need to play twice
	dec	ecx
	jnz	TestFound
	push	eax		; for future use
	invoke	CreateThread, 0, 0, Play, eax, 0, ADDR TreadID
	inc	ebx
	jmp	Find	; wait for next one 
end start


ЗЫ
Вскоре он уволился..


Дата: Сен 29, 2004 09:38:29

Спасибо ....

Надеюсь после того как я откомпилирую эту прогу меня не уволят ! :)))


Дата: Окт 3, 2004 14:22:35

Если хочешь поглубже в этом разобраться, то есть такая программка girder называется, в основном я ее использую для пульта, в ней такие навороты по этому поводу.
Раньше она была бесплатная, и где-то проскакивали даже исходники, а теперь денег хотят вот их новый сайт: http://www.promixis.com
Там много кто плагины делает на смежные темы.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.089