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/
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らしいというか融通が利かないというか、バカバカしいな。
タッチやフリックを要求するアプリのみにそれらのメッセージ投げるだけでいいのに。

旧来アプリでも旧来アプリなりにペンタッチで動くようにすりゃ、裾野も広がりやすいだろうにな。
0315297
垢版 |
2018/04/12(木) 22:59:34.36ID:1t6GyJnt
ちょっと古いシステムなのでそのままちょっと直すだけで動かないものかと
試行錯誤していました。

313さんの仰る方向でも試行錯誤を続けていたのですが、既存プログラムの
出来がおかしいのか今のところうまく行っていません。
理屈で言えばうまく行くはず・・・なので、このまま調整を続けようと思います。

皆さんありがとうございました。
0316デフォルトの名無しさん
垢版 |
2018/04/12(木) 23:04:18.01ID:ifFSa3KQ
>>314
いやタッチのメッセージを処理しなけりゃ普通にマウスのメッセージにフォールバックはされるぞ
マウスメッセージのみで手を抜きたいけど目的の品質の届かないって趣旨の質問じゃろ
0317297
垢版 |
2018/04/12(木) 23:33:07.34ID:1t6GyJnt
>>316
上でも書きましたが、タッチのメッセージを処理しないようにすると
ペン入力自体全くできなくなりました。
0319デフォルトの名無しさん
垢版 |
2018/04/12(木) 23:59:24.17ID:ifFSa3KQ
Surfaceでしか確認してないけどそういやFCUだかでペンのスワイプの既定が
カーソル移動からスクロールに変更されてたなあ
そのへんが原因かもね
0320297
垢版 |
2018/04/13(金) 02:19:42.71ID:4MPC6lcI
>>318
ありがとうございます。
飛びついてみましたが、変化ありませんでした。
逆の考え方で、マウスをポインティングデバイスとして使うためのものかも知れませんが、
マウス操作しても前と変わらずでした。
もしかするとマウスでフリック操作などができるようになるのかも?という気がしますが、
そのような自作アプリがないのでこれ以上は分かりません。(なお、デフォでDisableが設定されていた)


整理しますと、現状>305さんの仰るとおり、ペンでタッチして少し動かせばマウスメッセージが
飛んでくるという状況です。

すっごく古いお絵かきアプリを複数引っ張り出してみましたが、基本的に同じ挙動でした。
描きやすさに多少の差異は見られましたので工夫の余地はあるものの、根本的には
WM_POINTER 系統か WM_TOUCH 系統への対応が必須のようです。

色々アドバイスいただき、皆さんありがとうございました。
0321313
垢版 |
2018/04/13(金) 10:24:16.60ID:MklDTzxh
タッチパネルのみのメッセージであるWM_POINTERで、必要なイベントを自分で加工してPostMessageかSendMessageを使って WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP:とかに投げればマウス部分の従来の処理でそのまま動くんじゃね?
マウスっぽく処理するならタッチIDを保存して判別したほうがいいな
WM_TOUCHは使ったらダメだと思う昔それで不具合があってハマった記憶がある。
void SingleTouch(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
// WM_POINTERDOWN: case WM_POINTERUP: case WM_POINTERUPDATEの共通処理
static UINT pointerID=0; // ポインタIDを静的に保存しておく
POINTER_INFO info = { 0 }; // ポインタの情報を毎回初期化
UINT contactId = GET_POINTERID_WPARAM(wParam);GetPointerInfo(contactId, &info); // ポインタの情報を得る
ScreenToClient(hWnd, &info.ptPixelLocation); // クライアントの座標で使うならローカル座標に変更
lParam = MAKELPARAM(info.ptPixelLocation.x,info.ptPixelLocation.y); // PostMessage用のlParamを作成
// 個別処理、同じpointerIDを判別をしないと10点タッチとかで酷いことになるw
switch(message){
case WM_POINTERDOWN: if(0==pointerID){pointerID=info.pointerId;PostMessage(hWnd,WM_LBUTTONDOWN,0,lParam);}break;
case WM_POINTERUP: if(pointerID == info.pointerId){pointerID=0;PostMessage(hWnd,WM_LBUTTONUP,0,lParam);}break;
case WM_POINTERUPDATE:if(pointerID == info.pointerId){PostMessage(hWnd,WM_MOUSEMOVE,0,lParam);}break;
}
}

LRESULT WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)のswitch(message)で下記を追加
case WM_POINTERDOWN: case WM_POINTERUP: case WM_POINTERUPDATE: SingleTouch(hWnd,message,wParam,lParam);break;
0322デフォルトの名無しさん
垢版 |
2018/04/13(金) 10:47:38.98ID:bFIkQBXO
タブレット持ってないからわかんないけどさ
>>303の◎ってOSが出してて、OS自体が入力を拒んでるんじゃないのか?
だとしたらどのモジュールがその処理してるのか調べてその処理置換してwindows自体の挙動を変える必要があると思う
0324デフォルトの名無しさん
垢版 |
2018/04/13(金) 11:35:55.96ID:UdLtdLwz
>>323
取る方法はいくらでもあってドキュメント化もされている
今回の質問は簡易なコードでマウスと同様の動作をさせる方法は無いか?ということ。
0325デフォルトの名無しさん
垢版 |
2018/04/13(金) 11:58:28.35ID:bFIkQBXO
◎の中はメッセージ来ないから困ったって質問かと思ったんだが違ったのか
わかんないもんに口出すべきじゃないなw
0326313
垢版 |
2018/04/13(金) 12:15:36.03ID:MklDTzxh
書き忘れてた。WM_TOUCH系の初期化すると◎のジェスチャーとか、不具合でるよ。
初期化しないで、321のコード実装してみたらいいと思う。
0327デフォルトの名無しさん
垢版 |
2018/04/14(土) 00:16:48.20ID:a7yPR2Rx
サーバー上のファイルを編集中に、他人からの全てのアクセスを禁止したいのですが
CreateFileでdwShareModeを0にすれば排他制御は万全だと思いますか?
良い方法があれば教えてください。
0328327
垢版 |
2018/04/14(土) 00:22:28.28ID:a7yPR2Rx
補足。クライアントからサーバー上のファイルを編集するときです。
0329デフォルトの名無しさん
垢版 |
2018/04/14(土) 02:38:22.36ID:lnTeyTPJ
deleteされちゃいますよ
0331327
垢版 |
2018/04/14(土) 18:14:56.59ID:a7yPR2Rx
編集完了までCloseHandleしなければdelete出来ないんじゃないでしょうか。悪意のある攻撃者はいないとして。

私が心配しているのは、一つのファイルに対して、複数のクライアントから同時に排他Open(CreateFile)が
発生したとして、複数のクライアントで排他Openが成功してしまう可能性があるんじゃ無いかって事です。
0333327
垢版 |
2018/04/14(土) 18:32:55.41ID:a7yPR2Rx
>>332
そうですか、、
小さいシステムなので、サーバ側プロセスまで作りたくないなーと思ってたんですが。
0334デフォルトの名無しさん
垢版 |
2018/04/14(土) 20:04:17.98ID:fnoJLpZQ
smb なら排他的にロックされる
2つのクライアントが矛盾する共有モードでファイルをオープンしたり削除したりはできない。

https://docs.microsoft.com/en-us/rest/api/storageservices/managing-file-locks

smb のサーバが linux や mac で、その os などから smb 以外の方法で
ファイルを変更、削除したりは可能だけどこれはどうしようもない

もしも目的が他のクライアントにエラーを返すとこでなく
書き終わった時点でアプリが書いた内容になっていることを保証したい
(書いている途中のファイルを読まれないように)だけなら
別名のファイルを作って書き終えたところで MoveFile するというよくある手法もある。
0336327
垢版 |
2018/04/14(土) 21:05:12.23ID:a7yPR2Rx
>>324
私にsmbはちょっと難易度高杉のようです。
妥協 or 違うアプローチを考えてみます。
0337名無し@キムチ
垢版 |
2018/04/14(土) 21:10:19.87ID:ywXYi+/7
質問です。
glutを使ったプログラムで、描画の後ダブルバッファ交換のglutSwapBuffers();を入れると、
windowの画面が真っ白になってしまって何も表示されなくなるのですが、どうしたらいいですか?
0338デフォルトの名無しさん
垢版 |
2018/04/14(土) 23:46:15.72ID:fnoJLpZQ
>>336
Windows の標準ファイル共有プロトコルSMBを用いて接続している
ファイルサーバ上のファイルなら
CreateFile の共有モードでロックができるということです。
0339デフォルトの名無しさん
垢版 |
2018/04/15(日) 00:06:05.13ID:G47pMzYo
>>338
なるほど。でしたら概ねロックできそうです。
ごく少数のクライアントは無料のVPNツールでLAN外からサーバーにアクセスしているんですが
これもSMBプロトコルなのかどうかは調べてみます。
情報ありがとうございました。
0340デフォルトの名無しさん
垢版 |
2018/04/15(日) 10:41:11.68ID:E1b18XLI
>>337
どこに描いたの?
何を表に持ってきたの?
0341名無し@キムチ
垢版 |
2018/04/15(日) 21:45:37.16ID:X4sBLOS0
Windowsのコールバック関数の中のWM_PAINTにダイレクトXの描画処理を書くと、エラーが出て実行されないのですが、どうしてですか?どうしたらいいですか?
0343デフォルトの名無しさん
垢版 |
2018/04/15(日) 22:41:41.98ID:UX4y5Mn1
使わなくてもいいからDCだけ確保
0345デフォルトの名無しさん
垢版 |
2018/04/15(日) 23:27:51.27ID:xpwShDOv
ぴぴん
0348デフォルトの名無しさん
垢版 |
2018/04/16(月) 09:43:27.45ID:75OnkAat
カードキャプターさくら
0349名無し@キムチ
垢版 |
2018/04/17(火) 18:57:41.86ID:nz/ieMrf
初歩的な質問ですが、fgxsdkを使ったプログラムと、openGLを使ったプログラムをつくりましたが、
どちらか片方づつだけしか使えません。ひとつのプログラムで両方使おうとするとエラーが出てしまいます。
どうしてそうなるのですか?またどうすればいいのですか?
0350デフォルトの名無しさん
垢版 |
2018/04/18(水) 00:45:47.24ID:lRwbg5zI
バッファを上書きしないように気を付ける
0351297
垢版 |
2018/04/19(木) 18:13:16.20ID:o7VdbXqH
297ですが、WM_POINTER 系を WM_LBUTTON や WM_MOUSEMOVE に
投げることで無事解決しました。
WM_POINTER 系はスクリーン座標、マウス関連はクライアント座標という
不一致の整合性を取ることと、ペン操作中の描画がされないので
UpdateWindow を随時実行すること、あとは WM_POINTER 系の処理後に
DefWindowProc は実行しないことで快適に動作するようになりました。
(描画については元の作りが甘いのが原因かもですが)

>>321
色々とありがとうございました。
取りかかりが遅くなりましたが、おかげさまで対応できました。
0352297
垢版 |
2018/04/19(木) 18:16:39.64ID:o7VdbXqH
> WM_POINTER 系を WM_LBUTTON や WM_MOUSEMOVE に
> 投げることで無事解決しました。

なんか変ですね。

WM_POINTER 系処理時に、併せて適切な WM_LBUTTON や WM_MOUSEMOVE
も SendMessage or PostMessage で送信することで無事解決しました。
0353デフォルトの名無しさん
垢版 |
2018/04/21(土) 17:47:35.10ID:h8C5n4IB
surfaceのペンの筆圧などの情報を取得したい場合、何というキーワードで調べるべきですか?
0358デフォルトの名無しさん
垢版 |
2018/04/26(木) 08:01:02.21ID:qK0Tcf+m
>>356
筆圧取得できました。

ペンだけでなくタッチもわかったのはとてもありがたい。
今後の課題は筆圧の最大値の取得、座標のズレの解決だ。
lParamからx,y座標取得してスクリーン座標からクライアント座標に変えたけど最大4pxぐらいずれてる(気がする)
0359デフォルトの名無しさん
垢版 |
2018/04/26(木) 16:08:09.24ID:obVS20md
ありがとうございます。
0361デフォルトの名無しさん
垢版 |
2018/05/11(金) 00:47:31.66ID:jtnkDrxN
WiXでディレクトリを作ってCreatorOwner(S-1-3-0)にアクセス権設定してみたら
プロパティのアクセス許可エントリにに"CREATOR OWNER"というグループが出てきた。
こんなの初めて見た。
0362デフォルトの名無しさん
垢版 |
2018/05/11(金) 10:36:48.86ID:eFEUpfi5
へ?
0363デフォルトの名無しさん
垢版 |
2018/05/11(金) 20:07:56.91ID:jtnkDrxN
saclsなんかでS-1-3-0を指定しても実在の所有者のSIDに置き換わるじゃん。そもそもそのためにあるわけだし。
ACLには入らないものかと思ってた。
0365デフォルトの名無しさん
垢版 |
2018/05/12(土) 11:03:35.97ID:yo5m8R46
何十年も経ってるのに今更初めてとか
0367デフォルトの名無しさん
垢版 |
2018/05/14(月) 00:22:00.59ID:VV/fGzO7
ゲームの効果音を鳴らすのにmciSendCommandで鳴らそうとすると
一瞬画面が固まるので別スレッドで再生するようにしたのですが改善せず固まります。

以下のサイトの別スレッドで動かす例も試しましたがメインループが1秒に1回しか実行されません。
ttp://eternalwindows.jp/winmm/mci/mci02.html

DirectSoundを使うしか画面が固まるのを回避する方法はないでしょうか?
0368デフォルトの名無しさん
垢版 |
2018/05/14(月) 08:42:54.37ID:YOvAeQk/
鳴らす毎に固まるん?
ロード画面とかでオープンだけ先にやっておいて
後は鳴らし終わったら最初にシークしてまた鳴らしたらいいんでない?
的外れてたらごめんな
0369367
垢版 |
2018/05/14(月) 09:10:04.81ID:Yo4sXSf8
すみません。自己解決しました。
キーが連続して入力されたと判定されないように
前回から0.1秒以下の間隔で入力されたキーを無視する部分で
レンダリングまで無視してしまっていました。
0370デフォルトの名無しさん
垢版 |
2018/05/14(月) 13:32:12.89ID:dnGRWxRE
>>367
waveout
0372367
垢版 |
2018/05/14(月) 19:29:13.78ID:TSV87Y/E
度々すみません。
音の再生で画面が固まらないようには出来たのですが、
オープン、シークを事前に行っておいても再生までに少し時間がかかってしまいます。
例えばクリックでクリック音を鳴らせるようにすると、クリックを連打した時に鳴らなくなってしまいます。
クリック音は1フレーム目から音が鳴るように調整済みで、高速化のためwavファイルにしてあります。
core i5 8250u, m.2 ssdの環境で最適化ビルドでも再生まで0.2秒以上かかります。
mcisendcommandを高速に動作させる方法はないでしょうか?
0377デフォルトの名無しさん
垢版 |
2018/05/15(火) 11:24:49.27ID:iNTYPTvx
20年近く前に設置されたお手軽APIにリアルタイム性を求めるのもな…

ゲーム用の効果音ならDirectXTKのAudio(XAudio2のラッパー)がお手頃かしら
0379デフォルトの名無しさん
垢版 |
2018/05/18(金) 06:39:21.09ID:KYXS7qiH
キーボードの入力だけを無効化するAPIを教えてください
BlockInputだとキーボードとマウスの両方が無力化されてしまうので。
0385デフォルトの名無しさん
垢版 |
2018/05/18(金) 10:17:50.27ID:mWyCAt5N
>>381
教えろよじゃねーんだよアホ
だったらどうなりゃ理想なのか教えろよ

指定したプロセスのみ無効化?
全てのプロセスで無効化?
BlockInputを試したという事は全てのプロセスで無効化でいい?
0386デフォルトの名無しさん
垢版 |
2018/05/18(金) 10:20:51.20ID:JEElro2Y
BlockInputはそのスレッドだけじゃないかな
おまえらこんな糞な奴のをよく答える気になるなw
0391デフォルトの名無しさん
垢版 |
2018/05/18(金) 12:23:26.03ID:aDkqve5K
ごめんなさい
プログラムするんじゃなくて、インストールの仕方、使えるようにする方法がわからない
0393デフォルトの名無しさん
垢版 |
2018/05/18(金) 12:53:35.86ID:aDkqve5K
どれ?。。
プロジェクトに追加されてたらOKなの?
EasyHookをつかってるプログラムが動かないんだけど
RemoteHooking.Injectがエラーになる
0394デフォルトの名無しさん
垢版 |
2018/05/18(金) 12:55:27.82ID:JEElro2Y
ducumentationからコピペ

Adding EasyHook to your project
1.Open your project in Visual Studio, or create a new one.
2.Right-click your project within the Solution Explorer and select “Manage NuGet Packages…”.
3.Search for “EasyHook”
4.Select the EasyHook package and click install.
After accepting the license agreement your project is ready to use EasyHook.
0400デフォルトの名無しさん
垢版 |
2018/05/23(水) 19:14:45.20ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

IAVAJ
■ このスレッドは過去ログ倉庫に格納されています

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