<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821753</guid>
        <pubDate>Sat, 22 Feb 2020 01:21:48 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821753</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821713'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T16:17:23+03:00">21.02.20, 13:17</time></span><div class='quote '>3. А если установить софт и попробовать ?<br>
4. также интересно - мышь проводная или беспроводная ?</div></div><br>
С софтом то же самое. Мышь проводная. Да нет, тут явно мышь ни при чём, это что-то в системе. В виртуалках даже пробовал, всё одно и то же.]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821713</guid>
        <pubDate>Fri, 21 Feb 2020 13:17:23 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821713</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821710'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T12:46:32+00:00">21.02.20, 12:46</time></span><div class='quote '>Только Bloody T70, однако я её софт даже не ставил, так что она должна восприниматься системой как самая обычная мышь, по идее.</div></div><br>
3. А если установить софт и попробовать ?<br>
4. также интересно - мышь проводная или беспроводная ?<br>
Есть ли разница между этими вариантами ?]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821710</guid>
        <pubDate>Fri, 21 Feb 2020 12:46:32 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821710</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821708'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T12:39:49+00:00">21.02.20, 12:39</time></span><div class='quote '>1. А как ведёт себя задержка для стандартных клавиш мыши ?</div></div><br>
Точно так же.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821708'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-21T12:39:49+00:00">21.02.20, 12:39</time></span><div class='quote '>2. Как ведёт себя задержка для стандартных клавиш мыши у &quot;стандартной&quot;<br>
мыши. Без наворотов с дополнительными клавишами, колёсами итд. ?</div></div><br>
Нет стандартной мыши под рукой, к сожалению. Только Bloody T70, однако я её софт даже не ставил, так что она должна восприниматься системой как самая обычная мышь, по идее.]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821708</guid>
        <pubDate>Fri, 21 Feb 2020 12:39:49 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821708</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821529'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T19:03:15+00:00">19.02.20, 19:03</time></span><div class='quote '>Прекрасно, только разницы никакой: как была задержка, так и осталась.</div></div><br>
1. А как ведёт себя задержка для стандартных клавиш мыши ?<br>
2. Как ведёт себя задержка для стандартных клавиш мыши у &quot;стандартной&quot;<br>
мыши. Без наворотов с дополнительными клавишами, колёсами итд. ?<br>
---<br>
Исследуй ситуацию, ставь эксперименты.<br>
За тебя этого никто не сделает.<br>
---<br>
Может, мы совершенно по-разному оцениваем результаты ?<br>
То, что ты считаешь недопустимой задержкой я полагаю<br>
допустимой. Отсюда и разночтения. :(<br>
---<br>
Вот, я приаттачил тесты. Попробуй их запустить.<br>
Вывод производится в окно утилиты DbgView.<br>
<span class="b-attach" data-size="186042" data-hits="518" data-attach-id="61416" data-attach-post-id="3821708">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3821708&amp;attach_id=61416' title='Скачать файл' target='_blank'>test.7z</a> (, : 518)
		</span>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821538</guid>
        <pubDate>Wed, 19 Feb 2020 21:14:36 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821538</link>
        <description><![CDATA[Qraizer: Ну что могу сказать. Задержка возникает уже на приёме управления хуком, т.е. система её вызывает с задержкой. Думаю, причина в оптимизации ОСью возможных очень частых событий.<br>Попробуй другие ОСи, если есть возможность. Я пробовал в Win10Pro x64. Ещё попробуй всё ж обычный WH_MOUSE, не _LL. Но для него реально нужна будет DLL.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821531</guid>
        <pubDate>Wed, 19 Feb 2020 19:22:26 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821531</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821529'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T19:03:15+00:00">19.02.20, 19:03</time></span><div class='quote '>Прекрасно, только разницы никакой: как была задержка, так и осталась. Что теперь не так?</div></div><br>
Завтра попробую у себя. Интересно.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821529</guid>
        <pubDate>Wed, 19 Feb 2020 19:03:15 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821529</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821415'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T04:10:14+00:00">19.02.20, 04:10</time></span><div class='quote '>В-третьих, у тебя в примере нет окон</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821416'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T04:22:54+00:00">19.02.20, 04:22</time></span><div class='quote '>Таким образом, я бы сперва попробовал ради теста залепить хук в GUI приложении, посмотреть изменилась ли обработка по времени.</div></div><br>
Нарисовал окошко:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;Windows.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">void InputRButtonDown()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;INPUT inp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(&amp;inp, 0, sizeof(INPUT));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.type = INPUT_MOUSE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SendInput(1, &amp;inp, sizeof(INPUT));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void InputRButtonUp()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;INPUT inp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(&amp;inp, 0, sizeof(INPUT));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.type = INPUT_MOUSE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.mi.dwFlags = MOUSEEVENTF_RIGHTUP;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SendInput(1, &amp;inp, sizeof(INPUT));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;MSLLHOOKSTRUCT* mhs = (MSLLHOOKSTRUCT*)lParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (nCode &#62;= 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WORD button;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;switch (wParam)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_LBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_LBUTTONUP:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_RBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_RBUTTONUP:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_XBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;button = HIWORD(mhs-&#62;mouseData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (button == XBUTTON2) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InputRButtonDown();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_XBUTTONUP:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;button = HIWORD(mhs-&#62;mouseData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (button == XBUTTON2) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InputRButtonUp();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return CallNextHookEx(NULL, nCode, wParam, lParam);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;static HHOOK hHook;</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch (msg)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_CREATE:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;hHook = SetWindowsHookExW(WH_MOUSE_LL, MouseProc, NULL, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_CLOSE:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;UnhookWindowsHookEx(hHook);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DestroyWindow(hWnd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case WM_DESTROY:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PostQuitMessage(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;default:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return DefWindowProcW(hWnd, msg, wParam, lParam);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;static const wchar_t className[] = L&quot;MyWindowClass&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WNDCLASSEX wc;</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(&amp;wc, 0, sizeof(wc));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.cbSize = sizeof(WNDCLASSEX);</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.style = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.lpfnWndProc = WndProc;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.cbClsExtra = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.cbWndExtra = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.hInstance = hInstance;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.hIcon = LoadIconW(NULL, IDI_APPLICATION);</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.hCursor = LoadCursorW(NULL, IDC_ARROW);</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.lpszMenuName = NULL;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.lpszClassName = className;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wc.hIconSm = LoadIconW(NULL, IDI_APPLICATION);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!RegisterClassExW(&amp;wc))</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBoxW(NULL, L&quot;Class registration failed!&quot;, L&quot;Error&quot;, MB_ICONERROR | MB_OK);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;HWND hWnd = CreateWindowExW(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WS_EX_CLIENTEDGE,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;className,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;L&quot;Window&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WS_OVERLAPPEDWINDOW,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;NULL, NULL, hInstance, NULL</div><div class="code_line">&nbsp;&nbsp; &nbsp;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (hWnd == NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBoxW(NULL, L&quot;Window creation failed!&quot;, L&quot;Error&quot;, MB_ICONERROR | MB_OK);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ShowWindow(hWnd, nCmdShow);</div><div class="code_line">&nbsp;&nbsp; &nbsp;UpdateWindow(hWnd);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MSG msg;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (GetMessageW(&amp;msg, NULL, 0, 0) != 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TranslateMessage(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DispatchMessageW(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return msg.wParam;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Прекрасно, только разницы никакой: как была задержка, так и осталась. Что теперь не так?]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821416</guid>
        <pubDate>Wed, 19 Feb 2020 04:22:54 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821416</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821195'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T05:49:04+00:00">16.02.20, 05:49</time></span><div class='quote '>Какая разница? Это же глобальный хук.</div></div><br>
Ну  вот такие ответы есть на SO, мож они чем помогут:<br>
<br>
1)<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>The events are posted to the active window. Console windows are owned by the console subsystem, csrss.exe, and it receives the events, then translates them to characters and puts them in the console object which is your application&#39;s stdin.<br>
<br>
If you want to process events the Win32 GUI way, you should use a Win32 window (e.g. RegisterClass and CreateWindow), not a console window.<br>
<br>
If you just want the callbacks to work for a certain period of time, you can use an alertable wait such as SleepEx or MsgWaitForMultipleObjects, which accept a timeout.</div></div><br>
2)<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>The problem is that SetWindowHookEx is based upon the Win32 message handling model. Console windows are children of the Kernel itself and do not create their own message pumps or windows.<br>
<br>
AFAIK doing what you want directly is not possible.</div></div><br>
3)<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>The low-level hooks, WH_KEYBOARD_LL and WH_MOUSE_LL are different from all the other hooks. They don&#39;t require a DLL to be injected into the target process. Instead, Windows calls your hook callback directly, inside your own process. To make that work, a message loop is required. There is no other mechanism for Windows to make callbacks on your main thread, the callback can only occur when you&#39;ve called Get/PeekMessage() so that Windows is in control.<br>
<br>
A global hook like WH_KEYBOARD is very different. It requires a DLL and the callback occurs within the process that processes the keyboard message. You need some kind of inter-process communication to let your own program be aware of this. Named pipes are the usual choice. Which otherwise of course requires that this injected process pumps a message loop. It wouldn&#39;t get keyboard messages otherwise.<br>
<br>
Favor a low-level hook, they are much easier to get going. But do pump or it won&#39;t work. And beware of timeouts, if you&#39;re not responsive enough then Windows will kill your hook without notice.</div></div><br>
Таким образом, я бы сперва попробовал ради теста залепить хук в GUI приложении, посмотреть изменилась ли обработка по времени. Так ли обрабатываются сообщения винды. Всеж, как писали выше, консольное приложение имеет отличия от обычных (GUI). Ну и если нет очевидного и аргументированного ответа - что еще поможет как собственные тесты и разборки? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-19T04:24:22+00:00">19.02.20, 04:24</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821415'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T04:10:14+00:00">19.02.20, 04:10</time></span><div class='quote '>Сообщения потока так не обрабатываются, у него нет оконной функции.</div></div><br>
Вот и я об этом уже второй пост пишу  :-?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821415</guid>
        <pubDate>Wed, 19 Feb 2020 04:10:14 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821415</link>
        <description><![CDATA[Qraizer: Во-первых, LowLevelHooks не внедряются в другие процессы. Вместо этого ОСь переключает контекст на процесс, нитка которого инсталлировала хук, вызывает в нём функцию хука, а затем переключается обратно. Собственно поэтому такие глобальные хуки не надо размещать в DLL.<br>Во-вторых, ввиду того, что lowlevel-события в подавляющем большинстве случаев будут приходить в поток асинхронно, ОСь не может вот просто взять и прервать поток хука на полуслове, чтобы сделать якобы вызов его функции посреди дороги. Ни одному приложению не понравится, если посреди потока его инструкций внезапно из-за прерывания вдруг сменится окружающий контекст, типа там регистры процессора, переменные в памяти, закешированные оптимизатором в регистрах не volatile переменные из памяти итп. Прервать поток можно только в безопасные к таким нюансам моменты времени. И обработка сообщений самое для этого место и время. Поэтому поток должен обрабатывать свою очередь сообщений, чтобы получать вызовы своего хука. Достаточно просто вызвать GetMessage(), и пока она не вернула управление, ОСь может безопасно вызвать функцию хука без любых неожиданностей для окружающего поток контекста.<br>В-третьих, у тебя в примере нет окон, сообщения выбираются прямо из очереди потока. Внимание – вопрос: хрен с TranslateMessage(), но что там делает DispatchMessage()? Сообщения потока так не обрабатываются, у него нет оконной функции.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821413</guid>
        <pubDate>Tue, 18 Feb 2020 23:47:38 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821413</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821402'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-18T22:35:08+00:00">18.02.20, 22:35</time></span><div class='quote '>И как правильно поставить глобальный хук.<br>
(А мысли поставить хук локально меня ни разу не посещали  )</div></div><br>
А чем, собственно, мой хук, чья процедура расположена не в DLL, а в коде текущего процесса, не глобальный, если он прекрасно ловит клики мышкой во всех запущенных приложениях? Локальный хук — это хук, который отлавливает что-то в <strong class='tag-b'>одном</strong> приложении. И для этого, как раз, нужно написать и инжектнуть в сторонний процесс DLL. А для установки глобального хука, как видно из моего примера, вовсе не обязательно.  :-? <br>
Или я неправильно понимаю значение понятий глобального и локального хука?]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821402</guid>
        <pubDate>Tue, 18 Feb 2020 22:35:08 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821402</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821383'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-18T15:26:43+00:00">18.02.20, 15:26</time></span><div class='quote '>Вам не кажется, что у автора той темы хук некорректно устанавливается только по той причине, что он сопровождает в функцию SetWindowsHookEx третий параметр не равным NULL? На MSDN ведь чётко и ясно сказано, что третий параметр должен быть равен NULL в том случае, если хук-процедура расположена <strong class='tag-b'>в коде текущего процесса</strong>, что само по себе говорит о том, что так делать <strong class='tag-b'>можно</strong>.</div></div><br>
Не спорю - может быть и можно.<br>
я лишь рассказал, что у меня лично получилось и не получилось.<br>
И как правильно поставить глобальный хук.<br>
(А мысли поставить хук локально меня ни разу не посещали :( )<br>
А ссылку я дал чтобы обратить внимание на необходимость<br>
размещения процедуры перехватчика глобального хука в dll.<br>
---<br>
Если же посмотреть подробнее на исходник по ссылке, так там<br>
он либо не полный, либо явно ошибочный.<br>
Причём автор не объяснил, где ошибку сделал.<br>
Вероятно, тут:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HINSTANCE hmod;</div></ol></div></div></div></div><br>
Какое значение у этой переменной перед подачей на &quot;SetWindowsHookEx&quot;?]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821383</guid>
        <pubDate>Tue, 18 Feb 2020 15:26:43 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821383</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821245'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-17T09:24:25+00:00">17.02.20, 09:24</time></span><div class='quote '>Да вот, пожалуйста:<br>
Обсуждение похожей проблемы</div></div><br>
Вам не кажется, что у автора той темы хук некорректно устанавливается только по той причине, что он сопровождает в функцию SetWindowsHookEx третий параметр не равным NULL? На MSDN ведь чётко и ясно сказано, что третий параметр должен быть равен NULL в том случае, если хук-процедура расположена <strong class='tag-b'>в коде текущего процесса</strong>, что само по себе говорит о том, что так делать <strong class='tag-b'>можно</strong>.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>SetWindowsHookExA</span><div class='quote '>hmod<br>
<br>
Type: HINSTANCE<br>
<br>
A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. <strong class='tag-b'>The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.</strong><br>
</div></div>]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821245</guid>
        <pubDate>Mon, 17 Feb 2020 09:24:25 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821245</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821227'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T22:22:35+00:00">16.02.20, 22:22</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T12:17:11+00:00">16.02.20, 12:17</time></span><div class='quote '>Любая моя попытка сделать &quot;SetWindowsHookEx(WH_MOUSE_LL, MouseProc..&quot; в теле основной<br>
программы обязательно приводит к ошибке.</div></div><br>
Это странно. Вы уверены? Вы пробовали скомпилировать у себя мой код в проекте консольного приложения?</div></div><br>
Абсолютно уверен.<br>
И, конечно же, я не компилировал предложенный исходник.<br>
Создал тестовый проект, взял каркас оконного приложения итд.<br>
Разобрал старый учебный проект, вспомнил, что и раньше было так же.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
Да вот, пожалуйста:<br>
<a class='tag-url' href='http://www.cyberforum.ru/win-api/thread114382.html' target='_blank'>Обсуждение похожей проблемы</a><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Ребят подскажите пожалуйста где у меня ошибка почему при нажатиии мыши у меня не срабатывает моя хук процедура вот код<br>
</div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
...Поэкспериментируйте. Просто обычно хуки нужны для чужих процессов и делются в DLL, а не так вот. Какой смысл в хуке на самого себя? <br>
</div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
chel-0007, как правильно сказал kukuruku310, глобальный хук должен находиться в dll. Поэтому глобальным хуком здесь и не пахнет.<br>
</div></div><br>
</div></div>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821227</guid>
        <pubDate>Sun, 16 Feb 2020 22:22:35 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821227</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T12:17:11+00:00">16.02.20, 12:17</time></span><div class='quote '>Насколько я помню, для установки глобального хука процедура<br>
обработчика должна быть в dll.</div></div><br>
Видите ли, на самом деле, это всё вообще в конечном итоге будет в виде аддона к Node.js. Моя цель — джаваскриптуемый автокликер на базе ноды. Аддон к ноде — это и есть самая обычная DLL, просто с расширением .node и особым форматом. Разницы в поведении, что в виде аддона для ноды, что в виде отдельного консольного приложения Windows, я не замечаю. Просто, дабы не отягощать тему лишней информацией и специфичным для Napi кодом, я накидал отдельную консольную программу и выложил сюда её код.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T12:17:11+00:00">16.02.20, 12:17</time></span><div class='quote '>Любая моя попытка сделать &quot;SetWindowsHookEx(WH_MOUSE_LL, MouseProc..&quot; в теле основной<br>
программы обязательно приводит к ошибке.</div></div><br>
Это странно. Вы уверены? Вы пробовали скомпилировать у себя мой код в проекте консольного приложения? Почему у меня он не выкидывает никаких ошибок, а у Вас выкидывает?]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821219</guid>
        <pubDate>Sun, 16 Feb 2020 12:17:11 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821219</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-15T20:29:49+00:00">15.02.20, 20:29</time></span><div class='quote '>Есть вот такой простой код. Тут устанавливается LowLevel Mouse Hook, обрабатывающий глобально нажатия кнопок мыши.</div></div><br>
А это точно можно делать ?<br>
Насколько я помню, для установки глобального хука процедура<br>
обработчика должна быть в dll.<br>
Любая моя попытка сделать &quot;SetWindowsHookEx(WH_MOUSE_LL, MouseProc..&quot; в теле основной<br>
программы обязательно приводит к ошибке.<br>
В примере выше результат выполнения этой функции даже не проверяется. :(<br>
-----<br>
Что касается задержки - у меня был старый проект, я быстренько<br>
его модифицировал. Но для x86 и с использованием dll.<br>
Так вот, большой задержки я не вижу, даже с учётом накладного<br>
по времени вывода диагностики. Хотя разница между кликами<br>
иногда бывает заметна. Но Виндус &quot;мгновенной&quot; реакции и не гарантирует.<br>
-----<br>
Попробовал запуститься в виртуальной машине (Win7 x64).<br>
Для обеих сборок - x86 и x64 - задержек не обнаружено.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821203</guid>
        <pubDate>Sun, 16 Feb 2020 08:00:31 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821203</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821198'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T07:10:57+00:00">16.02.20, 07:10</time></span><div class='quote '>А чем задержку считаем, просто на глаз?</div></div><br>
Да, просто на глаз. Ну там, как бы, совершенно очевидно, что она нездорово большая. Это не какое-то подвисание железа или типа того, а прям такая <strong class='tag-b'>заметная</strong> системная задержка. Компьютер, как уже говорил, вполне приличный.]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821198</guid>
        <pubDate>Sun, 16 Feb 2020 07:10:57 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821198</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821195'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T05:49:04+00:00">16.02.20, 05:49</time></span><div class='quote '>Какая разница? Это же глобальный хук.</div></div><br>
Понятно сейчас.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-15T20:29:49+00:00">15.02.20, 20:29</time></span><div class='quote '>задержки тоже нет</div></div><br>
А чем задержку считаем, просто на глаз?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821195</guid>
        <pubDate>Sun, 16 Feb 2020 05:49:04 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821195</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821194'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-16T04:44:01+00:00">16.02.20, 04:44</time></span><div class='quote '>lem0nify, чет я не совсем понимаю кода. Ты пытаешься отловить мышь в консольном приложении?<br>
Может все же GUI окно создать сперва?</div></div><br>
Какая разница? Это же глобальный хук. Я не в своём окне мышь ловлю, а по всей системе. И она прекрасно ловится, проблема в другом. Вы пост-то полностью прочитали? Там же всё объяснено.]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821194</guid>
        <pubDate>Sun, 16 Feb 2020 04:44:01 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821194</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>lem0nify</strong>, чет я не совсем понимаю кода. Ты пытаешься отловить мышь в консольном приложении?<br>
Может все же GUI окно создать сперва?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821192</guid>
        <pubDate>Sun, 16 Feb 2020 01:37:45 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821192</link>
        <description><![CDATA[lem0nify: Что-то я не очень понимаю. Если я кликаю в определённом приложении (допустим, стандартный Windows&#39;овский блокнот), разве не только его разрядность и разрядность моей программы играет роль? Клик всё равно обрабатывается всеми хуками, инжектнутыми во все приложения в системе? Хорошо, допустим. А как создать два разных хука разной разрядности и распределить по ним приложения соответствующей разрядности?<br>И почему с клавиатурными хуками, тогда, всё в порядке? Это касается только MouseHook&#39;ов?]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821191</guid>
        <pubDate>Sun, 16 Feb 2020 01:13:03 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821191</link>
        <description><![CDATA[Qraizer: Хорошо, уточню:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>SetWindowsHookExW</span><div class='quote '>Because hooks run in the context of an application, they must match the &quot;bitness&quot; of the application. If a 32-bit application installs a global hook on 64-bit Windows, the 32-bit hook is injected into each 32-bit process (the usual security boundaries apply). In a 64-bit process, the threads are still marked as &quot;hooked.&quot; However, because a 32-bit application must run the hook code, the system executes the hook in the hooking app&#39;s context; specifically, on the thread that called SetWindowsHookEx. This means that the hooking application must continue to pump messages or it might block the normal functioning of the 64-bit processes.<br>
<br>
If a 64-bit application installs a global hook on 64-bit Windows, the 64-bit hook is injected into each 64-bit process, while all 32-bit processes use a callback to the hooking application.<br>
<br>
To hook all applications on the desktop of a 64-bit Windows installation, install a 32-bit global hook and a 64-bit global hook, each from appropriate processes, and be sure to keep pumping messages in the hooking application to avoid blocking normal functioning. If you already have a 32-bit global hooking application and it doesn&#39;t need to run in each application&#39;s context, you may not need to create a 64-bit version.</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-02-16T01:17:09+00:00">16.02.20, 01:17</time></span></span><br>
Вопрос не в конкретной разрядности, вопрос в совпадении битности хукающего и хукаемого.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821190</guid>
        <pubDate>Sun, 16 Feb 2020 00:31:31 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821190</link>
        <description><![CDATA[lem0nify: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2020-02-15T23:21:58+00:00">15.02.20, 23:21</time></span><div class='quote '>Подозреваю, что ребята с БиткомНабитогоМагазина могут быть не так уж и неправыми. Как там с 32-/64- битностью?</div></div><br>
Система 64-битная, конечно. Компьютер почти современный. Программу компилирую тоже под х64, конечно же.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821188'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-02-15T23:46:07+00:00">15.02.20, 23:46</time></span><div class='quote '>А инпут &quot;оформлен&quot; правильно и достаточно?<br>
Меня во эта статья убеждает - что не очень.</div></div><br>
Насколько я понимаю, в этой статье симулируется клик в определённую точку с абсолютной позицией, поэтому указывается флаг MOUSEEVENTF_ABSOLUTE и указываются координаты точки. Мне нужен клик в текущую фактическую позицию курсора мыши, т.е. позиция выбирается не абсолютно, а относительно, поэтому данный флаг я не указываю, а inp.mi.dx и inp.mi.dy оставляю равными нулю.<br>
<br>
Ещё раз, на всякий случай, обращу ваше внимание на то, что при любых других обстоятельствах данный способ отправки инпута работает превосходно. Задержка возникает <strong class='tag-b'>ТОЛЬКО</strong> при отправке его из Low Level Mouse Hook Procedure.]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821188</guid>
        <pubDate>Sat, 15 Feb 2020 23:46:07 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821188</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416836&view=findpost&p=3821183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>lem0nify &#064; <time class="tag-quote__quoted-time" datetime="2020-02-15T20:29:49+00:00">15.02.20, 20:29</time></span><div class='quote '>Т.е. задержка возникает только при отправке инпута мыши из hook-процедуры мыши.</div></div><br>
А инпут &quot;оформлен&quot; правильно и достаточно? <br>
Меня <a class='tag-url' href='https://myprogrammingnotes.com/simulate-mouse-click-using-sendinput.html' target='_blank'>во эта статья</a> убеждает - что не очень.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821187</guid>
        <pubDate>Sat, 15 Feb 2020 23:21:58 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821187</link>
        <description><![CDATA[Qraizer: Подозреваю, что ребята с БиткомНабитогоМагазина могут быть не так уж и неправыми. Как там с 32-/64- битностью?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821183</guid>
        <pubDate>Sat, 15 Feb 2020 20:29:49 +0000</pubDate>
        <title>Задержка при имитации событий мыши из низкоуровневой hook-процедуры мыши.</title>
        <link>https://forum.sources.ru/index.php?showtopic=416836&amp;view=findpost&amp;p=3821183</link>
        <description><![CDATA[lem0nify: Доброго времени суток&#33;<br>
Пишу сюда, потому что тут, помнится, сидят матёрые программисты с вагоном опыта. На StackOverflow ребята пожимают плечами.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;Windows.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">void InputRButtonDown()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;INPUT inp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.type = INPUT_MOUSE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SendInput(1, &amp;inp, sizeof(INPUT));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void InputRButtonUp()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;INPUT inp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.type = INPUT_MOUSE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inp.mi.dwFlags = MOUSEEVENTF_RIGHTUP;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SendInput(1, &amp;inp, sizeof(INPUT));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (nCode &#62;= 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WORD button;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;switch (wParam)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_LBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_LBUTTONUP:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_RBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_RBUTTONUP:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_XBUTTONDOWN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;button = HIWORD(((MSLLHOOKSTRUCT*)lParam)-&#62;mouseData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (button == XBUTTON2) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InputRButtonDown();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_XBUTTONUP:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;button = HIWORD(((MSLLHOOKSTRUCT*)lParam)-&#62;mouseData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (button == XBUTTON2) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InputRButtonUp();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return CallNextHookEx(NULL, nCode, wParam, lParam);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetWindowsHookExW(WH_MOUSE_LL, MouseProc, NULL, 0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MSG msg;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (GetMessageW(&amp;msg, NULL, 0, 0) != NULL) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TranslateMessage(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DispatchMessageW(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
Есть вот такой простой код. Тут устанавливается LowLevel Mouse Hook, обрабатывающий глобально нажатия кнопок мыши. При нажатии на XBUTTON2, одну из боковых кнопок, вызывается функция InputRButtonDown, при отжатии — InputRButtonUp, которые отправляют сигналы нажатия и отжатия другой кнопки мыши (правой) соответственно. Т.е. пока программа запущена, клик на XBUTTON2 должен дополнительно полностью имитировать клик правой кнопки мыши и вызывать контекстное меню. Так и происходит, но перед выпадом контекстного меню случается задержка (полсекунды или чуть меньше).<br>
Если я немного меняю код и вызываю те же самые SendInput, но не в hook-процедуре мыши, а в аналогичной hook-процедуре клавиатуры, скажем, при нажатии на клавишу А, никакой задержки нет. Если я, наоборот, отправляю с помощью SendInput сигналы нажатия клавиши клавиатуры из любой из hook-процедур, будь то hook-процедура мыши или клавиатуры, задержки тоже нет, нажатие клавиши имитируется мгновенно. Т.е. задержка возникает только при отправке инпута <strong class='tag-b'>мыши</strong> из hook-процедуры <strong class='tag-b'>мыши</strong>.<br>
Пробовал вызывать SendInput при получении WM_LBUTTONDOWN/UP, вместо WB_XBUTTONDOWN/UP — задержка сохраняется. Обнулять структуру INPUT перед вызовом SendInput тоже пробовал — разницы никакой.<br>
На StackOverflow мне скинули <a class='tag-url' href='https://devblogs.microsoft.com/oldnewthing/20140213-00/?p=1773' target='_blank'>вот эту ссылку</a>, мотивируя тем, что эта задержка возникает из-за очереди обработки событий, мол, это нормально, и поделать с этим ничего нельзя. Однако, 400-500 миллисекунд — не великовато ли? Кроме того, различные автокликеры, вроде AutoHotKey и AutoIt, выполняют подобные задачи без всяких задержек, значит избежать их всё-таки можно, и я что-то делаю не так.<br>
Второй день бьюсь, не могу понять, из-за чего возникает проблема и как её решить. Не мог бы кто-нибудь из опытных Win32API-программистов пролить свет на ситуацию и объяснить мне? Буду очень благодарен.]]></description>
        <author>lem0nify</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	