Win32API質問箱 Build124

1デフォルトの名無しさん 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/

752さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/06(火) 17:54:13.46ID:koMt5OtT
異常終了の際にバックアップを作ってくれるのは、親切なんだろうか。

753デフォルトの名無しさん2018/11/06(火) 19:49:18.62ID:W/feU5S7
半分 中の人
The Old New Thing
When will GetMessage return -1?
https://blogs.msdn.microsoft.com/oldnewthing/20130322-00/?p=4873/

754デフォルトの名無しさん2018/11/18(日) 16:47:49.39ID:0OJqhmsU
リストボックスのリストアイテムに、游ゴシックの文字列をイタリック(斜体)で右詰めでDrawText()描画すると見切れてしまうのはどうしたらいいですか?

755デフォルトの名無しさん2018/11/18(日) 17:05:18.33ID:5HKlow/5
owner draw

756デフォルトの名無しさん2018/11/18(日) 17:16:58.01ID:0OJqhmsU
>>755
CDDS_SUBITEM | CDDS_ITEMPREPAINTで owner drawした結果としてのDrawText()なのですが…

7577542018/11/18(日) 17:24:06.74ID:0OJqhmsU
描画直前に文字列末尾に半角スペースを追加して見切れないようにする対症療法がまず思いつきます。
DrawText()で斜体フォントを右詰め表示するときに最右文字(日本語や欧州語だと末尾文字)が切れてしまうことがあるのは、既知の現象でしょうか?

758デフォルトの名無しさん2018/11/18(日) 17:43:56.83ID:iB0TPElw
斜体は必要サイズうまく取得できないからな。別口で取得してそれ使うか、取得値より多少大きくすればいいでしょ

759さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/18(日) 17:47:51.97ID:TJFJUOYd
斜体のずれの寸法は、tmOverhangだったかな。

760デフォルトの名無しさん2018/11/18(日) 18:13:41.25ID:0OJqhmsU
>>759
悲報。GetTextMetrics() で得られたtmOverhangはzeroでした。tmItalicはnonzeroが戻ってきているのに。
そんなわけで模範的な解決方法が特にないようなので、文字列末尾に半角スペース追加で対応しようと思います。

761デフォルトの名無しさん2018/11/18(日) 20:31:51.66ID:iB0TPElw
原因が斜体の必要サイズ取得なんだから、模範的な方がよければそれぐぐれば一発で出るよw

762デフォルトの名無しさん2018/11/18(日) 23:09:34.60ID:5HKlow/5
取れないって回答になると思うけどね
新APIとか隠し情報がないと無理かと

763デフォルトの名無しさん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 写真や映像で、フレームに人物などの全体が収まらず、一部が切れている。「集合写真で端の人が―・れる」

764デフォルトの名無しさん2018/11/19(月) 05:48:21.80ID:q6cfzVbs
https://www.google.co.jp/search?q=斜体+サイズ+取得+windows+api&oq=斜体%E3%80%80サイズ%E3%80%80取得+windows+api

765デフォルトの名無しさん2018/11/19(月) 13:07:49.59ID:poEgfl9j
>>760
半角スペースで大丈夫かな?

俺はフォントサイズ×0.5くらいを幅に足したわ

766デフォルトの名無しさん2018/11/19(月) 13:10:21.39ID:poEgfl9j
>>763
「見切れる」で十分通じると思うけどな

767デフォルトの名無しさん2018/11/19(月) 14:52:36.11ID:3MOWhUti
フォント側データ書き換えないと無理

768デフォルトの名無しさん2018/11/19(月) 15:36:43.44ID:yv29DTgI
えーそれふぉんと?

769デフォルトの名無しさん2018/11/19(月) 15:49:16.38ID:Vi0v2wfh

770デフォルトの名無しさん2018/11/19(月) 16:01:26.62ID:vKX2BinB
「Palatino Linotype」フォントでHDCにテキスト描画すると星印「★(U+2605)」などの記号が文字化け扱いされて四角になるんだけどどうしたらいい?
Windows 10 October 2018 Update から起きるようになったような気がする。

771デフォルトの名無しさん2018/11/19(月) 16:55:11.57ID:DcxQo4X/
MBCとかUNICODEとか?

772デフォルトの名無しさん2018/11/19(月) 17:13:53.40ID:RxTglLMs
そもそもそのフォントのそのコードが定義されてるのか?
昔は定義されてたけど今はされてないとかじゃないの

7737702018/11/20(火) 07:34:02.29ID:FIdfDS6L
以下に再現プログラムのC++ソースをアップロードしました。
https://ideone.com/wqZpPL

各フォントで「★test☆テスト」という文字列を表示するWinMainエントリのプログラムです。
「テスト」を表示できるのに「★」や「☆」を表示できないフォントがたくさんあるように思います。
評価やご助言のほどお願いいたします。 m(_ _)m

774デフォルトの名無しさん2018/11/20(火) 07:45:01.17ID:XdMfHhgY
定義されてるかどうか確かめたのか?
単にその文字が定義されてないだけだろ

775デフォルトの名無しさん2018/11/20(火) 07:49:45.64ID:FIdfDS6L
>>774
文字が定義されているか確かめるにはどうしたらよいですか?

776デフォルトの名無しさん2018/11/20(火) 09:26:40.38ID:c9mHPamo
英字フォントでは★などはないんじゃないの
windowsに最初から入ってる文字コード表アプリで見てみ
Palatino Linotypeには登録されてない

777デフォルトの名無しさん2018/11/20(火) 09:36:43.33ID:FIdfDS6L
>>776
なるほど。回答ありがとうございます。
記号である★や☆を表示できないのにカタカナや漢字を表示できるのですが、
ご紹介いただいた文字コード表との整合性についてはどうなっているのでしょうか。

778デフォルトの名無しさん2018/11/20(火) 09:52:35.34ID:XdMfHhgY
代替フォントが使われるけど、デフォルトはかなり適当だからきちんと^やりたいなら一文字ずつチェックして描画

779デフォルトの名無しさん2018/11/20(火) 10:07:40.17ID:FIdfDS6L
>>778
プログラム内でチェックするAPIはなんでしょうか?
検索のヒントになるキーワードが分からずこんなこと聞いてすみません。

780デフォルトの名無しさん2018/11/20(火) 10:11:32.06ID:XdMfHhgY
GetGlyphIndex

781デフォルトの名無しさん2018/11/20(火) 10:20:12.32ID:FIdfDS6L
>>780
回答ありがとうございます。
GetGlyphIndexは、Win32APIには該当の関数が見当たらないようです。
何かサードパーティーのライブラリでしょうか?

782デフォルトの名無しさん2018/11/20(火) 10:24:32.94ID:jmuJusIM
freetype

783デフォルトの名無しさん2018/11/20(火) 10:26:38.56ID:FIdfDS6L
失礼しました。以下関数ですね。
GetGlyphIndices()
https://msdn.microsoft.com/ja-jp/library/cc428689.aspx

784さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/25(日) 16:05:13.88ID:1GlBO1DK
64-bitの環境でCreateRemoteThreadでAPIフックを試みた。フックは成功したのだが、フックの解除がかなり難しい。

LoadLibraryの戻り値を使う→だめ。
Module32First/NextのhModuleの値を使う→だめ。
DLLの内部からFreeLibraryを呼ぶ→だめ。

785さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/25(日) 16:09:53.05ID:1GlBO1DK
自分のプロセスの内部ではフックの解除は成功した。
しかし、他のプロセスになるとフックの解除が難しい。

786デフォルトの名無しさん2018/11/25(日) 16:48:41.81ID:ItHAeG65
どう駄目なのかを書かないのは単なる独り言なのでやめてくれませんかね。
クラッシュしてるんなら以下。
https://blogs.msdn.microsoft.com/oldnewthing/20131105-00/?p=2733

787さまよえる蟻人間 ◆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」にしたい。

788さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/26(月) 22:11:22.95ID:vT7JWcSC
今回はTargetというプログラムを対象に注入しているが、任意のプログラムに対して同じように(MessageBoxA APIをフックして)動作しないといけない。

789さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/26(月) 22:14:42.78ID:vT7JWcSC
InjectorプログラムからFreeLibraryの呼び出しに成功すれば、フックが元に戻るはずだが、FreeLibraryが失敗しているように見える。

よろしくお願いいたします。

790さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/26(月) 23:16:21.86ID:owLNC83c

791さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/26(月) 23:27:16.40ID:owLNC83c
reflectiveはブルースウィリス判定される恐れあり。他に方法はないのか。

792デフォルトの名無しさん2018/11/27(火) 10:52:25.21ID:krSRsG9l
なぜインジェクションするためにloadlibraryを皆したがるのか直接メモリにコード書き込めばfreelibraryする必要がないじゃないか。

793デフォルトの名無しさん2018/11/27(火) 11:06:20.88ID:cSPHWeDO
dllの方が圧倒的に楽だからな

794さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/11/27(火) 12:27:02.62ID:mpDKeVau
終了待ちのイベントオブジェクトと、DLLスレッドと、FreeLibraryAndExitThreadで解決した。

ありがとうございました。

795デフォルトの名無しさん2018/12/05(水) 11:51:42.13ID:BbScykOp
LVM_SUBITEMHITTESTの戻り値の説明に書かれている
「Returns the index of the item or subitem tested」
の意味がよくわからないんですが、
戻り値とLVHITTESTINFOのiItemが異なる値になる可能性はあるのでしょうか。

796さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/12/05(水) 13:13:14.97ID:6bKah/Y1
リストビューのサブ項目は、詳細表示のときの最初の列以外の列のテキストで使われる。

797デフォルトの名無しさん2018/12/05(水) 13:31:27.57ID:BbScykOp
>>796
それ自体は理解しているのですが、
戻り値がアイテムの番号ではなくサブ項目の番号になることがあるのでしょうか。

798デフォルトの名無しさん2018/12/05(水) 15:00:20.42ID:Gi6GtpHL
iSubItemメンバに値が入る
戻り値およびiItemは今まで通り

799デフォルトの名無しさん2018/12/05(水) 15:22:34.72ID:XTelINnE
カエル

800デフォルトの名無しさん2018/12/08(土) 08:51:15.20ID:lNQUDg2h
ReactOSはどうなった?

801デフォルトの名無しさん2018/12/08(土) 10:18:34.02ID:uWIwAxnc
Reactなし

802さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/12/10(月) 14:41:18.82ID:ILcXe1rk
Windows互換を目指すReactOS Part12
https://medaka.5ch.net/test/read.cgi/os/1519906380/

こっちのスレで活動してるよ。暇なら見てね。るんぱっぱ。

新着レスの表示
レスを投稿する