Win32API質問箱 Build124
■ このスレッドは過去ログ倉庫に格納されています
Win32APIについての質問はこちらへどうぞ。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで ■過去スレ Win32API質問箱 Build123 http://mevius.2ch.net/test/read.cgi/tech/1475897582/ Win32API質問箱 Build122 http://echo.2ch.net/test/read.cgi/tech/1451988219/ Win32API質問箱 Build121 http://echo.2ch.net/test/read.cgi/tech/1438695290/ Win32API質問箱 Build120 http://echo.2ch.net/test/read.cgi/tech/1428570962/ ■関連スレ Visual Studio 2017 Part4 http://mevius.2ch.net/test/read.cgi/tech/1509244956/ 【C++】 DirectX初心者質問スレ Part40 【C】 http://mevius.2ch.net/test/read.cgi/tech/1474782237/ >>774 文字が定義されているか確かめるにはどうしたらよいですか? 英字フォントでは★などはないんじゃないの windowsに最初から入ってる文字コード表アプリで見てみ Palatino Linotypeには登録されてない >>776 なるほど。回答ありがとうございます。 記号である★や☆を表示できないのにカタカナや漢字を表示できるのですが、 ご紹介いただいた文字コード表との整合性についてはどうなっているのでしょうか。 代替フォントが使われるけど、デフォルトはかなり適当だからきちんと^やりたいなら一文字ずつチェックして描画 >>778 プログラム内でチェックするAPIはなんでしょうか? 検索のヒントになるキーワードが分からずこんなこと聞いてすみません。 >>780 回答ありがとうございます。 GetGlyphIndexは、Win32APIには該当の関数が見当たらないようです。 何かサードパーティーのライブラリでしょうか? 64-bitの環境でCreateRemoteThreadでAPIフックを試みた。フックは成功したのだが、フックの解除がかなり難しい。 LoadLibraryの戻り値を使う→だめ。 Module32First/NextのhModuleの値を使う→だめ。 DLLの内部からFreeLibraryを呼ぶ→だめ。 自分のプロセスの内部ではフックの解除は成功した。 しかし、他のプロセスになるとフックの解除が難しい。 https://github.com/katahiromz/ApiHook 1. CMakeでビルド。 2. Targetプログラムを起動して、出てきたPIDをコピーする。 3. 「Test!」ボタンを押すと、「Unhooked」のメッセージが表示される。 4. Injectorプログラムを起動して、さっきコピーしたPIDを貼り付けて、 「Do Inject!」ボタンをクリックする。「Injected!」のメッセージが表示される。 5. Targetプログラムの「Test!」ボタンを押すと、「Hooked」の メッセージが表示される。注入成功。 6. Injectorプログラムの「Do Un-Inject!」ボタンをクリックする。 「Un-Injected!」のメッセージが表示される。 7. Targetプログラムの「Test!」ボタンを押すと、「Hooked」の メッセージが表示される。これを「Unhooked」にしたい。 今回はTargetというプログラムを対象に注入しているが、任意のプログラムに対して同じように(MessageBoxA APIをフックして)動作しないといけない。 InjectorプログラムからFreeLibraryの呼び出しに成功すれば、フックが元に戻るはずだが、FreeLibraryが失敗しているように見える。 よろしくお願いいたします。 reflectiveはブルースウィリス判定される恐れあり。他に方法はないのか。 なぜインジェクションするためにloadlibraryを皆したがるのか直接メモリにコード書き込めばfreelibraryする必要がないじゃないか。 終了待ちのイベントオブジェクトと、DLLスレッドと、FreeLibraryAndExitThreadで解決した。 ありがとうございました。 LVM_SUBITEMHITTESTの戻り値の説明に書かれている 「Returns the index of the item or subitem tested」 の意味がよくわからないんですが、 戻り値とLVHITTESTINFOのiItemが異なる値になる可能性はあるのでしょうか。 リストビューのサブ項目は、詳細表示のときの最初の列以外の列のテキストで使われる。 >>796 それ自体は理解しているのですが、 戻り値がアイテムの番号ではなくサブ項目の番号になることがあるのでしょうか。 iSubItemメンバに値が入る 戻り値およびiItemは今まで通り Windows互換を目指すReactOS Part12 https://medaka.5ch.net/test/read.cgi/os/1519906380/ こっちのスレで活動してるよ。暇なら見てね。るんぱっぱ。 ほんと産廃だよな なんでwindowsに頼らないとwin32アプリは動かないんだ 念のため聞くけどさ、金毘羅とコンパイラどっちが御利益あるかわかってるよね? 念のために聞くけどさ、ネタとしてもここに書くつもりじゃなかったよね? Windows(上で動作しているアプリ)が鳴らしている音の「生データへのポインタ」 を取得するWin32APIを教えてください。 812 音データが入っているバッファへのポインタです。 >>814 ありがとうございます。APIとしては用意されていないのですね。 >>815 DLLインジェクション。注射ですか。初めて聞く言葉なので少し調べてみます。 分からなくなったらまた来ます。 目的は、現在発音中の音声のスペクトラムアナライザーを作ることです。 FFT自体はできており、自アプリで鳴らしているWAVデータを処理する ことまではできていますが、上記のことを実現したいので。 winmm.dllをフックすれば実現できそうです。 早速やってみます。 ありがとうございました! >>812 生データかどうかは知らんがミキサーの出力は取れるはず OS:Windows10 VC++ 2015 なんですが、下記ページの質問者と同じ問題にあたりました。 (LANが抜けているとNICに設定した固定IPアドレスではなく0.0.0.0が取得されてしまう) https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/9dd046d6-d0ad-4875-b9be-9ac6c7106454/ip124501248912524124731239821462244712604127861?forum=vcgeneralja このページの解決方法(WSAIoctl()関数にSIO_GET_INTERFACE_LIST)では、 ループバックアドレスしか取得できませんでした。 この他、GetIpAddrTable()も試しましたが同様でした。 どうすればLANケーブルが抜けていてもNICに設定した固定IPアドレスを取得できるでしょうか? へ〜そうなんや〜。この辺サンプル作ってたから試してみよ。 と思ったらPCの裏側弄るのめんどくせw 結果、おっしゃるとおりGetAdapterInfo()でもダメだった。 けど、これってAPIレベルでは取れないんじゃないかな? プロパティで表示されてる固定IPって、単にレジストリに登録されてるだけでは・・・ GetAdapterInfo()で取れるAdapterNameを取得し、 レジストリの HLM\SYSTEM\ControlSet001(ここは環境による?)\Services\Tcpip\Parameters\Interfaces\{上記で取れた名前}\IPAddress から取ればいいんじゃないかなあ。 固定IP設定してないと上記キーは存在せず、代わりにDhcpIpAddressが存在する。 なお、もうPCしまい込んだんで、LANケーブル抜いてレジストリ確認してないw 間違ってたらスマソ >>820 ControlSet001の所はCurrentControlSetの方が良い >>820 わざわざ検証してくださってありがとうございます! http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19361& ;forum=6 このページを見ても、LANケーブルが抜かれている状態でIPアドレスが参照できないのは然りのようですね。 レジストリにアクセスした経験が無く、何か恐いので、 0.0.0.0が取得できたらLANケーブルが抜けているか、とりあえずロクな状態じゃないということで、 エラーを出す等の対処としたい(今回のアプリではこれで十分)と思います。 ありがとうございました! >>821 そうそう、それそれ >>822 ケーブルが抜けてる時点では通信のしようがないので、 IPを取得できてしまうとむしろエラーの判定方法が面倒くさくなると思う。 だから「取得できない=エラー」でいいでしょう。 なお、レジストリからの値の取得は別に何も恐くは・・・書き込みは気を遣うけど。 >>823 RegGetValue()で固定IPアドレスを簡単に取得できました! レジストリアクセス、恐るるに足らず・・・!w >だから「取得できない=エラー」でいいでしょう。 IPアドレスを取得できても、LANケーブルが接続されていないと、 その後のbind()で失敗するので、そこでエラーを出すことができます。 さらに、一定時間間隔でbind()を試みておけば、 ケーブルが接続された段階で正常な受信処理に進むことができます。 これで理想的な対応が完了しました! ありがとうございました!。゚( ゚´∀`゚)゚。 >>819 WirelessLANで固定IPのときな何が取れるのかな >>825 確認してみました。 ・Wi-Fiオフ ⇒ 0.0.0.0 ・Wi-Fiオン(AP未接続) ⇒ 0.0.0.0 ・Wi-Fiオン(AP接続) ⇒ 設定した固定IPアドレス APへの接続有無が、有線時のLANケーブル接続有無に対応する結果となりました。 もちろん、上記ケースのいずれの場合においてもレジストリからは設定された固定IPアドレスが取得できました。 LANケーブルが刺さってて反対側の端もHUBに刺さってて そのHUBがどこにもつながってないときはどうかな どこと何の通信をするのか分からないけど、インターネットが可能かどうかという判定なら 固定IPとか関係ないしな >>827 確認してみました。 どこにも繋がっていないハブ(通電はしている)に繋げば GetAdaptersInfo()で固定IPアドレスが取得できました。 要はコネクタのところのLEDがチカチカしてる状態ならOKのようです。 Win32に限らない話なんだけど、「floating window」と 「top-level window」って、何らかの意味の違いってあるのだろうか? それとも同じ? トップレベルは全部の上に対して上 フローティングは親に対して浮いてる >>832 ちなみに、TOP-MOST と TOP-LEVEL を勘違いしての発言? WS_OVERLAPPEDWINDOW WS_OVERLAPPED WS_POPUPWINDOW WS_POPUP WS_CHILDWINDOW WS_CHILD >>831 「floating window」って非MDIウインドウであってtop-levelである必要はないんじゃね? 「top-level window」ならば必然的に「floating window」だろうけど >>835 top-level の定義は、親が存在しない (CreateWindow 実行時に NULL が指定され ている) Window だ、って英語で書かれているよ。 MDI とか関係ないと思うんだけど。 >>835 訂正 「非MDIウインドウであって」→「非MDI子ウインドウであって」ね >>836 だから『「top-level window」ならば必然的に「floating window」』ってのはOK? 親の存在の有無にかかわらず非MDI子ウインドウならそれは「floating window」でしょ 要するに「floating window」のうち親を持たないのが「top-level window」 フローティングってのはブラウザなんかでタブをドラッグすると独立できる奴ってイメージがあるけどなあ。 >>838 同じ用語が別の文脈で異なるものを指すことはよくある。 このスレのタイトルを見直してごらん。 どうも、Win32APIそのものの質問ではないですが質問させてください。 Win32API等のサンプルがおいてあったサイトがどうしても見つからないのです。 以前は難なく見つかったので、消失したっぽいのですが。 覚えているのは以下です - デバイスコンテキストを利用したスプリッターのサンプルがあった(これは自分ライブラリにしたので確実) - OLEを利用したファイルのD&Dのサンプルがあった(これも自作アプリで利用したので確実) - 2016年3月までは存在していた(日記を見て確認) - 確かZIP(かLZHの圧縮ファイル)がアップロードされてたような。(通常のソースとその解説ページもあった) URLさえ判れば Internet Archive 等で何とかなるかと思うのですが・・・ >>846 そのページは昨日に到達してましたが、残念ながら違います。 確かOLEのD&DのページはC++で実装されてて、 IDropSource、IDataObject、IDropTargetの共通部分である QueryInterface、AddRef、Release関数をIUnknownImplementという名前の クラスを作ってそれをprivate継承してから、内部ではその親クラスの関数を呼び出す事をしていました。 IUnknownImplementという名前は自分のセンスではないのでそのページからそのままコピペしたのだと思います。 以前はOLE D&Dで検索すると難なく到達出来てたので消失したと思われます。 誰かブックマークしてて今では消えてるページのURLとかでそれらしきものがないでしょうか? >>847 ブラウザの履歴を検索したら出てこない? >>841 そう? メインウィンドウよりでかいフローティングウィンドウなんて見たこと無いんだよな > top-level の定義は、親が存在しない (CreateWindow 実行時に NULL が指定され > ている) Window だ、って英語で書かれているよ。 最大の突っ込みどころは根拠が「英語で書かれている」のみ >>855 The MSDN entry About Windows offers the following definition: A window that has no parent, or whose parent is the desktop window, is called a top-level window. https://stackoverflow.com/questions/18244379/what-exactly-is-a-top-level-window-in-win32-programming A top-level window is a window that is not a child window, or has no parent window (which is the same as having the "desktop window" as a parent). The MSDN entry About Windows offers the following definition: A window that has no parent, or whose parent is the desktop window, is called a top-level window. >>856 引用元にCreateWindowは出てこないわけだが msdnのAbout WindowsのParent or Owner Window Handle "A window that has a parent is called a child window. " childでparentがnullの場合はtoplevel "A window can own, or be owned by, another window." ここからmsdnのWindow FeaturesのOwned Windowsに移動して CreateWindowのhwndParentの話になる 要は、child(WS_CHILD)はparentを持ちownerを持たない WS_POPUPやWS_OVERLAPPEDはparentを持たずownerをもつ CreateWindowのhwndParentはparentかowner(両義性がある) >>860 Parent, Owner は、「排他的」にしか持つことは出来ないことは正しいけど、 >WS_POPUPやWS_OVERLAPPEDはparentを持たずownerをもつ はちょっと違うと思うよ。一応、NULL を指定することが出来るから。 という訳で CreateWindow hwndParent != 0, WS_OVERLAPPED or WS_POPUPだと "A window that has no parent, or whose parent is the desktop window, is called a top-level window. " のとおり、top-levelになる 私は“「Palatino Linotype」フォントでHDCにテキスト描画すると星印「★(U+2605)」などの記号が文字化け扱いされて四角になる”件について質問した者です。 みなさん、何の役にも立たない知ったかぶりの回答ありがとうございました。2019年1月22日にリリースされたKB4476976で無事、修正されたようです。 https://support.microsoft.com/ja-jp/help/4476976/windows-10-update-kb4476976 テキスト コントロールで、一部の記号が四角形で表示される問題を修正します。 >>863 Palatino Linotypeに★(U+2605)は存在しない(>>776 )し、 その場合の代替フォントの扱いがてきとうだった(>>778 )のが、 KB4476976で修正されただけだろ。 >>864 知らないんなら憶測で書き込まないでくれるか? そういう憶測の書き込み、質問者が混乱するだけで意味がないんだよ。 スレのレベルが下がるからこのスレには書き込みを控えてくれ。 https://en.wikipedia.org/wiki/Star_%28glyph%29 >>863 >みなさん、何の役にも立たない知ったかぶりの回答ありがとうございました こいつは、荒らしだろ。 無視しろ。相手をするな! >>865 そのリンク先に意味無いだろ。 荒らしたいだけか。 >>868 リンク先は星印についての英語版Wikipedia。見ればわかるとおり、星印★は欧州で普通に使われている。 日本語のひらがなや漢字を代替フォントで痴漢できているのに、欧州でもよく使う星印★が代替フォントで痴漢できない不可解な状態がようやく解消された。 このスレは「です・ます」調で質問を書き込むと、的外れでレベルの低い回答が返ってきやすい。 この手の回答者には、丁寧語を使うのは不慣れな初心者と値踏みして質問者へのいたずらで無駄な作業をやらせてやろうという悪意がある。 文字コード表で「Palatino Linotype」のU+2605が存在しないことに何も間違いなかったでしょ? そのことに気付かず指摘されて初めて分かった人が何言ってるの? 元から代替フォントの問題だと指摘されていたし、何も間違っていないな 質問された時にはまだ修正されていなかったのだし >>871 欧州フォントにはU+2605だけじゃなくて漢字やひらがななども存在しないよ。 欧州フォントにない記号が表示されないことを仕様であるかのように知ったかぶりで断定するデタラメな回答はアウト。 ちなみにPalatino Linotype のような欧州フォントは雄雌記号の♂(U+2642)と♀(U+2640)が少しイラストっぽく表示されるので、お試しあれ。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる