Что нового

Скрипт выдает сообщение при щелчке по окну программы с опред. названием процесса

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
Добрый вечер.
Помогите советом.

Запущены две похожие программы.
Title этих окон одинаковый - "Form".
Диспетчер задач показывает эти процессы по-разному "2.exe" и "3.exe".

Как заставить скрипт - при щелчке левой кнопки мышки по окну процесса "2.exe" - выдавать простое сообщение "сигнал два", а при щелчке левой кнопки мышки по окну процесса "3.exe" - выдавать сообщение "сигнал три".

То есть речь идет не о щелчке по окну программы с определенным Title (поскольку он у обоих программ одинаков), а как-то учитывать название процесса (у обоих программ он разный).
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
получить дескрипторы окон каждого процесса
Код:
_WinAPI_EnumProcessWindows

и отслеживать клик мыши. клик приводит окно в активность
получаем дескриптор активного окна
Код:
WinGetHandle("[ACTIVE]")

сверяем с имеющимися дескрипторами окон процессов.
выводим сообщение

вот общий пример
Код:
#include <Misc.au3>
Local $hwnd, $thw, $hDLL = DllOpen("user32.dll")
While 1
	If _IsPressed('01', $hDLL) Then
		$hwnd = WinGetHandle("[ACTIVE]")
		If $hwnd <> $thw And $hwnd <> 0 Then
			MsgBox(64, 'Handle', $hwnd)
			$thw = $hwnd
		EndIf
	EndIf
	Sleep(10)
WEnd



Добавлено:
Сообщение автоматически объединено:

к твоему случаю пример.
все приблизительно, можно и по другому сделать
проверок на ошибки нет. имена процессов подставишь сам
Код:
#include <Misc.au3>
#include <WinAPIProc.au3>
Local $pl1 = ProcessList('1.exe')
Local $pl2 = ProcessList('2.exe')
Local $wp1 = _WinAPI_EnumProcessWindows($pl1[1][1])
Local $wp2 = _WinAPI_EnumProcessWindows($pl2[1][1])
Local $hwnd,  $hDLL = DllOpen("user32.dll")
While 1
	If _IsPressed('01', $hDLL) Then
		$hwnd = WinGetHandle("[ACTIVE]")
		If $hwnd = $wp1[1][0] Then
			MsgBox(64, 'Process 1.exe', $hwnd)
		ElseIf $hwnd = $wp2[1][0] Then
			MsgBox(64, 'Process 2.exe', $hwnd)
		EndIf
	EndIf
	Sleep(10)
WEnd
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
joiner , вроде все понятно.

Подскажите только - почему вместо слов "Process 2.exe" и "Process 3.exe" - выводятся необычные кодированные сообщения ?
(я так понимаю - дело возможно в кодировке русского языка)
 

Вложения

  • 1.jpg
    1.jpg
    12.1 КБ · Просмотры: 2
  • 2.jpg
    2.jpg
    12.9 КБ · Просмотры: 2

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
это дескрипторы окон, по которому ты кликнул
ты можешь вставить свое сообщение. К примеру, привет Вася, или любое другое)))
то есть
Код:
MsgBox(64, 'Process 2.exe', 'Здесь твое сообщение')
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
joiner, теперь все ясно.
Спасибо за помощь.
 
Верх