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/
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 だ、って英語で書かれているよ。

最大の突っ込みどころは根拠が「英語で書かれている」のみ
0856デフォルトの名無しさん
垢版 |
2019/01/21(月) 10:35:20.85ID:UEk4ntQa
>>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.
0859デフォルトの名無しさん
垢版 |
2019/01/22(火) 13:04:37.64ID:/wbMKv3O
PPAP
0860デフォルトの名無しさん
垢版 |
2019/01/23(水) 01:51:43.39ID:fK1BYch6
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(両義性がある)
0861デフォルトの名無しさん
垢版 |
2019/01/24(木) 18:27:16.16ID:/05KE7l4
>>860
Parent, Owner は、「排他的」にしか持つことは出来ないことは正しいけど、

>WS_POPUPやWS_OVERLAPPEDはparentを持たずownerをもつ

はちょっと違うと思うよ。一応、NULL を指定することが出来るから。
0862デフォルトの名無しさん
垢版 |
2019/01/27(日) 08:58:04.40ID:Z8Sr7X5M
という訳で
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になる
0863770
垢版 |
2019/01/27(日) 18:15:04.65ID:qHVP6gPn
私は“「Palatino Linotype」フォントでHDCにテキスト描画すると星印「★(U+2605)」などの記号が文字化け扱いされて四角になる”件について質問した者です。
みなさん、何の役にも立たない知ったかぶりの回答ありがとうございました。2019年1月22日にリリースされたKB4476976で無事、修正されたようです。


https://support.microsoft.com/ja-jp/help/4476976/windows-10-update-kb4476976
テキスト コントロールで、一部の記号が四角形で表示される問題を修正します。
0864デフォルトの名無しさん
垢版 |
2019/01/27(日) 22:30:57.69ID:I4R/P36r
>>863
Palatino Linotypeに★(U+2605)は存在しない(>>776)し、
その場合の代替フォントの扱いがてきとうだった(>>778)のが、
KB4476976で修正されただけだろ。
0865770
垢版 |
2019/01/27(日) 22:57:15.58ID:qHVP6gPn
>>864
知らないんなら憶測で書き込まないでくれるか?
そういう憶測の書き込み、質問者が混乱するだけで意味がないんだよ。
スレのレベルが下がるからこのスレには書き込みを控えてくれ。

https://en.wikipedia.org/wiki/Star_%28glyph%29
0866デフォルトの名無しさん
垢版 |
2019/01/27(日) 23:00:10.55ID:biLrTPET
>>863
>みなさん、何の役にも立たない知ったかぶりの回答ありがとうございました

こいつは、荒らしだろ。
無視しろ。相手をするな!
0869770
垢版 |
2019/01/27(日) 23:21:03.57ID:qHVP6gPn
>>868
リンク先は星印についての英語版Wikipedia。見ればわかるとおり、星印★は欧州で普通に使われている。
日本語のひらがなや漢字を代替フォントで痴漢できているのに、欧州でもよく使う星印★が代替フォントで痴漢できない不可解な状態がようやく解消された。
0870770
垢版 |
2019/01/27(日) 23:26:16.39ID:qHVP6gPn
このスレは「です・ます」調で質問を書き込むと、的外れでレベルの低い回答が返ってきやすい。
この手の回答者には、丁寧語を使うのは不慣れな初心者と値踏みして質問者へのいたずらで無駄な作業をやらせてやろうという悪意がある。
0871デフォルトの名無しさん
垢版 |
2019/01/27(日) 23:53:38.21ID:eqe5Jbhe
文字コード表で「Palatino Linotype」のU+2605が存在しないことに何も間違いなかったでしょ?
そのことに気付かず指摘されて初めて分かった人が何言ってるの?
0872デフォルトの名無しさん
垢版 |
2019/01/28(月) 00:07:05.80ID:+M9WQ/f8
元から代替フォントの問題だと指摘されていたし、何も間違っていないな
質問された時にはまだ修正されていなかったのだし
0873770
垢版 |
2019/01/28(月) 00:10:03.58ID:FJ2d04ee
>>871
欧州フォントにはU+2605だけじゃなくて漢字やひらがななども存在しないよ。
欧州フォントにない記号が表示されないことを仕様であるかのように知ったかぶりで断定するデタラメな回答はアウト。
0874770
垢版 |
2019/01/28(月) 00:40:47.00ID:FJ2d04ee
ちなみにPalatino Linotype のような欧州フォントは雄雌記号の♂(U+2642)と♀(U+2640)が少しイラストっぽく表示されるので、お試しあれ。
■ このスレッドは過去ログ倉庫に格納されています