1 名前:デフォルトの名無しさん [2019/02/27(水) 15:09:08.64 ID:6ExXwgQU.net] Win32APIについての質問はこちらへどうぞ。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。 英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで ■過去スレ Win32API質問箱 Build124 mevius.5ch.net/test/read.cgi/tech/1510395780/ Win32API質問箱 Build123 mevius.2ch.net/test/read.cgi/tech/1475897582/ Win32API質問箱 Build122 echo.2ch.net/test/read.cgi/tech/1451988219/ Win32API質問箱 Build121 echo.2ch.net/test/read.cgi/tech/1438695290/ Win32API質問箱 Build120 echo.2ch.net/test/read.cgi/tech/1428570962/ ■関連スレ Visual Studio 2019 mevius.5ch.net/test/read.cgi/tech/1548765663/ Visual Studio 2017 Part6 mevius.5ch.net/test/read.cgi/tech/1528645068/ 【C++】 DirectX初心者質問スレ Part41 【C】 mevius.5ch.net/test/read.cgi/tech/1521786252/
960 名前:デフォルトの名無しさん mailto:sage [2020/02/25(火) 10:04:04.72 ID:1Gze6tYX.net] WM_DESTROYでやれば
961 名前:デフォルトの名無しさん mailto:sage [2020/02/25(火) 10:28:13.32 ID:Hq3bKq4G.net] >>943 起動されたままWindowsを終了したときは、WM_DESTROYは来ないようです。 WM_QUERYENDSESSIONやWM_ENDSESSIONしか来てませんでした。
962 名前:デフォルトの名無しさん [2020/02/25(火) 13:23:26.90 ID:FzVRg2bh.net] WM_CLOSE とか WM_DESTROY とか自分で呼べば
963 名前:デフォルトの名無しさん mailto:sage [2020/02/25(火) 16:32:29 ID:Hq3bKq4G.net] >>945 WM_QUERYENDSESSIONやWM_ENDSESSIONの中でウィンドウを破棄しても、 そこからCreateProcessは呼べないようです
964 名前:デフォルトの名無しさん [2020/02/25(火) 18:18:41 ID:FzVRg2bh.net] CreateProcessを呼んでからCloseするんやろ
965 名前:デフォルトの名無しさん mailto:sage [2020/02/25(火) 18:21:12 ID:1Gze6tYX.net] WM_DESTROYとか来ないね まあ聞いてる間に自分で組んでたらとっくに終わってる感 キーを読みながらぐるぐるループ回して吐くだけでしょ?
966 名前:デフォルトの名無しさん mailto:sage [2020/02/25(火) 18:46:36 ID:yWXkUq9v.net] WM_ENDSESSIONから戻った後はたとえイベント発火したとしてもkillされる可能あるし
967 名前:デフォルトの名無しさん mailto:sage [2020/02/25(火) 21:59:24.69 ID:B0KlsSQW.net] >>946 別スレッドでWM_ENDSESSION来たらやってみるのは? あとShellExecuteはダメなん?
968 名前:デフォルトの名無しさん mailto:sage [2020/02/26(水) 03:04:08.38 ID:KxcyAhRx.net] typedef struct { WORD idReserved; WORD idType; WORD idCount; } ICONDIR; #pragma pack( push ) #pragma pack( 2 ) typedef struct { BYTE bWidth; BYTE bHeight; BYTE bColorCount; BYTE bReserved; WORD wPlanes; WORD wBitCount; DWORD dwBytesInRes; WORD nID; } GRPICONDIRENTRY; #pragma pack( pop ) で、ICONDIR の後ろに GRPICONDIRENTRY を個数分だけ並べて ico ファイルから引っ張ってきたデータをそれに突っ込んでUpdateResource()してる。 もちろん対応するRT_ICONにイメージは追加してある。 実行時にエラーも出ないし、ResourceHackerなどで見ても、ちゃんと登録されているのだが、エクスプローラーの表示を特大アイコンにしても48x48の中央寄せ表示になってしまうんだ。 マルチプルアイコンを、::UpdateResource()で登録するとき、なにかシングルアイコンと比べて注意することがあるなら教えてください。 参考URLでもOKです(探してみたけれどシングルアイコンのものしか見つからなかった)
969 名前:デフォルトの名無しさん [2020/02/26(水) 11:15:27.85 ID:wiEfavJ1.net] https://docs.microsoft.com/en-us/windows/win32/menurc/about-icons
970 名前:デフォルトの名無しさん [2020/02/26(水) 11:17:27.14 ID:wiEfavJ1.net] https://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c12873/Hacking-Icon-Resources.htm forums.codeguru.com/showthread.php?200836-Using-UpdateResource ()-to-change-the-icon-of-an-EXE-file
971 名前:デフォルトの名無しさん [2020/02/26(水) 19:34:00 ID:dDQscU5G.net] https://jyn.jp/iconfile_how_to_create/
972 名前:デフォルトの名無しさん [2020/02/28(金) 18:42:51 ID:HAMXUqwp.net] https://www.setsuki.com/hsp/ext/ico.htm
973 名前:デフォルトの名無しさん [2020/02/28(金) 18:45:16 ID:HAMXUqwp.net] https://stackoverflow.com/questions/9811076/how-to-add-an-icon-to-an-existing-exe-file-without-an-icon-by-default
974 名前:デフォルトの名無しさん mailto:sage [2020/03/05(Thu) 00:47:31 ID:HyVcGvBE.net] WM_WINDOWPOSCHANGING というメッセージは、lParamにWINDOWPOS構造体のアドレスが渡されてきて、 その中のflagsメンバなどを修正するとZ-Orderの変化を阻止したり出来ます。 それは実験的に確認しました。質問は、この仕組みのことなのですが、 GetMessage()でこのメッセージを受けた後、DispatchMessage()経由で WindorProc() に来ることが前提なのかと言うことです。逆に、 GetMessage()でこのメッセージを受けた後、DispatchMessage()を経由せずに、独自に WindowProc()を呼び出した場合は、WINDOWPOSの中を変えたとしてもWindows Systemは 感知しないのではないかと思うのです。 今までメッセージループ内で定型として漠然と DispatchMessage() を使ってきたのですが、 こんな不思議な仕組みだったのでしょうか。
975 名前:デフォルトの名無しさん mailto:sage [2020/03/05(木) 01:09:07.09 ID:HyVcGvBE.net] >>957 すみません。これは、Postではなく、Sendで送られてくるメッセージのようです。 だから、メッセージループや GetMessage 関数は無関係なんですね、恐らく。
976 名前:デフォルトの名無しさん mailto:sage [2020/03/08(日) 15:08:53.14 ID:nGQiIF3A.net] PeekMessage()のPM_QS_SENDMESSAGEの働きが分かりません。MSDNによれば: 「Process all sent messages.」 「During this call, the system delivers pending messages that were sent to windows owned by the calling thread using the SendMessage, SendMessageCallback, SendMessageTimeout, or SendNotifyMessage function. 」 となっていますが、SendMessage()でpending messagesされているメッセージとはいかなるものなんでしょうか。 この説明だとSendMessage()されたメッセージの内、pending状態にあるものは、PM_QS_SENDMESSAGEを指定したPostMessage()によって取得できることになってしまいますが、どういうことなのか分かりません。
977 名前:デフォルトの名無しさん [2020/03/08(日) 15:33:29.45 ID:Y2NtS7Rm.net] WM_PAINTとかはqueueの中で後回しにされるとかなんとか
978 名前:デフォルトの名無しさん mailto:sage [2020/03/08(日) 16:27:50.94 ID:nGQiIF3A.net] >>960 WM_PAINTは、この文脈では SendMessage() とは直接関係ないようですが。
979 名前:デフォルトの名無しさん mailto:sage [2020/03/08(日) 23:38:12.25 ID:LncuZlt6.net] 別スレッドからsendされたメッセージとそのスレッド自体は待たされてる
980 名前:デフォルトの名無しさん mailto:sage [2020/03/09(月) 16:07:22.80 ID:2N4Go4fT.net] MS謹製の訳 「PeekMessage 関数を呼び出すと、呼び出し側スレッドが所有しているウィンドウへ送信されたメッセージのうち、保留されていたものを取得できます。 SendMessage、SendMessageCallback、SendMessageTimeout、SendNotifyMessage の各関数を使って送信されたメッセージが、これに該当します。」 他スレッドから送られたSendMessageは、PeekMessageを呼び出したときに受け取ることができる。
981 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 12:35:11.18 ID:Fz4ou6bN.net] Windows OSのバイブル『Windows Internals』を日本語解説するプロジェクトが“GitHub”で開始 実際に動作するアプリで高度かつ難解な内容をコードレベルで理解 https://forest.watch.impress.co.jp/docs/serial/yajiuma/1239207.html >高度かつ難解と評される同書も、実際に動作するC++/Win32 APIのコードをみながら読み進めれば理解が深まるかもしれません。
982 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 12:40:22.12 ID:Fz4ou6bN.net] windows-internals-guide / security https://github.com/windows-internals-guide/security
983 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 14:11:52.55 ID:5w+xr38c.net] >>963 ありがとうございます。 ただし、その話は関係は有りそうですが不明瞭なので、もう少し詳細が有ればいいのですが。
984 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 15:57:41 ID:JsRj3KRf.net] >>966 他スレッドからSentされたmessageはPeekMessageで取得するのではありません。 これらのmessageはPeekMessageの内部で処理されます。
985 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 16:18:50.52 ID:6U0G3mdW.net] 他スレッドからのsendはここの図がわかりやすい chokuto.ifdef.jp/urawaza/sendmsg.html (HSP関連の記述は読み飛ばすべし)
986 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 16:39:29 ID:5w+xr38c.net] >>967 すみませんが、その日本語は何をおっしゃっているのか分かりません。
987 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 16:43:57 ID:5w+xr38c.net] >>968 その図の意味は分かりました。 しかし、それだと他スレッドへSendMessage()した場合、 他スレッドがGetMessage()やPeekMessage()を行って、DispatchMessage() などを行わない限りは (他スレッドの)WndProc の実行が始まらないことに なります。 しかし、現実には他スレッドへのSendMessage の場合でも、他スレッドで Get, Peek, Dispatch が全く実行されてなくても、WndProc は 実行されると思います。
988 名前:デフォルトの名無しさん [2020/03/10(火) 18:18:36.62 ID:X+eVfRrs.net] そだね
989 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 18:42:02 ID:5w+xr38c.net] >>970 それか、他スレッドへ SendMessage() した場合、勝手に WndProc() が call されてしまうとプログラムのデータが破壊されてしまう可能性があるので、 必ず Queue に入れてから、メッセージループの GetMessage() と DispatchMessage() を介しての実行になるのかもしれませんね。
990 名前:蟻人間 mailto:sage [2020/03/15(日) 10:32:57.21 ID:C2+jTQYL.net] メッセージキューは思ったよりも複雑な問題だ。 EternalWindowsに詳しい解説がある。 eternalwindows.jp/windevelop/message/message00.html このあたりを読んでみるとよい。
991 名前:デフォルトの名無しさん [2020/03/22(日) 22:07:39.51 ID:Y1m3LOPd.net] ファイル名の半角文字を小文字に統一したいのですが、MoveFile を使っても 大小の違いだけでは同一名と判断されてうまくいきません。 何かスマートな対策がありますでしょうか?
992 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 22:11:21.04 ID:vCMoGjtA.net] アンダーバー付きとかのファイルにリネームしてから本来のファイル名にする
993 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 22:14:24 ID:Y1m3LOPd.net] >>975 一度別のファイル名にしても、元のファイル名を覚えているようでダメでした。
994 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 22:32:40 ID:Y1m3LOPd.net] MoveFile("A.TXT","B.TXT"); getchar(); MoveFile("B.TXT","a.txt"); これなら成功するので(笑)、おそらく時間稼ぎする方法があると思うのですが。
995 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 22:45:46 ID:uAP5d0yV.net] MoveFileExでMOVEFILE_WRITE_THROUGH付ければいいんでね?
996 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 23:07:05 ID:Y1m3LOPd.net] だめでした。
997 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 23:19:56 ID:CUaNxsQr.net] >>974 MoveFile("A.txt","a.txt"); でちゃんと名前変わったんだけど うまく行かないのはコンパイラの最適化とかで無かったことにされているだけじゃないの? それともGetLastError()とかでそういうrたーが出てるの?
998 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 23:20:30 ID:CUaNxsQr.net] そういうrたーが出てるの? → そういうエラーが出てるの?
999 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 23:22:37 ID:vCMoGjtA.net] 中間ファイル名を噛ませなくてもMoveFileでいけるみたいなんだけど 表示上変わっていないだけで、最新の情報に更新したら変わったりしない?
1000 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/03/22(日) 23:23:09 ID:QaK/2gK6.net] 最新の情報に更新
1001 名前:デフォルトの名無しさん mailto:sage [2020/03/22(日) 23:37:48 ID:Y1m3LOPd.net] 俺環かな?と思って、Cドライブ(NTFS)に移すとうまくいきました。 Dドライブ(exFAT/USB)ではうまくいきませんでしたので仕様なんでしょうか。 お騒がせしました。ありがとうございました。
1002 名前:デフォルトの名無しさん [2020/03/22(日) 23:41:29 ID:wzrJAqaa.net] >>977 getcharじゃなくてb.txtの存在を確認汁
1003 名前:デフォルトの名無しさん mailto:sage [2020/03/23(月) 09:36:16.44 ID:3LuOM/hB.net] >>984 FATだとうまくいかないよ
1004 名前:デフォルトの名無しさん mailto:sage [2020/03/23(月) 12:17:49.13 ID:bf1cRh+B.net] >>986 確か、FATは、MS-DOS時代、もともとファイル名に大文字小文字の区別が無かった。 コマンドラインからコマンド名やファイル名を小文字で入力しても、大文字のファイルが検索された。 そして、FATのディスクの中の「ディレクトリ構造」の「エントリ」には、必ず全て大文字に直した ファイル名が記録されていた。 その影響がまだ残っていることがあるようだ。
1005 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 23:04:44 ID:5OY2rQyy.net] フォントの高さの取得方法について質問があります。 現在DCに選択されているフォントの "高さ" を取得して、大学ノートの罫線のようなものを、その高さの 間隔で描画することを考えています。調べてみると GetTextExtentPoint32 というAPIがフォントのサイズを 計算してくれるようなのですが、引数に文字列が要求されます。しかし、罫線と罫線の間にどんな文字列を 描画するかは未定です。現在は適当な1文字だけ指定して高さを求めていますが、その文字よりも高さが 大きい文字が存在する場合、罫線をはみ出してしまうのではないか思います。 特定のフォントの、全ての文字を包含する高さを取得する方法はないのでしょうか。 よろしくお願いします。
1006 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 07:39:00.13 ID:mqwqQyFB.net] LOGFONT で GetObject ?
1007 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 17:35:52.64 ID:9OrS0ii6.net] >>989 ご回答ありがとうございます。 符号の違いはありますが、GetTextExtentPoint32 と同じ値が返ってくるようです。いずれも、指定した文字のサイズにかかわらず一定値が返ってくるようなので問題なさそうです。フォントの高さだけが知りたいので GetObject のほうがシンプルですね。ありがとうございました。
1008 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/04/07(火) 19:03:16 ID:qBIbpTMr.net] https://archive.org/details/NTDocumentation/mode/2up
1009 名前:デフォルトの名無しさん [2020/04/07(火) 19:09:20.97 ID:G5F9VLMp.net] >>991 下部の他のリンクが色々あるね
1010 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 21:15:57 ID:G8jCLL5C.net] excelVBAでシリアル通信をする為にコード例を探してきて使っています。 ポートのファイルハンドラがわからなくなった場合に強制的にポートを閉じることは
1011 名前:可能でしょうか。デバッグリセットかけた際に変数が初期化されてポート操作が出来なくなりました。excelを立ち上げ直すと操作可能になるので何か方法があると思うのですが [] [ここ壊れてます]
1012 名前:デフォルトの名無しさん [2020/05/01(金) 21:58:30.10 ID:ZJ42fMZB.net] 立ち上げ直しで解放されるのはプロセスが終了するからでは?
1013 名前:デフォルトの名無しさん [2020/05/01(金) 22:17:30.19 ID:ZJ42fMZB.net] Win32API質問箱 Build126 https://mevius.5ch.net/test/read.cgi/tech/1588339011/
1014 名前:デフォルトの名無しさん [2020/05/03(日) 09:49:30.01 ID:zajIy9nA.net] うめぽよ
1015 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 19:29:37 ID:WJxvDkhH.net] UME user method exchangeという謎の技術名を考えた 何に使うかはしらん
1016 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 19:31:20 ID:n4+dE3Bb.net] Unknown Machine Error
1017 名前:デフォルトの名無しさん [2020/05/03(日) 19:41:24.49 ID:cVVrQdBT.net] Unrecoverable Memory Error
1018 名前:デフォルトの名無しさん [2020/05/03(日) 19:41:40.77 ID:cVVrQdBT.net] U+M*E=1000
1019 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 431日 4時間 32分 32秒
1020 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています