自動ホットキーを使用してこれを実現する方法はありますか?開いたプログラムの数に関係なく、いくつかのウィンドウを常にタスクバーの右上に配置したいです。したがって、例として、現在は this のようになっています。ただし、メモ帳は常にタスクバーの右端に配置する必要があります。したがって、たとえば this のようになります。したがって、開いているプログラムの数に関係なく、タスクバーでは常にメモ帳を右端に配置する必要があります。
Windows8.1と最新バージョンのAutoHotkeyを使用しています。いくつかの説明:メモ帳のウィンドウ自体を画面の右端に配置したくありません。いいえ。代わりに、メモ帳のタスクバーのアイコンだけを右端に配置したいと思います。そのため、たとえば新しいプログラムを開いた場合、アイコンを自動的に右に移動して、メモ帳のアイコンの後にアイコンが表示されないようにします。
インターネットで検索したところ、役に立つものや似たようなものは見つかりませんでした。だから、私がやろうとしているのは、メモ帳のアイコンを常に右側に配置することです。開いたすべてのメモ帳が右に移動するのか、開いたばかりのメモ帳が右に移動するのかは関係ありません。4つのメモ帳を開いて、コンピューターの電源を切るまでそのままにしておくので、それらを閉じないでください。
それを達成する方法は? AutoHotkeyは非常に優れたソフトウェアであり、多くの機能強化が施されているため、方法があるはずです。
前もって感謝します。これはこのサイトでの私の最初の質問ですので、敬意を払ってください。感謝。
タスクバーでアイコンを移動する唯一の方法はアイコンをドラッグすることです。したがって、これはプログラムで手順を実行するAHKスクリプトです。
_^F1::
toggle = true
Window = 0
while (toggle) {
OldWindow = %Window%
WinGet Window, List
if (Window > OldWindow) {
SetTitleMatchMode, RegEx
IfWinExist, Notepad$
{
WinActivate
} Else {
; MsgBox Cannot find Notepad window.
Continue
}
; absolute coordinate
CoordMode Pixel, Screen
CoordMode Mouse, Screen
Sleep, 100 ; wait for the Notepad icon to be fully highlighted, because Windows have animation of lighting icon
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *5 *TransWhite D:\np.bmp
; allow some variation because Windows have anti-aliasing etc.
; ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 *Icon1 %A_WinDir%\system32\notepad.exe
; because of some reason the above command does not work
if ErrorLevel = 2
MsgBox Could not conduct the search.
else if ErrorLevel = 1
MsgBox Icon could not be found on the screen.
else {
MouseGetPos OldX, OldY
SetDefaultMouseSpeed, 0
MouseMove, %FoundX%, %FoundY%
Click down left
MouseMove, A_ScreenWidth, %FoundY% ; move the mouse all the way to the right
Click up left
MouseMove, %OldX%, %OldY% ; move mouse to old position
}
}
Sleep, 500 ; can be omitted
}
Return
^F2::
toggle = false
Return
_
ノート:
*Icon1 %A_WinDir%\system32\notepad.exe
_などを使用できません。メモ帳にフォーカスがある場合は、_D:\np.bmp
_がメモ帳トレイアイコンで構成されるファイルを提供する必要があります。^F1
_を押してオンにし、_^F2
_を押してオフにします。WinGet
によって報告されたウィンドウの数が増えるたびに、つまり新しいウィンドウを開いたときに実行されます。while (toogle)
)を使用する以外は、毎回コマンドを実行する方法がわかりません。 CPUを消費する可能性があります。私は、この問題に対する組み込みの解決策や低水準の解決策を知りません。これが本当に機能的に必要な場合は、プロセスを指定してタスクバーのウィンドウボタンを再配置できる独自のヘルパーアプリを作成する必要があると思います。これは達成できますが、Win32とC++/C#の知識が必要です。30分間試しました(個人的な制限)。
これは私がしたことです:このスレッドは完璧な出発点です: システムトレイアイコンのあるプロセスを取得する方法 ポイント6.古い(32ビット)バージョンのWindowsの実用的なソリューションを提供します: タスクバーのウィンドウボタンを注文するためのツール 残念ながら、64ビットOSおよびWindows10では機能しません。
それでも、サンプルを使用して探索中に行ったいくつかの発見は、6で提供されています。ウィンドウ10でタスクバーを見つけるには、次のコードを使用します。
...
//IntPtr hToolbar = User32.FindWindowEx( hTask, IntPtr.Zero, "ToolbarWindow32", null ); xp +
IntPtr taskBarWnd = User32.FindWindowEx(hTask, IntPtr.Zero, "MSTaskListWClass", null);
TBBUTTON構造体の64ビット定義が必要になります。
[StructLayout(LayoutKind.Sequential)]
public struct TBBUTTON
{
public int iBitmap;
public int idCommand;
[StructLayout(LayoutKind.Explicit)]
private struct TBBUTTON_U
{
[FieldOffset(0)]
public byte fsState;
[FieldOffset(1)]
public byte fsStyle;
[FieldOffset(0)]
private IntPtr bReserved;
}
private TBBUTTON_U union;
public byte fsState { get { return union.fsState; } set { union.fsState = value; } }
public byte fsStyle { get { return union.fsStyle; } set { union.fsStyle = value; } }
public UIntPtr dwData;
public IntPtr iString;
}
これは、独自のソリューションの良い出発点になるはずです。
もう1つの役立つ出発点は、 7+タスクバーの微調整 です。これには、非常に便利なタスクバーの微調整がいくつかあります(名前が示すように)。 7 + TTは、ほとんどの(黒)魔法を実行するライブラリも提供し、DIYソリューションの開始点としても機能します(さらに、Windows1607でも機能します。印刷タスクバーのコンテンツサンプルをご覧ください; AppIdここに、適切なタスクバーボタンウィンドウ/ボタングループを見つけるための良いフックがあります)。
幸運を。
更新
7 + TT Libの助けを借りて、あなたの目標は非常に簡単に達成できます。
ここ は私が作成した作業サンプルです(アーカイブにはサンプルのソースとx64/Releaseフォルダー内のtaskbar_pusherと呼ばれるバイナリで、最新リリースv1709までのWindows7-10で動作するはずです。
コマンドラインパラメータとして、次のようにタスクバーの後端にプッシュするボタングループのAppIdを指定する必要があります。
./taskbar_pusher {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\notepad.exe
AppIdは、私のツールのCLI出力から取得します。
AHKではこのようにパラメーター化と呼ぶことができるはずです(私はAHKにあまり詳しくありませんが)。
PS:セカンダリタスクバーに問題があったため、コードを無効にして検出しました。