Что нового

Обьявление дескриптора окна

tryynoob

Новичок
Сообщения
4
Репутация
0
Добрый день.Пытаюсь передать команды в два окна по дескриптору,но не знаю,как правильно написать их в скрипте.Правильными будут такие строки?Заранее благодарен за ответ.

Local $ hWndTarget1 = 459362
Local $ hWndTarget2 = 1114152
 

joiner

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

а что за способ передачи?
 
Автор
T

tryynoob

Новичок
Сообщения
4
Репутация
0
Код:
Local $hWndTarget1 =459362 ;????, ???????? ???????? ??????? #1
Local $hWndTarget2 = 1114152;????, ???????? ???????? ??????? #2

Local $hGuiMain = GUICreate( "", 200, 200, -1, -1 ) ;???? ???????, ??????? ????? ?? ??????????????
GUIRegisterMsg( 0x100, "_OnKeyDownUp" ) ;???????????? ????????? WM_KEYDOWN
GUIRegisterMsg( 0x101, "_OnKeyDownUp" ) ;???????????? ????????? WM_KEYUP

GUISetState( @SW_SHOW, $hGuiMain )
; ---
Local $User32Dll = DllOpen( "user32.dll" )
; ---
Do
    Sleep( 10 )
Until GUIGetMsg() = -3
DllClose( $User32Dll )

Func _OnKeyDownUp( $hWnd, $iMsg, $wParam, $lParam ) ;??? ?????? ? ???? ??????? ???? ?????? ????? ???????, ??? ????? ?????????????? ? ???? 1 ? 2
        ;iMsg - 0x0100 ??? 0x0101 (?????? ? ?????? ?????????????)
        ;wParam - ??? ???????
        ConsoleWrite($iMsg & @TAB & $wParam & @CRLF )

    DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget1, "int", $iMsg, "int", $wParam, "int", 0 ) ;?????????????? ? ???? #1
    DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget2, "int", $iMsg, "int", $wParam, "int", 0 ) ;?????????????? ? ???? #2
EndFunc

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

Код:
Local $hWndTarget1 =459362 ;????, ???????? ???????? ??????? #1
Local $hWndTarget2 = 1114152;????, ???????? ???????? ??????? #2

Local $hGuiMain = GUICreate( "", 200, 200, -1, -1 ) ;???? ???????, ??????? ????? ?? ??????????????
GUIRegisterMsg( 0x100, "_OnKeyDownUp" ) ;???????????? ????????? WM_KEYDOWN
GUIRegisterMsg( 0x101, "_OnKeyDownUp" ) ;???????????? ????????? WM_KEYUP

GUISetState( @SW_SHOW, $hGuiMain )
; ---
Local $User32Dll = DllOpen( "user32.dll" )
; ---
Do
    Sleep( 10 )
Until GUIGetMsg() = -3
DllClose( $User32Dll )

Func _OnKeyDownUp( $hWnd, $iMsg, $wParam, $lParam ) ;??? ?????? ? ???? ??????? ???? ?????? ????? ???????, ??? ????? ?????????????? ? ???? 1 ? 2
        ;iMsg - 0x0100 ??? 0x0101 (?????? ? ?????? ?????????????)
        ;wParam - ??? ???????
        ConsoleWrite($iMsg & @TAB & $wParam & @CRLF )

    DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget1, "int", $iMsg, "int", $wParam, "int", 0 ) ;?????????????? ? ???? #1
    DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget2, "int", $iMsg, "int", $wParam, "int", 0 ) ;?????????????? ? ???? #2
EndFunc
сам скрипт вот такой сдер здесь на форуме и пытаюсь подстроить под себя
если я правильно понял то а первых строках просто писать HWnd=числовое значение
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
не совсем понял идею. дескрипторы при каждом запуске разные. в чьё окно передается дескриптор? между своими программами?
 
Автор
T

tryynoob

Новичок
Сообщения
4
Репутация
0
не совсем понял идею. дескрипторы при каждом запуске разные. в чьё окно передается дескриптор? между своими программами?
это два окна одного приложения запущенные через песочницу.Хочу чтобы действия в окнах синхронизировались
 
Последнее редактирование модератором:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
первое окно
Код:
#include <WinAPIFiles.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
Global $hapimp = _WinAPI_CreateFileMapping(-1, 1024, 'my file')
Global $hapiwf = _WinAPI_MapViewOfFile($hapimp)
Global $stData = DllStructCreate('wchar [256];wchar [256]', $hapiwf)
$Form1 = GUICreate('Окно 1', 449, 129, -1, -1)
Global $Input1 = GUICtrlCreateInput('', 24, 24, 281, 21)
Global $Label1 = GUICtrlCreateLabel('', 24, 72, 268, 17)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
Local $getdll, $stmp = ''
While 1
    $getdll = DllStructGetData($stData, 1)
    If Not ($getdll = $stmp) Then
        GUICtrlSetData($Label1, $getdll)
        $stmp = $getdll
    EndIf
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $ilParam
    Local $ID = _WinAPI_LoWord($iwParam)
    Switch _WinAPI_HiWord($iwParam)
        Case $EN_CHANGE
            Switch $ID
                Case $Input1
                    DllStructSetData($stData, 2, GUICtrlRead($Input1))
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_COMMAND

Второе окно
Код:
#include <WinAPIFiles.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
Global $hapimp = _WinAPI_CreateFileMapping(-1, 1024, 'my file')
Global $hapiwf = _WinAPI_MapViewOfFile($hapimp)
Global $stData = DllStructCreate('wchar [256];wchar [256]', $hapiwf)
$Form1 = GUICreate('Окно 2', 449, 129, 464, 200)
Global $Input1 = GUICtrlCreateInput('', 24, 24, 281, 21)
Global $Label1 = GUICtrlCreateLabel('', 24, 72, 268, 17)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
Local $getdll, $stmp = ''
While 1
    $getdll = DllStructGetData($stData, 2)
    If Not ($getdll = $stmp) Then
        GUICtrlSetData($Label1, $getdll)
        $stmp = $getdll
    EndIf
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $ilParam
    Local $ID = _WinAPI_LoWord($iwParam)
    Switch _WinAPI_HiWord($iwParam)
        Case $EN_CHANGE
            Switch $ID
                Case $Input1
                    DllStructSetData($stData, 1, GUICtrlRead($Input1))
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_COMMAND

запускаем и пишем любую строку. смотрим её отображение во втором окне
есть другие способы интеракции между процессами. их можно найти на этом форуме.
в данном случае передается строка. хэндлы можно передать строкой, а потом перевести в нужное состояние))
 
Автор
T

tryynoob

Новичок
Сообщения
4
Репутация
0
Большое спасибо,все прекрасно работает.Кстати,в Вашем примере почему то символы печатаются не в поле ввода а ниже его.
 
Верх