問題タブ [winapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - では、この WPF で何が欠けているのでしょうか?
背景: 由緒ある Sasami2k にインスパイアされた UI を備えた小さなビデオ再生アプリがあり、VMR9 (DirectShow を使用した Direct3D9) を使用するように更新され、不安定になりません。現在、必要に応じて生の Win32 を使用する C++ アプリになっています。特に WPF は、空域の制限により不可能でした。
さて、D3DImage が存在するようになったので、D3D/VMR9/DirectShow と WPF を組み合わせて使用できる可能性があります。Win32 の非拡張性に対する過去のフラストレーションを考えると、これは良いことのように思えます。
でもほら、ここで最初のハードルに落ちています。
Win32 を使用して、サイズ変更可能で比例的にサイズ変更され、画面の端にスナップし、最大化すると画面全体 (タスクバー領域を含む) を占めるボーダレス ウィンドウを (非常に簡単に) 作成しました。これは動画アプリなので、これらはすべて非常に望ましいプロパティです。
では、WPF で同じことを行うにはどうすればよいでしょうか。
Win32 では、次を使用します。 WM_GETMINMAXINFO を使用して最大化動作を制御します WM_NCHITTEST 境界のサイズ変更を制御します
ただし、ドキュメントを誤解していない限り、WPF を見ると、さまざまなイベントの到着が遅すぎるようです。
たとえば、LocationChanged は、ウィンドウが移動したときにのみ起動すると言うため (これは遅すぎます)、いつ移動しているのかわかりません。同様に、StateChanged は、ウィンドウが復元/最大化された後にのみ発生するようです (システムに正しい最大化サイズを伝えるために、最大化の前に情報が必要な場合)。
そして、システムがサイズ変更について教えてくれるところを完全に見落としているようです。ヒットテストも同様です。
それで、ええと、ここで何かが足りないのでしょうか、それとも、とにかくこのことの wndproc をフックすることに戻るしかありませんか? WndProc をフックせずにやりたいことができますか?
WndProc を使用する必要がある場合は、既存のコードベースに固執することもできます。よりシンプルでクリーンな UI コードが必要であり、WndProc から離れることはその基本です。
WndProc をフックする必要がある場合は、疑問に思う必要があります-なぜですか? Win32 には、sizing/sized、moving/moved、poschanged/poschanged ウィンドウ メッセージがあり、それらはすべて役に立ちます。WPF が同じ一連のイベントをレプリケートしないのはなぜですか? 機能の不必要なギャップのようです。
さらに、WPF が特定の USER32 依存の実装に関連付けられていることを意味します。これは、MS が (たとえば Windows 7 または 8 で) 表示レイヤーを反転して WPF を「ネイティブ」にし、レガシ アプリの HWND と WndProcs をエミュレートできないことを意味します。
windows - Windows の OS X InputManager に似たものはありますか?
Windows で、OS X の InputManager と同じことを実現するものはありますか?
.net - フォルダを選択するようにOpenFileDialogをどのように構成しますか?
VS .NETでは、プロジェクトのフォルダーを選択すると、OpenFileDialogまたはSaveFileDialogのようなダイアログが表示されますが、フォルダーのみを受け入れるように設定されています。これを見て以来、私はそれがどのように行われるのか知りたいと思っていました。私はFolderBrowserDialogを知っていますが、そのダイアログが本当に好きだったことはありません。最初は小さすぎて、パスを入力できることを利用できません。
.NETからこれを行う方法は今のところほぼ確実ですが、アンマネージコードからも同様にこれを行う方法に興味があります。ダイアログを最初から完全に再実装する以外に、この動作をするようにダイアログをどのように変更しますか?
また、FolderBrowserDialogを認識していることを言い直したいのですが、この方法でダイアログを構成する方法に本当に興味があることに加えて、それを使用したくない場合もあります。FolderBrowserDialogを使用するように指示すると、一貫したUIエクスペリエンスを維持できますが、好奇心を満たせないため、回答としてカウントされません。
これもVista固有のものではありません。このダイアログはVS.NET2003から表示されているので、Win2kとWinXPで実行できます。これは、「これを行うための適切な方法を知りたい」という質問ではなく、「VS 2003で最初にやりたかったので、これについて興味がありました」という質問です。Vistaのファイルダイアログにこれを行うオプションがあることは理解していますが、XPで機能しているので、Vistaを機能させるために何かをしたことがわかります。Vistaは質問のコンテキストに存在しないため、Vista固有の回答は回答ではありません。
更新:Scott Wisniewskiの回答は動作するサンプルが付属しているので受け入れていますが、Sergeはダイアログのカスタマイズ(.NETからは明らかに厄介ですが、動作します)とMarkRansomがそのMSを理解したことを指摘したことは称賛に値すると思いますおそらく、このタスクのカスタムダイアログをロールバックしました。
winapi - CreateProcessAsUser と ShellExecute
私は別のユーザーとして何かをする必要があります。現在、その呼び出しでShellExecute
ヘルパープロセスを開始していますが、それはハックが多すぎるようです (間違った親プロセスなど)。これを行うより良い方法はありますか?CreateProcessAsUser
ShellExecute
@PabloG: ImpersonateLoggedOnUser は機能しません:
「otheruser」ではなく、ログインしたユーザーとして計算を開始します
@ 1800 情報: CreateProcess
/CreateProcessAsUser
は と同じではありません。Vista のShellExecute
UAC では、CreateProcess
ユーザーが実行しているプログラムを制御できない場合は役に立ちません (CreateProcess
次のようにマークされたマニフェストを持つ exe ファイルを指定すると、エラーが返されます)。 requireAdmin)
@Brian R. Bondy:私はすでにこの情報を知っています(誤解しないでください、その良いことです)が、それはトピックから外れています(IMHO)ShellExecuteAsUser
別のユーザーとしてプロセスを開始することについてではなく、私はすでに知っていますどうやってするか。
c++ - Windows レジストリから値を読み取る方法
いくつかのレジストリ値 (HKEY_LOCAL_MACHINE\blah\blah\blah\foo など) のキーが与えられた場合、次のことができます。
- そのようなキーが存在することを安全に判断します。
- プログラムで (つまり、コードを使用して) その値を取得します。
私は、レジストリに何かを書き戻すつもりはまったくありません (できることなら、私のキャリアの期間中)。したがって、レジストリへの書き込みが間違っていると、体内のすべての分子が光速で爆発するという講義をスキップできます。
C ++での回答を好みますが、ほとんどの場合、値を取得するための特別なWindows APIの呪文が何であるかを知る必要があります.
winapi - Win32 rsync ポートの技術的なハードル
主に Windows ユーザーですが、rsync の大ファンです。ここで、rsync と他のツールの長所について議論したくありません...これは私の主張ではありません。
Windowsでrsyncを実行する唯一の方法は、Cygwin上で実行するように構築されたバージョンを使用することです。CygwinにはUnicodeの問題があるため、rsyncにも問題があります。
rsync をネイティブの Win32 バイナリに移植するための実際の技術的なプログラミングのハードルがあるかどうかを言うために、rsync の仕組みに精通している人はいますか?
それとも、Windows ユーザーが移植に関心を示すほどの関心がなかったのでしょうか?
移植を始めようと考えているのでお願いすることもありますが、なぜそれができないのかという点で、何か不足していないか確認したいと思います。
c++ - 例外がキャッチされた後、C++ で例外の原因を見つけますか?
MS VC++ で答えを探しています。
大規模な C++ アプリケーションをデバッグする場合、残念ながら C++ 例外が非常に広範囲に使用されます。実際に必要な時間よりも少し遅れて例外をキャッチすることがあります。
擬似コードの例:
デバッグ時にブレークポイントで例外をキャッチできます。FunctionA()
しかし、例外がor FunctionB()
、または他の関数で発生したかどうかを追跡することはできません。(広範な例外の使用と上記の例の巨大なバージョンを想定しています)。
私の問題に対する 1 つの解決策は、コール スタックを決定し、例外コンストラクターで(つまり、キャッチされる前に) 保存することです。しかし、これには、この基本例外クラスからすべての例外を派生させる必要があります。また、多くのコードが必要になり、プログラムの速度が低下する可能性があります。
作業が少なくて済む簡単な方法はありますか? 大規模なコード ベースを変更する必要はありませんか?
他の言語でこの問題に対するより良い解決策はありますか?
c# - IPアドレス文字列をC#のuint値にどのように解析しますか?
Windows IP Helper APIを使用するC#コードを書いています。私が呼び出そうとしている関数の1つは、IPの「uint」表現をとる「 GetBestInterface 」です。私が必要としているのは、IPのテキスト表現を解析して、「uint」表現を作成することです。
これやこれのようなグーグル経由でいくつかの例を見つけましたが、.NETでこれを達成するための標準的な方法があるはずだと確信しています。唯一の問題は、この標準的な方法が見つからないことです。IPAddress.Parseは正しい方向にあるように見えますが、「uint」表現を取得する方法を提供していません。
IP Helperを使用して、ParseNetworkStringを使用してこれを行う方法もありますが、繰り返しになりますが、.NETを使用したいと思います。pInvokeへの依存度が低いほど良いと思います。
だから、誰もが.NETでこれを行うための標準的な方法を知っていますか?
c++ - ダイアログ ボックスを登録する必要がありますか?
だから、私はあらゆる種類のWindows
関連プログラミングの初心者です。で遊んでいて、Windows
API
作成ウィンドウなどを初期化する方法に関するいくつかの例に出くわしました。
1 つの例では、通常のウィンドウを作成します (コードの一部を省略しました)。
2 番目の例では、ダイアログ ボックスを作成します (WinMain 引数以外の省略形はありません)。
2 番目の例には、register 関数の呼び出しが含まれていません。DialogProc プロセスがアタッチされた DialogBox を作成するだけです。
これは正常に動作しますが、ウィンドウ クラスを登録してからダイアログ ボックスを作成する利点があるかどうか疑問に思っています (これが可能な場合)。
winapi - 「特別な」Windows フォルダ (ごみ箱など) のローカライズされた名前を取得するにはどうすればよいですか?
「特別な」フォルダ、特にごみ箱のローカライズされた名前を見つけるための「正しい」Windows APIを見つけようとしています。ファイルをごみ箱に送るか、ファイルを直接削除するかを尋ねる、適切にローカライズされたダイアログ ボックスをユーザーに表示できるようにしたいと考えています。
実際の削除方法については、インターネット (および Stackoverflow) でたくさん見つけましたが、それは十分に簡単に思えます。テキストをローカライズできるようにしたいだけです。