Win32API質問箱 Build126

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB
Win32APIについての質問はこちらへどうぞ。

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

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

■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
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/
2020/06/25(木) 17:48:21.56ID:CRgrEcBh
>>232
iStringへのキャストで変なことしてない?
x64ではポインタ型と32ビット整数には互換性ないよ。
2020/06/25(木) 17:58:29.57ID:JNgE9Uo5
普通はTTN_GETDISPINFOかTTN_NEEDTEXTを処理するんじゃないの?
知らんけど
235232
垢版 |
2020/06/25(木) 18:12:29.19ID:lHQabM2A
>>233
iString は INT_PTR なので x64 だと64ビット長で互換はあるかと思います。
キャストは reinterpret_cast<INT_PTR>を使ってます。

>>234
ネットにあるいくつかの解説だとその通りなのですが
x86だと TBSTYLE_TOOLTIPS を指定したらそれだけで上手く行ったので
それでやってました
236232
垢版 |
2020/06/25(木) 19:13:37.19ID:lHQabM2A
>>232 の件もう少ししらべてみたら間違いがあって
TB_ADDSTRING メッセージで事前に文字列を追加で
iString にインデックスを指定するやり方でも x64での
TB_GETBUTTONTEXT で文字列は取得できませんでした。
要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです
2020/06/25(木) 19:16:36.51ID:CRgrEcBh
>>236
ソースさらせなほい
2020/06/25(木) 20:32:52.64ID:N8mY4JDD
アプリハンガリアンまで有害に見えてくる
システムハンガリアンの害毒は計り知れない
239232
垢版 |
2020/06/25(木) 21:53:36.69ID:FUxf81lS
現象を引き起こすコードを書いたファイルをアップしてみました。
x86のコンパイラとx64のコンパイラだと
メッセージボックスに出てくる文字列が異なるのと
ツールバーにマウスポインタを置いた時のツールチップの出る出ないの違いがあるかと思います。
https://dotup.org/uploda/dotup.org2184156.cpp.html
2020/06/25(木) 22:45:30.56ID:zEm5yq4t
>>239
SendMessage( hwndToolbar, TB_BUTTONSTRUCTSIZE, 20, 0 );
マジックナンバー使うなよ。間違いのもとだよ。
2020/06/25(木) 22:50:46.91ID:CRgrEcBh
この場合はsizeof(TBBUTTON)を渡すことになる。
2020/06/26(金) 09:28:06.84ID:jxJIoxQ+
> メッセージボックスに出てくる文字列が異なるのと

x86がANSIでx64がUnicodeビルドになってたりしないか?
243デフォルトの名無しさん
垢版 |
2020/06/26(金) 14:02:58.76ID:PjbtVFt+
>>242
+1
2020/07/10(金) 22:47:33.40ID:c4ANmjzx
たとえば、編集不要なアセンブルリストを表示して、デバッガでステップ実行するようにボタンをクリックして現在行を反転させながら表示したいとしたら、もちろんループやジャンプもあるのですが、どのコントロールを使用しますか?
行数は10,000位にはなります
自分でクライアント領域に書きますか?
2020/07/10(金) 23:01:52.84ID:JuXuxxAz
Listviewやな
2020/07/11(土) 00:34:30.72ID:lUabZX1b
自力
2020/07/11(土) 22:57:09.12ID:wT5X8b6q
>>245
ありがとうございます
ListView について調べてみます
248デフォルトの名無しさん
垢版 |
2020/07/25(土) 14:18:05.35ID:JLD5gc9b
ドライブ文字を変更したら、PdhAddCounterでLogicalDisikの
パフォーマンスオブジェクトを追加できなくなりました。エラーが返ってくる。
再起動してドライブ文字元に戻しましたがやはりダメです。
typeperf -qを実行してオブジェクトの一覧見てもLogicalDiskの項目がないです。
また取得できるようにするにはどうしたらいいでしょうか?
249248
垢版 |
2020/07/25(土) 14:48:11.84ID:JLD5gc9b
自己解決しました〜!
コマンドプロンプトからlodctr /rを実行すると
パフォーマンスオブジェクトを再構築出来てそれで大丈夫でした!
お騒がせしました。
250デフォルトの名無しさん
垢版 |
2020/07/25(土) 15:57:59.66ID:rATOgXd/
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

☆ VMを書いた(C# + DirectX) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
2020/08/02(日) 15:26:17.74ID:qndZYaFt
winrt api は win32 api の上位互換という認識は間違いでさか?
2020/08/02(日) 16:28:19.35ID:hIQzyyzC
多言語からの呼び出しに対応するためにメタデータに拡張の入ったCOMとでも思っておけばいいよ
APIによってはデスクトップから呼べなかったりするのもあるけど
Win32APIかどうかを議論する意味はない
2020/08/03(月) 13:09:24.86ID:WkT+/Qz/
おまいらGetLastErrorの戻りやHRESULTからstd::system_errorを投げるのに何使ってる?
254デフォルトの名無しさん
垢版 |
2020/08/03(月) 13:41:03.78ID:3aFKjSal
関数を使います
255デフォルトの名無しさん
垢版 |
2020/08/03(月) 22:17:32.43ID:uGqrBkR1
糞翻訳はポイーで
2020/08/17(月) 20:20:13.97ID:lNHX7Tck
https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample
ここのサンプルを使ってwebカメラのキャプチャをしているのですが、
サンプルを実行すると勝手にオートフォーカスになります。
Media foundationを使ってマニュアルフォーカスにしたいのですが、
やり方が分かる方はいらっしゃいますでしょうか。
257デフォルトの名無しさん
垢版 |
2020/08/20(木) 16:41:05.34ID:TZFigD9E
IMEで確定前の入力をキャンセルされるにはどうすればよいでしょうか?
2020/08/20(木) 16:59:37.88ID:Pc2bs548
ESCキーを押します
259257
垢版 |
2020/08/20(木) 17:04:27.56ID:TZFigD9E
>>257
自己解決しました

>>258
'ESCキーを押します' 関数は無かったですね。
2020/08/20(木) 18:48:58.39ID:fEN4Cxbc
キーを押す関数はあるぞ
2020/08/20(木) 19:12:03.14ID:guZMM3wq
keybd_event
SendInput
2020/08/21(金) 01:55:16.52ID:SPVvFNrm
画面右下に IMEのON/OFF状態が表示されていますが、これをプログラムで
取得する方法はありますでしょうか?
2020/08/21(金) 01:58:58.71ID:SPVvFNrm
>>262
大事な点として、自分のアプリでの状態ではなく、システム全体での状態が取得
したいということがあります。
2020/08/21(金) 10:04:56.98ID:XusJMwC4
>>263
メモ帳開く(A)
→半角状態にする
→もう一つメモ帳を開く(B)
→全角状態にする

Aがアクティブになると半角に
Bがアクティブになると全角に
後はわかるな?
2020/08/21(金) 10:10:54.09ID:SPVvFNrm
>>264
それは、現在アクティブな(フォーカスを持っている)アプリに依存すると言うことですが、
タスクバーの右下には、ON/OFFが出ているので、システムは現在、どちらの状態
かを分かっているわけです。
その状態を知る方法が知りたいです。
2020/08/21(金) 10:27:29.32ID:XusJMwC4
自分のアプリがアクティブじゃない時でも状態をリアルタイムで知りたいって事?
もしそうならフック
267デフォルトの名無しさん
垢版 |
2020/08/21(金) 11:14:24.59ID:6zccVHNz
そもそもIMEの設定でアプリ毎に切り替えるかシステム全体で切り替えるかを選ぶから
そっちも観ておかないと判断出来ない
268デフォルトの名無しさん
垢版 |
2020/08/21(金) 14:02:23.66ID:oq5BC8ZW
いや、キーボードはひとつなんだから難しく考えるなよ
2020/08/21(金) 16:28:33.73ID:hY6Ml5La
>>268
IMEをON/OFFするキーバインドは、複数種あることと、カスタマイズすれば、
変更することも出来るので、単に全角/半角キーが押された回数をトラッキング
していけば済むわけではないと思います。
ALT+全角キーだけで反応する流儀と、ALTを押さずに、全角キーだけ押して
反応する流儀もありますし。
270デフォルトの名無しさん
垢版 |
2020/08/21(金) 16:36:18.53ID:2LaXNW9i
https://qiita.com/kob58im/items/a1644b36366f4d094a2c
https://teratail.com/questions/137570
http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/7.html
2020/08/21(金) 17:34:52.11ID:Ci3Fu54P
ImmGetOpenStatus

まあ>267の言うとおりの問題はあるので、Windows全般でどうなっているのかという
判断が必要ならば仕様の見直しが必要
2020/08/21(金) 22:17:44.89ID:0m1+vyON
IMM32を実装できる方はReactOSを助けて下さい。
2020/08/22(土) 12:46:26.84ID:oUSNiZjo
>>266
やはり、フックですか。
実は、この件でのフックでの実験は既にやってみて、成功したことがあります。
ただし、フックは、32BITと64BITで DLL を分ける必要があるため、
実験したのは、32BITのみでした。
64BITにも対応しなくてはならないので、手間がかかるので中断してます。
2020/08/22(土) 15:55:52.64ID:hVxrtALE
>>262
GetDC(null)で画面全体のdevice contextを取得
bitblt()で画面イメージをメモリーDCに取得
>画面右下に IMEのON/OFF状態が表示
の部分を画像比較でON/OFF状態を判定
2020/08/22(土) 16:16:49.59ID:uVP5D41B
それはwindows2000までじゃね?
2020/08/23(日) 11:19:55.27ID:a/7Z84eB
>>273
キーボードフックならdll作らんでもいいぞ
2020/08/23(日) 12:54:28.26ID:SVuEjc7r
>>276
そうでしたか?
フックを始めるための API 関数名やフラグ定数名やモードなどを教えていただければ幸いです。
2020/08/23(日) 13:49:04.77ID:t0NmBsz5
そんなものはない
279デフォルトの名無しさん
垢版 |
2020/08/23(日) 14:07:51.37ID:Exm+Pt+Z
32bit用に描いたフックを64bit用に描き治すのってそんなに大変?
2020/08/23(日) 14:24:31.89ID:SVuEjc7r
>>279
普段使っている処理系が古くて、64BITに対応の処理系は、今まで使っていませんでしたので。
2020/08/23(日) 15:50:19.81ID:a/7Z84eB
普通にsetwindowshookexでできるぞ

wmwareアクティブだとマウスとキーボードフック全部効かなくなるけどなんとかならないのかな
2020/08/23(日) 15:53:59.01ID:a/7Z84eB
キーボードとマウスのフックでモジュールのハンドルとスレッドid0だとdllいらない
ほかは駄目なのあるけど
あと64bitで作っておけば32bitのフックもわざわざしなくていい
2020/08/23(日) 16:00:25.99ID:SVuEjc7r
>>282
>あと64bitで作っておけば32bitのフックもわざわざしなくていい
これはもしかすると、32BITアプリの場合、64BITのDLLのフック関数を OS
が呼び出してくれると言うことでしょうか?
2020/08/23(日) 18:50:47.56ID:t0NmBsz5
32bitで実験やったんなら移植もすぐだからやってみればいい
dll使わずにする場合も専用APIとか無いし
2020/08/24(月) 10:55:52.42ID:IztyfRL4
>>272
成功して欲しいOSだけど、日本語入力で行き詰まってるんなら先は長そうだね

>>274
表示位置で取得ってタスクバーの位置が変動するから無理があるのでは
デザインが少し変わっただけでも死ぬ

>>277
IMEのON/OFFのキーバインドなんて環境で様々なんだからキーボードフックなんかじゃ実現無理なの分かれよ
アプリ側でもプログラム的にON/OFFするのに
そもそもアプリ問わずIMEの状態を取得する意味あるのか?何したいんだよ
2020/08/30(日) 07:55:13.94ID:yNtthsj4
意味があるかどうかは外野がとやかく言うことではない
2020/08/30(日) 10:06:50.95ID:/cTt0XEP
意味の有無を聞いてるとしか読み取れないのはどうかと思う
2020/08/30(日) 14:59:21.03ID:XN33z1n0
素直に質問に答えりゃ良いんだよ
質問自体を疑問に思う必要などない
289デフォルトの名無しさん
垢版 |
2020/08/30(日) 15:09:45.20ID:GgAZZaQa
質問が間違ってるから答える気にもならないことはある
2020/08/30(日) 16:53:37.52ID:ClA8nGT1
どうせ32bitでなら実験したってのが嘘で試しようがないんでしょ
2020/08/30(日) 17:33:56.68ID:BjChy3oe
その実験は、凄く上手く行きました、と言っておきます。
2020/08/30(日) 17:36:51.12ID:IbTRMPI+
IMEのON/OFFはマウスやアプリでも出来るからな
そっちの対応はどうするんだろ
2020/08/30(日) 19:00:20.18ID:ClA8nGT1
皆キーボードフックしか言ってないけど
IMN_SETCONVERSIONMODE捕まえればいいやん
それもやったってんなら64bit対応するだけやん
2020/08/31(月) 20:27:32.61ID:YgYq5nQZ
ONはともかくIME入力中だとOFFしても入力中のIMEのうにょうにょが消えないのだが
2020/08/31(月) 21:02:36.79ID:fGHCeYBV
ONだと普通の数字は全角なのに
テンキーだと半角
ちゃんと分岐してるならテンキーのうにょうにょも無しにしたらいいのに
2020/09/07(月) 07:46:03.38ID:h3kjQIhT
おまいらGetCommandLineが返した文字列からコマンド名だけ除いた部分て、どうやって得てる?
2020/09/07(月) 08:31:55.79ID:Ml9CONKv
CommandLineToArgv
2020/09/07(月) 08:32:44.96ID:Y2TEo/a2
CommandLineToArgvW
2020/09/07(月) 08:39:11.94ID:h3kjQIhT
やっぱり自前でコマンド名だけ取り除くしかないのかな
空白や引用符に特別な意味を持たせたくないんだけど
2020/09/07(月) 09:33:01.54ID:DSNLMJBI
before afterはどんなの?
301デフォルトの名無しさん
垢版 |
2020/09/07(月) 10:21:46.55ID:Egt+Qwmp
結果にコミットする気が無い回答者たち
2020/09/07(月) 10:56:37.10ID:9HEBPbyG
おセックスしたいです
2020/09/07(月) 13:52:28.70ID:X4wk0IcB
MFCならCCommandLineInfoなんだがな。
304デフォルトの名無しさん
垢版 |
2020/09/07(月) 14:10:25.67ID:MtDNWdkb
CreateProcess見るといろいろな指定の仕方ができそうで不安になるよね
2020/09/07(月) 14:32:13.03ID:ibXVM4v9
>>296
そんなの使わずにWinMainの3rdパラメータ使う
2020/09/07(月) 15:26:51.28ID:DSNLMJBI
/a //b /c:"text"
この場合b無視すんの?
2020/09/07(月) 18:53:34.42ID:XlcRu9mb
>>303
CWinApp::ParseCommandLine()は__argcと__argvを見ているだけだけどな
308デフォルトの名無しさん
垢版 |
2020/09/08(火) 01:38:27.47ID:BXhGoa38
質問なんですがWindowsのカレントディレクトリって
アプリ毎に持ってるものなんでしょうか?
それとも全アプリ共通なのでしょうか?
2020/09/08(火) 01:41:38.73ID:NIyJzstU
>>308
スレッドごとに違うよ。
2020/09/08(火) 01:54:21.79ID:BXhGoa38
>>309
スレッド毎に違うんですね!ありがとうございました。安心しました。
311デフォルトの名無しさん
垢版 |
2020/09/08(火) 11:55:58.97ID:POT3YWIT
プロセスごとだろ
嘘つくなよ
2020/09/08(火) 12:00:43.95ID:VotMLAWA
この板には嘘つき朝鮮人しかいない
2020/09/08(火) 13:00:32.46ID:HYZN+BkE
>>312
自分がそうだからといって他人もそうだと思うのはよくないな
2020/09/08(火) 13:23:24.69ID:5CeoL0rA
MSDN によれば、正しいのはプロセス毎。スレッド毎ではない。

*SetCurrentDirectory

The SetCurrentDirectory function changes the current directory for the current process.

BOOL SetCurrentDirectory(
LPCTSTR lpPathName // new directory name
);

*Remarks

Each process has a single current directory made up of two parts:

・・・
2020/09/08(火) 13:29:57.92ID:oUJlYCUI
ということは、同一プロセス内の別スレッドでSetCurrentDirectoryが発行されると
自スレッドのカレントがいつの間にか変わっているということが起きるのか
2020/09/08(火) 13:50:32.04ID:JNlu12o+
カレントディレクトリの取得なんて、グローバル変数から情報を取ってくるようなもんなので危険ってことだ
そんなもん使うな
2020/09/08(火) 14:09:32.72ID:5CeoL0rA
>>315
もちろんそういうこと。
というより、カレントディレクトリも、広い意味で「UI」に関係したものと
考えられなくもないので、必ず Mainスレッドから取得するようにすれば、
安全と言える。絶対そうしなくてはならないわけではないが。
Window作製、グラフィック描画、マウス、キーボードからの入力なども、
Mainスレッドで行うのが原則。
これも絶対そうでなくてはならないというわけではないかも知れないが、
敢えて Subスレッドでやる意味も余り無い事が多く、Mainスレッドに限定
すれば、さまざまな危険回避のための余計なことを考えなくて済むメリットがある。
2020/09/08(火) 14:13:07.26ID:5CeoL0rA
>>317
補足すれば、カレントディレクトリは、MS-DOS時代では、command.com
が管理していたもので、アプリごとに異なるわけではなかったはず。
というのは、カレントディレクトリを便利に変更できるツールを作りたい
場合などに、アプリローカルであれば、不便だったからだと思う。
その設計哲学や文化や習慣が、Windowsにも受け継がれる必要は有ったと思う。
Unixの環境変数なども、アプリローカルになっていたりするが、意外と不便な
事も多い。
2020/09/08(火) 14:55:05.93ID:2rsMzWV+
何を根拠に長文をw
INT21 AH=3B の説明を読み直し要
2020/09/08(火) 18:38:57.08ID:HYNPtfS+
>>315
>自スレッドのカレントがいつの間にか変わっている
自分で管理できないスレッドなんてあるのか?
その別スレッドだって自分で作ったものだろ?
DLLとか自分で管理していないものもあるけどそれはスレッド関係ないわけだし
2020/09/08(火) 18:48:41.38ID:FLHP/hAu
DCE-RPCは電文受信すると勝手に
処理スレッドたててくれるよ
2020/09/08(火) 19:34:11.85ID:oUJlYCUI
>>320
別スレッドにするってことは自スレッドとの間にタイミングの束縛がない処理を任せるってことだよな
カレントディレクトリの変更がプロセス内の他のスレッドにも伝搬するということは
それはタイミングの束縛が生じうるってことだろ
つまり、それが困るなら別スレッドにしてはならない処理内容ってことで
そこの判断こそが「自分で管理」ということだ
2020/09/08(火) 19:36:02.20ID:HYNPtfS+
ちょっと何言っているのかわからない
2020/09/08(火) 19:41:07.94ID:oUJlYCUI
そうかい、それは残念だね
2020/09/08(火) 22:47:13.26ID:txiCBqFi
スレッドがお互いを信用できないとか、そんな羅生門みたいなプログラムは嫌だなぁ。
2020/09/08(火) 23:06:57.38ID:bOnMHAua
マジで地獄の召還かもな
2020/09/09(水) 00:11:58.92ID:VoppH/up
指定フォルダ以下のファイルをすべて処理するプログラムで
サブフォルダごとにスレッドを起動してみよう
328デフォルトの名無しさん
垢版 |
2020/09/09(水) 09:51:28.66ID:9MEEjZyT
フォルダ間移動ですね判ります
2020/09/09(水) 11:03:42.50ID:w9YsWEn5
そんなバッチファイルみたいなアルゴリズムでカレントディレクトリ移動しながらマルチスレッドをやるとかがそもそも迂闊だよな。
2020/09/10(木) 08:55:55.87ID:YCiClA3r
>>329
マルチスレッドじゃなくてマルチプロセスなら作業ディレクトリは完全に分離できる。
せっかくマルチタスクOSを使っているのだから、別プロセスに丸投げするのが最適だよ。
2020/09/10(木) 08:57:16.11ID:YCiClA3r
タスクマネージャー開けばわかるけど、今時のWebブラウザ(具体的にはEdgeやFirefox等)はたくさんの子プロセスを動かしている。
2020/09/10(木) 13:46:51.31ID:+JaTYUbA
話の流れを読めない奴は黙ってりゃいいのに…
2020/09/20(日) 07:50:00.62ID:sAMwu2sI
sse2までが必須になったのはいつだったか覚えませんか
win-7の途中くらい?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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