Win32API質問箱 Build124
■ このスレッドは過去ログ倉庫に格納されています
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/ wsh 使って Environ("Volatile") とかの環境変数書き換えたあと
WM_SETTINGCHANGE 呼べば親プロセスの環境変数書き換え出来ますか? 別プロセスならできないだろ
やるならレジストリいじってだろうが、変更適用されるかはアプリ次第 WM_SETTINGCHANGE は別プロセスには届かないのですね こんなのもありました
http://www.garbagecollect.jp/~usa/d/200803a.html IMEによる日本語入力の際、今時よくある予測変換ウィンドウを自アプリでは
表示しないようにしたいのですが、なにかいい方法はないでしょうか。
ImmSetCandidateWindow()を試してみましたが、どのような値を入れても
通常の変換候補ウィンドウすら制御できず(何も変化無し)でした。
OSはWindows8.1です。
よろしくお願いします。 MSIMEとGoogleIMEとかで違ったと思う(だからやるならターゲットIMEごとにウインドウ捕まえて消すことになるんじゃないかな)
そういう意味じゃ範疇じゃないな
でも使うのはwin32だから範疇だろ IMM系列はWin32APIだろ
小学生は黙ってろよ 今やっていることは、仮想キーボードを使って文字入力する画面があるのですが、
入力中に予測変換候補ウィンドウが仮想キーボードに被ってしまって仮想キーボードの
キーが押せなくなる(もちろん移動すればいいですが)問題の回避を検討しています。
文字入力中に EnumWindow()等を使って調べてみましたが、関係しそうなのは
クラス名 CiceroUIWndFrame, MSCTFIME Composition, mscandui40.* あたりで、
mscandui40.candidate を DestroyWindow()すれば予測変換・変換候補ウィンドウともに
非表示にはできました。
しかし mscandui40.candidate は MS-IME 使用時のみしか捕まえられませんし、
MS-IME のバージョンでクラス名が変わってしまう可能性もあるのでやり方を変えました。
というか、正攻法では Imm系の処理で行けそうです。 WM_IME_NOTIFY メッセージで IMN_OPENCANDIDATE を処理すれば何とかなりそうではあります。
ググってC#のサンプルは見つけましたが、それは上記のメッセージを捕まえてその後処理せずに
(ように見える)いるだけみたいです。
しかし、こちらはC/C++なのでそのメッセージを捕まえて、処理せずリターンしている
(CallWindowProc()を処理しない)ものの変換候補ウィンドウが表示されてしまいます。
解決は近そうなのですが、ご助言お願いいたします。 見つけたサイトの短縮URLを貼ると書き込めなかったので、検索ワードを貼ります。
「IMEの変換ウィンドウを表示しないようにする」
(ページタイトルそのまま) >>229
だからWin32APIじゃないってのに 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用フィルターで使ってるみたいでよく分からんぞ どうせ変えるんだからサンプルの値が何に使ってたかなんて考える必要ないやん ある自作DLLの処理の中でGetWindowRectでウィンドウの座標を取得する場面があります。
Pythonから呼び出すと正確な値が取得できるのですが、C++から呼び出すと実際の数値と異なる値が取得されてしまいます。
同じapiを呼び出してるはずなのになぜ違いが出るのでしょうか? クイズすんなっての
全然違うとこでバグってんだろどうせ クライアントのハンドルかアプリのハンドルかで間違うケース
右下の座標を幅と高さで間違うケース GetWindowRectとかはvista以降色々あってdpi上げてると挙動がおかしくなる
挙動をきちんとする方法はぐぐれ https://github.com/katahiromz/EntryPointExamer
エントリーポイントの静的解析ツールを作ったよ。EXEがどのWindowsで起動するかを簡易的にチェックできるよ。 Short String Optimization (SSO)凄い。最初から標準のstd::stringを使えば良かったんや。 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 用語の出し方がめちゃくちゃ
誰を読み手のターゲットにしてるのか せめてメッセージクラッカーとリソースエディタのページ背景統一したら? .NET FrameworkにあるDataGridViewのような物って、Win32にありますか? _tmainで始まるコンソールアプリで、ウインドウプロシージャを使う方法はありますでしょうか
WM_TIMERを使いたいのですが・・ >>259
やっぱりコンソールだとそのやり方になるんですか・・・
Sleepでやりますありがとうございます タイマースレッドからWM_TIMER相当のをバンバン投げりゃいいな >>258
HWND_MESSAGEでぐぐればよろし コンソールアプリなら、プロシージャを使わずに
マルチメディアタイマー周期を設定してコールバックからイベントを送って
メインループ側は WaitForSingleObject で待ったりすることが多い
昔からゲームアプリでよく使われてる ありがとうございます。
HWND_MESSAGEとWaitForSingleObject、ちょっと試してみます。 CPUの周波数と温度を取得する方法を教えていただけないでしょうか
CPU使用率(%)については、下記サイトのようにpdh.hを使う方法で取得できました
http://home.a00.itscom.net/hatada/windows/tips/performance02.html >>269
こちらを参考にオペレーションシステムの名前取得まではできました
もう少しいじればできそうなので頑張ってみます。ありがとうございます
https://msdn.microsoft.com/en-us/library/aa390423.aspx wshとかpythonとかでも同じ方法でもっと楽に取れるから
そっちでテストプログラム書いてから逆移植すると楽 その逆移植が面倒な部分だからな
一番簡単なのはスクリプトの結果受け取る方法。でもこういうの嫌がる人多いw 逆移植する前にもうやりたいこと出来たからそこで終わるパターンが最近多い CPUの温度ってCPU自身が持ってるけど、それにアクセスするには特権が必要で、そのためには署名されたデバイスドライバーが必要。
フリーソフトで温度を取れるのもあるけど、自前でドライバーを用意してるか、MS的にグレーっぽいドライバーを利用してる。 こちらのサイトを参考に、WMIによる温度取得できました
https://stackoverflow.com/questions/23314886/get-cpu-temperature
しかし、何度アクセスしても27.85℃のままです
試しに水を止めて50℃まで上げてからプログラムを立ち上げてみましたが、27.85℃でした
リアルタイムの温度を取得するのは無理なのでしょうか 誰かが作ったwmiのツール使って温度見て同じく27.85だったらcpu(ドライバー)が原因
きちんとしてたらおまえが原因 一文字も変えずに丸々コピペしてみましたがやはり27.85と表示されます・・ こちらでも同じく temp=27.850000 でした (Visual Studio 2015 Community) > it's always the same and it's not the CPU temperature at all
ソースコードのコメントがこれなんだから、丸々コピペならそうなるんじゃないか?
だから丸々コピーしても意味ないだろ。原因探せよ・・・ WMIでは無理なんですね・・
winring0というもののサンプルコードをいじってみたところ取得できたので、こちらを移植する方法でやってみます
ありがとうございました おまえらがWMIなんて言うから無駄な遠回りしとるやんかわいそうに Windows10になって増えたWin32APIとか調べたい場合どうするのが確実?
ネットで調べるとXP以前の例ばかり いやWindows10で何が追加されたかを調べたい
という質問じゃなかったのか、もしかすると… 音声にいろいろなエフェクトをかけてスカイプやdicordなどに流せるようなソフトを作りたいんですけど
仮想デバイスを作るにはどうすればいいんでしょうか
マイク入力をうけとってエフェクトをかけてスピーカーから再生するまではできたんですが
他のアプリに仮想デバイスとしてみせる方法が分からなくて困っています >>289
すばやい返答ありがとうございます
軽く検索みてみたらGUIみたいなのがたくさんでてきます
サンプルコードが一切でてこないですけど
プログラムの中にうめこむライブラリとしてつかえるものなんでしょうか? >>290
分かりやすいサイトありがとうございます
サンプルコードがあるので読んで見ます 必要なのはVSTじゃなくて仮想デバイスドライバの作成方法なんじゃないのか? vst 経由なら vst skype とかでググればやり方は見つかるし 自アプリで簡単な手書きメモ機能があるのですが、Win10タブレット端末でペン操作すると
うまく文字が書けません。
短い線が書けない感じです。
恐らくマウス周りのメッセージの代わりに WM_GESTURE 系メッセージが来ていると思うのですが、
真っ当にこれらのメッセージを処理するのではなく、自アプリではこれまで通りマウス処理しかしない
と何らかの方法で設定・宣言することによってペン・タッチ操作関連のメッセージを来なくすることは
可能でしょうか?
OSレベルで全体的にこの機能をOFFにすることは可能なようですが、自アプリだけこれを適用できれば
と思っています。
よろしくお願いします。 自アプリだろ?要らないメッセージ無視すりゃいいじゃん >>297
使ったことないけど
WM_TABLET_QUERYSYSTEMGESTURESTATUS
で色々disableしてあげれば良いんじゃないだろうか ほかに .Net だとメッセージフィルターでWM_POINTERDOWN / UP を無視するなんてやり方を紹介している人も多い 一応分かりやすく画像で状況を補足します。
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 系の処理を追加すれば対処はもちろん可能でしょうが、簡単に既存処理を生かせる方法が
ないものか、情報をお持ちの方よろしくお願いします。 いやゼスチャの判定が優先されるから少し動かさないと WM_LBUTTONDOWN とかが来ないんだよ
それを簡単にマウスの時と同様すぐメッセージが来る動作にできないか、という話
ゼスチャ無効化してもダメとは面倒な話だよね 今日の収穫は、OLEオートメーションがめちゃややこしいことがわかっただけだ。 言語でネイティブにサポートされたヴァリアント型があればもっと簡単なんだが。 そもそもマウスとジェスチャー分ける必要あったんかいな
軌跡はないが矛盾はしないだろうに コンソールのmain関数のコマンドライン引数argv、argcを引数にとる関数があるのですが、
これはwinmain関数内でも使えますか?
その場合argv、argcの代わりにcommandshowとcommandlineを引数にする必要があるとおもうのですが、
どのようにすればエラーが出ずにargv、argcをcommandshowとcommandlineに変換できますか?
よろしくお願いいたします。 >>310
ありがとうございます。
早速それでやってみます。 >>309
なんかどっちに変換したいのかよくわからんが
__argv、__argc、GetCommandLineW、CommandLineToArgWあたりで調べてよきにはからへ >>303
そんな古臭いメッセージ処理せずに、下記のメッセージで処理したら?
WM_POINTERDOWN: WM_POINTERUPDATE: WM_POINTERUP:
win8以降しか対応してないけどな。xp/vista/7とかでタッチパネルの処理は切り捨て推奨 旧来のアプリなんかタッチやフリックに対応してるわけないのに、そんなアプリに対してそれらのメッセージを投げつけて
マウス関連のメッセージを投げないという仕組みがMSらしいというか融通が利かないというか、バカバカしいな。
タッチやフリックを要求するアプリのみにそれらのメッセージ投げるだけでいいのに。
旧来アプリでも旧来アプリなりにペンタッチで動くようにすりゃ、裾野も広がりやすいだろうにな。 ■ このスレッドは過去ログ倉庫に格納されています