officeがキーボードショートカットをハイジャックすることを決定したようです CTRL+ALT+SHIFT+WIN+D。
それは問題のように思えないかもしれませんが、私はAutoHotKeyにそのキーボードショートカットを割り当て、何年もそれを使用しています。
Office Hubを開き始め、それをアンインストールした後、代わりにOffice Hub Webページを開きます。
では、このキーボードショートカットを削除/無効にするにはどうすればよいですか?
実行中のOfficeプロセスはなく、プロパティにショートカットが割り当てられている.lnk
ファイルが見つかりません。
何か案は?
すべてのアップデートがインストールされた最新のWindows Insider Preview(18932)と最新のOfficeを使用しています。
Windows 1903にアップグレードし、これを自分で打っただけです。Microsoftは、新しいOfficeアプリのキーボードショートカットをWin + Ctrl + Alt + Shiftに割り当てることにしました。
これのopenコマンドをrundll32に変更すると、問題が解決しました。管理者特権のコマンドを使用して、次のコマンドを実行します。
REG ADD HKCU\Software\Classes\ms-officeapp\Shell\Open\Command /t REG_SZ /d rundll32
AutoHotkey を使用して、ほとんどのキーボードショートカットを上書きできます-通常、唯一の例外は Ctrl+Alt+Del そして Win+L。
この場合の複雑さの1つは、AutoHotkeyが修飾キーをブロックしないことです。これを行うと、通常の機能が妨げられます。たとえば、ホットキー^!+#d::
は、 D キー、ただし4つの修飾キーがすでにOSとアクティブウィンドウに渡されている場合のみ。実際には、オペレーティングシステムのキーボードショートカット認識機能は、 Ctrl+Alt+Shift+Win の代わりに Ctrl+Alt+Shift+Win+Dなので、OneDriveを開く代わりに、OfficeアプリまたはWebサイトを開きます。
同じことが、通常、スタートメニューまたはウィンドウメニューをアクティブにするWinキーとAltキーにも当てはまります。ただし、これらの場合、AutoHotkeyはキーを送信してメニューを自動的に「マスク」します(LCtrl デフォルトでは、ただし #MenuMaskKey )でオーバーライドできます。オペレーティングシステムのキーボードショートカット認識機能が、WinまたはAltが別のキーと組み合わせて使用されていることを検出すると、WinまたはAltキーが離されたときにメニューがアクティブにならないようにします。
AutoHotkeyの将来のアップデートでは、このマスキングを^!+#
に追加する可能性がありますが、v1.1.30.03以降は行われません。ショートカットを手動でマスクすることは、キーを送信する場合にすぎません。
AutoHotkey v1.x用の次のスクリプトは、 Ctrl+Alt+Shift+Win+D:
^+!#d::
Send {blind}{vk07}
;... perform other tasks here as needed ...
return
メインのOfficeショートカットは、修飾キーを任意の順序で組み合わせてアクティブ化できるため、抑制するにはいくつかのホットキーが必要です。 「サフィックス」キーごとに1つ:
#^!Shift::
#^+Alt::
#!+Ctrl::
^!+LWin::
^!+RWin::
Send {Blind}{vk07}
return
Windows 10ビルド18362.10014での私の実験によると、次の Ctrl+Alt+Shift+Win ショートカットも存在します: Word、 TeAM、 Yammer、 Outlook/Mail、 PowerPoint、 LinkedIn、ExセルとワンNote。
文字キーのショートカットは RegisterHotkey で登録された他のすべてのホットキーと同じ方法で処理される可能性があります。つまり、それらはプログラム(この場合はエクスプローラー)によって登録され、そのプログラムが終了するか終了すると登録解除されます。
^!+#d::
は通常AutoHotkeyによって登録できます。ListHotkeys
は「reg」メソッドを示します。^!+#d::
を登録できないため、AutoHotkeyはキーボードフックの使用にフォールバックします-ListHotkeys
は「k-hook」メソッドを示します。^+!#d::
を登録し、組み込みのホットキーは機能しませんAutoHotkeyが終了した場合でも、Explorerが再起動されるまで。これは、ホットキーがすでにプロセスによって登録されている場合、RegisterHotkeyが失敗するという事実によって説明できます。これは、次のような従来のショートカットでも確認できます。 Win+E、 だがしかし Win+Lこれは、セキュリティ上の理由から、より低いレベルで実装される可能性があります。
ただし、Officeのメインショートカット(Ctrl+Alt+Shift+Win)はこのように動作せず、何もしないホットキーを定義するだけでは無効にできません。これはおそらく、修飾キーが押されたときではなく、修飾キーがreleasedのときにアクティブになるためです。
Officeアプリはショートカットの登録を担当していないようです。設定アプリからOfficeアプリが「アンインストール」されている場合は、 Ctrl+Alt+Shift+WinOfficeアプリを再インストールしてから開きます。アプリが PowerShell経由で完全に削除される の場合、ショートカットは代わりにOffice Webサイトを開きます。
私のシステムでは、OneDライブショートカットでエラーメッセージが表示され(WindowsはOneDrive.exeを見つけられません)、OneDriveをアンインストールしたため、間違いなくOneDrive Webサイトを開きます。
...システム定義のホットキーを上書きする必要はありません。ただし、アクティブウィンドウがAutoHotkeyよりも高い整合性レベルで実行されている場合、キーボードフックで実装されたホットキー(上記のすべてなど)は通常機能しません。これは、 ユーザーインターフェイス権限の分離 と呼ばれるセキュリティ機能によるもので、これは Iアクセスで実行 によって回避できます。管理者として実行すると、スクリプトとスクリプトが起動するすべてのプログラムに管理者権限が付与されますが、UIアクセスで実行すると、スクリプトはUIPIをバイパスすることしかできません。
どのプログラム/タスクがキーボードショートカットを「スナッチ」するかがわかっている場合は、タスクに高い権限があるかどうかを確認する必要があります。たとえば、AHKが通常のユーザー権限で実行されているときに、管理者権限で実行された場合などです。この場合、AHK管理者権限も与える必要があります。これにより、問題が解決されます。
別のタスクがショートカットの「シャッチング」を担当している可能性のある別のタスクが実行されているオフィスタスクがないため、責任のあるタスクを見つけるのに役立ついくつかの suggestion がサイトにここにあります。
すべてのショートカットを完全に無効にするソリューションを見つけました。
https://www.howtogeek.com/445318/how-to-remap-the-office-key-on-your-keyboard/
#include <windows.h>
#include <stdio.h>
#include <thread>
#include <chrono>
#include <iostream>
int main(int argc, wchar_t* argv[])
{
//Build Array Of Keys To Unregister
//These map to W, T, Y, O, P, D, L, X, N, and Space, respectively.
UINT offendingKeys[10] = { 0x57, 0x54, 0x59, 0x4F, 0x50, 0x44, 0x4C, 0x58, 0x4E, 0x20 };
//Kill Explorer
system("taskkill /IM Explorer.exe /F");
//Register hotkey
for (int i = 0; i < 10; i++) {
RegisterHotKey(NULL, i, 0x1 + 0x2 + 0x4 + 0x8 | MOD_NOREPEAT, offendingKeys[i]);
}
//Restart Explorer
system("start C:/Windows/Explorer.exe");
/* Sleep for a few seconds to make sure Explorer has time to
attempt to register the Office hotkeys, and get blocked by
our hotkeys */
std::this_thread::sleep_for(std::chrono::milliseconds(4000));
//deregister hotkeys by ID
for (int i = 0; i < 10; i++) {
UnregisterHotKey(NULL, i);
}
return 1;
}
基本的に、エクスプローラーは閉じられ、プログラムは各ホットキーを登録します。 Explorerが再起動すると、ホットキーによってブロックされます。プログラムはホットキーの登録を解除して終了し、キーボードを使用可能な状態に戻します。
これを機能させるには、jfrmilnerのレジストリTweakがアクティブである必要があります。
REG ADD HKCU\Software\Classes\ms-officeapp\Shell\Open\Command /t REG_SZ /d rundll32
私のテストでは、エクスプローラーの実行中に登録されたホットキーを上書きできなかったため、スクリプトを管理者として実行していたため、エクスプローラーを再起動する必要がありました。 Explorerのホットキーを直接オーバーライドする方法を知っている人がいたら、私に知らせてください。