Что нового

[Элементы GUI] Запуск .exe в элементе GUI

DoctorBoris

Новичок
Сообщения
3
Репутация
0
Добрый день.
Сразу скажу - я только учусь .
Возник такой вопрос.
Создал GUI
Сделал кнопку по которой запускается notepad.exe
Каким способом можно сделать так что блокнот открывался внутри GUI и был связан с GUI .
COM не подходит .(или не правильно понял )
П.С. Извините если вопрос задан не корректно. Надеюсь на вашу помощь.
 

joiner

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

DoctorBoris

Новичок
Сообщения
3
Репутация
0
joiner сказал(а):
а смысл такой задачи? что, в итоге, должно получиться? создать текстовый файл? если да, то для этого не нужен блокнот
Смысл в том - хочу написать бот для игры но очень противлюсь отдельного запуска Блюстак ( отдельным окном ) хочу вывести его в GUI .
Приложил скрин задуманного - разумееться размеры блюстака будут под окно GUI.
 

Вложения

  • 2015-04-07 17-44-29 BlueStacks App Player.png
    2015-04-07 17-44-29 BlueStacks App Player.png
    83.7 КБ · Просмотры: 42

Vitya

Новичок
Сообщения
1
Репутация
0
Наверное, сработает, но на какое-то время BlueStack придётся запустить:
Код:
#include<GUIConstantsEx.au3>

GUICreate("Бот для BlueStack",900,800)
Run("BlueStack")
WinWait("BlueStack")
$tab=1

While @error=0
   CaseGUI($tab)
   $tab=$tab+1
WEnd

WinClose("BlueStack")

While 1
   $end=GUIGetMsg
   If $end=$GUI_EVENT_CLOSE Then
      Exit 0
   EndIf
Wend

Func CaseGUI($Tab)
   $text=ControlGetText("BlueStack","","[TabOrder:"&$Tab&"]")
   $pos=ControlGetPos("BlueStack","","[TabOrder:"&$Tab&"]")
   $class=;Здесь надо получить класс элемента. Извиняюсь, что не нашёл нужной функции
   Switch $class
   Case "Button"
      GUICtrlCreateButton($text,$pos[0],$pos[1],$pos[2],$pos[3])
   Case "Label"
      GUICtrlCreateLabel($text,$pos[0],$pos[1],$pos[2],$pos[3])
   ...
   EndSwitch
EndFunc

По идее, если в игре нет "странных" GUI-элементов, должно сработать, но функции соответствующие элементам выполняться не будут. Я сделал всё, что мог.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Как то так:

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

Global $hEmbed

$hGUI = GUICreate('ProcessWinEmbed Example', 800, 600)
$iButton = GUICtrlCreateButton('Embed', 20, 20, 70, 20)
GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			GUISetState(@SW_HIDE, $hGUI)
			
			If $hEmbed Then
				WinClose($hEmbed)
			EndIf
			
			Exit
		Case $iButton
			If $hEmbed Then
				GUICtrlSetData($iButton, 'Embed')
				WinClose($hEmbed)
				$hEmbed = 0
			Else
				GUICtrlSetData($iButton, 'Remove')
				$hEmbed = _ProcessWinEmbed("notepad.exe", $hGUI, 0, 50)
			EndIf
	EndSwitch
WEnd

Func _ProcessWinEmbed($sProgram, $hParent, $iLeft = -1, $iTop = -1)
	Local $iPID = Run($sProgram, '', @SW_HIDE)
	Local $aWinList, $hWnd
	Local $iTimer = TimerInit()
	
	While TimerDiff($iTimer) < 3000
		$aWinList = WinList()
		
		For $i = 1 To $aWinList[0][0]
			If Not BitAND(WinGetState($aWinList[$i][1]), 2) And WinGetProcess($aWinList[$i][1]) = $iPID Then
				$hWnd = $aWinList[$i][1]
				ExitLoop 2
			EndIf
		Next
	WEnd
	
	If Not IsHWnd($hWnd) Then
		Return SetError(1, 0, 0)
	EndIf
	
	Local $iStyle = _WinAPI_GetWindowLong($hParent, $GWL_STYLE)
	_WinAPI_SetWindowLong($hParent, $GWL_STYLE, BitOR($iStyle, $WS_CLIPCHILDREN))
	
	Local $aWinPos = WinGetClientSize($hParent)
	Local $iExStyle = _WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE)
	
	_WinAPI_SetWindowLong($hWnd, $GWL_EXSTYLE, BitOr($iExStyle, $WS_EX_MDICHILD))
	_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $WS_POPUP)
	_WinAPI_SetWindowPos($hWnd, 0, 0, 0, 0, 0, BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOMOVE, $SWP_NOZORDER))
	_WinAPI_SetParent($hWnd, $hParent)
	
	WinMove($hWnd, '', ($iLeft = -1 ? 2.5 : $iLeft), ($iTop = -1 ? 2.5 : $iTop), $aWinPos[0] - ($iLeft = -1 ? 5 : $iLeft), $aWinPos[1] - ($iTop = -1 ? 5 : $iTop))
	WinSetState($hWnd, '', @SW_SHOW)
	
	Return $hWnd
EndFunc
 
Верх