Win32API質問箱 Build124

■ このスレッドは過去ログ倉庫に格納されています
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/
2018/01/30(火) 17:55:13.46ID:SJob4Z7Y
win32api直接叩いてるんですけど、タブオーダーってどうやって設定されるんですか?
多分 CreateWindow 呼んでコントロールを作った順番そのままだと思うんですが、
なんかTABキー押してもフォーカスが移動しないんです
2018/01/30(火) 18:02:35.67ID:h2qX+tcO
モーダルダイアログじゃないと動かないよ
2018/01/30(火) 18:09:59.30ID:XXEBAVhR
モードレスの場合は、メッセージループにIsDialogMessage呼び出しが必要。
2018/01/30(火) 18:19:21.99ID:FAoT3aWr
タブキー押されたらsetfocus
2018/01/30(火) 18:29:42.34ID:SJob4Z7Y
ああー
助かりました
IsDialogMessage でうまくいきました。
余談ですが CreateWindow の呼び出し順とは逆に移動するんですね。
Z手前から奥に向かって移動する感じですかね。
とりあえず後はどうにかなりそうです
2018/01/30(火) 21:54:44.90ID:fLRARGcM
プリプロセッサマクロ値 "_MSC_VER" を知る方法はありませんか?
cuda 9.1 提供のヘッダの #error が反応してしまいます
2018/01/30(火) 22:09:19.27ID:Z73Qxpjd
は?
printfでもしてみればいいだろ
2018/01/30(火) 22:36:28.87ID:5Yx/uuQb
VS2008でも使ってるのか?
2018/01/30(火) 23:33:34.49ID:fLRARGcM
>>175
ありがとうございます、なるほど!
現時点の最新は _MSC_VER = 1912 でまだ cuda が追従できていないようです
https://devtalk.nvidia.com/default/topic/1022648/cuda-9-unsupported-visual-studio-version-error/
2018/01/31(水) 01:14:49.25ID:IFJhRfmg
ズコー
2018/02/02(金) 22:47:25.95ID:0FY9q5SB
dll間でデータを共有するのはdata_segでできるけど
dllAで動的確保したデータ(クラスでメンバ関数有り)をdllBでも使えるようにするには
マッピング以外に何がある?
2018/02/02(金) 23:33:47.71ID:3zbIMbyp
ふつうにポインタ渡せばいいんじゃね?もちろんクラスの定義は一致している前提だけど。
2018/02/03(土) 09:27:06.89ID:KnnmFvy8
ごめんdllA, dllBって書いたけど間違い

正しくはexeAとexeBが同じdllを使ってる状況で
exeAで動的確保して初期化もしたクラス(メンバ関数有り)をexeBのdllでも使いたいんだ
2018/02/03(土) 09:40:28.84ID:qWVkS+Es
ふつうにポインタをdata_segに置くが
2018/02/03(土) 10:55:22.08ID:FhluCmMv
プロセス間で共有したいんだろ?
共有メモリでもなんでも使ってデータ本体を保管
データ本体にアクセスするクラスを作ってそれはプロセス内でのみ利用すりゃいい
要はクラスそのものはプロセス間で利用しようと考えない
2018/02/03(土) 15:00:03.34ID:KnnmFvy8
>>182
それだとメンバ関数実行でexeBのdllが異常終了する

>>183
やっぱそういうのしかないんかな
ありがとう
2018/02/03(土) 15:12:28.48ID:Pk3rL+mD
クラスにnew と new[] 定義すればエラーにならないでしょ?
186デフォルトの名無しさん
垢版 |
2018/02/08(木) 23:07:42.59ID:C1oz7nNF
Windowsがシャットダウンした時刻を記録したいんだけど、
1秒おきにファイルに時刻を書き込み続けるしかないかね?
2018/02/08(木) 23:27:36.93ID:UuuqIveG
カーネルエラーで落ちたのでなければイベントログにシャットダウン時刻が書いてあるはずだが
2018/02/08(木) 23:53:21.80ID:PXTihGAK
VS2015とVS2017のsplitpathがMBCS対応してないんだけどどういうこと?
2018/02/09(金) 02:23:09.51ID:E+KPBbPo
>>186
イベントログの他には
WM_QUERYENDSESSION
WM_ENDSESSION
WM_POWERBROADCAST
2018/02/09(金) 03:30:07.89ID:dI/VZTKe
初歩的な内容で申し訳ないのですが、、、

親ウィンドウと子ウィンドウがあります。
子ウィンドウは自分でCreateWindow()を使い、親のウィンドウハンドルを指定して作っています。

そこで質問ですが、親ウィンドウでWM_DESTROYを処理する際に、子ウィンドウに対して
明示的にDestroyWindow()を一々実行する必要はありますか?
自分としては子ウィンドウは親の破棄に伴って暗黙のうちに破棄されると勝手に解釈しているのですが、
間違いがあればご指摘ください。
2018/02/09(金) 04:33:00.77ID:dI/VZTKe
確認不足でした。
DestroyWindowをしなくてもちゃんと破棄されていましたね。
WM_DESTROYが来ていました。
すみませんでした。
192デフォルトの名無しさん
垢版 |
2018/02/09(金) 07:08:12.16ID:h2mjWzgv
わかればよろしい
2018/02/13(火) 21:23:21.68ID:KbLCHvlc
ウィンドウサイズが変更禁止されているウィンドウを強制的にサイズ変更する方法を教えてください
2018/02/13(火) 21:29:53.35ID:RAq02Plv
聞く前にとりあえずあっちのスレの>>134をやったらどうだ?
2018/02/14(水) 14:48:35.52ID:634XtcmA
http://katahiromz.web.fc2.com/re/ja
https://github.com/katahiromz/RisohEditor
リソーエディタ、一応完成したから、使ってやってな。無料。
2018/02/14(水) 15:06:14.81ID:634XtcmA
>>195
電子署名付けろよ、ばーか
2018/02/14(水) 15:07:22.57ID:634XtcmA
>>195
電子産廃を作らないで下さい
2018/02/14(水) 15:14:32.79ID:634XtcmA
>>195
チョコもらわないで、何作ってんだよ、ヒマジン。

ネトウヨ超きも。
2018/02/14(水) 15:15:29.03ID:634XtcmA
Wwwwwwwwww

受けるw
2018/02/14(水) 15:29:58.12ID:634XtcmA
>>196-199
おまいら全員、逝ってよし。
2018/02/20(火) 18:27:56.31ID:zJihYzXI
ツリービューに対してTVS_DISABLEDRAGDROPを設定してるのに、
右ドラッグをするとTVN_BEGINRDRAGが発生するのは仕様なのでしょうか。

しかもそのまま右ドラッグ操作をすると、
TVS_DISABLEDRAGDROPを設定していないときの左ドラッグと同じように、
選択位置が元に戻ってしまい、とても格好悪い動きになります。

左右どちらもドラッグ操作を無効にしたい場合、
左はTVS_DISABLEDRAGDROPで、右は自力でという変な方法しかないのでしょうか。
それとも、なにか他にスタイルがあるのでしょうか。
2018/02/22(木) 08:18:20.63ID:VsrLFn20
モーダルダイアログの子ウィンドウとしてモードレスダイアログを使用している場合
モードレスダイアログをキー操作するにはどうすればいいですか?
IsDialogMessageでメッセージを捕捉できません
そもそもメッセージが発生しません
2018/02/22(木) 09:20:57.85ID:iVztdi8j
親に全部メッセージ来てないか
2018/02/22(木) 09:55:46.39ID:VsrLFn20
試しに
モーダルダイアログ(親)のPushButtonAと
モードレスダイアログ(子)のPushButtonBを同じコントロールIDにしてみましたが
ボタンBのメッセージは子にしか来ていませんでした
2018/02/22(木) 10:21:48.34ID:iVztdi8j
ああ、キー操作ね・・・・

親もモードレスにしてメッセージループ回せばいいんじゃないかな
なお、Enterは(略
2018/02/22(木) 10:44:51.48ID:cQEFrnWP
キー操作ならDS_CONTROLをつければすべて自動でやってくれる。
2018/02/22(木) 12:18:08.54ID:VsrLFn20
ありがとうございます
親はモーダルダイアログ固定でお願いします

子にDS_CONTROLスタイルを追加で操作はできるようになりましたが
ボタン1 ボタン2
この状態でボタン2で方向キー右を押したらボタン1がアクティブに
ボタン1で方向キー左を押したらボタン2がアクティブになるようにできませんか?

今の状態だとボタン1で左やボタン2で右を押すと親ダイアログのコントロールにフォーカスがうつってしまいます
2018/02/22(木) 12:31:01.78ID:VsrLFn20
補足です
ボタン1にWS_GROUPは追加してあります
209206
垢版 |
2018/02/22(木) 13:12:13.54ID:cQEFrnWP
WS_EX_CONTROLPARENT もつけてみてください。
2018/02/22(木) 13:52:52.23ID:VsrLFn20
ありがとうございます
親に追加したら親のコントロールから子のコントロールへ移動ができるようにはなりましたが
>>207の状況は変化無しでした

ボタン1 -> ボタン2 -> 親のコントロール ではなく
ボタン1 -> ボタン2 -> ボタン1 -> ボタン2 のようにフォーカス移動させられませんか?
211206
垢版 |
2018/02/22(木) 14:00:44.86ID:cQEFrnWP
親だけでなく子ダイアログにもつけてください。
2018/02/22(木) 14:40:26.34ID:VsrLFn20
ありがとうございます
やっぱりダメでした
2018/02/22(木) 15:28:49.61ID:McDcHlyx
>>210
ボタン2の次にフォーカスが来るコントロール(親ダイアログ側)にも
WS_GROUPを付ければよいのでは
2018/02/22(木) 16:27:58.24ID:VsrLFn20
ありがとうございます

WS_GROUPを追加するとグループ開始で次のWS_GROUPが見つかるとそれ以降は別グループの繰り返しですよね
同ダイアログ内では問題無いですが
今回の条件では親コントロールに追加していてもフォーカスが親コントロールにうつってしまいます
2018/02/23(金) 15:46:28.17ID:0tA6Y4q1
wsh 使って Environ("Volatile") とかの環境変数書き換えたあと
WM_SETTINGCHANGE 呼べば親プロセスの環境変数書き換え出来ますか?
2018/02/23(金) 16:12:30.32ID:YZ7AwSGF
別プロセスならできないだろ
やるならレジストリいじってだろうが、変更適用されるかはアプリ次第
2018/02/23(金) 17:02:23.92ID:0tA6Y4q1
WM_SETTINGCHANGE は別プロセスには届かないのですね
2018/02/23(金) 17:17:45.85ID:0tA6Y4q1
こんなのもありました
http://www.garbagecollect.jp/~usa/d/200803a.html
2018/02/24(土) 21:02:04.05ID:fc+Pe6yo
IMEによる日本語入力の際、今時よくある予測変換ウィンドウを自アプリでは
表示しないようにしたいのですが、なにかいい方法はないでしょうか。

ImmSetCandidateWindow()を試してみましたが、どのような値を入れても
通常の変換候補ウィンドウすら制御できず(何も変化無し)でした。

OSはWindows8.1です。
よろしくお願いします。
2018/02/25(日) 03:02:30.21ID:eoTI2sxe
Win32APIの範疇ではない
2018/02/25(日) 03:26:29.95ID:ghAeZDtA
そうではない根拠と該当範疇をどうぞ
2018/02/25(日) 08:57:28.39ID:FvDCdjOy
MSIMEとGoogleIMEとかで違ったと思う(だからやるならターゲットIMEごとにウインドウ捕まえて消すことになるんじゃないかな)
そういう意味じゃ範疇じゃないな
でも使うのはwin32だから範疇だろ
2018/02/25(日) 09:03:25.97ID:eoTI2sxe
なにその俺様が使うからなんでもここでOK論理
2018/02/25(日) 09:52:19.82ID:FvDCdjOy
>>221に答えろよw
225デフォルトの名無しさん
垢版 |
2018/02/25(日) 15:11:39.99ID:DMbXpP0c
おまいらキーロガーほんと好きだな
2018/02/25(日) 16:41:54.90ID:eoTI2sxe
>>224
そのくらい自分で調べなよ
2018/02/25(日) 17:18:38.57ID:ghAeZDtA
IMM系列はWin32APIだろ
小学生は黙ってろよ
228219
垢版 |
2018/02/25(日) 19:33:33.45ID:WLgWOXVj
今やっていることは、仮想キーボードを使って文字入力する画面があるのですが、
入力中に予測変換候補ウィンドウが仮想キーボードに被ってしまって仮想キーボードの
キーが押せなくなる(もちろん移動すればいいですが)問題の回避を検討しています。

文字入力中に EnumWindow()等を使って調べてみましたが、関係しそうなのは
クラス名 CiceroUIWndFrame, MSCTFIME Composition, mscandui40.* あたりで、
mscandui40.candidate を DestroyWindow()すれば予測変換・変換候補ウィンドウともに
非表示にはできました。

しかし mscandui40.candidate は MS-IME 使用時のみしか捕まえられませんし、
MS-IME のバージョンでクラス名が変わってしまう可能性もあるのでやり方を変えました。

というか、正攻法では Imm系の処理で行けそうです。
229219
垢版 |
2018/02/25(日) 19:35:36.97ID:WLgWOXVj
WM_IME_NOTIFY メッセージで IMN_OPENCANDIDATE を処理すれば何とかなりそうではあります。
ググってC#のサンプルは見つけましたが、それは上記のメッセージを捕まえてその後処理せずに
(ように見える)いるだけみたいです。

しかし、こちらはC/C++なのでそのメッセージを捕まえて、処理せずリターンしている
(CallWindowProc()を処理しない)ものの変換候補ウィンドウが表示されてしまいます。

解決は近そうなのですが、ご助言お願いいたします。
230219
垢版 |
2018/02/25(日) 19:37:31.33ID:WLgWOXVj
見つけたサイトの短縮URLを貼ると書き込めなかったので、検索ワードを貼ります。
「IMEの変換ウィンドウを表示しないようにする」
(ページタイトルそのまま)
2018/02/25(日) 19:38:41.80ID:eoTI2sxe
>>229
だからWin32APIじゃないってのに
2018/02/25(日) 21:20:41.03ID:ghAeZDtA
かまってちゃんの幼稚園児はおうちに帰ってね
233219
垢版 |
2018/02/25(日) 21:31:20.85ID:WLgWOXVj
>>231
Win32APIです。
2018/02/25(日) 22:25:31.77ID:eoTI2sxe
>>233
プ
235デフォルトの名無しさん
垢版 |
2018/03/02(金) 19:26:39.11ID:EPNBBNtc
https://github.com/pauldotknopf/WindowsSDK7-Samples/blob/master/winui/WindowsSearch/IFilterSample/Dll.cpp
このサンプルソースで使われてる

#define SZ_FILTERSAMPLE_CLSID L"{6C337B26-3E38-4F98-813B-FBA18BAB64F5}"
#define SZ_FILTERSAMPLE_HANDLER L"{1AA9BF05-9A97-48c1-BA28-D9DCE795E93C}"

この部分のguidって自分用に修正すべきguidだよね?
なんかこのguidググるとWindows10のPDF用フィルターで使ってるみたいでよく分からんぞ
236デフォルトの名無しさん
垢版 |
2018/03/03(土) 10:12:18.29ID:Cp/R2Wou
どうせ変えるんだからサンプルの値が何に使ってたかなんて考える必要ないやん
23741
垢版 |
2018/03/08(木) 22:19:16.84ID:SokprYE+
guidそのまま使ったらまずいかな
2018/03/08(木) 22:43:22.53ID:kGuAlqnM
個人で遊ぶぶんにゃ問題起きることなんてまずないよ
239デフォルトの名無しさん
垢版 |
2018/03/10(土) 15:29:17.15ID:GkfRicR7
うむ
2018/03/12(月) 09:17:43.23ID:kVx+PpNX
ある自作DLLの処理の中でGetWindowRectでウィンドウの座標を取得する場面があります。
Pythonから呼び出すと正確な値が取得できるのですが、C++から呼び出すと実際の数値と異なる値が取得されてしまいます。
同じapiを呼び出してるはずなのになぜ違いが出るのでしょうか?
2018/03/12(月) 10:18:22.88ID:9wDOvV2B
クイズすんなっての
全然違うとこでバグってんだろどうせ
242デフォルトの名無しさん
垢版 |
2018/03/12(月) 16:01:49.08ID:CSgz2Faf
クライアントのハンドルかアプリのハンドルかで間違うケース
右下の座標を幅と高さで間違うケース
2018/03/13(火) 14:29:33.71ID:8m56Wtsd
GetWindowRectとかはvista以降色々あってdpi上げてると挙動がおかしくなる
挙動をきちんとする方法はぐぐれ
2018/03/16(金) 13:18:40.44ID:iQOXhM1r
>240
セットでマウスカーソル合わせたら?
2018/03/20(火) 16:53:36.96ID:QYLzsgv6
dpi manifestでぐぐるよろし
2018/03/23(金) 22:41:11.83ID:8hwURVKL
https://github.com/katahiromz/EntryPointExamer

エントリーポイントの静的解析ツールを作ったよ。EXEがどのWindowsで起動するかを簡易的にチェックできるよ。
2018/03/28(水) 15:39:07.71ID:e7kV7Arm
https://blogs.msmvps.com/gdicanio/2018/03/27/string-performance-tests-atl-vs-stl/

という事です
2018/03/28(水) 15:47:10.03ID:prHO3Z7S
Short String Optimization (SSO)凄い。最初から標準のstd::stringを使えば良かったんや。
2018/03/28(水) 19:56:58.54ID:RZwUzQ0T
何を今さら
2018/04/01(日) 13:07:18.94ID:PWmnEzsZ
OneDrive というアプリもSTLを使っている。以下の内容のログファイルaria-debug-nnnn.logをTEMPに吐くことから察せられる。

C:\build\aria-cpp-v1\clienttelemetry\src\LogManagerImpl.cpp(626):
class Microsoft::Applications::Telemetry::ILogger *__thiscall Microsoft::Applications::Telemetry::LogManagerImpl::Initialize(
const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const struct Microsoft::Applications::Telemetry::LogConfiguration &)
WARNING: Invalid in-ram queue size (20971520), adjusted to max ram queue size
251デフォルトの名無しさん
垢版 |
2018/04/01(日) 13:14:21.91ID:GlQ4Mmqm
OneDriveってアプリなのか?
2018/04/02(月) 15:35:23.63ID:APYGmZJZ
記事書いたよ。Win32の学習にお使い下さい。

http://katahiromz.web.fc2.com/win32/page01.html
253デフォルトの名無しさん
垢版 |
2018/04/02(月) 15:55:39.87ID:r6uHUG7/
用語の出し方がめちゃくちゃ
誰を読み手のターゲットにしてるのか
2018/04/02(月) 15:59:46.30ID:7bVJtASd
https://msdn.microsoft.com/ja-jp/library/d1587c1h.aspx
ウィンドウズでは exe,dllは共に実行可能ファイル
2018/04/02(月) 23:25:31.45ID:Oln58DHN
せめてメッセージクラッカーとリソースエディタのページ背景統一したら?
2018/04/03(火) 13:42:26.76ID:hocIISHS
.NET FrameworkにあるDataGridViewのような物って、Win32にありますか?
2018/04/03(火) 13:56:57.67ID:R6gDm2yr
ListViewかなー
2018/04/05(木) 13:44:33.19ID:hda/dUZf
_tmainで始まるコンソールアプリで、ウインドウプロシージャを使う方法はありますでしょうか
WM_TIMERを使いたいのですが・・
2018/04/05(木) 13:47:50.84ID:7o7fJyTF
>>258
Sleepでミリ秒待つ。
2018/04/05(木) 14:01:34.32ID:hda/dUZf
>>259
やっぱりコンソールだとそのやり方になるんですか・・・
Sleepでやりますありがとうございます
2018/04/05(木) 14:11:50.90ID:cRNyIYvE
タイマースレッドからWM_TIMER相当のをバンバン投げりゃいいな
2018/04/05(木) 14:21:45.59ID:N5yR+hE9
ウインドウ作れば・・・
2018/04/05(木) 14:32:45.47ID:71zQ6xbb
デジャヴかと思った
https://social.msdn.microsoft.com/Forums/vstudio/en-US/96639123-b543-4ca3-b8ca-0cbbde4621f1/timer-s-in-win32-console-application?forum=vclanguage
2018/04/05(木) 19:58:46.14ID:Oqjfw3cg
>>258
HWND_MESSAGEでぐぐればよろし
2018/04/06(金) 01:02:24.51ID:TZTB2D9P
コンソールアプリなら、プロシージャを使わずに
マルチメディアタイマー周期を設定してコールバックからイベントを送って
メインループ側は WaitForSingleObject で待ったりすることが多い
昔からゲームアプリでよく使われてる
2018/04/06(金) 08:40:18.45ID:WLNY2IeJ
ありがとうございます。
HWND_MESSAGEとWaitForSingleObject、ちょっと試してみます。
2018/04/06(金) 17:56:05.76ID:AEfKVJYt
次の質問はスレッドかな
2018/04/08(日) 06:34:16.89ID:NQAA1W7E
CPUの周波数と温度を取得する方法を教えていただけないでしょうか
CPU使用率(%)については、下記サイトのようにpdh.hを使う方法で取得できました
http://home.a00.itscom.net/hatada/windows/tips/performance02.html
2018/04/08(日) 06:57:09.27ID:ISGzNLI0
WMI
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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