Что нового

Тотальная замена операций по ID, на операции по handle. (а-ля многопроцессность)

ArtistTo

Новичок
Сообщения
42
Репутация
2
Работаю над реализацией многопроцессности, для этого нужно, чтобы элементы создаваемые одной программой, были видны другой программе.
//П.С. многопроцессность у меня реализуется многократным запуском одной и той же программы, но с разным параметром, который отвечает за то, какой участок кода выполнять. Таким образом, программа запускает сама себя N кол-во раз и все копии, делают свои дела.//
Решил при создании элементов получать их handl'ы, складывать их в отдельный временный файл, ассоциируя с 'глобальными переменными', с которыми могут работать все процессы скрипта.

Проблема возникла в управлении этими элементами по handle.
Если некоторые операции по ID элементу (который виден только родительскому скрипту) можно очевидно заменить аналогичными по Handle:
Код:
;restruct
   guictrlsetpos(3, 15, 15, 100, 25)					; для id
	  _winapi_movewindow(0x01530192, 15, 15, 100, 25)	; для handle

;set
   guictrlsetdata(3, 'nyan cat :3')						; для id
	  controlsettext(0x01530192, '', '', 'nyan cat :3')	; для handle

;get
   guictrlread(3)										; для id
	  controlgettext(0x01530192, '', '')				; для handle

То над guictrlsetlimit, guictrlsetfont, guictrlsetcolor, guictrlsetbkcolor, нужно уже подумать... У меня нет идей, чем можно реализовать замену подобных команд, пытался с winapi фокусничать, но все тщетно. Кто знает, как можно заменить команды выше, эквивалентами по handle? :-\
P.S. мб отправить элементу сообщение какое-то с send/post message?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Во-первых, что такое "многопроцессность"? Во-вторых, каким боком она связана с GUICtrl... функциями? А в третьих, AutoIt, как и большинство других ЯП, обладает собственным GUI движком. Так давайте использовать его так, как это было задумано изначально, использовать соответствующие функции, а не страдать фигней, ничего при этом не понимая. Если хотите писать на WinAPI, то изучайте MSDN, и вопросы отпадут сами собой.

P.S

Для примера. За такой казалось бы банальной функцией как GUICtrlSetColor() на самом деле скрывается много нетривиальных действий, которые берет на себя AutoIt, сильно упрощая вам жизнь.
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
Yashied сказал(а):
Во-первых, что такое "многопроцессность"? Во-вторых, каким боком она связана с GUICtrl... функциями? А в третьих, AutoIt, как и большинство других ЯП, обладает собственным GUI движком. Так давайте использовать его так, как это было задумано изначально, использовать соответствующие функции, а не страдать фигней, ничего при этом не понимая. Если хотите писать на WinAPI, то изучайте MSDN, и вопросы отпадут сами собой.

P.S

Для примера. За такой казалось бы банальной функцией как GUICtrlSetColor() на самом деле скрывается много нетривиальных действий, которые берет на себя AutoIt, сильно упрощая вам жизнь.
Я с удовольствием отвечу :3
1. Скрипт запускает сам себя и каждая такая копия выполняет определенный код :smile: Это аналог многопоточности. Но фактически же многопроцессность, никак иначе не назовешь. Одна программа, один код - N кол-во процессов.
2. Копии программы AuIT (процессы), просто так не будут видеть элементы других программ (процессов), т.к. у каждой программы на AuIT (процесса), свое распределение ID для ctrl элементов.
Короче говоря. Одна программа создает лэйбл с текстом '1234' и id этого лэйбла допустим '3' и если запустить другую программу и попытаться подвинуть лэйбл в первой программе, через 'guictrlsetpos('3'...' по ID элемента, нифига не выйдет, т.к. идентификатор ID виден только в пределах род. программы. Другое дело сдвинуть элемент, по его глобальному идентификатору 'handle' _winapi_movewindow... Вы. Меня. Понимаете. Же. О чем. Я. Так ведь?
Многопроцессность нуждается в управлении элементами исключительно по handle. Иначе никакого взаимодействия между процессами не будет :c
3.Вот этот движок GUICtrl задает идентификаторы (ctrl ID) порождаемым элементам, видимые исключительно в рамках одной программы!!! Другая программа (процесс) не сможет, нифига, сделать с таким элементом по его ctrl ID.

P.S. заранее отвечу, зачем мне многопроцессность. Допустим запускается скрипт, у него выполняется код, который: один раз рисует label, порождает еще один процесс, начинает выполнять свой какой-нибудь бесконечный цикл.
Но нам нужно выполнять одновременно еще один цикл, независимо от первого! И вот этот рожденный процесс, будет выполнять свой цикл и допустим, он будет двигать label в первой программе вверх и вниз. Многопроцессность нужна для реализации выполнения множества задач независимо друг от друга!))
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Нет такого слова "многопроцессность".
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
А теперь будет ;D
Погодите, через час я покажу код, все просто.

Так есть идеи? Конкретно пишу, для конкретного ответа:
Есть handle обычной лаблы (которая создавалась с помощью guictrlcreatelabel()), вот handle = 0x01530192.
Нужно изменить цвет текста в этой лабле, как изменяет guictrlsetcolor().
Как. Это. Реализовать?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
ArtistTo
Можно попробовать занести всё в один безконечный цикл, который опрашивает GUI окно (при режиме MessageLoop), либо сделать всё в режиме событий OnEvent, назначив каждому событию функцию, можно также сделать функцию, вставить туда содержимое вашего безконечного цикла и вызывать через AdlibRegister...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
ArtistTo сказал(а):
Нужно изменить цвет текста в этой лабле, как изменяет guictrlsetcolor().
Изучайте. Это именно то, что делает AutoIt при изменении цвета. Хэндл всегда можно получить с помощью GUICtrlGetHandle().
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Не проще вынести часть кода в DLL, в которой создать несколько потоков?
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
alex33 сказал(а):
ArtistTo
Можно попробовать занести всё в один безконечный цикл, который опрашивает GUI окно (при режиме MessageLoop), либо сделать всё в режиме событий OnEvent, назначив каждому событию функцию, можно также сделать функцию, вставить туда содержимое вашего безконечного цикла и вызывать через AdlibRegister...
Это, эмм... очень убогий вариант уж извините, AdlibRegister функция линейная и она прерывает выполнение всего кода, чтобы выполнить... Себя :D Давайте забудем про нее, как про страшный сон :3

Yashied сказал(а):
Изучайте. Это именно то, что делает AutoIt при изменении цвета. Хэндл всегда можно получить с помощью GUICtrlGetHandle().
Хандлы получать, это не проблема! Более того, они у меня ассоциируются с новым видом 'глобальных переменных'.
Ага, это уже хоть что-то!!! winapi значит рыть нужно... Но фокус похожий не прокатил, юзая MSDN (с заливкой лаблы) просто взгляните!!! Может. Быть. Я. Что-то сделал. Не так!!?:

Код:
#include <WinAPI.au3>
	  global $cock = _winapi_getwindowdc(0x01530192)
	  _winapi_setbkcolor($cock, 0xff0000)


Prog сказал(а):
Не проще вынести часть кода в DLL, в которой создать несколько потоков?

Кодоизвращение :D


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

Я не выложу код создания многопроцессного приложения на AuIT на всеобщее обозрение. Я передумал. Я отправлю его только Yashied в лс, в подтверждение своих слов.

По теме. Есть еще идеи, как зная Handle элемента label (который создавался guictrlcreatelabel() функцией), изменить цвет заливки, текста в этой лабле? ;)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
ArtistTo [?]
Может. Быть. Я. Что-то сделал. Не так!!?:
Пальцем в небо.

Концепция смены цвета у некоторых стандартных элементов под AutoIt следующая (как и писали выше):
Код:
			case WM_CTLCOLORSTATIC:
			case WM_CTLCOLORBTN:
			case WM_CTLCOLOREDIT:
				pCtrl = mOBJ(_ValidateHWnd((HWND)lParam, IMCTRL), CTRL);
				if (pCtrl)
				{
					switch (pCtrl->Class)
					{
					case CLASS_EDIT:
					case CLASS_INPUT:
					case CLASS_LABEL:
						::SetTextColor((HDC)wParam, pCtrl->crText);
						::SetBkColor((HDC)wParam, pCtrl->crBackground);

					case CLASS_PIC:
					case CLASS_BUTTON:
					case CLASS_GROUPBOX:
						return (LRESULT)CreateSolidBrush(pCtrl->crBackground);
					}
				}
				break;
			}
Вам необходимо в процессе владеющим окном зарегистрировать WM_CTLCOLOR* сообщения с помощью GUIRegisterMsg и производить работу с DC. Другой вопрос как вы будете передавать цвет между процессами, раз вы любитель таких костылей - будет еще один :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <GUIConstantsEx.au3>
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>

Global $TextClr = 0x0000FF, $BkClr = 0xFF0000

$hForm = GUICreate('MyGUI', 400, 400)
$Label = GUICtrlCreateLabel('Label Label Label', 20, 20, 360, 14)
$hLabel = GUICtrlGetHandle(-1)
GUIRegisterMsg($WM_CTLCOLORSTATIC, 'WM_CTLCOLORSTATIC')
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_CTLCOLORSTATIC($hWnd, $iMsg, $wParam, $lParam)
    Switch $lParam
		Case $hLabel
			_WinAPI_SetTextColor($wParam, _WinAPI_SwitchColor($TextClr))
			_WinAPI_SetBkColor($wParam, _WinAPI_SwitchColor($BkClr))
            Return _WinAPI_GetStockObject($NULL_BRUSH)
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_CTLCOLORSTATIC



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

ArtistTo сказал(а):
Кодоизвращение
Нет, это самый разумный вариант. Вот пример создания несколько потоков с разделением обработки данных.

Код:
#Include <GDIPlus.au3>

If StringRegExpReplace(@AutoItVersion, '(?<!\d)(\d)(?!\d)', '0\1') < '03.03.12.00' Then
	MsgBox(16, 'Error', 'Require AutoIt 3.3.12.0 or later.')
EndIf

$sFile = @ScriptDir & '\Birds.png'

_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile($sFile)
$hBlur = _GDIPlus_BitmapCreateBlurBitmap($hBitmap, 5, 1)
_GDIPlus_ImageSaveToFile($hBlur, StringRegExpReplace($sFile, '(\.[^\.]+)', '_Blur\1'))
_GDIPlus_BitmapDispose($hBlur)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()

Func _GDIPlus_BitmapCreateBlurBitmap($hBitmap, $iRadius, $fAccurate = False)

	Local $tData[2], $hThread, $iThread, $tParams, $bProc, $tProc, $pProc, $aSize, $aHeight, $iLength, $hResult, $aResult

	$aSize = DllCall($__g_hGDIPDll, 'uint', 'GdipGetImageDimension', 'handle', $hBitmap, 'float*', 0, 'float*', 0)
	If (@Error) Or ($aSize[0]) Then
		Return 0
	EndIf
	For $i = 2 To 3
		If $iRadius > $aSize[$i] Then
			$iRadius = $aSize[$i]
		EndIf
	Next
	If $iRadius < 1 Then
		Return 0
	EndIf
	$hResult  = _GDIPlus_BitmapCreateFromScan0($aSize[2], $aSize[3], $GDIP_PXF32ARGB)
	$tData[0] = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $aSize[2], $aSize[3], $GDIP_ILMREAD,  $GDIP_PXF32ARGB)
	$tData[1] = _GDIPlus_BitmapLockBits($hResult, 0, 0, $aSize[2], $aSize[3], $GDIP_ILMWRITE, $GDIP_PXF32ARGB)
	If @AutoItX64 Then
		$bProc = Binary('0x48894C24085541574156415548C7C00A0000004883EC0848C704240000000048FFC875EF4883EC28488BAC24A000000048837D000074054831C0EB0748C7C0010000004821C00F855E010000488BAC24A000000048837D080074054831C0EB0748C7C0010000004821C00F8527010000488BAC24A0000000837D180074054831C0EB0748C7C0010000004821C00F85F1000000488BAC24A0000000837D1C0074054831C0EB0748C7C0010000004821C00F85BB000000488BAC24A0000000837D200074054831C0EB0748C7C0010000004821C00F8585000000488BAC24A0000000837D240074054831C0EB0748C7C0010000004821C07553488BAC24A0000000837D280074054831C0EB0748C7C0010000004821C07521488BAC24A0000000837D2C0074054831C0EB0748C7C0010000004821C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000EB034831C04821C0740B4831C04863C0E946030000488BAC24A00000004863451450584889442428488BAC24A00000004C637D14488BAC24A00000004863451C4901C749FFCF4C3B7C24280F8CFB020000488BAC24A00000004863451050584889442430488BAC24A00000004C637D10488BAC24A0000000486345184901C749FFCF4C3B7C24300F8CB402000048C74424380000000048C74424400000000048C74424480000000048C74424500000000048C7442458000000004C8B7C2428488BAC24A0000000486345284929C74C897C24604C8B7C24604C8B742428488BAC24A0000000486345284901C64D39F70F8F840100004C8B7C2430488BAC24A0000000486345284929C74C897C24684C8B7C24684C8B742430488BAC24A0000000486345284901C64D39F70F8F2B0100004C8B7C24684D21FF7C614C8B7C2468488BAC24A0000000486345204939C77D3A4C8B7C24604D21FF7C1F4C8B7C2460488BAC24A0000000486345244939C77D0948C7C001000000EB034831C04821C0740948C7C001000000EB034831C04821C0740948C7C001000000EB034831C04821C00F8496000000488BAC24A00000004C8B7D004C8B7424684C8B6C2460488BAC24A0000000486345204C0FAFE84D01EE49C1E6024D01F74C897C24704C8B7C2438488B6C2470480FB645034901C74C897C24384C8B7C2440488B6C2470480FB645024901C74C897C24404C8B7C2448488B6C2470480FB645014901C74C897C24484C8B7C2450488B6C2470480FB645004901C74C897C245048FF4424584C8B7C2468488BAC24A00000004863452C4901C74C897C2468E9B3FEFFFF4C8B7C2460488BAC24A00000004863452C4901C74C897C2460E95AFEFFFF488BAC24A00000004C8B7D084C8B7424304C8B6C2428488BAC24A0000000486345204C0FAFE84D01EE49C1E6024D01F74C897C24704C8B7C2438FF7424584C89F859489948F7F94989C74C89F850488B6C2478588845034C8B7C2440FF7424584C89F859489948F7F94989C74C89F850488B6C2478588845024C8B7C2448FF7424584C89F859489948F7F94989C74C89F850488B6C2478588845014C8B7C2450FF7424584C89F859489948F7F94989C74C89F850488B6C24785888450048FF4424300F8123FDFFFF48FF4424280F81DCFCFFFF48C7C0010000004863C0EB034831C04883C478415D415E415F5DC3')
	Else
		$bProc = Binary('0x55535756BA0A00000083EC04C70424000000004A75F38B6C243C837D0000740431C0EB05B80100000021C00F85090100008B6C243C837D0400740431C0EB05B80100000021C00F85DF0000008B6C243C837D1000740431C0EB05B80100000021C00F85B50000008B6C243C837D1400740431C0EB05B80100000021C00F858B0000008B6C243C837D1800740431C0EB05B80100000021C075658B6C243C837D1C00740431C0EB05B80100000021C0753F8B6C243C837D2000740431C0EB05B80100000021C075198B6C243C837D2400740431C0EB05B80100000021C07502EB07B801000000EB0231C021C07502EB07B801000000EB0231C021C07502EB07B801000000EB0231C021C07502EB07B801000000EB0231C021C07502EB07B801000000EB0231C021C07502EB07B801000000EB0231C021C07502EB07B801000000EB0231C021C0740731C0E9400200008B6C243C8B450C8904248B6C243C8B5D0C8B6C243C035D144B3B1C240F8C150200008B6C243C8B4508894424048B6C243C8B5D088B6C243C035D104B3B5C24040F8CE8010000C744240800000000C744240C00000000C744241000000000C744241400000000C7442418000000008B1C248B6C243C2B5D20895C241C8B5C241C8B3C248B6C243C037D2039FB0F8F0D0100008B5C24048B6C243C2B5D20895C24208B5C24208B7C24048B6C243C037D2039FB0F8FD30000008B5C242021DB7C438B5C24208B6C243C3B5D187D298B5C241C21DB7C148B5C241C8B6C243C3B5D1C7D07B801000000EB0231C021C07407B801000000EB0231C021C07407B801000000EB0231C021C0746E8B6C243C8B5D008B7C24208B74241C8B6C243C0FAF751801F7C1E70201FB895C24248B5C24088B6C24240FB6450301C3895C24088B5C240C8B6C24240FB6450201C3895C240C8B5C24108B6C24240FB6450101C3895C24108B5C24148B6C24240FB6450001C3895C2414FF4424188B5C24208B6C243C035D24895C2420E916FFFFFF8B5C241C8B6C243C035D24895C241CE9DDFEFFFF8B6C243C8B5D048B7C24048B34248B6C243C0FAF751801F7C1E70201FB895C24248B5C2408FF74241889D85999F7F989C3538B6C2428588845038B5C240CFF74241889D85999F7F989C3538B6C2428588845028B5C2410FF74241889D85999F7F989C3538B6C2428588845018B5C2414FF74241889D85999F7F989C3538B6C242858884500FF4424040F81FFFDFFFFFF04240F81D3FDFFFFB801000000EB0231C083C4285E5F5B5DC20400')
	EndIf
	$iLength = BinaryLen($bProc)
	$pProc = DllCall('kernel32.dll', 'ptr', 'VirtualAlloc', 'ptr', 0, 'ulong_ptr', $iLength, 'dword', 0x1000, 'dword', 0x0040)
	$tProc = DllStructCreate('byte[' & $iLength & ']', $pProc[0])
	DllStructSetData($tProc, 1, $bProc)
	$iThread = 8
	If $iThread > $aSize[3] Then
		$iThread = $aSize[3]
	EndIf
	Dim $aHeight[$iThread]
	Dim $tParams[$iThread]
	Dim $hThread[$iThread]
	If $iThread = 1 Then
		$aHeight[0] = $aSize[3]
	Else
		$aHeight[0] = Floor($aSize[3] / $iThread)
		$aHeight[$iThread - 1] = $aSize[3] - $aHeight[0] * ($iThread - 1)
		For $i = 1 To $iThread - 2
			$aHeight[$i] = $aHeight[0]
		Next
	EndIf
	$iLength = 0
	For $i = 0 To $iThread - 1
		$tParams[$i] = DllStructCreate('ptr;ptr;uint;uint;uint;uint;uint;uint;uint;uint')
		DllStructSetData($tParams[$i], 1, $tData[0].Scan0)
		DllStructSetData($tParams[$i], 2, $tData[1].Scan0)
		DllStructSetData($tParams[$i], 3, 0)
		DllStructSetData($tParams[$i], 4, $iLength)
		DllStructSetData($tParams[$i], 5, $aSize[2])
		DllStructSetData($tParams[$i], 6, $aHeight[$i])
		DllStructSetData($tParams[$i], 7, $aSize[2])
		DllStructSetData($tParams[$i], 8, $aSize[3])
		DllStructSetData($tParams[$i], 9, $iRadius)
		If $fAccurate Then
			DllStructSetData($tParams[$i],10, 1)
		Else
			DllStructSetData($tParams[$i],10, 2)
		EndIf
		$iLength+= $aHeight[$i]
		$aResult = DllCall('kernel32.dll', 'handle', 'CreateThread', 'ptr', 0, 'dword_ptr', 0, 'ptr', $pProc[0], 'struct*', $tParams[$i], 'dword', 0, 'ptr', 0)
		If (Not @Error) And ($aResult[0]) Then
			$hThread[$i] = $aResult[0]
		Else
			$hThread[$i] = 0
		EndIf
	Next
	While 1
		$iLength = 0
		For $i = 0 To $iThread - 1
			If $hThread[$i] Then
				$aResult = DllCall('kernel32.dll', 'bool', 'GetExitCodeThread', 'handle', $hThread[$i], 'dword*', 0)
				If (@Error) Or (Not $aResult[0]) Or ($aResult[2] <> 259) Then
					DllCall('kernel32.dll', 'bool', 'CloseHandle', 'handle', $hThread[$i])
					$hThread[$i] = 0
				Else
					$iLength += 1
				EndIf
			EndIf
		Next
		If Not $iLength Then
			ExitLoop
		EndIf
	WEnd
	$aResult = DllCall('kernel32.dll', 'int', 'VirtualFree', 'ptr', $pProc[0], 'ulong_ptr', 0, 'dword', 0x4000)
	If (@Error) Or (Not $aResult[0]) Then
		; Nothing
	EndIf
	_GDIPlus_BitmapUnlockBits($hResult, $tData[1])
	_GDIPlus_BitmapUnlockBits($hBitmap, $tData[0])
	Return $hResult
EndFunc   ;==>_GDIPlus_BitmapCreateBlurBitmap


Если вы хотите реализовать тоже самое, но только на уровне процессов вместо потоков (кодоизвращение), то вам первым делом нужно придумать четкий алгоритм взаимодействия этих самых процессов.
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
Ладно, я выложу код, вот пока что наработки, завершение всех рожденных процессов, пока что не реализовал, но это очень легко сделать в дальнейшем :D
Просто компилируйте его, назовите 111.exe и запустите :smile:

1 поток создаст окно, в нем label и будет отслеживать нажатие выхода.
2 поток будет двигать label.
3 поток будет менять название label, каждую секунду.
Всем процессам, очень комфортно, они живут автономно. :3
Да здравствуй многопоточность в AuIT'e!!! :laugh: :IL_AutoIt_1:
Код:
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>

; cock_code .i.
if $cmdline[0] = 0 then
	  run(@ComSpec & " /c " & 'start 111.exe process1', "", @SW_HIDE)
	  run(@ComSpec & " /c " & 'start 111.exe process2', "", @SW_HIDE)
	  run(@ComSpec & " /c " & 'start 111.exe process3', "", @SW_HIDE)
else
	  if $cmdline[1] = 'process1' then

			opt('guioneventmode', 1)
			global $aaa = guicreate('Danilka', 900, 400)
			guisetonevent($gui_event_close, '_exit')
			global $aab = guictrlcreatelabel('cock', 10, 30, 100, 30)
			guisetstate(@sw_show)
			clipput(guictrlgethandle($aab)) ; копировать хандл, чтобы другие процессы могли получить его
				  while 1
						sleep(1000)
				  wend

	  endif
	  if $cmdline[1] = 'process2' then

			sleep(1000)
			local $handle = clipget()
									while 1
										  for $i = 1 to 100
												sleep(50)
												_winapi_movewindow($handle, 10+$i, 30, 100, 30)
										  next
										  for $i = 1 to 100
												sleep(50)
												_winapi_movewindow($handle, 110-$i, 30, 100, 30)
										  next
									wend

	  endif
	  if $cmdline[1] = 'process3' then

			sleep(1000)
			local $handle = clipget()
						while 1
							  sleep(1000)
							  controlsettext($handle, '', '', 'Я процесс.')
							  sleep(1000)
							  controlsettext($handle, '', '', 'И меняю этот текст.')
						wend
	  endif


endif


func _exit()
	  exit
endfunc



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

Все без извращений, просто и понятно.


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

Это революция, нуб, который сюда зайдет, будет юзать не ваш код ('слишком много непонятного'), а мой код :3 А через пол года - год, ему и это не потребуется... ;)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ArtistTo [?]

Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Зачем создавать несколько процессов которые взаимодействуют с одним окном? Обычно при разработке многопоточного приложения, с GUI работает только тот поток в котором было создано окно, а с остальными он взаимодействует через общую память и обмен сообщениями.
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
Prog сказал(а):
Зачем создавать несколько процессов которые взаимодействуют с одним окном? Обычно при разработке многопоточного приложения, с GUI работает только тот поток в котором было создано окно, а с остальными он взаимодействует через общую память и обмен сообщениями.

Примера ради. Процессы могут выполнять любую работу. Более того, я почти доделал таблицу ассоциаций создаваемых элементов, каждый элемент будет иметь handle и переменную вида '%аа%', эти переменные будут видны всем процессам, т.к. будут храниться во временном файле. Можно будет работать с любым контролом из любого потока. По крайней мере, я этого добиваюсь ;)


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

Революции грядут. :whistle:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ArtistTo [?]
Да ладно вам. Лабла - этой мой новый элемент, который я разработал и придумал :D Я имел в виду его. Как раз таки. Никак не Label.
Давайте не будем разводить балаган.
Вы зачем на форум пришли?
Если вам нужна помошь или совет, тогда советую вам всё же прислушаться к тому, что вам написали сведущие коллеги. Если вы хотите просто поболтать, тогда вы ошиблись разделом.
И да, будьте так любезны исправьте то о чём написано в предупреждение.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ArtistTo [?]
Это революция, нуб, который сюда зайдет, будет юзать не ваш код ('слишком много непонятного'), а мой код :3 А через пол года - год, ему и это не потребуется...
OffTopic:
Это как пить дать. Ибо нубу будут понятны нубокоды, а через полгода остатки самосознания подскажут по-пырому осадить в исходное положение, ибо (еще раз) он осознает, что ему не совершить революции, окромя порожняка, которого и так хватает.


OffTopic:
Извините, не удержался
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
Garrett сказал(а):
ArtistTo [?]
Да ладно вам. Лабла - этой мой новый элемент, который я разработал и придумал :D Я имел в виду его. Как раз таки. Никак не Label.
Давайте не будем разводить балаган.
Вы зачем на форум пришли?
Если вам нужна помошь или совет, тогда советую вам всё же прислушаться к тому, что вам написали сведущие коллеги. Если вы хотите просто поболтать, тогда вы ошиблись разделом.
И да, будьте так любезны исправьте то о чём написано в предупреждение.

Ну ладно. Сделаю.

joiner сказал(а):
ArtistTo [?]
Это революция, нуб, который сюда зайдет, будет юзать не ваш код ('слишком много непонятного'), а мой код :3 А через пол года - год, ему и это не потребуется...
OffTopic:
Это как пить дать. Ибо нубу будут понятны нубокоды, а через полгода остатки самосознания подскажут по-пырому осадить в исходное положение, ибо (еще раз) он осознает, что ему не совершить революции, окромя порожняка, которого и так хватает.


OffTopic:
Извините, не удержался

Ух ты, круто!)0)0 Ваш ненубо-код в студию.


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

Революция все же будет (через некоторое время, вы сами поймете это и я не про нубов, которые будут юзать мой действительно ПОКА ЕЩЕ нубо-код) ;)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
OffTopic:
походу, на носу изобретение колеса.
мда... цирк и немцы
 
Верх