Что нового

[Элементы GUI] Как создать окно Notepad'a на собственном GUI окне.

coldmine

Новичок
Сообщения
19
Репутация
1
Приветствую, уважаемые форумчане.

Имеется кусок кода

Код:
#include <GUIConstantsEx.au3>

$oMyWindow = GUICreate("Neobux.com", 500, 520)

$BottonSend = GUICtrlCreateButton("Войти", 6, 490, 489, 21, 0)
$oIE = ObjCreate("Shell.Explorer.2")
$oIE2 = ObjCreate("Shell.Explorer.2")

GUICtrlCreateObj($oIE, 6, 6, 490, 132)

GUICtrlCreateObj($oIE2, 6, 347, 490, 132)
GUISetState()


Помогите пожалуйста создать окно Notepad'a на GUI окне $oMyWindow
Есть там в хэлпе раздел "Применение COM в AutoIt", да в силу нехватки знаний я в нем не разобрался :( :(
Может еще в принципе кто объяснит как выудить информацию о нужном COM объекте такую вот как эта - Shell.Explorer (для вэб браузера). только для любого приложения. например для Excel, Word, AcdSee и тп
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
coldmine [?]
Помогите пожалуйста создать окно Notepad'a на GUI окне $oMyWindow
Сдаётся мне, что у Notepad нет OLE.
Проще написать свой редактор на Autoit! ;)

coldmine [?]
Может еще в принципе кто объяснит как выудить информацию о нужном COM объекте такую вот как эта - Shell.Explorer (для вэб браузера). только для любого приложения. например для Excel, Word, AcdSee и тп
В Koda на вкладке Win32 есть элемент COM, его свойство AXObject даст вам возможность выбрать из имеющихся у вас OLE объектов. Так же есть и сторонние утилиты. Google подскажет :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 548
Репутация
2 429
Можно встроить окно как дочернее, вот пример как это делается:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

$hGUI = GUICreate("Embed External App", 550, 300, 10, 10, -1, $WS_EX_CLIENTEDGE)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Quit")

$ahEmbed = _EmbedExternalApp($hGUI, @WindowsDir & "\Notepad.exe")
;$ahEmbed = _EmbedExternalApp($hGUI, @ComSpec & " /K CD C:")

GUISetState()

AdlibRegister("_CheckActivity_Proc", 100)
AdlibRegister("_InvalidateRect_Proc", 500)

While 1
	Sleep(100)
WEnd

Func _EmbedExternalApp($hParent, $sAppCmd)
	Local $iPID = Run($sAppCmd, "", @SW_HIDE)
	Local $ahEmbed[2] = [0, $iPID]
	
	While Not IsHWnd($ahEmbed[0])
		$ahEmbed[0] = _WinGetHandleByPID($iPID)
	WEnd
	
	Local $aGUI_ClientSize = WinGetClientSize($hParent)
	Local $aGUI_Pos = WinGetPos($hParent)
	
	Local $iBorderSize = ($aGUI_Pos[2] - $aGUI_ClientSize[0]) / 2
	Local $iCaptionSize = $aGUI_Pos[3] - $aGUI_ClientSize[1]
	
	WinMove($ahEmbed[0], "", -$iBorderSize, -$iCaptionSize + $iBorderSize, $aGUI_ClientSize[0] + ($iBorderSize * 2), $aGUI_ClientSize[1] + $iCaptionSize + ($iBorderSize - 2))
	WinSetState($ahEmbed[0], "", @SW_SHOWMINIMIZED)
	
	GUISetState(@SW_SHOW, $hParent)
	
	DllCall("User32.dll", "hwnd", "SetParent", "hwnd", $ahEmbed[0], "hwnd", $hParent)
	DllCall("User32.dll", "int", "InvalidateRect", "hwnd", $hParent, "int", 0, "int", 0)
	
	Return $ahEmbed
EndFunc

Func _Quit()
	ProcessClose($ahEmbed[1])
    Exit
EndFunc

Func _CheckActivity_Proc()
	If WinActive($hGUI) Then
		WinActivate($ahEmbed[0])
	EndIf
	
	If Not WinExists($ahEmbed[0]) Then
		_Quit()
	EndIf
	
	;Local $aGUI_Pos = WinGetPos($ahEmbed[0])
	;WinMove($hGUI, "", Default, Default, $aGUI_Pos[2], $aGUI_Pos[3])
EndFunc

Func _InvalidateRect_Proc()
	DllCall("User32.dll", "int", "InvalidateRect", "hwnd", $hGUI, "ptr", 0, "int", 0)
EndFunc

Func _WinGetHandleByPID($iPID)
	Local $aWinList = WinList()
	
	For $i = 1 To UBound($aWinList)-1
		If WinGetProcess($aWinList[$i][1]) = $iPID Then
			Return $aWinList[$i][1]
		EndIf
	Next
	
	Return 0
EndFunc
 
Верх