キーボードで入力されたキーを常に聴く(最小化モードで常に実行される)アプリケーションがあります。 特定のキーが押されると、C#アプリケーションがアクティブウィンドウのメッセージキューにコマンドを投稿して、最小化、閉じる、最大化などを行うようにします。 アクティブなウィンドウにハンドルを取得することは可能ですが、メッセージキューにメッセージを投稿するにはどうすればいいですか(Win32で行うことができます)。おかげさまで C#アプリケーションからのアクティブなウィンドウ/アプリケーションへのメッセージの投稿
答えて
interopを使用して、ネイティブWINAPI関数を呼び出すことができます。私は次の解決方法作成したp/invokeウェブサイトの使用:私は基本的にここで何
var proc = Process.GetProcesses().First(p => p.ProcessName.Contains("firefox"));
PostMessageSafe(
new HandleRef(proc, proc.MainWindowHandle),
(uint) WM.WM_SYSCOMMAND,
new IntPtr((int) SysCommands.SC_MAXIMIZE),
IntPtr.Zero);
することで、私が興味を持ってるし、その後メッセージにWM_SYSCOMMANDでのPostMessageを呼び出しWindowHandleとのwParamで適切なsyscommandを見つけることですこの場合、値0xF030で最大化します。
:lParamには0に設定されているあなたの唯一の目標は、あなたがより良いものに特化したAPIエンドポイントを使用して、ウィンドウの状態を変更する場合、それはShowWindow
そのsignatureはこのようになりますと呼ばれていますのでご注意ください
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands nCmdShow);
、それは次のように呼び出されます。これらのメソッドのいずれかが呼び出され
ShowWindow(proc.MainWindowHandle, ShowWindowCommands.Maximize);
、ウィンドウFR omという名前のプロセスが最大化されます。
は、ここでは、ラッパーの周りPostMessage
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
// http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html
public enum WM : uint
{
WM_SYSCOMMAND = 0x0112
}
// http://www.pinvoke.net/default.aspx/Enums/SysCommands.html
enum SysCommands : int
{
SC_SIZE = 0xF000,
SC_MOVE = 0xF010,
SC_MINIMIZE = 0xF020,
SC_MAXIMIZE = 0xF030,
SC_NEXTWINDOW = 0xF040,
SC_PREVWINDOW = 0xF050,
SC_CLOSE = 0xF060,
SC_VSCROLL = 0xF070,
SC_HSCROLL = 0xF080,
SC_MOUSEMENU = 0xF090,
SC_KEYMENU = 0xF100,
SC_ARRANGE = 0xF110,
SC_RESTORE = 0xF120,
SC_TASKLIST = 0xF130,
SC_SCREENSAVE = 0xF140,
SC_HOTKEY = 0xF150,
//#if(WINVER >= 0x0400) //Win95
SC_DEFAULT = 0xF160,
SC_MONITORPOWER = 0xF170,
SC_CONTEXTHELP = 0xF180,
SC_SEPARATOR = 0xF00F,
//#endif /* WINVER >= 0x0400 */
//#if(WINVER >= 0x0600) //Vista
SCF_ISSECURE = 0x00000001,
//#endif /* WINVER >= 0x0600 */
/*
* Obsolete names
*/
SC_ICON = SC_MINIMIZE,
SC_ZOOM = SC_MAXIMIZE,
}
// http://www.pinvoke.net/default.aspx/Enums/ShowWindowCommand.html
enum ShowWindowCommands
{
/// <summary>
/// Hides the window and activates another window.
/// </summary>
Hide = 0,
/// <summary>
/// Activates and displays a window. If the window is minimized or
/// maximized, the system restores it to its original size and position.
/// An application should specify this flag when displaying the window
/// for the first time.
/// </summary>
Normal = 1,
/// <summary>
/// Activates the window and displays it as a minimized window.
/// </summary>
ShowMinimized = 2,
/// <summary>
/// Maximizes the specified window.
/// </summary>
Maximize = 3, // is this the right value?
/// <summary>
/// Activates the window and displays it as a maximized window.
/// </summary>
ShowMaximized = 3,
/// <summary>
/// Displays a window in its most recent size and position. This value
/// is similar to <see cref="Win32.ShowWindowCommand.Normal"/>, except
/// the window is not activated.
/// </summary>
ShowNoActivate = 4,
/// <summary>
/// Activates the window and displays it in its current size and position.
/// </summary>
Show = 5,
/// <summary>
/// Minimizes the specified window and activates the next top-level
/// window in the Z order.
/// </summary>
Minimize = 6,
/// <summary>
/// Displays the window as a minimized window. This value is similar to
/// <see cref="Win32.ShowWindowCommand.ShowMinimized"/>, except the
/// window is not activated.
/// </summary>
ShowMinNoActive = 7,
/// <summary>
/// Displays the window in its current size and position. This value is
/// similar to <see cref="Win32.ShowWindowCommand.Show"/>, except the
/// window is not activated.
/// </summary>
ShowNA = 8,
/// <summary>
/// Activates and displays the window. If the window is minimized or
/// maximized, the system restores it to its original size and position.
/// An application should specify this flag when restoring a minimized window.
/// </summary>
Restore = 9,
/// <summary>
/// Sets the show state based on the SW_* value specified in the
/// STARTUPINFO structure passed to the CreateProcess function by the
/// program that started the application.
/// </summary>
ShowDefault = 10,
/// <summary>
/// <b>Windows 2000/XP:</b> Minimizes a window, even if the thread
/// that owns the window is not responding. This flag should only be
/// used when minimizing windows from a different thread.
/// </summary>
ForceMinimize = 11
}
あなたはこれを行うためにShowWindowを使用するつもりです –
@DavidHeffernanええ、私はその呼び出しにも遭遇しましたが、OPが明示的にPostMessageを要求したので、私はShowWindowでカバーされていないことをする必要があると仮定しましたが、また完成度は – rene
@reneです。これは包括的な答えです。お時間をいただきありがとうございます。私の場合は、ウィンドウをより詳細に制御することを期待しているので、 "PostMessageSafe"は "ShowWindow"よりも優れた選択肢です。 また、 "SendInput"関数を使用してキーボードイベントをエミュレートして、Alt +下矢印などのメニュー選択を制御します。 "PostMessageSafe"と "SendInput"の組み合わせで自分の必要条件を満たすことができます。 ありがとうございます。 –
- 1. ステータスコード400の投稿メッセージへの投稿
- 2. C#からPHPへのパラメータエンコーディングを投稿
- 3. C#アプリケーションからAngularページへの投稿要求を送信
- 4. Androidアプリケーションからの投稿
- 5. 投稿から非SSLからSSLドメインへの投稿.htaccess RewriteRule
- 6. メッセージの投稿iPhone/iPadから
- 7. ブラウザからJavaアプリケーションへのJsonデータの投稿
- 8. 外部アプリケーションからのフォームバックデータへの投稿データ
- 9. webserviceからionicアプリケーションへのデータの投稿
- 10. asp.netアプリケーションへのJSONデータの投稿
- 11. ASP.NETアプリケーションへのデータの投稿
- 12. JSONからMVCへのコントローラの投稿
- 13. Wordpress:wp_headersからの投稿へのアクセス
- 14. Railsアプリケーションから外部データベースへの投稿
- 15. .NETアプリケーションからWeb APIへの投稿要求を送信
- 16. AngularJSからC#コントローラへのJSONの投稿方法
- 17. TokenMismatchException外部にlaravelアプリケーションへの投稿
- 18. ajax json投稿のフラスコへの投稿
- 19. Vertx:htmlからJavaへのデータ投稿
- 20. ASIHTTPRequest iPhoneからPHPへのデータ投稿
- 21. angle2からbackendへの投稿要求
- 22. GmailアカウントからFirebaseへの投稿名
- 23. localhostからドメインへの投稿フォーム
- 24. ASP.Net ajaxからコントローラへの投稿リスト
- 25. AWS-API GatewayからLambdaへの投稿
- 26. ASP.Net(C#の)HTTPページからHTTPSへ投稿する方法
- 27. C#からPHPへの投稿を受信
- 28. フォームの投稿からの投稿
- 29. MSMQ投稿メッセージ
- 30. htmlページからウィンドウアプリケーションへの自動タイプ
ポストあなたはあなたのWin32プロシージャを呼び出す能力を与えるのPInvokeを見て、取るべきであるのPostMessage –
使用してメッセージとして必要なヘルパーメソッドと列挙型です。 [msdn](https://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396)と[PInvoke](http:// www。 pinvoke.net/) –
DavidとJeroenに感謝します。 –