Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build126
https://mevius.5ch.net/test/read.cgi/tech/1588339011/
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/
■関連スレ
Visual Studio 2020 Part1 https://mevius.5ch.net/test/read.cgi/tech/1634166667/
Visual Studio 2019 Part7 https://mevius.5ch.net/test/read.cgi/tech/1634178709/
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/
探検
Win32API質問箱 Build127
■ このスレッドは過去ログ倉庫に格納されています
2021/12/09(木) 21:32:56.60ID:sYLpmj89
47デフォルトの名無しさん
2022/01/06(木) 11:47:58.14ID:4VMA3TxB hlp拡張子のファイルあるかなと思って探したら、以下のように最新のVisual Studio 2022にバンドルされてて
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\errlook.hlp
hlpアイコンまでちゃんとあるから動くもんだと思ってダブルクリックしたら、Edgeブラウザで以下Webページが開く予定調和
https://support.microsoft.com/ja-jp/topic/windows-%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A7%E3%83%98%E3%83%AB%E3%83%97%E3%82%92%E9%96%8B%E3%81%93%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8-%E6%A9%9F%E8%83%BD%E3%81%AF%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93-%E3%81%BE%E3%81%9F%E3%81%AF-%E3%83%98%E3%83%AB%E3%83%97%E3%81%AF%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93-%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B-3c841463-d67c-6062-0ee7-1a149da3973b
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\errlook.hlp
hlpアイコンまでちゃんとあるから動くもんだと思ってダブルクリックしたら、Edgeブラウザで以下Webページが開く予定調和
https://support.microsoft.com/ja-jp/topic/windows-%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A7%E3%83%98%E3%83%AB%E3%83%97%E3%82%92%E9%96%8B%E3%81%93%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8-%E6%A9%9F%E8%83%BD%E3%81%AF%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93-%E3%81%BE%E3%81%9F%E3%81%AF-%E3%83%98%E3%83%AB%E3%83%97%E3%81%AF%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93-%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B-3c841463-d67c-6062-0ee7-1a149da3973b
48デフォルトの名無しさん
2022/01/06(木) 16:46:11.83ID:flMntYS9 *.hlpを分解できるツールとかないの?
hlpファイルの詳細な仕様書でもいいけど
hlpファイルの詳細な仕様書でもいいけど
2022/01/06(木) 19:46:36.73ID:MHUcKt/l
2022/01/07(金) 14:07:50.44ID:vH8VeFTJ
ならおまいらで独自のもの作って広めれ
2022/01/07(金) 14:26:37.48ID:vg2SqbXr
HTMLヘルプは、アプリのヘルプとしては使わないというか使えない
要求仕様を満たすための形式的な役割で使うだけ
要求仕様を満たすための形式的な役割で使うだけ
52デフォルトの名無しさん
2022/01/07(金) 14:31:02.53ID:TxBgGQ6X >>51
「HTMLヘルプ」は何を指すの?
CHMではなく汎用的なHTML文書という意味で言ってると仮定させてもらうけど、
天下の「Git for Windows」のヘルプがhtmlファイルをWebブラウザを開く形式で提供されていることについてどう思うの?
「HTMLヘルプ」は何を指すの?
CHMではなく汎用的なHTML文書という意味で言ってると仮定させてもらうけど、
天下の「Git for Windows」のヘルプがhtmlファイルをWebブラウザを開く形式で提供されていることについてどう思うの?
2022/01/07(金) 15:49:05.96ID:vg2SqbXr
ヘルプとマニュアルの仕切りがどこにあるかわかりませんが
使用中にピンポイントにその使用方法を提示できるんであれば、それでいいんじゃね?
使用中にピンポイントにその使用方法を提示できるんであれば、それでいいんじゃね?
2022/01/07(金) 15:56:16.42ID:TxBgGQ6X
一例を挙げると、git log --help とコマンドプロンプト上で入力したらWebブラウザが起動して以下のHTMLページが表示される変態仕様、それがGit for Windows
file:///C:/Program%20Files/Git/mingw64/share/doc/git-doc/git-log.html
file:///C:/Program%20Files/Git/mingw64/share/doc/git-doc/git-log.html
2022/01/07(金) 16:14:05.22ID:780pf0Q/
2022/01/07(金) 16:32:56.59ID:3+0nIzbY
>>50
素人受けするものがいいでしょうね
┌────────┐
│何を調べますか?│
│| ̄ ̄ ̄ ̄ ̄ ̄ ̄|│
│|お前を消す方法|│
│|_______|│
│[オプション][ 検索 ]│
└─────v──┘
__/|_
_/ \
〈―― ● \
 ̄\___ ヽ
/>―|ヽ―-、|
\| ̄\|_
(人_)
素人受けするものがいいでしょうね
┌────────┐
│何を調べますか?│
│| ̄ ̄ ̄ ̄ ̄ ̄ ̄|│
│|お前を消す方法|│
│|_______|│
│[オプション][ 検索 ]│
└─────v──┘
__/|_
_/ \
〈―― ● \
 ̄\___ ヽ
/>―|ヽ―-、|
\| ̄\|_
(人_)
2022/01/07(金) 16:41:31.88ID:vg2SqbXr
2022/01/07(金) 18:07:52.60ID:33WVySKZ
chmは表示にIEのコンポーネント使ってると思うんだけどサポート期間終了したらどうなるんだろう
あとUnicode対応じゃないんだよね
本文UTF8で書くと検索できないしインデックスもUnicode系統は使えない
あとUnicode対応じゃないんだよね
本文UTF8で書くと検索できないしインデックスもUnicode系統は使えない
2022/01/07(金) 18:11:08.09ID:toxoOshM
コマンドプロンプトで、start a.html
とすれば、ブラウザが開く
相対パスで、start ./x/y.htm
とか
とすれば、ブラウザが開く
相対パスで、start ./x/y.htm
とか
2022/01/07(金) 20:50:54.17ID:YhEtWwe9
CHMって検索が不便だった気がする
分解してHTMLをGREP掛けた方がいいとかそんな感じ
分解してHTMLをGREP掛けた方がいいとかそんな感じ
2022/01/08(土) 16:59:43.13ID:IoztRjy4
検索用インデックスが手入力だったかと
62デフォルトの名無しさん
2022/01/09(日) 08:21:52.72ID:FkRbo6qA WM_NOTIFYメッセージで以下のように lParam を LPNMHDR と LPNMTBCUSTOMDRAW の2つにキャスト可能です。継承などもしていないのになぜキャストできるのか理解できません。どいう仕組みでキャストできているのでしょうか?
LPNMHDR pnmh = (LPNMHDR)lParam;
switch (pnmh->code) {
case NM_CUSTOMDRAW:
{
LPNMTBCUSTOMDRAW lpNMCustomDraw = (LPNMTBCUSTOMDRAW)lParam;
LPNMHDR pnmh = (LPNMHDR)lParam;
switch (pnmh->code) {
case NM_CUSTOMDRAW:
{
LPNMTBCUSTOMDRAW lpNMCustomDraw = (LPNMTBCUSTOMDRAW)lParam;
2022/01/09(日) 08:30:42.36ID:VQrKDYa7
そもそもC言語のポインターキャスト自体は通常どんな構造体や型でもエラーなしでできる
ただし正しく動く保証はない(プログラマの責任)
でその2つの構造体は包括関係になっててNMHDRのメンバーの部分が共通ってこと
NMHDRの後ろにNMTBCUSTOMDRAW固有のメンバーが並んでる構造のはず
ただし正しく動く保証はない(プログラマの責任)
でその2つの構造体は包括関係になっててNMHDRのメンバーの部分が共通ってこと
NMHDRの後ろにNMTBCUSTOMDRAW固有のメンバーが並んでる構造のはず
64デフォルトの名無しさん
2022/01/09(日) 08:35:06.13ID:FkRbo6qA >>63
ありがとうございます。理解できました。
ありがとうございます。理解できました。
2022/01/12(水) 16:25:03.32ID:+efdTYZ0
ShellExecuteを使うと、拡張子に関連付けられたアプリで開けるけど、
「このファイルを開く方法を選んでください」の画面を出す方法はありますか?
メールアプリなどは、添付ファイルを右クリックすると、
「開く」の他に「アプリケーションから開く」のようなメニューもあって、
それを選ぶと上記の画面が出てくるので、なにか方法はあると思うのですが
「このファイルを開く方法を選んでください」の画面を出す方法はありますか?
メールアプリなどは、添付ファイルを右クリックすると、
「開く」の他に「アプリケーションから開く」のようなメニューもあって、
それを選ぶと上記の画面が出てくるので、なにか方法はあると思うのですが
2022/01/12(水) 16:32:06.52ID:F2PdGvXs
一時的に関連付け削除してるのでは?
知らんけど
知らんけど
2022/01/12(水) 18:23:17.98ID:JKAG73tm
2022/01/13(木) 13:39:03.68ID:MYQMTdwJ
2022/01/13(木) 20:02:30.01ID:gOiUT2XU
>>65
コマンドプロンプトからこれで表示は確認できた
%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL ファイルのフルパス名
これをプログラムから実行するのは適当な方法でいけると思う
コマンドプロンプトからこれで表示は確認できた
%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL ファイルのフルパス名
これをプログラムから実行するのは適当な方法でいけると思う
2022/01/13(木) 20:43:33.40ID:kn1ls6LS
コマンド呼び出し文字列を変更する手段を用意しとかないと、使えなくなった時に積むでしょ
2022/01/13(木) 20:56:49.79ID:gOiUT2XU
2022/01/13(木) 21:06:10.72ID:kn1ls6LS
他人に提供する場合は気にしたほうがいいってだけ
2022/01/13(木) 21:15:59.19ID:zlr4Kbw5
>>69
このヒントを元に探してみたところ、WinMergeのソースが見つかりました。
GetSystemDirectoryやShellExecuteを使って、全く同じことをやっていました。
ありがとうございます。
このヒントを元に探してみたところ、WinMergeのソースが見つかりました。
GetSystemDirectoryやShellExecuteを使って、全く同じことをやっていました。
ありがとうございます。
2022/01/13(木) 21:16:09.21ID:gOiUT2XU
どうも話が通じない人みたいだから俺は去るね
>>65に伝わればそれでいいので
>>65に伝わればそれでいいので
2022/01/13(木) 21:18:23.56ID:H+18Uz0q
懐かしのWinMerge
2022/01/13(木) 21:22:03.15ID:kn1ls6LS
>>74
Win32APIスレなのにUndocumentedな話してるからだが
Win32APIスレなのにUndocumentedな話してるからだが
2022/01/13(木) 21:27:35.21ID:b+qvLzV0
原理的にこれ相当でできるって話だからスレチではない
意味が伝わってないどころか会話も通じていないコイツのスレチを超える常軌を逸した脳味噌に驚愕する
意味が伝わってないどころか会話も通じていないコイツのスレチを超える常軌を逸した脳味噌に驚愕する
2022/01/13(木) 21:36:13.59ID:kn1ls6LS
公式な仕様として公開されてない機能を使う時は要注意だし、
サポート打ち切りを想定してコマンド呼び出し文字列を変更する手段を用意しておくのは当然だろ。
サポート打ち切りを想定してコマンド呼び出し文字列を変更する手段を用意しておくのは当然だろ。
2022/01/14(金) 13:34:07.42ID:yD3j1Fg+
公式サイトに乗ってないからここで質問してるんでしょうが
多少のリスクは自己責任だ
多少のリスクは自己責任だ
80デフォルトの名無しさん
2022/01/14(金) 13:45:56.78ID:/3p7Tbub 行きはよいよい 帰りはこわい
こわいながらも
通りゃんせ 通りゃんせ
関東で生まれた童謡ってのが意外だよな
こわいながらも
通りゃんせ 通りゃんせ
関東で生まれた童謡ってのが意外だよな
2022/01/14(金) 13:56:06.62ID:A/cS6S7f
サポート打ち切りや仕様変更によって開発したソフトやユーザーがどのような影響受けようが、
このスレ的には大きなお世話としか言いようがない
エラー処理は自己責任でやるだけだ
問題の糾弾は元凶であるMSに言え
このスレ的には大きなお世話としか言いようがない
エラー処理は自己責任でやるだけだ
問題の糾弾は元凶であるMSに言え
2022/01/14(金) 14:03:27.75ID:/3p7Tbub
Win32API質問箱 Build127
2022/01/14(金) 14:16:06.92ID:o4SvXBFp
>>ID:/3p7Tbub
スレチ
スレチ
2022/01/14(金) 21:54:45.73ID:J37qhhdP
代替案を示すでもなく大昔から変わってない方法にケチつける時点でノイズ
2022/01/20(木) 13:52:02.54ID:5C47L32n
_beginthreadで作成したスレッドが、後で親プロセスから見て生きているかどうかを調べる方法はありますか?
基本的にずっとループして生きていることを期待しているスレッドですが、何らかの不具合でスレッドが異常終了した
ことを親プロセスで検知したいのです
スレッド側でシグナルオンオフしたりグローバル変数で動作してることを常に書き込むなどの工夫は思い付きましたが、
そもそもスレッドハンドルを使って有効か無効かを知る方法があれば簡単なのですが、そのような方法はありますか?
基本的にずっとループして生きていることを期待しているスレッドですが、何らかの不具合でスレッドが異常終了した
ことを親プロセスで検知したいのです
スレッド側でシグナルオンオフしたりグローバル変数で動作してることを常に書き込むなどの工夫は思い付きましたが、
そもそもスレッドハンドルを使って有効か無効かを知る方法があれば簡単なのですが、そのような方法はありますか?
2022/01/20(木) 14:31:29.07ID:UFDwubQ6
GetExitCodeThreadかのう
2022/01/20(木) 14:37:16.67ID:xRXRc1mt
>>85
_beginthread でなく CreateThread でスレッド作成し、スレッドハンドルを受け取る
スレッドハンドルはスレッド停止でシグナル状態になる
スレッドハンドルの状態を WaitForSingleObject で監視する
_beginthread でなく CreateThread でスレッド作成し、スレッドハンドルを受け取る
スレッドハンドルはスレッド停止でシグナル状態になる
スレッドハンドルの状態を WaitForSingleObject で監視する
2022/01/20(木) 15:27:31.83ID:5C47L32n
2022/01/20(木) 17:07:19.13ID:mJD5+zFk
_beginthreadexで作成して
GetExitCodeThreadは?
GetExitCodeThreadは?
2022/01/20(木) 18:12:57.50ID:5C47L32n
_beginthreadはCランタイムを使うために必要なメモリ処理を追加したCreateThreadのラッパーらしいのと、
WaitForSingleObjectでの監視はこれまでも問題なく動作していたので、_beginthreadのままタイマー監視で
WaitForSingleObjectのテストしてみました
スレッドの異常終了に対応できるのかはテストできません(異常終了の再現はどうすれば?)のでスレッド途中で
特定条件で_endthreadを実行しただけですが、これは当然でしょうが問題なくWAIT_TIMEOUTの判定でスレッド状態を検知できました
同じく、WaitForSingleObjectの代わりにGetExitCodeThreadに置き換えた場合、スレッド動作中は
STILL_ACTIVEの判定、スレッド停止中はGetExitCodeThread自体がエラーで返ってくることでスレッド状態の検知ができました
(スレッドは永久ループで戻り値を返しませんから、threadex系を使っていません)
_endthreadを使ってのスレッド途中終了ではなく、異常終了時も同じように動作するのかが不安材料ですが、
とりあえずこれでOKということにしておきます(スレッドが動いていないんだったら各APIも同じ動作では?という判断)
どうもありがとうございました
WaitForSingleObjectでの監視はこれまでも問題なく動作していたので、_beginthreadのままタイマー監視で
WaitForSingleObjectのテストしてみました
スレッドの異常終了に対応できるのかはテストできません(異常終了の再現はどうすれば?)のでスレッド途中で
特定条件で_endthreadを実行しただけですが、これは当然でしょうが問題なくWAIT_TIMEOUTの判定でスレッド状態を検知できました
同じく、WaitForSingleObjectの代わりにGetExitCodeThreadに置き換えた場合、スレッド動作中は
STILL_ACTIVEの判定、スレッド停止中はGetExitCodeThread自体がエラーで返ってくることでスレッド状態の検知ができました
(スレッドは永久ループで戻り値を返しませんから、threadex系を使っていません)
_endthreadを使ってのスレッド途中終了ではなく、異常終了時も同じように動作するのかが不安材料ですが、
とりあえずこれでOKということにしておきます(スレッドが動いていないんだったら各APIも同じ動作では?という判断)
どうもありがとうございました
2022/01/20(木) 20:46:12.90ID:Ibae9TV2
_beginthreadexはCreateThreadと同じハンドル返すやつやぞ
スレッド内でCランタイム使う場合こっち呼ばないとダメとか教わったりしてないのか
技術の断絶が起きてるのか
スレッド内でCランタイム使う場合こっち呼ばないとダメとか教わったりしてないのか
技術の断絶が起きてるのか
2022/01/20(木) 20:54:27.58ID:PY3Mro/S
誰に言ってるんだ
2022/01/20(木) 20:58:50.89ID:kUGZMDvk
>>90
スレッドの生死判定にGetExitCodeThreadを使うのは万が一スレッドが終了コードとしてSTILL_ACTIVEを返すと誤判定するからWaitForSingleObject使えって書いてあるよ
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getexitcodethread
スレッドの生死判定にGetExitCodeThreadを使うのは万が一スレッドが終了コードとしてSTILL_ACTIVEを返すと誤判定するからWaitForSingleObject使えって書いてあるよ
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getexitcodethread
2022/01/21(金) 02:20:25.63ID:Fsu/5xwq
>親プロセスから見て
子プロセスのスレッドのハンドルって親プロセスから見えるの?
子プロセスのスレッドのハンドルって親プロセスから見えるの?
2022/01/21(金) 02:37:12.98ID:rP34XQ0N
文脈的にスレッドから見て起動元を親プロセスと呼んでるだけかと
2022/01/26(水) 11:00:15.39ID:vhiSf69I
1秒おきのタイマーでtmDraw()を呼んで右に伸びる四角を描くプログラムです。VSCでMFC未使用。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
OnPaint(hWnd);
break;
case WM_CREATE:
SetTimer(hWnd,1,1000,(TIMERPROC)NULL); //タイマー定義
break;
case WM_TIMER: //タイマー
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
tmDraw(hdc); //これを呼んで描画
EndPaint(hWnd, &ps);
}
break;
return 0;
}
static VOID tmDraw(HDC hDC)
{
SetDCPenColor(hDC, RGB(0x99, 0x66, 0x00)); //ここが呼ばれてるのは確認
SetDCBrushColor(hDC, RGB(0xFF, 0xCC, 0x00));
Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
}
最初の1回の描画はされます。タイマーでtmDraw()が呼ばれてるのは確認しています。
呼ばれて描画されてるはずなのですが、実際の画面は更新されず四角は伸びません。
windowサイズを手動で変えていくと四角は右に伸びていき更新されます。
タイマーでtmDraw()が呼ばれた時に描画だけでなく画面の更新もされるようにするにはどうすればよいですか?
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
OnPaint(hWnd);
break;
case WM_CREATE:
SetTimer(hWnd,1,1000,(TIMERPROC)NULL); //タイマー定義
break;
case WM_TIMER: //タイマー
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
tmDraw(hdc); //これを呼んで描画
EndPaint(hWnd, &ps);
}
break;
return 0;
}
static VOID tmDraw(HDC hDC)
{
SetDCPenColor(hDC, RGB(0x99, 0x66, 0x00)); //ここが呼ばれてるのは確認
SetDCBrushColor(hDC, RGB(0xFF, 0xCC, 0x00));
Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
}
最初の1回の描画はされます。タイマーでtmDraw()が呼ばれてるのは確認しています。
呼ばれて描画されてるはずなのですが、実際の画面は更新されず四角は伸びません。
windowサイズを手動で変えていくと四角は右に伸びていき更新されます。
タイマーでtmDraw()が呼ばれた時に描画だけでなく画面の更新もされるようにするにはどうすればよいですか?
2022/01/26(水) 11:09:13.12ID:TX0OTodc
WM_TIMERでメモリDCに対してtmDrawの内容で描画、更新が必要な長方形に対してInvalidateRectを呼ぶ
WM_PAINTでBeginPaintの処理するが、ここではBitBltで更新が必要な長方形に対しメモリDCから画像転送だけするのがセオリー
WM_PAINTで直接描画してもよいが、WM_PAINTはイベント発生タイミングがOS依存のためタイマー以外でも必要時毎回tmDrawが呼び出されることになり時間が掛かる描画をここでやってると糞アプリ認定が俺からされる
WM_PAINTでBeginPaintの処理するが、ここではBitBltで更新が必要な長方形に対しメモリDCから画像転送だけするのがセオリー
WM_PAINTで直接描画してもよいが、WM_PAINTはイベント発生タイミングがOS依存のためタイマー以外でも必要時毎回tmDrawが呼び出されることになり時間が掛かる描画をここでやってると糞アプリ認定が俺からされる
2022/01/26(水) 11:17:10.02ID:TX0OTodc
それと下みたいな描画処理内に状態を更新する処理を入れるのはタブー俺からど突かれる
>Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
tmDraw(); // 描画
tmUpdate(); // 状態の更新
に分けて、tmUpdate()内でcx++;を記述するべき
>Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
tmDraw(); // 描画
tmUpdate(); // 状態の更新
に分けて、tmUpdate()内でcx++;を記述するべき
2022/01/26(水) 11:20:11.61ID:vhiSf69I
WM_TIMER:でInvalidateRect(hWnd, NULL, NULL);で更新されるようになりました
ありがとうございます
ありがとうございます
100デフォルトの名無しさん
2022/01/30(日) 15:28:34.78ID:CkvbqakA >>65
SHOpenWithDialog
SHOpenWithDialog
101デフォルトの名無しさん
2022/01/30(日) 15:56:05.88ID:CkvbqakA >>33
Shell_NotifyIconGetRect
Shell_NotifyIconGetRect
102デフォルトの名無しさん
2022/02/19(土) 21:16:14.65ID:XaFwU4s3 CreateFileで返ってきたファイルハンドルを使って、CreateFileでGENERIC_READ/GENERIC_WRITEの
どちら(もしくは両方)のアクセスモードが指定されていたかを調べる方法はないでしょうか?
どちら(もしくは両方)のアクセスモードが指定されていたかを調べる方法はないでしょうか?
103デフォルトの名無しさん
2022/02/19(土) 22:43:56.49ID:XaFwU4s3 質問を撤回変更します
特定のファイルへの書き込みの際、同タイミングで別プロセスから同じファイルへの書き込みを防ぐため
ファイルのロックを行なおうとしましたが、下記のようなコードは間違っていますでしょうか?
実際にはWriteFileでエラーになります
HANDLE file;
BOOL ret;
DWORD wrote;
OVERLAPPED ov = {0};
file = CreateFile("test.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
ret = LockFileEx(file, 0, 0, 0xffffffff, 0xffffffff, &ov);
ret = WriteFile(file, "aaa", 3, &wrote, 0);
ret = UnlockFileEx(file, 0, 0xffffffff, 0xffffffff, &ov);
CloseHandle(file);
よろしくお願いします
特定のファイルへの書き込みの際、同タイミングで別プロセスから同じファイルへの書き込みを防ぐため
ファイルのロックを行なおうとしましたが、下記のようなコードは間違っていますでしょうか?
実際にはWriteFileでエラーになります
HANDLE file;
BOOL ret;
DWORD wrote;
OVERLAPPED ov = {0};
file = CreateFile("test.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
ret = LockFileEx(file, 0, 0, 0xffffffff, 0xffffffff, &ov);
ret = WriteFile(file, "aaa", 3, &wrote, 0);
ret = UnlockFileEx(file, 0, 0xffffffff, 0xffffffff, &ov);
CloseHandle(file);
よろしくお願いします
104デフォルトの名無しさん
2022/02/19(土) 22:47:06.25ID:XaFwU4s3105蟻人間 ◆T6xkBnTXz7B0
2022/02/19(土) 22:51:38.16ID:okjLjEAk このページのACCESS_MASKのところに書いてある。
https://note.com/lacnote/n/n214c53e98cc4
https://note.com/lacnote/n/n214c53e98cc4
107デフォルトの名無しさん
2022/02/20(日) 03:52:43.84ID:CO1siO2a やりたいことが伝わっていないようですが、要するにWEBサーバーでよくある
アクセスカウンターや掲示板でファイルの読み書きをするにあたって衝突を防ぎたいということです
ファイルオープン時にエラーにしてしまうのは本意ではなく、あくまでファイルのロックで制御したいのです
ということで、書き込み時はこのようにすれば解決できました。
ret = LockFileEx(file, LOCKFILE_EXCLUSIVE_LOCK, 0, 0xffffffff, 0xffffffff, &ov);
読み込み時は元の
ret = LockFileEx(file, 0, 0, 0xffffffff, 0xffffffff, &ov);
このようにすれば、複数プロセスで読み込みが競合しても同時アクセスが可能で、書き込みプロセスが発生したときは
意図した通りに排他処理され、後から実行されたプロセスはLockFileExで待機されるようになりました
アクセスカウンターや掲示板でファイルの読み書きをするにあたって衝突を防ぎたいということです
ファイルオープン時にエラーにしてしまうのは本意ではなく、あくまでファイルのロックで制御したいのです
ということで、書き込み時はこのようにすれば解決できました。
ret = LockFileEx(file, LOCKFILE_EXCLUSIVE_LOCK, 0, 0xffffffff, 0xffffffff, &ov);
読み込み時は元の
ret = LockFileEx(file, 0, 0, 0xffffffff, 0xffffffff, &ov);
このようにすれば、複数プロセスで読み込みが競合しても同時アクセスが可能で、書き込みプロセスが発生したときは
意図した通りに排他処理され、後から実行されたプロセスはLockFileExで待機されるようになりました
108デフォルトの名無しさん
2022/02/20(日) 19:05:58.76ID:9HPBNdt5 Webサーバの排他処理を、このような実装で提案してくるレベルの会社に仕事を頼むのは危険、とは思った
109デフォルトの名無しさん
2022/02/20(日) 20:03:47.36ID:M4xRQQqb CreateFileが先だとどのみちエラーになる可能性が残るから
ミューテックスやイベントオブジェクトで排他制御するなあ
Lockなんちゃらは使ったことないわ
ミューテックスやイベントオブジェクトで排他制御するなあ
Lockなんちゃらは使ったことないわ
110デフォルトの名無しさん
2022/02/20(日) 21:30:44.11ID:uUEkIMOM 俺なら迷わずDBMS使うわ
SQLite3 とかならサーバーもいらんし
SQLite3 とかならサーバーもいらんし
111デフォルトの名無しさん
2022/02/21(月) 03:06:22.69ID:duSmRXnB >>109
shareが付いてるからエラーにはならないのでは?
shareが付いてるからエラーにはならないのでは?
112デフォルトの名無しさん
2022/03/07(月) 02:42:31.87ID:TXt6EOws WritePrivateProfileString で ini ファイルに書き込むと、たまに「他のプロセスが使用中です。」という例外が発生します。
防止するにはどすればいいでしょうか?
防止するにはどすればいいでしょうか?
113デフォルトの名無しさん
2022/03/07(月) 02:44:48.03ID:qb65CxmV 他のプロセスが使用しないようにする
114デフォルトの名無しさん
2022/03/07(月) 09:16:25.25ID:cTvXM31Y 大体にして開いてるのエクスプローラー、アンチウイルス、常駐系だったりするしな
MS-DOSでも使うしか
MS-DOSでも使うしか
115デフォルトの名無しさん
2022/03/07(月) 10:39:51.12ID:Xc0f0iGk 他のプロセスでiniファイルを使っていたとしてもWritePrivateProfileStringで例外なんか出るか?
116デフォルトの名無しさん
2022/03/07(月) 10:52:53.03ID:2N5B8miS ぐぐった感じ APIそのものは例外を発行しないものの C#のプラットフォーム側がだしてるくさい
117デフォルトの名無しさん
2022/03/07(月) 23:41:31.01ID:oHAGcJuV C#のランタイムはこのスレの範疇じゃないなあ
118デフォルトの名無しさん
2022/03/08(火) 17:52:46.46ID:f1RrvjSh リストビューを範囲選択しているときの四角形、7や10などでは青い半透明で描画されますが、
APIでこれと同じものを描画することはできるのでしょうか?
APIでこれと同じものを描画することはできるのでしょうか?
119デフォルトの名無しさん
2022/03/08(火) 18:26:38.59ID:ZpoSJ5Ls 一方、ワイは自前で描画した
120デフォルトの名無しさん
2022/03/08(火) 18:33:19.49ID:iHDsiIkr だから自前で同じものを描画できるかって質問だろ
俺か?俺は知らん!
俺か?俺は知らん!
121デフォルトの名無しさん
2022/03/08(火) 18:36:57.44ID:f1RrvjSh >>119
自分で色などを調べて、直値で半透明の四角形を描いたということですか。
XP以降のエクスプローラーに載っている描画のようなので、
UxThemeのテーマ描画関数にでも含まれているのかと思ったのですが、
外からは呼べないものなのですかね。
自分で色などを調べて、直値で半透明の四角形を描いたということですか。
XP以降のエクスプローラーに載っている描画のようなので、
UxThemeのテーマ描画関数にでも含まれているのかと思ったのですが、
外からは呼べないものなのですかね。
122デフォルトの名無しさん
2022/03/08(火) 19:03:07.84ID:ZpoSJ5Ls >>120
自前じゃなくてAPIでって書いてるやん
>>121
正攻法は分からないので、それっぽい色で直接描画した
参考にならなくてスマン
ワイもいい方法知りたい
DrawThemeBackgroundでリストビュー関係のパーツで描画をすればかなり近そうなんだけど、
本当にそれでいいのか分からなくて面倒でスルーした
https://docs.microsoft.com/en-us/windows/win32/controls/parts-and-states
こちらのツールも参考にさせてもらってた
ttp://dev.onionsoft.net/seed/info.ax?id=1201
で、結局描画そのものは自前になるわなということでやめた
自前じゃなくてAPIでって書いてるやん
>>121
正攻法は分からないので、それっぽい色で直接描画した
参考にならなくてスマン
ワイもいい方法知りたい
DrawThemeBackgroundでリストビュー関係のパーツで描画をすればかなり近そうなんだけど、
本当にそれでいいのか分からなくて面倒でスルーした
https://docs.microsoft.com/en-us/windows/win32/controls/parts-and-states
こちらのツールも参考にさせてもらってた
ttp://dev.onionsoft.net/seed/info.ax?id=1201
で、結局描画そのものは自前になるわなということでやめた
123デフォルトの名無しさん
2022/03/09(水) 09:25:42.26ID:DJwI/bmR124デフォルトの名無しさん
2022/03/17(木) 11:37:08.28ID:SxsSQH3/ NamedPipeにおけるPIPE_TYPE_BYTEとPIPE_TYPE_MESSAGEの違いは何なのでしょうか?
PIPE_TYPE_BYTEでは書き込み側がWriteFileを何回行ったとしても読み手側はReadFile1度で済み、
PIPE_TYPE_MESSAGEでは書き込み側が行ったWriteFile回数分、読み手側もReadFileがヒットするという理解であってますか?
PIPE_TYPE_BYTEでは書き込み側がWriteFileを何回行ったとしても読み手側はReadFile1度で済み、
PIPE_TYPE_MESSAGEでは書き込み側が行ったWriteFile回数分、読み手側もReadFileがヒットするという理解であってますか?
125デフォルトの名無しさん
2022/03/20(日) 18:08:07.29ID:XF1vAqW3 参考書を一冊読み終わった程度のガチガチの初心者です。
初めて何か簡単なものを作ろうと思ったのですが、ウィンドウのサイズの指定の仕方が良くわかりませんでした。
VisualStudio2022でテンプレートはユニバーサルWindows-C++/Cxです。
どなたかwinndowの大きさの指定の仕方を教えていただければ幸いです。
そもそもどこからプログラムが始まるのかもよくわかっていません。
・・・質問する場所が間違ってたらすみません。
初めて何か簡単なものを作ろうと思ったのですが、ウィンドウのサイズの指定の仕方が良くわかりませんでした。
VisualStudio2022でテンプレートはユニバーサルWindows-C++/Cxです。
どなたかwinndowの大きさの指定の仕方を教えていただければ幸いです。
そもそもどこからプログラムが始まるのかもよくわかっていません。
・・・質問する場所が間違ってたらすみません。
126デフォルトの名無しさん
2022/03/20(日) 20:18:13.42ID:km0F04pf Win32APIなら MoveWindow あたりかな。
UWPのことは↓の方がいいかもね。
https://mevius.5ch.net/test/read.cgi/tech/1627556967/
なお蛇足だけど 「UWP 将来性」 でGoogle検索してみると、UWPに関しては微妙な評価も少なくなく。
初心者が、あえてUWPを選んで、これから勉強していく・・・というのはどうなんだろう? という気はしないでもない
UWPのことは↓の方がいいかもね。
https://mevius.5ch.net/test/read.cgi/tech/1627556967/
なお蛇足だけど 「UWP 将来性」 でGoogle検索してみると、UWPに関しては微妙な評価も少なくなく。
初心者が、あえてUWPを選んで、これから勉強していく・・・というのはどうなんだろう? という気はしないでもない
127デフォルトの名無しさん
2022/03/20(日) 20:48:42.24ID:pl7vy6ae CreateWindow(Ex)のwidth,height引数だろ
128デフォルトの名無しさん
2022/03/20(日) 21:44:52.47ID:KeTIMbSf ウィンドウのサイズの指定の仕方すら載ってない参考書って何なの
129デフォルトの名無しさん
2022/03/20(日) 21:55:49.41ID:+2LwwNeE UWPはフルスクリーン専用ですから!
130デフォルトの名無しさん
2022/03/20(日) 21:57:26.05ID:DiBIkIVz ウィンドウのサイズはWindowsのプログラムじゃないんだよ
うまく言えないけど、それは違うんだよ
うまく言えないけど、それは違うんだよ
131デフォルトの名無しさん
2022/03/20(日) 22:29:38.63ID:KeTIMbSf 自分で制御できてこそプログラミングなのでは
ちなUWP ウィンドウサイズでぐぐったら出てくるでしょ
ちなUWP ウィンドウサイズでぐぐったら出てくるでしょ
132デフォルトの名無しさん
2022/03/20(日) 22:59:19.18ID:O6cWnna8 UWPなんて儲からないのが決定づいたからMSの投資対象じゃないでしょ
将来性とかじゃないんだよ
終わったの
将来性とかじゃないんだよ
終わったの
133デフォルトの名無しさん
2022/03/20(日) 23:32:49.71ID:n/9ce90/ ケンシロウ「おわた」
134デフォルトの名無しさん
2022/03/21(月) 13:53:10.22ID:ROKj/vns >>126
ありがとうございます。
なんか記事めっちゃ少ないなって思ったんですよ。
c++始めたてで「よし、c++でサーバー作るぞ!!」って思って探したとき以上に
記事がないんですよ。
そもそも将来性が危ぶまれていたのですね。
本当にありがとうございます。
テンプレート何使うのかから考え直します。
ありがとうございます。
なんか記事めっちゃ少ないなって思ったんですよ。
c++始めたてで「よし、c++でサーバー作るぞ!!」って思って探したとき以上に
記事がないんですよ。
そもそも将来性が危ぶまれていたのですね。
本当にありがとうございます。
テンプレート何使うのかから考え直します。
135デフォルトの名無しさん
2022/03/21(月) 17:01:31.15ID:2zy4bB2k Visual studio のテンプレート選びのことなら、最初だけね。
慣れてくると、テンプレートはかえって邪魔だったりするので、空のソリューションから始めるようになるよ。
C++でいくなら(初心者なら、最初はC++よりもCの方がいいかもしれないかな、覚えることが少ないので・・・とは思うけど)
(MFC等のクラスライブラリを使わずに)Win32APIだけでゴリゴリ動かすプログラム作成からトライするのがよろしいかと。
いずれにせよWindowsアプリの場合、Win32APIは避けて通れないので、勉強するなら順番的に最初で。
それで不満があったり、学校や仕事なら必要に応じて、趣味なら好みで、他の手法に手を出していくような順番で考えるといいと思われます。
困ったら Google 先生に聞いてみてね、いくらでもサンプルが入手できるから、理解も早まるはず
慣れてくると、テンプレートはかえって邪魔だったりするので、空のソリューションから始めるようになるよ。
C++でいくなら(初心者なら、最初はC++よりもCの方がいいかもしれないかな、覚えることが少ないので・・・とは思うけど)
(MFC等のクラスライブラリを使わずに)Win32APIだけでゴリゴリ動かすプログラム作成からトライするのがよろしいかと。
いずれにせよWindowsアプリの場合、Win32APIは避けて通れないので、勉強するなら順番的に最初で。
それで不満があったり、学校や仕事なら必要に応じて、趣味なら好みで、他の手法に手を出していくような順番で考えるといいと思われます。
困ったら Google 先生に聞いてみてね、いくらでもサンプルが入手できるから、理解も早まるはず
136デフォルトの名無しさん
2022/03/21(月) 17:46:41.29ID:UrcF9Qp5 結局テンプレートは自分で作ったな
137デフォルトの名無しさん
2022/03/21(月) 18:08:25.99ID:ROKj/vns 承知しました。
templateの作成から始めます。
ありがとうございます。
templateの作成から始めます。
ありがとうございます。
138デフォルトの名無しさん
2022/03/21(月) 21:19:01.53ID:pAID/0z9 いやー、普通にc#から入っていいとおもうがねぇ。
まっさらな人がこれからcharとwcharとutf8とutf16を
ちゃんとデフォルトで言語の標準ライブラリで変換出来ない世界から入るのは遠回り過ぎて、
結局は目的にまったく近づけず挫折するかと。
まっさらな人がこれからcharとwcharとutf8とutf16を
ちゃんとデフォルトで言語の標準ライブラリで変換出来ない世界から入るのは遠回り過ぎて、
結局は目的にまったく近づけず挫折するかと。
139デフォルトの名無しさん
2022/03/22(火) 01:06:06.87ID:TibwPpTv 何でrustの悪口言うの?
Microsoftがいつかライブラリを作って提供してくれるはずだよ?
Microsoftがいつかライブラリを作って提供してくれるはずだよ?
140デフォルトの名無しさん
2022/03/22(火) 12:47:17.13ID:qjij/RpP 今使えないと…
141デフォルトの名無しさん
2022/03/22(火) 22:09:30.99ID:XUVyJctM142デフォルトの名無しさん
2022/03/24(木) 17:58:28.49ID:EzbC8tGw >>138
どうも、134です。
インターネットとc++は相性悪いからやめとけって言う話は自分でも
どことなくわかっているはずなのになぜかc++に執着してしまっています。
はじめて3か月くらいでしょうか・・・。
boostのサーバーのサンプルコードの一つの中身を片っ端から読んでみようかと思いましたが、
なんかOSどれか調べてるなぁとか、c++のバージョンチェックしてるなぁとか、
このヘッダインクルードしてたらこっちはインクルードしないよーとか、
この関数ちゃんと動くの?とか
実際に知りたかったことにたどり着く前にboostには挫折してしまいましたが、
c++には”まだ”挫折してないです。
・・・”まだ”なんだよなぁ
どうも、134です。
インターネットとc++は相性悪いからやめとけって言う話は自分でも
どことなくわかっているはずなのになぜかc++に執着してしまっています。
はじめて3か月くらいでしょうか・・・。
boostのサーバーのサンプルコードの一つの中身を片っ端から読んでみようかと思いましたが、
なんかOSどれか調べてるなぁとか、c++のバージョンチェックしてるなぁとか、
このヘッダインクルードしてたらこっちはインクルードしないよーとか、
この関数ちゃんと動くの?とか
実際に知りたかったことにたどり着く前にboostには挫折してしまいましたが、
c++には”まだ”挫折してないです。
・・・”まだ”なんだよなぁ
143デフォルトの名無しさん
2022/03/24(木) 18:01:49.40ID:EzbC8tGw そんなわけで、DialogBoxの引数なんですが、LRESULTだったり、INT_PTRだったりします。
long以上の整数ポインタだったら何でもよいのでしょうか?
long以上の整数ポインタだったら何でもよいのでしょうか?
144デフォルトの名無しさん
2022/03/24(木) 18:10:21.95ID:EzbC8tGw ごめんなさい、全然違いました。
DialogBoxの第四引数につかうウィンドウプロシージャの
DialogProcの型はlong以上の整数型ポインタなのでしょうか?
また、ウィンドウプロシージャって関数であってますよね?
実はクラスでしたとか言わないですよね?
DialogBoxの第四引数につかうウィンドウプロシージャの
DialogProcの型はlong以上の整数型ポインタなのでしょうか?
また、ウィンドウプロシージャって関数であってますよね?
実はクラスでしたとか言わないですよね?
145デフォルトの名無しさん
2022/03/24(木) 19:01:41.84ID:bNSOayig DialogBox の第4引数はダイアログプロシージャー(関数)のアドレス値(ポインタ)だね。
Type: DLGPROC
A pointer to the dialog box procedure.
なお、ダイアログボックスの場合は「ダイアログボックスプロシージャー」といって。
ウィンドウプロシージャーとの共通点は多いけど、同じものではないから、区別して理解する必要があるよ。
DLGPROC と WNDPROC の違いについて調べてみてね
Type: DLGPROC
A pointer to the dialog box procedure.
なお、ダイアログボックスの場合は「ダイアログボックスプロシージャー」といって。
ウィンドウプロシージャーとの共通点は多いけど、同じものではないから、区別して理解する必要があるよ。
DLGPROC と WNDPROC の違いについて調べてみてね
146デフォルトの名無しさん
2022/03/24(木) 19:14:59.99ID:EzbC8tGw■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★9 [ぐれ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 ★2 [おっさん友の会★]
- 【独占スクープ】元TOKIOの松岡昌宏がSTARTO社を“退所”へ「国分のコンプライアンス違反」問題をきっかけに決断、12月から単独で活動 [Ailuropoda melanoleuca★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 ★2 [ぐれ★]
- 【高市悲報】🇨🇳中国「日本への報復措置? 他にいくらでも方法はある。 まだまだやめないよ」 😨😱 [485983549]
- 中国報道、高市首相を「毒苗」と中傷😡 [399259198]
- 高市早苗、約1ヶ月でドル円・10円円安を達成 [256556981]
- (´・ω・`)おはよ
- 中国専門家の興梠一郎先生「実は中国が一番焦ってるのが総領事の暴言だ。中国は今かなり追い詰められている」 [904151406]
- するってぇと何かい?2週間前に安全を確認して輸入再開した海産物を食の安全のために輸入停止にしたってのかい?
