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/ 一応分かりやすく画像で状況を補足します。 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らしいというか融通が利かないというか、バカバカしいな。 タッチやフリックを要求するアプリのみにそれらのメッセージ投げるだけでいいのに。 旧来アプリでも旧来アプリなりにペンタッチで動くようにすりゃ、裾野も広がりやすいだろうにな。 ちょっと古いシステムなのでそのままちょっと直すだけで動かないものかと 試行錯誤していました。 313さんの仰る方向でも試行錯誤を続けていたのですが、既存プログラムの 出来がおかしいのか今のところうまく行っていません。 理屈で言えばうまく行くはず・・・なので、このまま調整を続けようと思います。 皆さんありがとうございました。 >>314 いやタッチのメッセージを処理しなけりゃ普通にマウスのメッセージにフォールバックはされるぞ マウスメッセージのみで手を抜きたいけど目的の品質の届かないって趣旨の質問じゃろ >>316 上でも書きましたが、タッチのメッセージを処理しないようにすると ペン入力自体全くできなくなりました。 関係あるんだかないんだかはわからんが EnableMousePointer なんて api があるな Surfaceでしか確認してないけどそういやFCUだかでペンのスワイプの既定が カーソル移動からスクロールに変更されてたなあ そのへんが原因かもね >>318 ありがとうございます。 飛びついてみましたが、変化ありませんでした。 逆の考え方で、マウスをポインティングデバイスとして使うためのものかも知れませんが、 マウス操作しても前と変わらずでした。 もしかするとマウスでフリック操作などができるようになるのかも?という気がしますが、 そのような自作アプリがないのでこれ以上は分かりません。(なお、デフォでDisableが設定されていた) 整理しますと、現状>305さんの仰るとおり、ペンでタッチして少し動かせばマウスメッセージが 飛んでくるという状況です。 すっごく古いお絵かきアプリを複数引っ張り出してみましたが、基本的に同じ挙動でした。 描きやすさに多少の差異は見られましたので工夫の余地はあるものの、根本的には WM_POINTER 系統か WM_TOUCH 系統への対応が必須のようです。 色々アドバイスいただき、皆さんありがとうございました。 タッチパネルのみのメッセージである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; タブレット持ってないからわかんないけどさ >>303 の◎ってOSが出してて、OS自体が入力を拒んでるんじゃないのか? だとしたらどのモジュールがその処理してるのか調べてその処理置換してwindows自体の挙動を変える必要があると思う 処理置換しなくてもrawinputだとか入力関連のapi叩いても盗れる可能性あるか >>323 取る方法はいくらでもあってドキュメント化もされている 今回の質問は簡易なコードでマウスと同様の動作をさせる方法は無いか?ということ。 ◎の中はメッセージ来ないから困ったって質問かと思ったんだが違ったのか わかんないもんに口出すべきじゃないなw 書き忘れてた。WM_TOUCH系の初期化すると◎のジェスチャーとか、不具合でるよ。 初期化しないで、321のコード実装してみたらいいと思う。 サーバー上のファイルを編集中に、他人からの全てのアクセスを禁止したいのですが CreateFileでdwShareModeを0にすれば排他制御は万全だと思いますか? 良い方法があれば教えてください。 補足。クライアントからサーバー上のファイルを編集するときです。 linux やわunix サーバなら消されちゃうかもね 編集完了までCloseHandleしなければdelete出来ないんじゃないでしょうか。悪意のある攻撃者はいないとして。 私が心配しているのは、一つのファイルに対して、複数のクライアントから同時に排他Open(CreateFile)が 発生したとして、複数のクライアントで排他Openが成功してしまう可能性があるんじゃ無いかって事です。 >>331 Open/Close は排他ロックにならない、ときいたことがある >>332 そうですか、、 小さいシステムなので、サーバ側プロセスまで作りたくないなーと思ってたんですが。 smb なら排他的にロックされる 2つのクライアントが矛盾する共有モードでファイルをオープンしたり削除したりはできない。 https://docs.microsoft.com/en-us/rest/api/storageservices/managing-file-locks smb のサーバが linux や mac で、その os などから smb 以外の方法で ファイルを変更、削除したりは可能だけどこれはどうしようもない もしも目的が他のクライアントにエラーを返すとこでなく 書き終わった時点でアプリが書いた内容になっていることを保証したい (書いている途中のファイルを読まれないように)だけなら 別名のファイルを作って書き終えたところで MoveFile するというよくある手法もある。 上のurlはazureのドキュメントだけどsmbでWindowsサーバなら同じ仕様だと思う >>324 私にsmbはちょっと難易度高杉のようです。 妥協 or 違うアプローチを考えてみます。 質問です。 glutを使ったプログラムで、描画の後ダブルバッファ交換のglutSwapBuffers();を入れると、 windowの画面が真っ白になってしまって何も表示されなくなるのですが、どうしたらいいですか? >>336 Windows の標準ファイル共有プロトコルSMBを用いて接続している ファイルサーバ上のファイルなら CreateFile の共有モードでロックができるということです。 >>338 なるほど。でしたら概ねロックできそうです。 ごく少数のクライアントは無料のVPNツールでLAN外からサーバーにアクセスしているんですが これもSMBプロトコルなのかどうかは調べてみます。 情報ありがとうございました。 >>337 どこに描いたの? 何を表に持ってきたの? Windowsのコールバック関数の中のWM_PAINTにダイレクトXの描画処理を書くと、エラーが出て実行されないのですが、どうしてですか?どうしたらいいですか? dc1 = beginpaint dc2= getdc dc2= releasedc dc1=endpaint >>344 MDが復刻されるらしいじゃん。 上手くいけばSSやDCも行けるよ。 初歩的な質問ですが、fgxsdkを使ったプログラムと、openGLを使ったプログラムをつくりましたが、 どちらか片方づつだけしか使えません。ひとつのプログラムで両方使おうとするとエラーが出てしまいます。 どうしてそうなるのですか?またどうすればいいのですか? 297ですが、WM_POINTER 系を WM_LBUTTON や WM_MOUSEMOVE に 投げることで無事解決しました。 WM_POINTER 系はスクリーン座標、マウス関連はクライアント座標という 不一致の整合性を取ることと、ペン操作中の描画がされないので UpdateWindow を随時実行すること、あとは WM_POINTER 系の処理後に DefWindowProc は実行しないことで快適に動作するようになりました。 (描画については元の作りが甘いのが原因かもですが) >>321 色々とありがとうございました。 取りかかりが遅くなりましたが、おかげさまで対応できました。 > WM_POINTER 系を WM_LBUTTON や WM_MOUSEMOVE に > 投げることで無事解決しました。 なんか変ですね。 WM_POINTER 系処理時に、併せて適切な WM_LBUTTON や WM_MOUSEMOVE も SendMessage or PostMessage で送信することで無事解決しました。 surfaceのペンの筆圧などの情報を取得したい場合、何というキーワードで調べるべきですか? >>356 SurfaceはWin32APIを使いません。代わりにWindows RTを使います。 言葉足らずかも知れません。 surface proのペンの情報もwindows rtですか? >>353 直前までのスレの話題がそのまんまなんだがなあ とりあえずこのへんを満遍なく読んでおきなさい https://msdn.microsoft.com/en-us/library/windows/desktop/hh454916.aspx ちなみに筆圧/傾きは基本的にGetPointerPenInfo系 片山は馬鹿だから無視しとけ >>356 筆圧取得できました。 ペンだけでなくタッチもわかったのはとてもありがたい。 今後の課題は筆圧の最大値の取得、座標のズレの解決だ。 lParamからx,y座標取得してスクリーン座標からクライアント座標に変えたけど最大4pxぐらいずれてる(気がする) WiXでディレクトリを作ってCreatorOwner(S-1-3-0)にアクセス権設定してみたら プロパティのアクセス許可エントリにに"CREATOR OWNER"というグループが出てきた。 こんなの初めて見た。 saclsなんかでS-1-3-0を指定しても実在の所有者のSIDに置き換わるじゃん。そもそもそのためにあるわけだし。 ACLには入らないものかと思ってた。 ゲームの効果音を鳴らすのにmciSendCommandで鳴らそうとすると 一瞬画面が固まるので別スレッドで再生するようにしたのですが改善せず固まります。 以下のサイトの別スレッドで動かす例も試しましたがメインループが1秒に1回しか実行されません。 ttp://eternalwindows.jp/winmm/mci/mci02.html DirectSoundを使うしか画面が固まるのを回避する方法はないでしょうか? 鳴らす毎に固まるん? ロード画面とかでオープンだけ先にやっておいて 後は鳴らし終わったら最初にシークしてまた鳴らしたらいいんでない? 的外れてたらごめんな すみません。自己解決しました。 キーが連続して入力されたと判定されないように 前回から0.1秒以下の間隔で入力されたキーを無視する部分で レンダリングまで無視してしまっていました。 度々すみません。 音の再生で画面が固まらないようには出来たのですが、 オープン、シークを事前に行っておいても再生までに少し時間がかかってしまいます。 例えばクリックでクリック音を鳴らせるようにすると、クリックを連打した時に鳴らなくなってしまいます。 クリック音は1フレーム目から音が鳴るように調整済みで、高速化のためwavファイルにしてあります。 core i5 8250u, m.2 ssdの環境で最適化ビルドでも再生まで0.2秒以上かかります。 mcisendcommandを高速に動作させる方法はないでしょうか? 20年近く前に設置されたお手軽APIにリアルタイム性を求めるのもな… ゲーム用の効果音ならDirectXTKのAudio(XAudio2のラッパー)がお手頃かしら キーボードの入力だけを無効化するAPIを教えてください BlockInputだとキーボードとマウスの両方が無力化されてしまうので。 ないじゃねーんだよアホ だったらどうすりゃ実現できるのか教えろよ >>381 教えろよじゃねーんだよアホ だったらどうなりゃ理想なのか教えろよ 指定したプロセスのみ無効化? 全てのプロセスで無効化? BlockInputを試したという事は全てのプロセスで無効化でいい? BlockInputはそのスレッドだけじゃないかな おまえらこんな糞な奴のをよく答える気になるなw キーボードを取り外す 展示とかに使うならこれだなw easyhookを使えるようにするにはどうすればいいのですか? たすけて ごめんなさい プログラムするんじゃなくて、インストールの仕方、使えるようにする方法がわからない ducumentationにインストール方法書いてあるじゃん どれ?。。 プロジェクトに追加されてたらOKなの? EasyHookをつかってるプログラムが動かないんだけど RemoteHooking.Injectがエラーになる 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. あるならEasyHookをつかってるプログラムのスレ 無いなら入手元良く見る 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 IAVAJ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる