<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=18444&amp;type=atom" />
	<updated>2025-05-10T21:47:00Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=18444</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162469#p162469" />
			<content type="html"><![CDATA[<p>Любопытно. Стоило запустить скрипт из-под аккаунта System (командой psexec -s -i -d), как все комбинации начали перехватываться без проблем. Даже в секции #IfWinNotActive. Похоже, просто из-под администратора ему не хватало прав на системные комбинации, но вот почему была разница между секциями #IfWinNotActive и #IfWinActive, это непонятно.</p>]]></content>
			<author>
				<name><![CDATA[delpher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=6992</uri>
			</author>
			<updated>2025-05-10T21:47:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162469#p162469</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162468#p162468" />
			<content type="html"><![CDATA[<p>Хм. Не ожидал, что результат будет зависеть от того, какая комбинация перехватывается. У меня используется комбинация Win+Space. В режиме #UseHook On никакая комбинация при зависшем окне не срабатывает, но при #UseHook Off в зависшем окне срабатывает Ctrl+1, но все равно не срабатывает Win+Space.</p><div class="codebox"><pre><code>#Requires AutoHotkey v1.1
#SingleInstance Force
#UseHook Off

#IfWinActive
#Space::Msgbox, Win+Space
^1::Msgbox, Ctrl+1</code></pre></div><p>Похоже, это по причине, что существуют &quot;hotkeys not supported by RegisterHotkey (which is a function built into the operating system)&quot; - они всегда перехватываются через hook. Win+Space как раз встроенная комбинация OS.</p><br /><p>И есть второй момент - если комбинация в секции #IfWinNotActive, то в зависшем окне перестает срабатывать и Ctrl+1 тоже.</p><div class="codebox"><pre><code>#Requires AutoHotkey v1.1
#SingleInstance Force
#UseHook Off

#IfWinNotActive ahk_class TscShellContainerClass
#Space::Msgbox, Win+Space
^1::Msgbox, Ctrl+1</code></pre></div>]]></content>
			<author>
				<name><![CDATA[delpher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=6992</uri>
			</author>
			<updated>2025-05-10T21:09:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162468#p162468</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162467#p162467" />
			<content type="html"><![CDATA[<p>Я протестировал на таком окне:<br /></p><div class="codebox"><pre><code>Gui, Show, w300 h300
DllCall(&quot;SuspendThread&quot;, &quot;Ptr&quot;, DllCall(&quot;GetCurrentThread&quot;))</code></pre></div><p>Горячая клавиша в другом скипте<br /></p><div class="codebox"><pre><code>#IfWinActive
^1:: MsgBox test</code></pre></div><p>работает.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2025-05-10T17:13:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162467#p162467</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162466#p162466" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong><br />Скрипт изначально был в режиме #UseHook On, поменял на Off - не помогло.</p>]]></content>
			<author>
				<name><![CDATA[delpher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=6992</uri>
			</author>
			<updated>2025-05-10T15:27:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162466#p162466</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162465#p162465" />
			<content type="html"><![CDATA[<p>Не тестировал, но первое, что приходит в голову, попробовать #UseHook.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2025-05-10T12:33:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162465#p162465</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162449#p162449" />
			<content type="html"><![CDATA[<p>Что-то файлик не приложился.<br /></p><div class="codebox"><pre><code>program Hang_App;

{$mode Delphi}
{$H+}

uses
  Windows, Messages;

const
  WinClassName = &#039;MainWindow&#039;;
  WinCaption = &#039;Hang App&#039;;

var
  hWndMain: HWND;

// Процедура обработки сообщений
function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;


function RegisterWindowClass: Boolean;
var
  wc: WNDCLASSEX;
begin
  wc.cbSize := SizeOf(WNDCLASSEX);
  wc.style := CS_HREDRAW or CS_VREDRAW;
  wc.lpfnWndProc := @WndProc;
  wc.cbClsExtra := 0;
  wc.cbWndExtra := 0;
  wc.hInstance := hInstance;
  wc.hIcon := LoadIcon(0, IDI_APPLICATION);
  wc.hCursor := LoadCursor(0, IDC_ARROW);
  wc.hbrBackground := COLOR_BTNFACE + 1;
  wc.lpszMenuName := nil;
  wc.lpszClassName := WinClassName;
  wc.hIconSm := LoadIcon(0, IDI_APPLICATION);

  Result := RegisterClassEx(@wc) &lt;&gt; 0;
end;


var
  hWndClass: WNDCLASSEX;
  nMsg: MSG;
  Rect: TRect;

begin
  if not RegisterWindowClass then
  begin
    MessageBox(0, &#039;Ошибка регистрации класса окна!&#039;, &#039;Ошибка&#039;, MB_ICONERROR);
    Exit;
  end;

  // Создание главного окна
  hWndMain := CreateWindowEx(0, WinClassName, PChar(WinCaption), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, 0, 0, hInstance, nil);
  if hWndMain = 0 then
  begin
    MessageBox(0, &#039;Не удалось создать окно&#039;, &#039;Ошибка&#039;, MB_ICONERROR);
    Exit;
  end;

  // Центрирование окна
  GetWindowRect(hWndMain, Rect);
  SetWindowPos(hWndMain, 0, (GetSystemMetrics(SM_CXSCREEN) - Rect.Width) div 2, (GetSystemMetrics(SM_CYSCREEN) - Rect.Height) div 2, 0, 0, SWP_NOZORDER or SWP_NOSIZE);

  ShowWindow(hWndMain, SW_SHOW);
  UpdateWindow(hWndMain);

  while GetMessage(nMsg, 0, 0, 0) do
  begin
    if not IsDialogMessage(hWndMain, nMsg) then
    begin
      TranslateMessage(nMsg);
      DispatchMessage(nMsg);
      Sleep(24*60*60*1000);
    end;
  end;
end.</code></pre></div>]]></content>
			<author>
				<name><![CDATA[delpher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=6992</uri>
			</author>
			<updated>2025-05-08T05:34:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162449#p162449</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Не перехватывает глобальные клавиши если текущее окно зависло]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=162448#p162448" />
			<content type="html"><![CDATA[<p>Заметил, что скрипт (v1.1) перестает перехватывать глобальные клавиши (из раздела #IfWinActive, т.е., не относящиеся ни к какому окну или приложению), если текущее окно - зависшее (т.е., в заголовке текст &quot;... (Не отвечает)&quot;). Возможно ли это исправить и как?</p><p>Если негде взять зависшее окно для проверки, приложил исходник на FPC+WinApi (должно скомпилиться и на Delphi) - пустое не отвечающее окно (сделать такое на AHK не получилось).</p>]]></content>
			<author>
				<name><![CDATA[delpher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=6992</uri>
			</author>
			<updated>2025-05-08T05:33:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=162448#p162448</id>
		</entry>
</feed>
