<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Как работать с областью System Tray]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6093</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6093&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Как работать с областью System Tray».]]></description>
		<lastBuildDate>Tue, 30 May 2017 09:45:15 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116235#p116235</link>
			<description><![CDATA[<p>Спасибо, уважаемые! Почему-то, для значка облачного клиента MEGAsync.exe, никакие клики не отрабатывали — но нужное окно выводится через Run)).</p><p><strong>stealzy</strong><br />Не получалось правильно вписать в код &quot;WM_LBUTTONDOWN&quot; и &quot;WM_LBUTTONUP&quot;, потому что нигде на форуме так, как их записал выше <strong>Malcev</strong>, они не проходят)).</p>]]></description>
			<author><![CDATA[null@example.com (DD)]]></author>
			<pubDate>Tue, 30 May 2017 09:45:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116235#p116235</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116232#p116232</link>
			<description><![CDATA[<p><strong>DD</strong>, в 77 коде идет обращение к этой функции - PostMessageToTrayIcon(ExeFileName, Messages*)<br />Звездочка в параметре функции означает, что передается несколько аргументов.<br />В данной функции они потом извлекаются тут:<br /></p><div class="codebox"><pre><code>        for key, value in Messages
        {
            PostMessage, nMsg, uID, value,, ahk_id %hWnd%
            Sleep, 50
        }</code></pre></div><p>Следовательно, чтобы послать одиночное нажатие вам надо написать так:<br /></p><div class="codebox"><pre><code>WM_LBUTTONDOWN = 0x201, WM_LBUTTONUP = 0x202 
PostMessageToTrayIcon(&quot;Skype.exe&quot;, WM_LBUTTONDOWN, WM_LBUTTONUP)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 30 May 2017 08:50:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116232#p116232</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116231#p116231</link>
			<description><![CDATA[<p>Куда вписать, в ф-ию? Образец чего?<br />У себя откопал взятый где-то аналогичный скрипт, куда добавил возможность писать сообщения в стиле ahk (в вашем случае &quot;Click&quot; или &quot;LButton&quot; или &quot;LCM&quot;):<br /></p><div class="codebox"><pre><code>/*
Send mouse click to tray icon. Example:
PostMessage2TrayIconProcName(&quot;processX.exe&quot;, &quot;Click Up Right&quot;) ; &quot;WM_LBUTTONDOWN&quot; / &quot;RButton&quot; / &quot;RCM Dn&quot; / &quot;Click 2&quot;
PostMessage2TrayIconProcName(&quot;proc.exe&quot;, [0x204, 0x205]) PostMessage2TrayIconProcName(&quot;proc.exe&quot;, 0x203)

Limitation:
1) Может работать неправильно, если одновременно происходит пользовательский ввод.
Возможное решение: блокировать ввод на время выполнения.
2) На строке
CurrentProcessName := oWMI.Get(&quot;Win32_Process.Handle=&quot; PID).Name
возникает ошибка, если в трее остались иконки прибитых программ.

WM_LBUTTONDOWN = 0x201     WM_RBUTTONDOWN = 0x204     WM_MBUTTONDOWN = 0x207
WM_LBUTTONUP = 0x202       WM_RBUTTONUP = 0x205       WM_MBUTTONUP = 0x208
WM_LBUTTONDBLCLK = 0x203   WM_RBUTTONDBLCLK = 0x206   WM_MBUTTONDBLCLK = 0x209
WM_MOUSEMOVE = 0x200       WM_MOUSEWHEEL = 0x20A      WM_MOUSEHWHEEL = 0x20E
*/

PostMessage2TrayIconProcName(ProcessName, messages)
{
	if (InStr(messages, &quot;C&quot;) || InStr(messages, &quot;B&quot;)) ; string, contain Click/LButton/LCM
	{
		keyDirectionN := InStr(messages, &quot;D&quot;) ? 1 : (InStr(messages, &quot;Up&quot;) ? 2 : (InStr(messages, &quot;2&quot;) ? 3 : 4))
		whatKeyN := InStr(messages, &quot;R&quot;) ? 2 : InStr(messages, &quot;M&quot;) ? 3 : 1 ; Right/Middle
		MouseClickWMCodesTable := [ [[WM_LBUTTONDOWN := 0x201], [WM_LBUTTONUP := 0x202], [WM_LBUTTONDBLCLK := 0x203], [0x201, 0x202]]
		, [[WM_RBUTTONDOWN := 0x204], [WM_RBUTTONUP := 0x205], [WM_RBUTTONDBLCLK := 0x206], [0x204, 0x205]]
		, [[WM_MBUTTONDOWN := 0x207], [WM_MBUTTONUP := 0x208], [WM_MBUTTONDBLCLK := 0x209], [0x207, 0x208]] ]
		messages := MouseClickWMCodesTable[whatKeyN, keyDirectionN]
	}
	static WM_USER := 0x400, TB_BUTTONCOUNT := WM_USER + 24, TB_GETBUTTON := WM_USER + 23
		, PtrSize := A_Is64bitOS ? 8 : 4, SizeOfTBBUTTON := 8 + PtrSize*3, SizeOfTRAYDATA := 16 + PtrSize*2
	oWMI := ComObjGet(&quot;winmgmts:&quot;)
	DHW_Prev := A_DetectHiddenWindows
	DetectHiddenWindows, On

	Loop 2
	{
		ControlGet, hWnd, hwnd,, ToolbarWindow321, % &quot;ahk_class &quot; . (A_Index = 1 ? &quot;Shell_TrayWnd&quot; : &quot;NotifyIconOverflowWindow&quot;)
		WinExist(&quot;ahk_id&quot; hWnd)
		WinGet, PID, PID

		if (A_Index = 1 &amp;&amp; !IsObject(RemoteBuff := New RemoteBuffer(PID, SizeOfTRAYDATA))) {
			DetectHiddenWindows, %DHW_Prev%
			Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось создать удалённый буфер`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
		}

		SendMessage, TB_BUTTONCOUNT
		Loop % ErrorLevel
		{
			SendMessage, TB_GETBUTTON, A_Index - 1, RemoteBuff.ptr
			if ! ( pTBBUTTON := RemoteBuff.Read(SizeOfTBBUTTON) )
				|| !pTRAYDATA := RemoteBuff.Read(SizeOfTRAYDATA, NumGet(pTBBUTTON + 8 + PtrSize) - RemoteBuff.ptr) {
				DetectHiddenWindows, %DHW_Prev%
				Return 1
			}

			WinGet, PID, PID, % &quot;ahk_id&quot; hWnd := NumGet(pTRAYDATA+0)
			CurrentProcessName := oWMI.Get(&quot;Win32_Process.Handle=&quot; PID).Name
			if (CurrentProcessName = &quot;AutoHotkey.exe&quot;)
			{
				WinGetTitle, Title, % &quot;ahk_id&quot; hWnd
				CurrentProcessName := RegExReplace(Title, &quot;i).*\\(.*) - autohotkey v[\.\d]+&quot;, &quot;$1&quot;)
			}
			if (CurrentProcessName = ProcessName)
			{
				uID := NumGet(pTRAYDATA + PtrSize, &quot;UInt&quot;)
				uCallbackMessage := NumGet(pTRAYDATA + PtrSize + 4, &quot;UInt&quot;)
			; BlockInput, On
			; SendInput {Click Up}{Click Right Up} ; hack
				messages := IsObject(messages) ? messages : [messages]
				for i, message in messages
					PostMessage, uCallbackMessage, uID, message,, % &quot;ahk_id&quot; hWnd
			; BlockInput, Off
				DetectHiddenWindows, %DHW_Prev%
				Return 0
			}
		}
	}
	DetectHiddenWindows, %DHW_Prev%
	Return 1
}

Class RemoteBuffer
{
	__New(PID, size)
	{
		static PROCESS_VM_OPERATION := 0x8, PROCESS_VM_WRITE := 0x20, PROCESS_VM_READ := 0x10
			, MEM_COMMIT := 0x1000, PAGE_READWRITE := 0x4

		if !(this.hProc := DllCall(&quot;OpenProcess&quot;, UInt, PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, Int, 0, UInt, PID, Ptr))
			Return

		if !(this.ptr := DllCall(&quot;VirtualAllocEx&quot;, UInt, this.hProc, UInt, 0, UInt, size, UInt, MEM_COMMIT, UInt, PAGE_READWRITE, Ptr))
			Return, &quot;&quot;, DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
	}

	__Delete()
	{
		DllCall(&quot;VirtualFreeEx&quot;, Ptr, this.hProc, Ptr, this.ptr, UInt, 0, UInt, MEM_RELEASE := 0x8000)
		DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
	}

	Read(size, offset = 0)
	{
		static LocalBuff
		VarSetCapacity(LocalBuff, size, 0)
		if !DllCall(&quot;ReadProcessMemory&quot;, Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, &amp;LocalBuff, UInt, size, UInt, 0)
			Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось прочитать данные`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)

		VarSetCapacity(LocalBuff, -1)
		Return &amp;LocalBuff
	}

	Write(pLocalBuff, size, offset = 0)
	{
		res := DllCall(&quot;WriteProcessMemory&quot;, Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, pLocalBuff, UInt, size, UInt, 0)
		Return res ? res : 0, (!res) ? DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось записать данные`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
	}
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Tue, 30 May 2017 07:23:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116231#p116231</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116230#p116230</link>
			<description><![CDATA[<p>Штука в том, как их вписать — образцов чего не нашел.</p>]]></description>
			<author><![CDATA[null@example.com (DD)]]></author>
			<pubDate>Tue, 30 May 2017 07:10:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116230#p116230</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116229#p116229</link>
			<description><![CDATA[<p>Один клик состоит из двух <a href="http://lmgtfy.com/?q=WM_LBUTTONDBLCLK+0x203">сообщений</a>.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Tue, 30 May 2017 06:11:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116229#p116229</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116225#p116225</link>
			<description><![CDATA[<p>Для последнего кода — с какой настройкой посылать один клик?</p>]]></description>
			<author><![CDATA[null@example.com (DD)]]></author>
			<pubDate>Tue, 30 May 2017 02:16:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116225#p116225</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=97349#p97349</link>
			<description><![CDATA[<p>У меня так работает:<br /></p><div class="codebox"><pre><code>
#NoTrayIcon
WM_LBUTTONDBLCLK := 0x203
 
PostMessageToTrayIcon(&quot;Skype.exe&quot;, WM_LBUTTONDBLCLK)
 
PostMessageToTrayIcon(ExeFileName, Messages*)
{
/*
Недокументированная структура TRAYDATA
typedef TRAYDATA
{
IntPtr hwnd;
uint uID;
uint uCallbackMessage;
uint Reserved;
uint Reserved2;
IntPtr hIcon;
}
*/
    static WM_USER := 0x400, TB_BUTTONCOUNT := WM_USER + 24, TB_GETBUTTON := WM_USER + 23
      , PtrSize := A_Is64bitOS ? 8 : 4, SizeOfTBBUTTON := 8 + PtrSize*3, SizeOfTRAYDATA := 16 + PtrSize*2 
      
    hShell_TrayWnd := WinExist(&quot;ahk_class Shell_TrayWnd&quot;)
    ChildClasses = TrayNotifyWnd|SysPager|ToolbarWindow32  ; классы окон в порядке вложенности
    Loop, parse, ChildClasses, |
        hChild := DllCall(&quot;FindWindowEx&quot;, Ptr, A_Index = 1 ? hShell_TrayWnd : hChild
                                      , Ptr, 0, Str, A_LoopField, UInt, 0, Ptr)
    WinExist(&quot;ahk_id&quot; hChild)
    WinGet, PID, PID
    if !IsObject(RemoteBuff := New RemoteBuffer(PID, SizeOfTBBUTTON))
        Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось создать удалённый буфер`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0) 
        
    DHW_Prev := A_DetectHiddenWindows
    DetectHiddenWindows, On
    SendMessage, TB_BUTTONCOUNT 

    Loop % ErrorLevel  {  
        SendMessage, TB_GETBUTTON, A_Index - 1, RemoteBuff.ptr   
        RemoteBuff.Read(TBBUTTON, SizeOfTBBUTTON) 
        TraydataOffset := NumGet(&amp;TBBUTTON + 8  + PtrSize) - RemoteBuff.ptr  
        RemoteBuff.Read(TRAYDATA, SizeOfTRAYDATA, TraydataOffset)  
        hWnd := NumGet(&amp;TRAYDATA) 
        WinGet, Name, ProcessName, % &quot;ahk_id&quot; hWnd
        if (Name != ExeFileName)
            Continue 
        uID := NumGet(&amp;TRAYDATA, PtrSize, &quot;UInt&quot;)
        nMsg := NumGet(&amp;TRAYDATA, PtrSize + 4, &quot;UInt&quot;) 
        Break 
    }
    if (uID = &quot;&quot;)
        MsgBox, Иконки указанного приложения не найдено!
    else
        for key, value in Messages
        {
            PostMessage, nMsg, uID, value,, ahk_id %hWnd%
            Sleep, 50
        }
    DetectHiddenWindows, %DHW_Prev%
} 

Class RemoteBuffer
{
   __New(PID, size)
   {
      static PROCESS_VM_OPERATION := 0x8, PROCESS_VM_WRITE := 0x20, PROCESS_VM_READ := 0x10
         , MEM_COMMIT := 0x1000, PAGE_READWRITE := 0x4
         
      if !(this.hProc := DllCall(&quot;OpenProcess&quot;, UInt, PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, Int, 0, UInt, PID, Ptr))
         Return
      
      if !(this.ptr := DllCall(&quot;VirtualAllocEx&quot;, Ptr, this.hProc, UInt, 0, Ptr, size, UInt, MEM_COMMIT, UInt, PAGE_READWRITE, Ptr))
         Return, &quot;&quot;, DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
   }
   
   __Delete()
   {
      DllCall(&quot;VirtualFreeEx&quot;, Ptr, this.hProc, Ptr, this.ptr, UInt, 0, UInt, MEM_RELEASE := 0x8000)
      DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
   }
   
   Read(ByRef LocalBuff, size, offset = 0)
   {
      VarSetCapacity(LocalBuff, size, 0)
      if !DllCall(&quot;ReadProcessMemory&quot;, Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, &amp;LocalBuff, Ptr, size, Ptr, 0)
         Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось прочитать данные`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
      Return 1
   }
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Fri, 11 Sep 2015 00:30:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=97349#p97349</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=97342#p97342</link>
			<description><![CDATA[<p>Я только это помню, но там немного другое:<br /><a href="http://forum.script-coding.com/viewtopic.php?pid=92430#p92430">http://forum.script-coding.com/viewtopi … 430#p92430</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 10 Sep 2015 22:14:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=97342#p97342</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=97341#p97341</link>
			<description><![CDATA[<p>Можно, но без гарантии. Вроде, я уже приводил примеры работы с иконками трея для любых соотношений битностей.<br />Завтра смогу написать.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 10 Sep 2015 21:54:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=97341#p97341</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=97338#p97338</link>
			<description><![CDATA[<p>54-ый пост. <br /></p><div class="quotebox"><blockquote><p>Окончательный вариант такой:</p></blockquote></div><p> <br />А можно ли его изменить, чтобы работало на 32-битной версии AHK на 64-битной системе?</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 10 Sep 2015 18:44:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=97338#p97338</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82759#p82759</link>
			<description><![CDATA[<p>А что изменить в этом скрипте, чтобы при посылке нажатия правой кнопки мыши в окошо скайпа, меню появлялось не там где находится мышка, а там где находится иконка скайпа?</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 07 May 2014 16:28:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82759#p82759</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=66028#p66028</link>
			<description><![CDATA[<p>А какой смысл передавать char в функцию, принимающую dword?</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 22 Nov 2012 17:21:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=66028#p66028</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=66026#p66026</link>
			<description><![CDATA[<p>Кстати говоря у AHK вообще полные ягодицы в плане приведения типов:<br /></p><div class="codebox"><pre><code>Msgbox % DllCall(A_ScriptDir &quot;\TestDll00.dll\PervertInc&quot;, &quot;char&quot;, -1, &quot;uint64&quot;)</code></pre></div><p>Где PervertInc:<br /></p><div class="codebox"><pre><code>__declspec(dllexport) UINT64 PervertInc(DWORD x) // просто прибавляем единицу, без знака.
{
    return (UINT64)x+1;
}</code></pre></div><p>На выходе получаем 0x100000000(2^33). Т.е. в функцию передаётся нихрена не &quot;char&quot;, а вполне себе &quot;int&quot;. Отсюда следует и полная импотенция при работе со знаками.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Thu, 22 Nov 2012 16:53:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=66026#p66026</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=66025#p66025</link>
			<description><![CDATA[<p>Вообще да, справка говорит, что<br /></p><div class="quotebox"><blockquote><p>Prepend the letter U to any of the integer types above to interpret it as an unsigned integer (UInt64, UInt, UShort, and UChar). <strong>Strictly speaking, this is necessary only for return values and asterisk variables because it does not matter whether an argument passed by value is unsigned or signed (except for Int64)</strong>.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 22 Nov 2012 16:36:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=66025#p66025</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как работать с областью System Tray]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=66021#p66021</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А на каком этапе произойдёт эта интерпретация? При передаче числа в DllCall() или непосредственно в вызываемую API? Если только на втором, тогда какой смысл указания типов данных в DllCall()?</p></blockquote></div><p>Уже сама API-функция будет интерпретировать число как знаковое или беззнаковое.<br />Зачем различные типы целых чисел, не совсем понятно. Если бы при выходе значения за пределы указанного типа это как-то сигнализировалось, например, в ErrorLevel, тогда понятно бы было. Но в ErrorLevel ноль. Поведение AutoHotkey в случае выхода за пределы типа разное для разных типов. Например, если послать &quot;Char, 0x6600000&quot;, то и придёт в функцию 0x6600000, что уже явно не Char. Но если выйти за пределы Int64, то в этом случае передаётся максимально поддерживаемое значение, т.е. -0x8000000000000000 или 0x7FFFFFFFFFFFFFFF соответственно.</p><p>Как сказано в справке, типы имеют значение при передаче указателей на числа, т.е. &quot;Char*&quot;, &quot;Int*&quot; и т.п. После вызова функции эти переменные обновляются, на случай, если функция их изменила. Числа там хранятся в виде строк. Чтобы правильно перевести записанное функцией число в строковый вид, нужно знать тип этого числа. В случае Char* значение 0xFF будет переведено в строку как &quot;-1&quot;, а в случае UChar* как &quot;255&quot;.<br />В возвращаемых значениях типы играют такую же роль, там тоже нужно знать, как правильно перевести число в строковое представление.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 22 Nov 2012 16:22:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=66021#p66021</guid>
		</item>
	</channel>
</rss>
