Что нового

[Элементы GUI] EXE-файл отобразить в GUI

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Если файл имеет расширение .exe, то можно попробовать так:
Код:
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 870, 659, 192, 124)
GUISetState()

ShellExecute(@ScriptDir & '\game.exe')

WinWait('[CLASS:ShockwaveFlash]')
$hWnd = WinGetHandle("[CLASS:ShockwaveFlash]")

_WinSetStyle($hWnd,  $WS_POPUP)
_WinAPI_SetParent($hWnd, $Form1)

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch
WEnd

Func _WinSetStyle($hWnd, $nStyle = -1, $nExStyle = 0)
    Local Const $GWL_STYLE = -16, $GWL_EXSTYLE = -20
    Local Const $SWP_NOMOVE = 0x2, $SWP_NOSIZE = 0x1, $SWP_SHOWWINDOW = 0x40, $SWP_NOZORDER = 0x4
    Local $iFlags = BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOZORDER)

    If $nStyle = -1 Then
        $nStyle = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
    EndIf
    $Pos = WinGetpos($hWnd)
    $x = $Pos[0]
    $y = $Pos[1]

    DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "int", $nStyle)
    DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_EXSTYLE, "int", $nExStyle)
    DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", $x + 1, "int", $y + 1 , "int", 0, "int", 0, "int", $iFlags)
EndFunc

если же игра имеет расширение .swf, то можно так:
Код:
$hObj = ObjCreate("ShockwaveFlash.ShockwaveFlash")
$hForm = GUICreate("Form1", 500, 400)
$ActiveX = GUICtrlCreateObj($hObj, 10, 10, 480, 380)

$hObj.Movie = @ScriptDir & "\file.swf"

GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
Wend
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
файл имеет расширение .exe

Следуя Вашему примеру он запускается отдельно, не в "GUI оболочке"

Вот что показал Au3Info:

Код:
>>>> Window <<<<
Title:	Игра
Class:	WindowsForms10.Window.8.app.0.33c0d9d
Position:	212, 29
Size:	768, 724
Style:	0x16010000
ExStyle:	0x000D0000
Handle:	0x0000000006B407F2

>>>> Control <<<<
Class:	
Instance:	
ClassnameNN:	
Name:	
Advanced (Class):	
ID:	
Text:	
Position:	
Size:	
ControlClick Coords:	
Style:	
ExStyle:	
Handle:	

>>>> Mouse <<<<
Position:	496, 44
Cursor ID:	0
Color:	0xEEF1F6

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<


>>>> Hidden Text <<<<

это в их в "GUI оболочке"
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
а это как бы внутри нее показывает

Код:
>>>> Window <<<<
Title:	Игра
Class:	WindowsForms10.Window.8.app.0.33c0d9d
Position:	212, 29
Size:	768, 724
Style:	0x16010000
ExStyle:	0x000D0000
Handle:	0x0000000003E202CC

>>>> Control <<<<
Class:	MacromediaFlashPlayerActiveX
Instance:	1
ClassnameNN:	MacromediaFlashPlayerActiveX1
Name:	flashPlayer
Advanced (Class):	[NAME:flashPlayer]
ID:	15994064
Text:	
Position:	4, 30
Size:	760, 690
ControlClick Coords:	408, 301
Style:	0x56000000
ExStyle:	0x00000000
Handle:	0x00000000015C07F6

>>>> Mouse <<<<
Position:	624, 360
Cursor ID:	0
Color:	0xF5F8FA

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<


>>>> Hidden Text <<<<


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

вот если использовать пример с swf, то отображается в GUI, но у меня расширение .exe
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
Может у кого-то появилась идея?
 
Автор
D

defens

Знающий
Сообщения
89
Репутация
5
inververs
так это игра, тоесть клиент игры, я его хочу в свою "оболочку" загнать, чтоб было с ним работать и прописывать действия.

так что преобразовании не поможет


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

ты игру выложил так для примера ))) она была swf я сделал exe, чтоб понятно было о чем речь
 
Верх