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/
0215デフォルトの名無しさん垢版2018/02/23(金) 15:46:28.17ID:0tA6Y4q1
wsh 使って Environ("Volatile") とかの環境変数書き換えたあと
WM_SETTINGCHANGE 呼べば親プロセスの環境変数書き換え出来ますか?
0216デフォルトの名無しさん垢版2018/02/23(金) 16:12:30.32ID:YZ7AwSGF
別プロセスならできないだろ
やるならレジストリいじってだろうが、変更適用されるかはアプリ次第
0219デフォルトの名無しさん垢版2018/02/24(土) 21:02:04.05ID:fc+Pe6yo
IMEによる日本語入力の際、今時よくある予測変換ウィンドウを自アプリでは
表示しないようにしたいのですが、なにかいい方法はないでしょうか。

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

OSはWindows8.1です。
よろしくお願いします。
0222デフォルトの名無しさん垢版2018/02/25(日) 08:57:28.39ID:FvDCdjOy
MSIMEとGoogleIMEとかで違ったと思う(だからやるならターゲットIMEごとにウインドウ捕まえて消すことになるんじゃないかな)
そういう意味じゃ範疇じゃないな
でも使うのはwin32だから範疇だろ
0225デフォルトの名無しさん垢版2018/02/25(日) 15:11:39.99ID:DMbXpP0c
おまいらキーロガーほんと好きだな
0228219垢版2018/02/25(日) 19:33:33.45ID:WLgWOXVj
今やっていることは、仮想キーボードを使って文字入力する画面があるのですが、
入力中に予測変換候補ウィンドウが仮想キーボードに被ってしまって仮想キーボードの
キーが押せなくなる(もちろん移動すればいいですが)問題の回避を検討しています。

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

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

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

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

解決は近そうなのですが、ご助言お願いいたします。
0230219垢版2018/02/25(日) 19:37:31.33ID:WLgWOXVj
見つけたサイトの短縮URLを貼ると書き込めなかったので、検索ワードを貼ります。
「IMEの変換ウィンドウを表示しないようにする」
(ページタイトルそのまま)
0233219垢版2018/02/25(日) 21:31:20.85ID:WLgWOXVj
>>231
Win32APIです。
0235デフォルトの名無しさん垢版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用フィルターで使ってるみたいでよく分からんぞ
0236デフォルトの名無しさん垢版2018/03/03(土) 10:12:18.29ID:Cp/R2Wou
どうせ変えるんだからサンプルの値が何に使ってたかなんて考える必要ないやん
023741垢版2018/03/08(木) 22:19:16.84ID:SokprYE+
guidそのまま使ったらまずいかな
0239デフォルトの名無しさん垢版2018/03/10(土) 15:29:17.15ID:GkfRicR7
うむ
0240デフォルトの名無しさん垢版2018/03/12(月) 09:17:43.23ID:kVx+PpNX
ある自作DLLの処理の中でGetWindowRectでウィンドウの座標を取得する場面があります。
Pythonから呼び出すと正確な値が取得できるのですが、C++から呼び出すと実際の数値と異なる値が取得されてしまいます。
同じapiを呼び出してるはずなのになぜ違いが出るのでしょうか?
0242デフォルトの名無しさん垢版2018/03/12(月) 16:01:49.08ID:CSgz2Faf
クライアントのハンドルかアプリのハンドルかで間違うケース
右下の座標を幅と高さで間違うケース
0243デフォルトの名無しさん垢版2018/03/13(火) 14:29:33.71ID:8m56Wtsd
GetWindowRectとかはvista以降色々あってdpi上げてると挙動がおかしくなる
挙動をきちんとする方法はぐぐれ
0248片山博文MZ ◆T6xkBnTXz7B0 垢版2018/03/28(水) 15:47:10.03ID:prHO3Z7S
Short String Optimization (SSO)凄い。最初から標準のstd::stringを使えば良かったんや。
0250デフォルトの名無しさん垢版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
0251デフォルトの名無しさん垢版2018/04/01(日) 13:14:21.91ID:GlQ4Mmqm
OneDriveってアプリなのか?
0253デフォルトの名無しさん垢版2018/04/02(月) 15:55:39.87ID:r6uHUG7/
用語の出し方がめちゃくちゃ
誰を読み手のターゲットにしてるのか
0258デフォルトの名無しさん垢版2018/04/05(木) 13:44:33.19ID:hda/dUZf
_tmainで始まるコンソールアプリで、ウインドウプロシージャを使う方法はありますでしょうか
WM_TIMERを使いたいのですが・・
0265デフォルトの名無しさん垢版2018/04/06(金) 01:02:24.51ID:TZTB2D9P
コンソールアプリなら、プロシージャを使わずに
マルチメディアタイマー周期を設定してコールバックからイベントを送って
メインループ側は WaitForSingleObject で待ったりすることが多い
昔からゲームアプリでよく使われてる
0271デフォルトの名無しさん垢版2018/04/08(日) 11:01:23.12ID:YK+KPtHu
wshとかpythonとかでも同じ方法でもっと楽に取れるから
そっちでテストプログラム書いてから逆移植すると楽
0272デフォルトの名無しさん垢版2018/04/08(日) 11:31:10.35ID:ISGzNLI0
その逆移植が面倒な部分だからな
一番簡単なのはスクリプトの結果受け取る方法。でもこういうの嫌がる人多いw
0273デフォルトの名無しさん垢版2018/04/08(日) 11:42:37.54ID:YK+KPtHu
逆移植する前にもうやりたいこと出来たからそこで終わるパターンが最近多い
0274デフォルトの名無しさん垢版2018/04/08(日) 11:55:02.91ID:rGuvDNEz
CPUの温度ってCPU自身が持ってるけど、それにアクセスするには特権が必要で、そのためには署名されたデバイスドライバーが必要。
フリーソフトで温度を取れるのもあるけど、自前でドライバーを用意してるか、MS的にグレーっぽいドライバーを利用してる。
0276デフォルトの名無しさん垢版2018/04/09(月) 08:45:28.69ID:aqcvNYtD
誰かが作ったwmiのツール使って温度見て同じく27.85だったらcpu(ドライバー)が原因
きちんとしてたらおまえが原因
0279デフォルトの名無しさん垢版2018/04/09(月) 09:47:42.76ID:aqcvNYtD
> it's always the same and it's not the CPU temperature at all
ソースコードのコメントがこれなんだから、丸々コピペならそうなるんじゃないか?
だから丸々コピーしても意味ないだろ。原因探せよ・・・
0280デフォルトの名無しさん垢版2018/04/09(月) 12:21:58.67ID:4rymfX2t
WMIでは無理なんですね・・
winring0というもののサンプルコードをいじってみたところ取得できたので、こちらを移植する方法でやってみます
ありがとうございました
0283デフォルトの名無しさん垢版2018/04/09(月) 14:54:53.98ID:GdkyYm9A
27.85℃=301K
0284デフォルトの名無しさん垢版2018/04/09(月) 22:58:31.99ID:ph8eLpPP
Windows10になって増えたWin32APIとか調べたい場合どうするのが確実?
ネットで調べるとXP以前の例ばかり
0285デフォルトの名無しさん垢版2018/04/10(火) 02:38:53.85ID:M1sGJjGL
>>284
ググってみると SDK のヘッダの変化を見てチェックしてる人いるな

https://naughter.wordpress.com/2015/05/15/changes-in-the-windows-10-sdk-compared-to-windows-8-1-part-one/

https://naughter.wordpress.com/2015/05/24/changes-in-the-windows-10-sdk-compared-to-windows-8-1-part-two/

細かい API 一つ一つの追加とかまでは書かれていないけど参考になるんじゃないだろうか
winerror.h に SQLite のエラーコードが(740行も!)追加されたとか豆知識得られた

この人は最近のSDKについても調べてる
0286デフォルトの名無しさん垢版2018/04/10(火) 02:40:40.00ID:M1sGJjGL
いやWindows10で何が追加されたかを調べたい
という質問じゃなかったのか、もしかすると…
0287デフォルトの名無しさん垢版2018/04/10(火) 13:42:13.82ID:JIHFaEMv
ヘッダ比べるのは現実的な方法
0288デフォルトの名無しさん垢版2018/04/10(火) 16:30:34.70ID:hrbxCJ/r
音声にいろいろなエフェクトをかけてスカイプやdicordなどに流せるようなソフトを作りたいんですけど
仮想デバイスを作るにはどうすればいいんでしょうか

マイク入力をうけとってエフェクトをかけてスピーカーから再生するまではできたんですが
他のアプリに仮想デバイスとしてみせる方法が分からなくて困っています
0289デフォルトの名無しさん垢版2018/04/10(火) 16:45:17.90ID:La3PY+dC
VST かな
0291デフォルトの名無しさん垢版2018/04/10(火) 16:50:37.00ID:hrbxCJ/r
>>289
すばやい返答ありがとうございます

軽く検索みてみたらGUIみたいなのがたくさんでてきます
サンプルコードが一切でてこないですけど
プログラムの中にうめこむライブラリとしてつかえるものなんでしょうか?
0295デフォルトの名無しさん垢版2018/04/11(水) 00:11:41.02ID:5V3NvSPI
そだねーJap
0297デフォルトの名無しさん垢版2018/04/11(水) 16:45:30.30ID:oc5yP9in
自アプリで簡単な手書きメモ機能があるのですが、Win10タブレット端末でペン操作すると
うまく文字が書けません。
短い線が書けない感じです。

恐らくマウス周りのメッセージの代わりに WM_GESTURE 系メッセージが来ていると思うのですが、
真っ当にこれらのメッセージを処理するのではなく、自アプリではこれまで通りマウス処理しかしない
と何らかの方法で設定・宣言することによってペン・タッチ操作関連のメッセージを来なくすることは
可能でしょうか?

OSレベルで全体的にこの機能をOFFにすることは可能なようですが、自アプリだけこれを適用できれば
と思っています。
よろしくお願いします。
0300デフォルトの名無しさん垢版2018/04/11(水) 21:31:47.99ID:4xNEGOrU
ほかに .Net だとメッセージフィルターでWM_POINTERDOWN / UP を無視するなんてやり方を紹介している人も多い
0301デフォルトの名無しさん垢版2018/04/11(水) 23:34:57.38ID:HwL4BRgS
フルボッコすぎる
0303297垢版2018/04/12(木) 17:22:14.25ID:1t6GyJnt
一応分かりやすく画像で状況を補足します。
http://imgur.com/pvaetNV.png

ペンでタッチ(押下)したときに、画像左側の◎印が出ます。
この◎印の中でぐりぐり動かしても何も描画できません。
(既存処理のWM_LBUTTONDOWN〜WM_MOUSEMOVEの流れでの描画処理が実行されない)

この◎印からはみ出すようにペンを動かした瞬間、描画処理が働き出し、◎印が薄くなっていき消えます。
やりたいことは、◎印内でも描画させたいです。
現状では点などが描けませんので、例えば「う」だと上の部分が描きにくくて「つ」と描いてしまうことが多いです。

>>298
>>300
WM_POINTERDOWN / UP を含む、その他思い付く関連メッセージを無視するように試してみましたが、
ペン入力自体ができなくなりました。

>>299
WM_TABLET_QUERYSYSTEMGESTURESTATUS で色々disableも試してみましたが、
TABLET_DISABLE_PRESSANDHOLD を返した時に◎印の表示はなくなりました。
しかし、描画に関しては変化無くその領域に相当する部分からはみ出ないと描画できません。

WM_POINTERDOWN 等のメッセージが来たら WM_LBUTTONDOWN を投げる等試してみましたが
状況が変わりません。

WM_TOUCH 系の処理を追加すれば対処はもちろん可能でしょうが、簡単に既存処理を生かせる方法が
ないものか、情報をお持ちの方よろしくお願いします。
0305デフォルトの名無しさん垢版2018/04/12(木) 18:22:16.36ID:nMaemNOx
いやゼスチャの判定が優先されるから少し動かさないと WM_LBUTTONDOWN とかが来ないんだよ
それを簡単にマウスの時と同様すぐメッセージが来る動作にできないか、という話

ゼスチャ無効化してもダメとは面倒な話だよね
0306片山博文MZ ◆T6xkBnTXz7B0 垢版2018/04/12(木) 19:12:40.30ID:S0A11kDt
今日の収穫は、OLEオートメーションがめちゃややこしいことがわかっただけだ。
0307片山博文MZ ◆T6xkBnTXz7B0 垢版2018/04/12(木) 19:15:03.07ID:S0A11kDt
言語でネイティブにサポートされたヴァリアント型があればもっと簡単なんだが。
030841垢版2018/04/12(木) 19:19:31.30ID:gePCm00Z
そもそもマウスとジェスチャー分ける必要あったんかいな
軌跡はないが矛盾はしないだろうに
0309名無し@キムチ垢版2018/04/12(木) 19:35:21.15ID:jXGrykA6
コンソールのmain関数のコマンドライン引数argv、argcを引数にとる関数があるのですが、
これはwinmain関数内でも使えますか?
その場合argv、argcの代わりにcommandshowとcommandlineを引数にする必要があるとおもうのですが、
どのようにすればエラーが出ずにargv、argcをcommandshowとcommandlineに変換できますか?
よろしくお願いいたします。
0311名無し@キムチ垢版2018/04/12(木) 19:45:08.29ID:jXGrykA6
>>310
ありがとうございます。
早速それでやってみます。
0312デフォルトの名無しさん垢版2018/04/12(木) 19:45:11.97ID:ifFSa3KQ
>>309
なんかどっちに変換したいのかよくわからんが
__argv、__argc、GetCommandLineW、CommandLineToArgWあたりで調べてよきにはからへ
0313デフォルトの名無しさん垢版2018/04/12(木) 20:12:39.23ID:ofGuXLCP
>>303
そんな古臭いメッセージ処理せずに、下記のメッセージで処理したら?
WM_POINTERDOWN: WM_POINTERUPDATE: WM_POINTERUP:
win8以降しか対応してないけどな。xp/vista/7とかでタッチパネルの処理は切り捨て推奨
0314デフォルトの名無しさん垢版2018/04/12(木) 21:38:47.94ID:Cv0USnCZ
旧来のアプリなんかタッチやフリックに対応してるわけないのに、そんなアプリに対してそれらのメッセージを投げつけて
マウス関連のメッセージを投げないという仕組みがMSらしいというか融通が利かないというか、バカバカしいな。
タッチやフリックを要求するアプリのみにそれらのメッセージ投げるだけでいいのに。

旧来アプリでも旧来アプリなりにペンタッチで動くようにすりゃ、裾野も広がりやすいだろうにな。
■ このスレッドは過去ログ倉庫に格納されています

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