Что нового

Размещение окна - всегда поверх экселя и реакция на закрытие процесса Excel.exe

Visors

Новичок
Сообщения
58
Репутация
0
Доброго времени суток.
Друзья, помогите.

Такая проблема возникла:
Есть скрипт размещающий окно файла txt - поверх всех окон с правого верхнего угла программы эксель.

Как разместить появляющееся окно блокнота - не поверх вообще всех окон, а исключительно поверх программы эксель ?
И как сделать так, чтобы при закрытии - процесса Excel.exe - закрывалось бы окно txt-файла ?

Код:
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <WinAPISysWin.au3>

HotKeySet('{ESC}', '_exit')
Local $hW2 = WinGetHandle('[Class:XLMAIN]')

Local $sFile = @ScriptDir & '\Вопросы.txt'
;$hFile = FileOpen(@ScriptDir & '\1.txt', 0)
;Run($sFile)
Run("notepad.exe " & $sFile)
sleep(200)
$handle = WinGetHandle("Вопросы.txt — Блокнот", "")
WinMove($handle, "", Default, Default, 600, 300, $WS_EX_TOPMOST)
;$style1 = BitOR($WS_POPUP, $WS_EX_TOPMOST)
WinSetOnTop($handle,"",1)

If @error Then Exit
Local $hW1 = $handle
GUISetState()
Local $gp1 = WinGetPos($hW1)
Local $gp2 = WinGetPos($hW2)
Local $tX = $gp2[0]+$gp2[2] - 600-2, $tY = $gp2[1]+50
WinMove($hW1, '', $tX, $tY)

While 1

    $gp2 = WinGetPos($hW2)
    If Not @error Then
        If $tX <> ($gp2[0] - 600) Or $tY <> $gp2[1] Then
            $tX = $gp2[0]+$gp2[2] - 600-20
            $tY = $gp2[1]+50
            WinMove($hW1, '', $tX, $tY)
        EndIf
    Else
        Exit
    EndIf
    Sleep(10)
WEnd

Func _exit()
    Exit
EndFunc   ;==>_exit
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#include <WinAPI.au3>

$hExcel = WinGetHandle("[Class:XLMAIN]")
If Not $hExcel Then Exit MsgBox(0x40000, "Error", "Не найдено окно Excel")

$sFile = @ScriptDir & "\Вопросы.txt"
Run("notepad.exe " & $sFile)
$hNotepad = WinWaitActive("Вопросы.txt — Блокнот")
If Not $hNotepad Then Exit MsgBox(0x40000, "Error", "Не найдено окно блокнота")

; Вариант 1
; Окно блокнота просто поверх окна Excel
; При закрытии Excel блокнот не закрывается
_WinAPI_SetWindowLong($hNotepad, $GWL_HWNDPARENT, $hExcel)
WinMove($hNotepad, "", 100, 100) ; относительно экрана

; Вариант 2
; Окно блокнота встраивается в окно Excel
; При закрытии Excel блокнот закрывается без запроса на сохранение изменений!
;~ _WinAPI_SetParent($hNotepad, $hExcel)
;~ WinMove($hNotepad, "", 100, 100) ; относительно окна Excel
 
Автор
V

Visors

Новичок
Сообщения
58
Репутация
0
Ясно, спасибо.
Вот вы пишите :
Код:
WinMove($hNotepad, "", 100, 100) ; относительно окна Excel

Но это если смотреть - по левой стороне окна эксель

А как заменить эти же самые координаты - на ориентацию - только по правой стороне ?
Просто мониторы могут быть разные по разрешению и удобнее ориентироваться именно по правой стороне.

(То есть чтобы были те же "100,100" - но только по правой стороне)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
как заменить эти же самые координаты - на ориентацию - только по правой стороне ?
Также, как вы рассчитываете в своём скрипте. Только относительно окна Excel. Другими словами координата 0,0 будет не в углу монитора, а в углу окна Excel (для блокнота "монитором" станет окно Excel).
 
Верх