Что нового

Функция из GuiMenu.au3 не возвращает текст на приложениях x64

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Столкнулся с такой проблемой, функция _GUICtrlMenu_GetItemText из из GuiMenu.au3 не возвращает текст пунктов меню приложений x64. На x32 всё нормально... Можно ли как-то решить?

menuu.png
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
Func _GUICtrlMenu_GetItemText($hMenu, $iItem, $fByPos = True)
	Local $iByPos = 0
	Local $x64 = ''
	
	If StringInStr(@OSArch, '64') Then
		$x64 = '64'
	EndIf
	
	If $fByPos Then $iByPos = $MF_BYPOSITION
	Local $aResult = DllCall("User32.dll", "int" & $x64, "GetMenuStringW", _
		"handle", $hMenu, "uint" & $x64, $iItem, "wstr", 0, "int" & $x64, 4096, "uint" & $x64, $iByPos)
	If @error Then Return SetError(@error, @extended, 0)
	Return SetExtended($aResult[0], $aResult[3])
EndFunc
 
Автор
A

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
CreatoR, эта функция на приложении x64 завершает работу Autoit крахом :'(

------------------- Добавлено --------------------
и даже дело не в условии:
Код:
If StringInStr(@OSArch, '64') Then
    $x64 = '64'
EndIf

Ведь в системе x64 на приложениях x32 "старая" функция работает... А вот при работе с программами x64 нет.

Если скрипт запустить AutoIt3.exe , то происходит крах, если AutoIt3_x64.exe - краха нет, но текст пунктов меню так же не возвращается.

Тут встретил что-то подобное... но так и не понял решили они проблему и как...у них там такое:

Код:
$aResult=DllCall("user32.dll","int","GetMenuStringW","ptr",$hMenu,"uint",$iItem,"wstr","","int",10000,"uint",0)


Но тоже не помогает.
 
Верх