Win32API質問箱 Build127

■ このスレッドは過去ログ倉庫に格納されています
2021/12/09(木) 21:32:56.60ID:sYLpmj89
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build126
https://mevius.5ch.net/test/read.cgi/tech/1588339011/
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/

■関連スレ
Visual Studio 2020 Part1 https://mevius.5ch.net/test/read.cgi/tech/1634166667/
Visual Studio 2019 Part7 https://mevius.5ch.net/test/read.cgi/tech/1634178709/
Visual Studio 2017 Part7 https://mevius.5ch.net/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.5ch.net/test/read.cgi/tech/1521786252/
2022/08/17(水) 10:05:31.13ID:75soL8XV
FFmpeg 使った方が良くね?
2022/08/17(水) 11:59:16.72ID:75soL8XV
ああ
それを言うなら ffdshow の方だったかな
しかしまだ使えるんかなこれ
2022/08/18(木) 16:29:05.82ID:9oKj6z2J
xvideos
2022/08/22(月) 16:22:19.61ID:ChTfYzF8
日本語キーボード日本語Windowsで英数キー(CapsLockキー)のアップを捕捉する事って不可能?
レジストリでキーマップを変えて英数キーを違うキーに割り当てた後なら一般的なキー同様に捕捉出来ることは確認できたけどそういう迂回方法無しで出来る方法があれば教えてもらいたい
2022/08/22(月) 17:26:47.15ID:Zp58Sca6
GetKeyState( vk_code )
 VK_CAPITAL CapsLockのトグル状態 のほうじゃなく
 VK_OEM_ATTN 仮想キーコード 240 (0xF0) で今の押下状態は取得できそうではあるな

IMEはちゃんと shift 無し Caps lock キーを受け取って反応できてるんだし
2022/08/22(月) 18:22:10.86ID:9oiM0iks
ないです
2022/08/22(月) 18:27:49.15ID:x6NjRtAl
ノートパソコンなどの省スペースキーボードについてるFnキーも拾えないんだよなあ、GetKeyState&GetAsyncKeyState
2022/08/22(月) 21:05:07.73ID:pMMCnUP8
fnはosの預かり知らないキーなので同列にすんなハゲハゲハゲハゲハゲ!!!!!!!!!!!
2022/08/22(月) 21:25:09.66ID:6BQsurqE
キーボードのコントローラーが勝手に処理してるでしょう
CPUまで線がつながってない感じ
2022/08/23(火) 07:39:49.30ID:W/9/eWQQ
>>359
SetTimerとかで定期監視するしか無さそうか
2022/08/25(木) 23:57:16.63ID:ePt16zWH
今はarduinoとかで自分好みのキーボード作れる時代なんだぜ
知らんけど
2022/08/26(金) 10:40:49.53ID:lf60l9vY
虫歯が痛いなら総入れ歯にしましょう!レベルの解決策w
2022/08/26(金) 12:29:39.93ID:NrrxL3kr
禿げてきたら丸坊主にしましょう!
2022/08/26(金) 12:48:26.23ID:im0ZYKIt
なんて日だ!
2022/08/31(水) 12:36:32.64ID:twZsJrmt
>>355
ライセンスはどうしてるの?
GPLやLGPLだから、リンクすれば最低でも自作プログラムのオブジェクト
ファイルの公開が必要になるだろう。
別コマンドで実行する場合は、*.exe が自作アプリと合わせて二つ必要になるし、
データの受け渡しの効率も落ちる。
2022/09/02(金) 22:59:42.92ID:L2uZLmEf
質問です。

GetCharABCWidths()を用いて、TextOut()で描いた文字のABC構造体を取得しています。

Arialフォントのような欧文フォントを用いてTextOut()で"あ"を描いた場合、そのフォント内には"あ"という日本語文字は入っていないため、適当な代替フォントに置き換えられて"あ"が描かれるようです(たぶん「フォントリンク」という機能だと思います)。

この時にGetCharABCWidths()で得られるABC構造体には、描かれた"あ"の寸法が入っておらず、ダミーの寸法が入ってきてしまいます。

msdnのGetCharABCWidths()APIの項には、
The ABC widths of the default character are used for characters outside the range of the currently selected font.
とあるので、APIとしては仕様どおりの動作なのですが、では、描かれた"あ"のABC寸法を得るにはどうすればよいのでしょうか?

以上、よろしくお願いします。
371デフォルトの名無しさん
垢版 |
2022/09/04(日) 10:57:34.63ID:RQxkFcRF
GetTextExtentPoint32()
SetTextJustification()
DrawText()
2022/09/04(日) 16:57:14.39ID:aZX/9mcR
>>371
ありがとうございます。

GetTextExtentPoint32()だと、文字の左余白(A), 文字自体の幅(B), 文字の右余白(C)の
和の値(A+B+C)しか得ることができません。

そうではなくて、各文字について、A,B,Cそれぞれの値が知りたいのです。
それを返してくれるのがGetCharABCWidths()なのですが、>>370に書いたように
正しい値が返ってこない場合があります。

一応、自分で考えた対処方法として、
1. GetTextExtentPoint32()で、文字のA+B+Cの値を取得
2. その幅を持つ白色の描画領域を確保し、その原点位置から黒色でその文字を描画
3. 領域に描画された結果(白・黒)を左端から走査して、左余白(A)を得る
4. 同様に右端から走査して、右余白(C)を得る
5. 手順1で取得したA+B+Cの値からAとCを減じてBを得る
という風にすれば、(どんくさいですが)知りたい値を得ることはできると思います。

ちなみに、実際には、上のやり方そのままではうまくいかないことがありそうです。
というのも、イタリック体にしたりすると、AやCの値がマイナスになることがあるからです。
その場合、上のやり方だと、文字の左右が領域からはみ出て描画されてしまいます。

なので、左右にある程度の余裕を持った領域、例えば幅「100+A+B+C+100」の領域を確保し、
(x,y)=(100,0)の位置に文字を描画する。
そうするとはみ出さずに描画できるので、100の余分な余白があることを考慮に入れて計算すれば、
A,B,Cを得られるだろうと考えています。

でも、こんなやり方は面倒くさい。もっとマシなやり方はないのだろうか・・・。

例えば、フォントリンク?で描画されたときに、どのフォントが使われたのかがわかれば、
そのフォントを明示的にデバイスコンテキストに指定してGetCharABCWidths()呼べば
A,B,Cの幅を得られるはずですが、フォントを知る方法はわかりませんでした。
2022/09/04(日) 17:09:08.67ID:A8KVTWK8
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-gettextmetrics
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-textmetrica

>日本語文字は入っていない
結局この問題は残るんじゃないかな
確実に日本語グリフが入ってるフォントを指定
2022/09/04(日) 19:32:04.85ID:aZX/9mcR
ありがとうございます。

作っているアプリの仕様は、
・アプリのユーザは、フォントと文字列を自由に指定できる
・画面上には、指定したフォントで、指定した文字列が描画される

やりたいことは、
・ユーザが上記の操作で描画させた文字列中の各文字について、A,B,Cの幅を知りたい

ということなのです。

本来NGな組み合わせ(例:欧文フォントと、全角まじり文字列との組み合わせ)をユーザーが指定した時、
存在しない文字がいわゆる豆腐(□)にでも化けてくれれば、そこでユーザは別のフォントを
選びなおすはずです。

しかし、文字化けせずに一見正しく表示されてしまうため、困っています。
2022/09/04(日) 23:44:22.53ID:047Xbk5t
>>374
ABCなんて何に使うんだろうと思ったら、フォント情報を表示するツールなのか。
GetCharacterPlacement + ExtTextOut / ETO_GLYPH_INDEX あたりで、グリフを直接描画すれば
フォントリンクは効かないはずなので無い文字は豆腐になるはず...
2022/09/05(月) 20:04:11.68ID:lEq1EKXB
ありがとうございます。
参考にさせていただきます。

可能ならば、無理やり豆腐にするんじゃなくて、フォントリンクで表示されたとおりの文字の情報を取得できるのが理想ですが、難しそうですね・・・
377375
垢版 |
2022/09/05(月) 23:27:10.40ID:ViUtFxr1
>>376
GetCharABCWidthsで取得しても1文字単位でしか取得できないので、筆記体やアラビア文字のように前後の文字や位置によって大きさが変わるような場合には対応できないので、ABCの値は参考程度にしか使えないと思います。

フォントリンク先のフォント情報(LOGFONT)は、メタファイルに出力後そのメタファイルを解析するというちょっとトリッキーな方法で可能です。
https://stackoverflow.com/questions/54050095/how-to-tell-if-a-surrogate-pair-unicode-character-is-supported-by-the-font
2022/09/06(火) 20:18:06.15ID:H7QyPUx+
大変有用な情報、ありがとうございます。

確かに、筆記体のような手を繋ぐフォントの場合、うまくいきませんね。
これは気づきませんでした。
実際にはそういったフォントが使われることはまれなので、大きな問題にはならないかな、と思います。
379デフォルトの名無しさん
垢版 |
2022/09/10(土) 21:08:59.03ID:eGqDTe4p
HBITMAP hBitmap; に既に bitmap image が load されているとき
BITMAP bm = {0};
GetObject(hBitmap, sizeof(BITMAP), &bm);
で bm.bmBits の指す場所に pixles data があることは確認出来るのですが
bm.bmBits は何時 GlobalFree(bm.bmBits); すれば良いのでしょうか?
放置しても memory leak の心配はありませんか?
2022/09/11(日) 13:04:53.74ID:4ex9Us8K
DeleteObject(hBitmap);
381デフォルトの名無しさん
垢版 |
2022/09/13(火) 22:06:19.57ID:V8hEwwJT
ウインドウのキャプションを SetWindowText で変更したいのですが

そのウインドウはブラウザ(クローム系)でして
SPY++が使えなくなっているので自作のウインドウ一覧で調べると
ブラウザのトップレベル・ウインドウは、アクティブなタブのキャプションが
ウインドウのキャプションになっており、クラス名は"Chrome_WidgetWin_1"でした

これで取得したウインドウ・ハンドルを使って、ブラウザの位置を操作したり
最小化したりできるので、このハンドルで間違いないはずですが

SetWindowText でキャプションを変更することはできません
ブラウザには使えないということでしょうか
御存じの方、教えて下さると幸いです
2022/09/14(水) 01:18:29.10ID:LQT6KG16
ウインドウというよりタブなんじゃね?
383デフォルトの名無しさん
垢版 |
2022/09/14(水) 09:06:44.89ID:bpmiLen5
そうです
ウインドウのキャプションを変更したいけど
それはブラウザでは、タブのキャプションを変更したいということですね

ブラウザのトップレベルのウインドウハンドルで、GetWindowTextを使って
そのタブのキャプションが取得できるのに
逆に、そのハンドルでタブのキャプションはSetWindowTextでは変更できない
ということのようです

タブが子ウインドウになっていてアクセスできればいいのですが
そこらへんブラウザは色々と特殊な作りなので無理っぽい気はしてます
2022/09/14(水) 09:46:31.10ID:mWSu9Hj1
ふーんGetはできるんだタスクバー用かな?
どう見てもオーナードローだし
htmlのtitle変える方が早そうだね
2022/09/14(水) 12:31:23.77ID:NjIHRu5t
SetWindowText実行後にGetWindowTextしたら変更後のキャプション取得できてるんじゃない?
表示処理が別なだけで
386デフォルトの名無しさん
垢版 |
2022/09/14(水) 15:26:33.97ID:bpmiLen5
>>385
その通り、内部的には変更されてました!!
ありがとうございました
聞いて良かった、自分だけで考えていたら堂々巡りで違う発想は出てこないものですね

見た目のキャプションはどうでも良くて
ブラウザを複数起動して、全て同じサイトを開かせるので
それをUWSCで操作しようとすると、どれが処理済なのか区別つかないので
処理済のやつのキャプションを変えてやろうということだったのです
2022/09/14(水) 18:41:01.15ID:Ktn65RkO
処理未済のテーブルのキーは
windowハンドルつこたらあかんの?
388デフォルトの名無しさん
垢版 |
2022/09/14(水) 21:36:59.23ID:bpmiLen5
386の話?
そんなことないですよ
ウインドウキャプションと、クラス名が同じウインドウがいくつもあるので
UWSCはそれのどのウインドウが処理対象か分からないってことです

YouTubeから動画をDLするサイトを自動で開いて
新着の動画アドレスを自動入力してDLさせるんですが
一つがDL処理中に、別の新着動画が来ることがあるので
389デフォルトの名無しさん
垢版 |
2022/09/14(水) 21:56:53.98ID:RXLSqQDl
入力されたキーコードをキーボードの文字に変換してくれるAPIとかありますか?
それかC/C++の関数とかで。
SHIFTのコードを渡すと、"SHIFT"みたいに文字が返ってくるみたいな。
2022/09/15(木) 10:19:13.76ID:HISUe1p2
どとねとにはあるけどお
スレ違いかな
大した手間でもないしご自分で用意すれば
そもそもC/C++ならマクロを糞すればリテラルを文字列に変換できるんだし
ちょっとは頭使え?
391デフォルトの名無しさん
垢版 |
2022/09/15(木) 11:00:05.62ID:cizFucC9
>>388
>>354
2022/09/15(木) 18:28:39.47ID:gUiebKpt
>>389
GetKeyNameText
393デフォルトの名無しさん
垢版 |
2022/09/16(金) 10:16:25.50ID:4htE7L2M
385さんと相談に乗ってくれた方にお礼の動画を持ってまいりました
https://www.youtube.com/watch?v=uJxOP1s4Xo4
394デフォルトの名無しさん
垢版 |
2022/09/18(日) 13:46:05.81ID:KpBP36NG
>>393
グロ
fishing
2022/09/18(日) 18:20:24.44ID:JcdidFMx
こんな釣りじゃあ誰も見んわなw
396デフォルトの名無しさん
垢版 |
2022/09/22(木) 19:31:36.45ID:5qbo/wEx
可愛いよね
名前知らない?
397デフォルトの名無しさん
垢版 |
2022/09/23(金) 02:06:12.74ID:gD4It3Ab
STUのがかわいい
398デフォルトの名無しさん
垢版 |
2022/10/31(月) 14:20:10.23ID:un31Hzpa
VisualStudio2022で
C++でGdiplusを利用して、メタファイルとして描画した図形を保存するプログラムを作成しました。
(描画時メタファイルのパラメータはGdiplus::EmfTypeEmfPlusDualを使用して作成しました。)
保存した図形ファイルをエクセルで開いて、Ctrl+Cでクリップボードにコピーしました。
この状態で、EnumClipboardFormatsを使用して、クリップボードのフォーマットを取得しました。
予想だと、WinUser.hで定義されている
#define CF_ENHMETAFILE 14
になるのかと思っていたら、実際は49161が取得されました。

質問ですが、この時取得された49161は何のフォーマットを意味しているのでしょうか?
2022/10/31(月) 14:25:56.86ID:cPgJ75vw
汎用データオブジェクト
400デフォルトの名無しさん
垢版 |
2022/10/31(月) 15:48:17.35ID:un31Hzpa
>>399
ありがとうございます。
すいません、質問なのですが
Gdiplusを利用して作成したメタファイルをAPIを使用して汎用データオブジェクトとしてクリップボードに設定したいのですが、
参考になる書籍、ホームページ等ありましたらお教えいただけないでしょうか?
2022/10/31(月) 21:10:12.34ID:Y7EKu9E5
EnumClipboardFormats()使ってるんだからOpenClipboard(),SetClipboardData()はわかるよね
何を聞きたいんだろう?
402デフォルトの名無しさん
垢版 |
2022/11/01(火) 00:53:41.11ID:8bbAESJs
>>401
昔からあるGdiで拡張メタファイルを作成して
OpenClipboard()
SetClipboardData(CF_ENHMETAFILE, handle_enhanced_metafile)
CloseClipboard()
で問題なく、拡張メタファイルがクリップボードに設定されていました。
それをGdiplusを使用してメタファイルを作成して
OpenClipboard()
SetClipboardData(CF_ENHMETAFILE, handle_enhanced_metafile)
CloseClipboard()
に改造したら問題が発生しました。

問題というのはエクセルにクリップボードからペーストすると、「図の書式設定」で「高さの倍率」「幅の倍率」が100%以下の数字になり
意図していたサイズより小さく表示されるようになってしまいました。

クリップボードに設定したメタファイルを、ファイル出力して、エクセルからファイルを開いて描画した図形を表示すると問題なく意図したサイズで表示されていました。

以上の事により、問題が発生する原因はクリップボードへの設定に問題があるのではと考えました。

エクセルにペーストしたGdiplusメタファイル図形を、さらに、エクセルでコピーすると、クリップボードには、なんのフォーマットとして扱われているのか調べてみました。
EnumClipboardFormatsを使用して、クリップボードのフォーマットを取得するとCF_ENHMETAFILEではなく、49161でした。

以上のことによりSetClipboardDataの第一引数はCF_ENHMETAFILE:14ではなく汎用データオブジェクト:49161を設定すべきかと考えました。
しかし、単純にCF_ENHMETAFILEを49161に変えただけでは、クリップボードにGdiplusメタファイル図形は設定されず、エクセルに何もペーストされませんでした。

希望は、Gdiplusメタファイル図形を汎用データオブジェクトとしてクリップボードに設定する方法を知りたいということです。

何かご存じの事がありましたら、お教えお願いします。
2022/11/01(火) 02:33:36.53ID:F5k3ZiCa
CF_ENHMETAFILEがあるのに49161をセットするなんておかしいよ
倍率以外はうまくいってるんだし
同じ図形でGDIのとGDI+のでENHMETAHEADERのメンバの値で違うのはない?

「DataObject 49161」でググったら以下のページが出た
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/5a85a9a6-88a3-4cba-8b19-31c979eea7fa/clipboard-unable-to-enum-registered-clipboard-formats-as-local-system?forum=vcgeneral
49161はこれなのか?
2022/11/01(火) 09:43:25.52ID:23hVAbRk
スレ立てるまでもない質問スレで詳しいこと言ってたら教えてやったんだがな
流したやつに教えてやる気にはならんわ
405デフォルトの名無しさん
垢版 |
2022/11/01(火) 10:48:01.32ID:8bbAESJs
>>404
すいませんでした。
こちらで聞いた方が良いとレス頂いたので
こちらに移って質問していました。
もし、何かご存じならご教授頂けないでしょうか
よろしくお願いします。
406デフォルトの名無しさん
垢版 |
2022/11/01(火) 11:42:30.98ID:8bbAESJs
>>403
レスありがとうございます。
ENHMETAHEADERについてですが精査してみます。
(出力先をクリップボードでなくファイルにした場合、エクセルで開いても問題が発生していないのでメタファイルには問題ないかと、あたりをつけていました)

CF_ENHMETAFILEについてですが、メタファイルは以下の3種類があるようです
・Windows メタファイル形式 (WMF)
・拡張メタファイル (EMF)
・EMF+

描画時メタファイルのパラメータはGdiplus::EmfTypeEmfPlusDualを使用して作成しましたので
EMF+として作成されているのかとも思っています。
そうするとENHMETAHEADER←拡張メタファイル (EMF) を使用しても良いものか疑問に思っています

リンクありがとうございます。検討してみます。
407デフォルトの名無しさん
垢版 |
2022/11/01(火) 11:53:24.91ID:8bbAESJs
>>406
すいません、一部訂正です。
【誤】そうするとENHMETAHEADER←拡張メタファイル (EMF) を使用しても良いものか疑問に思っています
【正】そうするとCF_ENHMETAFILE←拡張メタファイル (EMF) を使用しても良いものか疑問に思っています
2022/11/03(木) 03:29:06.05ID:lhbjAvOX
マルチするアホは原則スルー
ネットマナーおじさんとの約束だぞ
2022/11/03(木) 10:41:37.80ID:tn2ZhR3p

他スレを勧められて続きはそっちでやることを宣言したのに、マルチ警察はこの上何を望むんだろう。
2022/11/03(木) 10:49:58.97ID:dhtr0mvL
前スレで詳しいやつが回答してるのにアスペから自分にはわからんから移動しろと言われてここに来てるだけのアホだから
2022/11/03(木) 11:18:16.59ID:tn2ZhR3p
マルチがどうこうより、せっかく回答したのに無視されたのが気に入らないってことね。
2022/11/03(木) 11:28:13.59ID:irjlHMAb
回答があるのに他で聞くのはマルチだろ
マルチがなぜ嫌われるのか理由までは知らないのか
2022/11/03(木) 11:47:59.65ID:tn2ZhR3p
マルチをしないからといって回答が無視されなくなるわけではないからそこは的外れだと思うぞ。
2022/11/03(木) 11:57:08.08ID:irjlHMAb
アスペかな?
415デフォルトの名無しさん
垢版 |
2022/11/03(木) 14:53:14.39ID:XfULePpa
>>408
スレ立てるまでもない質問はここで 162匹目 に質問を出しました。

 253 で49161は何のフォーマットか質問しました。
 254 で汎用DataObjectだとレスを頂きました。
 256 で254に対するお礼のレスをしました。
 257 でWin32API質問箱 Build127の方が良いのでは?とレスを頂きました。
 258 で そちらで聞いてみます と257にレスしました。

その後Win32API質問箱 Build127 に移って 398 で質問を始めました。

以上が今までの経緯なのですが、何か問題があるのでしょうか?
2022/11/03(木) 15:08:57.81ID:SIQRCQUk
面倒くさいから追いかけないけど、別に問題あるようには見えない

>>410が正解書いてるような空気醸しだしてるから、その回答レス番書いてくれたら話が変わるかもしれんけど
実は正解ではない別のレスを書いててスルーされた恨みで警察に転職した可能性も感じる
2022/11/03(木) 15:26:38.66ID:76hysst1
恨みとか知らんし警察は俺じゃないけど雑な質問だからそれなりの回答しかしてない
詳しく聞けば教えてやったけど
こっちの方が詳しい人がいると聞いてすぐ移ったから回答しなかっただけだが回答しなきゃいけない理由もないだろ
こっちの詳しい人()に聞けばいいだけ
それで何か問題あるか?
418デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:43:26.06ID:/zL/TWh/
向こうのスレみて来たけど、マルチ嫌いの俺ですら全く問題ないなw
なにを拗ねてるんだこやつは
2022/11/03(木) 15:46:54.91ID:76hysst1
知ってることを回答しないだけで非難される言われはないぞw
お前が教えてやればいいだけ
本人でないならな
2022/11/03(木) 15:47:33.06ID:76hysst1
俺より詳しいやつがいるスレだからそれで問題ないはずだが何を怒ってるのか
2022/11/03(木) 15:48:42.41ID:SIQRCQUk
>>417
その通り
マルチの話題でも何でもない無関係なことで話を拡げず、すっこんでろとしか

元スレで回答出てるならそれで終了
スレ移して質問続くなら普通にやってくれ
2022/11/03(木) 16:06:19.20ID:GeJ34bDq
49161は何のフォーマットか?なんてのは枝葉で
本質は同じフォーマットになるような方法はないのか?なんだよな
わからん
2022/11/03(木) 16:13:11.60ID:GeJ34bDq
枝葉への回答は前もココにも付いてる通り 汎用データオブジェクト
これで最初の質問は完了してるん
2022/11/04(金) 00:59:05.47ID:TddW6oN3
この手のマニアックなのはstackoverflow漁るか英語で聞いた方が早いよ
425デフォルトの名無しさん
垢版 |
2022/11/05(土) 00:48:25.93ID:mvfmSa9B
EMFは糞
GDI+も糞
426デフォルトの名無しさん
垢版 |
2022/11/06(日) 21:20:50.65ID:ZfA7UEIS
特定のウィンドウがFlashWindowしてるかどうか知りたいのですが、何か方法はありませんか?
画像取得して色確認するとかしかないですか?
2022/11/07(月) 05:59:08.49ID:SWCRxCfW
SetWindowsHookEx() を使用して、シェル フック HSHELL_FLASH (0x8006) をコールバックに登録します。
https://stackoverflow.com/questions/69806213/is-there-a-way-to-detect-when-a-specific-process-is-flashing-its-window-taskbar
2022/11/07(月) 17:30:23.05ID:4qt4VSUI
ありがとうございます
2022/11/16(水) 18:14:29.04ID:wmtCAqUs
OEM製品だな
2022/11/18(金) 21:22:52.50ID:zsUVThtH
セッションID=0のタスクスケジューラーのプロセスから他のセッションID=1以上のGUI持ってるプロセスの操作したいんだけど
同じセッションIDのプロセスを作ってやらないと無理だったかな
2022/12/06(火) 11:39:49.01ID:63yxghiR
スレッドが自身のスタック領域の開始アドレスを知る方法はありますか?
サイズならTEB構造体から取得できるようなんですが

参考
https://ja.stackoverflow.com/questions/47840/windows-visual-studio-2015-c-%E3%81%A7%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
2022/12/06(火) 18:52:16.04ID:uLZynctc
>>431
サンプルソースは見たの?

>サイズならTEB構造体から取得できるようなんですが
正確にはStackBase, StackLimit を取得できるので、その差分からサイズを求めている。
teb->Reserved1[1] を使えばよいはず。
2022/12/08(木) 05:02:17.43ID:7N/fyoNc
>>432
あー確かに減算してますね。
気がつかなかった私がどうかしてました。
ご指摘ありがとうございます。
2022/12/19(月) 11:12:22.75ID:aTW+qgB5
ディスクへの書き込みを別の場所へ書き込むようにインターセプトすることってドライバじゃないと不可能?
ReadDirectoryChangesやFindFirstChangeNotificationって通知だけでディスク変更操作に手を加える事は出来ないよね
パスが常に一定の物であればジャンクションやシンボリックで対応可能なんだけど
2022/12/25(日) 08:27:23.13ID:z6jdEPeL
その程度の知識の素人が手を出せるレベルの処理じゃないだろ
仮想デバイスとかどうすんの
436デフォルトの名無しさん
垢版 |
2023/01/19(木) 12:53:53.04ID:RyyxmaOy
古い32bitプログラムをVS(ツールセット2010)でx64でビルドしてるんですが
「外部シンボル "sprintf" は未解決です」などのリンクエラーが大量に出て困ってます。
「legacy_stdio_definitions.lib」を使えという情報もあったんですが
2010ベースだと恐らくない?為か見つからないと怒られます。
色々事情があって最新版には移行出来ません。64bit化は諦めるしかないでしょうか?
437436
垢版 |
2023/01/19(木) 14:01:27.21ID:RyyxmaOy
>436
チマチマと自分で設定弄ったりしてたら解決出来そうでした。
2023/01/20(金) 00:30:28.27ID:a17vtIUU
ちゃんと無いなら自分で作るのもあり
2023/01/22(日) 10:35:53.94ID:JlW1CBNq
Windows Explorerではファイルに由来する属性、例えば画像のサイズとか、
MP3のタイトル、プログラムの説明とか表示できるけど、
それを取得するAPIは用意されててつかえたりしますか?
それともあれはExplorerで頑張って色んなフォーマットに対応してるの?
2023/01/22(日) 12:15:09.84ID:6SRGa8RT
>>439
このあたり↓ではないか?

MP3ファイルからタイトルやアーティスト名などを取得するには?[C#、VB] - @IT
https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/591mp3tags/mp3tags.html

Shell Interface (Shell32) | Microsoft Learn
https://learn.microsoft.com/en-us/dotnet/api/shell32.shell

間違ってたらごめんね
441439
垢版 |
2023/01/22(日) 13:35:39.24ID:JlW1CBNq
>>440 Shell32.dllのGetDetailsOfを使うのずばりでした。
ありがとう!自前で全部揃えるのは嫌だとおもってたから。
2023/01/22(日) 18:45:34.11ID:6SRGa8RT
>>440
2つ目のURLは違ったね。多分こっち↓だ

Shell object (Shldisp.h) - Win32 apps | Microsoft Learn
https://learn.microsoft.com/en-us/windows/win32/shell/shell

訂正します
443デフォルトの名無しさん
垢版 |
2023/01/27(金) 14:29:22.14ID:BWAW0Di3
>436-437
もう解決したみたいだけど
文字通り legacy_stdio_definitions.lib をリンクすれば良い
あるいは sprintf をやめて安全な snprintf (それ以外の legacy があればそれらも) 等を使うコードに変更する
2023/01/28(土) 15:17:14.74ID:SSo2rJoB
俺もそろそろANSI32bitアプリをunicode64bitアプリに更改したいなあ
まあ64bitにする意味は全く無いんだけど
せめてunicode化して、流行りの顔文字ぐらい表示できるようにしたい
あれのレンダリングはどうやるんだろうね
TextOutみたいなレベルのAPIじゃ無理だよね?
2023/01/28(土) 16:02:05.59ID:u99kbCnW
>>444
Direct2Dなので描画ハンドラ関数の丸ごと書き換えが必要
2023/01/28(土) 22:31:52.79ID:xHLhsNzv
正確にはDirect2D+DirectWriteだね
2023/02/01(水) 03:54:55.92ID:axeNk+I4
QueryPerformanceFrequencyで取得した値が10MHzになってるんですが
何時からこの値になったのか、時期と実装が変わった経緯分かる方いますか??
2023/02/01(水) 07:50:03.36ID:9aEQ8dCa
もともとハードウェア次第だし、実装を変えたというわけじゃないんじゃね?
https://ja.wikipedia.org/wiki/High_Precision_Event_Timer
2023/02/06(月) 00:05:16.01ID:diZedZj+
>>447
最近2台のPCで取得したら10MHzだった。第8世代か第9世代のCoreと第10世代のCore。
ぐぐったらもうちょっと小さい値が出てきた。
2023/02/06(月) 00:41:55.57ID:bCXM4GAa
>>447
Hyper-V上だと10MHzになる模様
https://learn.microsoft.com/en-us/windows/win32/sysinfo/acquiring-high-resolution-time-stamps
2023/02/12(日) 10:07:22.45ID:/9PGWL3V
ResEditが無くなってしまったみたいだけど、何があったんや?
単に需要がなくなっただけ?
2023/02/12(日) 11:39:51.87ID:beRYzW3b
統合環境と一体化した
2023/02/13(月) 02:53:34.52ID:S9jIVDl5
ウィンドウメッセージキューと socket を WaitForMultipleObjects みたいに同時に待ち受ける方法はある?
現状は通信処理は別スレッドでやってるけど、これを敢えて GetMessage のループでやりたい。
というのも、好奇心上の取り組みでメモリ使用量を極限まで減らしたくて、まずスレッドを減らしてみようと思って。

あとちょっと API の話からは逸れるんだけど、VisualStudio で C++ のデスクトップアプリの雛形をビルドしただけのものでもメモリをコミットサイズで 2MB とか食ってて、スレッドも 4つくらい動いてるんだけど、これって何?
起動してから少し放っておくとスレッドは 3つくらい終了するから、いらないものなら排除したい。
いろいろ削ぎ落とすリンカオプションの設定とかあったら教えてほしい。
スタックサイズやヒープサイズは数十KBに設定してみたけど、あんまり違いは見えない。
2023/02/13(月) 03:36:15.30ID:X7RxD/JY
>>453
MsgWaitForMultipleObjects を使う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。