X



Win32API質問箱 Build124
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/11/11(土) 19:23:00.69ID:TpLoCFAx
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/
0757754
垢版 |
2018/11/18(日) 17:24:06.74ID:0OJqhmsU
描画直前に文字列末尾に半角スペースを追加して見切れないようにする対症療法がまず思いつきます。
DrawText()で斜体フォントを右詰め表示するときに最右文字(日本語や欧州語だと末尾文字)が切れてしまうことがあるのは、既知の現象でしょうか?
0758デフォルトの名無しさん
垢版 |
2018/11/18(日) 17:43:56.83ID:iB0TPElw
斜体は必要サイズうまく取得できないからな。別口で取得してそれ使うか、取得値より多少大きくすればいいでしょ
0760デフォルトの名無しさん
垢版 |
2018/11/18(日) 18:13:41.25ID:0OJqhmsU
>>759
悲報。GetTextMetrics() で得られたtmOverhangはzeroでした。tmItalicはnonzeroが戻ってきているのに。
そんなわけで模範的な解決方法が特にないようなので、文字列末尾に半角スペース追加で対応しようと思います。
0761デフォルトの名無しさん
垢版 |
2018/11/18(日) 20:31:51.66ID:iB0TPElw
原因が斜体の必要サイズ取得なんだから、模範的な方がよければそれぐぐれば一発で出るよw
0763デフォルトの名無しさん
垢版 |
2018/11/19(月) 05:02:23.92ID:vKX2BinB
リストボックスに限らず、スタティックコントロールも右詰め・游ゴシック・斜体で末尾文字が見切れてしまう。
他のフォントだと見切れが発生しないフォントも多い。描画APIじゃなくてフォント固有の問題に思える。
あと、「見切れる」という北斗の拳っぽい表現、あまり好きじゃないが適切な表現って他にある?


見切れる(ミキレル)とは - コトバンク
https://kotobank.jp/word/%E8%A6%8B%E5%88%87%E3%82%8C%E3%82%8B-673764
 1 テレビ放送や演劇で、本来見えてはいけないものが見えてしまう。「裏方スタッフが―・れる」
 2 写真や映像で、フレームに人物などの全体が収まらず、一部が切れている。「集合写真で端の人が―・れる」
0765デフォルトの名無しさん
垢版 |
2018/11/19(月) 13:07:49.59ID:poEgfl9j
>>760
半角スペースで大丈夫かな?

俺はフォントサイズ×0.5くらいを幅に足したわ
0767デフォルトの名無しさん
垢版 |
2018/11/19(月) 14:52:36.11ID:3MOWhUti
フォント側データ書き換えないと無理
0770デフォルトの名無しさん
垢版 |
2018/11/19(月) 16:01:26.62ID:vKX2BinB
「Palatino Linotype」フォントでHDCにテキスト描画すると星印「★(U+2605)」などの記号が文字化け扱いされて四角になるんだけどどうしたらいい?
Windows 10 October 2018 Update から起きるようになったような気がする。
0772デフォルトの名無しさん
垢版 |
2018/11/19(月) 17:13:53.40ID:RxTglLMs
そもそもそのフォントのそのコードが定義されてるのか?
昔は定義されてたけど今はされてないとかじゃないの
0773770
垢版 |
2018/11/20(火) 07:34:02.29ID:FIdfDS6L
以下に再現プログラムのC++ソースをアップロードしました。
https://ideone.com/wqZpPL

各フォントで「★test☆テスト」という文字列を表示するWinMainエントリのプログラムです。
「テスト」を表示できるのに「★」や「☆」を表示できないフォントがたくさんあるように思います。
評価やご助言のほどお願いいたします。 m(_ _)m
0774デフォルトの名無しさん
垢版 |
2018/11/20(火) 07:45:01.17ID:XdMfHhgY
定義されてるかどうか確かめたのか?
単にその文字が定義されてないだけだろ
0776デフォルトの名無しさん
垢版 |
2018/11/20(火) 09:26:40.38ID:c9mHPamo
英字フォントでは★などはないんじゃないの
windowsに最初から入ってる文字コード表アプリで見てみ
Palatino Linotypeには登録されてない
0777デフォルトの名無しさん
垢版 |
2018/11/20(火) 09:36:43.33ID:FIdfDS6L
>>776
なるほど。回答ありがとうございます。
記号である★や☆を表示できないのにカタカナや漢字を表示できるのですが、
ご紹介いただいた文字コード表との整合性についてはどうなっているのでしょうか。
0778デフォルトの名無しさん
垢版 |
2018/11/20(火) 09:52:35.34ID:XdMfHhgY
代替フォントが使われるけど、デフォルトはかなり適当だからきちんと^やりたいなら一文字ずつチェックして描画
0779デフォルトの名無しさん
垢版 |
2018/11/20(火) 10:07:40.17ID:FIdfDS6L
>>778
プログラム内でチェックするAPIはなんでしょうか?
検索のヒントになるキーワードが分からずこんなこと聞いてすみません。
0781デフォルトの名無しさん
垢版 |
2018/11/20(火) 10:20:12.32ID:FIdfDS6L
>>780
回答ありがとうございます。
GetGlyphIndexは、Win32APIには該当の関数が見当たらないようです。
何かサードパーティーのライブラリでしょうか?
0782デフォルトの名無しさん
垢版 |
2018/11/20(火) 10:24:32.94ID:jmuJusIM
freetype
0784さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/11/25(日) 16:05:13.88ID:1GlBO1DK
64-bitの環境でCreateRemoteThreadでAPIフックを試みた。フックは成功したのだが、フックの解除がかなり難しい。

LoadLibraryの戻り値を使う→だめ。
Module32First/NextのhModuleの値を使う→だめ。
DLLの内部からFreeLibraryを呼ぶ→だめ。
0785さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/11/25(日) 16:09:53.05ID:1GlBO1DK
自分のプロセスの内部ではフックの解除は成功した。
しかし、他のプロセスになるとフックの解除が難しい。
0787さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/11/26(月) 21:54:54.87ID:owLNC83c
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」にしたい。
0788さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/11/26(月) 22:11:22.95ID:vT7JWcSC
今回はTargetというプログラムを対象に注入しているが、任意のプログラムに対して同じように(MessageBoxA APIをフックして)動作しないといけない。
0789さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/11/26(月) 22:14:42.78ID:vT7JWcSC
InjectorプログラムからFreeLibraryの呼び出しに成功すれば、フックが元に戻るはずだが、FreeLibraryが失敗しているように見える。

よろしくお願いいたします。
0792デフォルトの名無しさん
垢版 |
2018/11/27(火) 10:52:25.21ID:krSRsG9l
なぜインジェクションするためにloadlibraryを皆したがるのか直接メモリにコード書き込めばfreelibraryする必要がないじゃないか。
0794さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/11/27(火) 12:27:02.62ID:mpDKeVau
終了待ちのイベントオブジェクトと、DLLスレッドと、FreeLibraryAndExitThreadで解決した。

ありがとうございました。
0795デフォルトの名無しさん
垢版 |
2018/12/05(水) 11:51:42.13ID:BbScykOp
LVM_SUBITEMHITTESTの戻り値の説明に書かれている
「Returns the index of the item or subitem tested」
の意味がよくわからないんですが、
戻り値とLVHITTESTINFOのiItemが異なる値になる可能性はあるのでしょうか。
0797デフォルトの名無しさん
垢版 |
2018/12/05(水) 13:31:27.57ID:BbScykOp
>>796
それ自体は理解しているのですが、
戻り値がアイテムの番号ではなくサブ項目の番号になることがあるのでしょうか。
0808デフォルトの名無しさん
垢版 |
2019/01/01(火) 23:36:15.57ID:ML8jFpoW
念のため聞くけどさ、金毘羅とコンパイラどっちが御利益あるかわかってるよね?
0810デフォルトの名無しさん
垢版 |
2019/01/02(水) 12:04:23.94ID:fpC2xUq7
キンピラごぼうの方が御利益ある
0812デフォルトの名無しさん
垢版 |
2019/01/08(火) 21:00:32.75ID:V1Q/vFq5
Windows(上で動作しているアプリ)が鳴らしている音の「生データへのポインタ」
を取得するWin32APIを教えてください。
0813デフォルトの名無しさん
垢版 |
2019/01/08(火) 21:03:39.61ID:V1Q/vFq5
812
音データが入っているバッファへのポインタです。
0816デフォルトの名無しさん
垢版 |
2019/01/08(火) 21:20:13.54ID:V1Q/vFq5
>>814
ありがとうございます。APIとしては用意されていないのですね。
>>815
DLLインジェクション。注射ですか。初めて聞く言葉なので少し調べてみます。
分からなくなったらまた来ます。

目的は、現在発音中の音声のスペクトラムアナライザーを作ることです。
FFT自体はできており、自アプリで鳴らしているWAVデータを処理する
ことまではできていますが、上記のことを実現したいので。
0817デフォルトの名無しさん
垢版 |
2019/01/08(火) 21:25:43.44ID:V1Q/vFq5
winmm.dllをフックすれば実現できそうです。
早速やってみます。
ありがとうございました!
0818デフォルトの名無しさん
垢版 |
2019/01/09(水) 11:55:22.51ID:B8oaeAR+
>>812
生データかどうかは知らんがミキサーの出力は取れるはず
0819デフォルトの名無しさん
垢版 |
2019/01/12(土) 14:22:16.93ID:nOTIPVuG
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アドレスを取得できるでしょうか?
0820デフォルトの名無しさん
垢版 |
2019/01/12(土) 15:05:56.36ID:hHDH7/la
へ〜そうなんや〜。この辺サンプル作ってたから試してみよ。
と思ったらPCの裏側弄るのめんどくせw

結果、おっしゃるとおりGetAdapterInfo()でもダメだった。
けど、これってAPIレベルでは取れないんじゃないかな?
プロパティで表示されてる固定IPって、単にレジストリに登録されてるだけでは・・・

GetAdapterInfo()で取れるAdapterNameを取得し、
レジストリの
HLM\SYSTEM\ControlSet001(ここは環境による?)\Services\Tcpip\Parameters\Interfaces\{上記で取れた名前}\IPAddress
から取ればいいんじゃないかなあ。

固定IP設定してないと上記キーは存在せず、代わりにDhcpIpAddressが存在する。



なお、もうPCしまい込んだんで、LANケーブル抜いてレジストリ確認してないw
間違ってたらスマソ
0822819
垢版 |
2019/01/12(土) 15:43:42.17ID:nOTIPVuG
>>820
わざわざ検証してくださってありがとうございます!

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19361&;forum=6

このページを見ても、LANケーブルが抜かれている状態でIPアドレスが参照できないのは然りのようですね。
レジストリにアクセスした経験が無く、何か恐いので、
0.0.0.0が取得できたらLANケーブルが抜けているか、とりあえずロクな状態じゃないということで、
エラーを出す等の対処としたい(今回のアプリではこれで十分)と思います。

ありがとうございました!
0823デフォルトの名無しさん
垢版 |
2019/01/12(土) 15:58:58.78ID:hHDH7/la
>>821
そうそう、それそれ

>>822
ケーブルが抜けてる時点では通信のしようがないので、
IPを取得できてしまうとむしろエラーの判定方法が面倒くさくなると思う。
だから「取得できない=エラー」でいいでしょう。

なお、レジストリからの値の取得は別に何も恐くは・・・書き込みは気を遣うけど。
0824819
垢版 |
2019/01/12(土) 20:54:40.03ID:cv9IM3HX
>>823
RegGetValue()で固定IPアドレスを簡単に取得できました!
レジストリアクセス、恐るるに足らず・・・!w

>だから「取得できない=エラー」でいいでしょう。

IPアドレスを取得できても、LANケーブルが接続されていないと、
その後のbind()で失敗するので、そこでエラーを出すことができます。
さらに、一定時間間隔でbind()を試みておけば、
ケーブルが接続された段階で正常な受信処理に進むことができます。


これで理想的な対応が完了しました!
ありがとうございました!。゚( ゚´∀`゚)゚。
0825デフォルトの名無しさん
垢版 |
2019/01/13(日) 10:39:34.53ID:ATVrIMyH
>>819
WirelessLANで固定IPのときな何が取れるのかな
0826819
垢版 |
2019/01/14(月) 02:01:50.42ID:DNWDWbUc
>>825
確認してみました。

・Wi-Fiオフ ⇒ 0.0.0.0
・Wi-Fiオン(AP未接続) ⇒ 0.0.0.0
・Wi-Fiオン(AP接続) ⇒ 設定した固定IPアドレス

APへの接続有無が、有線時のLANケーブル接続有無に対応する結果となりました。
もちろん、上記ケースのいずれの場合においてもレジストリからは設定された固定IPアドレスが取得できました。
0827デフォルトの名無しさん
垢版 |
2019/01/14(月) 10:58:45.95ID:ZKhJHRcZ
LANケーブルが刺さってて反対側の端もHUBに刺さってて
そのHUBがどこにもつながってないときはどうかな
0828デフォルトの名無しさん
垢版 |
2019/01/14(月) 14:56:20.16ID:F7cyM080
どこと何の通信をするのか分からないけど、インターネットが可能かどうかという判定なら
固定IPとか関係ないしな
0829819
垢版 |
2019/01/17(木) 02:34:20.94ID:5Sf+2HTN
>>827
確認してみました。
どこにも繋がっていないハブ(通電はしている)に繋げば
GetAdaptersInfo()で固定IPアドレスが取得できました。
要はコネクタのところのLEDがチカチカしてる状態ならOKのようです。
0830デフォルトの名無しさん
垢版 |
2019/01/17(木) 13:32:04.21ID:uUdEyVn6
ガキの使いやあらへんで
0831デフォルトの名無しさん
垢版 |
2019/01/18(金) 09:31:37.52ID:/JSvmQQz
Win32に限らない話なんだけど、「floating window」と
「top-level window」って、何らかの意味の違いってあるのだろうか?
それとも同じ?
0834デフォルトの名無しさん
垢版 |
2019/01/18(金) 12:26:49.75ID:/+PP0p1B
WS_OVERLAPPEDWINDOW
WS_OVERLAPPED
WS_POPUPWINDOW
WS_POPUP
WS_CHILDWINDOW
WS_CHILD
0835デフォルトの名無しさん
垢版 |
2019/01/18(金) 17:24:32.14ID:1LXUKdBd
>>831
「floating window」って非MDIウインドウであってtop-levelである必要はないんじゃね?
「top-level window」ならば必然的に「floating window」だろうけど
0836デフォルトの名無しさん
垢版 |
2019/01/18(金) 17:55:26.61ID:/JSvmQQz
>>835
top-level の定義は、親が存在しない (CreateWindow 実行時に NULL が指定され
ている) Window だ、って英語で書かれているよ。
MDI とか関係ないと思うんだけど。
0837デフォルトの名無しさん
垢版 |
2019/01/18(金) 18:42:47.29ID:1LXUKdBd
>>835
訂正
「非MDIウインドウであって」→「非MDI子ウインドウであって」ね

>>836
だから『「top-level window」ならば必然的に「floating window」』ってのはOK?
親の存在の有無にかかわらず非MDI子ウインドウならそれは「floating window」でしょ

要するに「floating window」のうち親を持たないのが「top-level window」
0838デフォルトの名無しさん
垢版 |
2019/01/18(金) 18:53:17.40ID:FdTpqa5z
フローティングってのはブラウザなんかでタブをドラッグすると独立できる奴ってイメージがあるけどなあ。
0839デフォルトの名無しさん
垢版 |
2019/01/18(金) 19:49:53.56ID:xKp6dC4w
>>838
同じ用語が別の文脈で異なるものを指すことはよくある。
このスレのタイトルを見直してごらん。
0841デフォルトの名無しさん
垢版 |
2019/01/19(土) 01:02:57.44ID:2Tiw7zAQ
それはない
0842デフォルトの名無しさん
垢版 |
2019/01/19(土) 01:55:25.45ID:Lyax1h3i
どうも、Win32APIそのものの質問ではないですが質問させてください。
Win32API等のサンプルがおいてあったサイトがどうしても見つからないのです。
以前は難なく見つかったので、消失したっぽいのですが。
覚えているのは以下です

- デバイスコンテキストを利用したスプリッターのサンプルがあった(これは自分ライブラリにしたので確実)
- OLEを利用したファイルのD&Dのサンプルがあった(これも自作アプリで利用したので確実)
- 2016年3月までは存在していた(日記を見て確認)
- 確かZIP(かLZHの圧縮ファイル)がアップロードされてたような。(通常のソースとその解説ページもあった)

URLさえ判れば Internet Archive 等で何とかなるかと思うのですが・・・
0844デフォルトの名無しさん
垢版 |
2019/01/19(土) 02:55:55.30ID:2Tiw7zAQ
みおぼえあるわ
0847842
垢版 |
2019/01/19(土) 09:43:29.26ID:Lyax1h3i
>>846
そのページは昨日に到達してましたが、残念ながら違います。

確かOLEのD&DのページはC++で実装されてて、
IDropSource、IDataObject、IDropTargetの共通部分である
QueryInterface、AddRef、Release関数をIUnknownImplementという名前の
クラスを作ってそれをprivate継承してから、内部ではその親クラスの関数を呼び出す事をしていました。
IUnknownImplementという名前は自分のセンスではないのでそのページからそのままコピペしたのだと思います。

以前はOLE D&Dで検索すると難なく到達出来てたので消失したと思われます。
誰かブックマークしてて今では消えてるページのURLとかでそれらしきものがないでしょうか?
0852デフォルトの名無しさん
垢版 |
2019/01/19(土) 18:27:05.61ID:a3eM+T1s
>>841
そう?
メインウィンドウよりでかいフローティングウィンドウなんて見たこと無いんだよな
0853デフォルトの名無しさん
垢版 |
2019/01/20(日) 11:49:19.90ID:h0iPP/nj
朝鮮人メンタル
0854842
垢版 |
2019/01/20(日) 15:59:03.36ID:CaWvoORx
>>848
最後にアクセスしたのも大分前なので。その間にPCも変わってたりしますし。

>>849 >>850 >>851
残念ながらそれらでもないですね。

今日も探していたのですが見つからずもう諦めてきた感じです。
その際に副産物で見つけた、既にサイトが無くなってたページと
そのInternet Archivesを張っておきます。
かなりこの手の情報が消失してる事が判りますね。

http://www.g-ishihara.com/
https://web.archive.org/web/20180807082916/http://www.g-ishihara.com/

http://win32lab.com/tips/
https://web.archive.org/web/20160810040639/http://win32lab.com/tips/

http://web.kyoto-inet.or.jp/people/ysskondo/
https://web.archive.org/web/20160810173814/http://web.kyoto-inet.or.jp/people/ysskondo/

http://ruffnex.oc.to:80/kenji/index.php
https://web.archive.org/web/20160324222113/http://ruffnex.oc.to:80/kenji/index.php

http://www7.plala.or.jp/keny01/
https://web.archive.org/web/20170123104718/http://www7.plala.or.jp/keny01/
0855デフォルトの名無しさん
垢版 |
2019/01/21(月) 07:38:46.81ID:5BrFA625
> top-level の定義は、親が存在しない (CreateWindow 実行時に NULL が指定され
> ている) Window だ、って英語で書かれているよ。

最大の突っ込みどころは根拠が「英語で書かれている」のみ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況