[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/31 01:22 / Filesize : 264 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build123



1 名前:デフォルトの名無しさん mailto:sageteoff [2016/10/08(土) 12:33:02.29 ID:0jaJMPXG.net]
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build122
echo.2ch.net/test/read.cgi/tech/1451988219/

702 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 14:03:11.40 ID:bCVBq3sa.net]
>>692
違うよ
ルートウィンドウの扱いとかキャプチャしてみると違いが判る

703 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 14:14:49.61 ID:PPOfwgdP.net]
そりゃ違うけど同じだよ

704 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 14:27:13.10 ID:NYSM+Urs.net]
ウィンドウシステムの動作は GDI では規定されていないだろ。
以上、異論は無視する。

705 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 16:20:30.66 ID:DxMay05+.net]
>>692 が考えてる範囲が(以下略)

706 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 20:15:54.39 ID:BLqcsHlp.net]
矩形を塗りつぶすという意味の範囲では同じだな

707 名前:デフォルトの名無しさん mailto:sage [2017/06/28(水) 20:21:27.87 ID:azrexzpP.net]
FillRectはuser32.dll

708 名前:デフォルトの名無しさん [2017/06/29(木) 05:23:51.54 ID:RYKjplhO.net]
dwm.exe というデスクトップマネージャーのプロセスがGUI描画の番人になってるからXP再現は無理でしょ。

709 名前:デフォルトの名無しさん mailto:sage [2017/06/29(木) 06:47:05.22 ID:LierOJHW.net]
xpからファイル持ってきてosにぶちこむのができないからって
>>675ができないというわけじゃない

710 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 09:55:47.80 ID:pDIkSJMf.net]
VM使えよ



711 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 10:04:08.61 ID:8lmMmyG2.net]
Win10 SDK で作ると Windows 8.1 で動かないんだっけ?

712 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 10:24:15.07 ID:JfivK6eA.net]
動くよ

713 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 00:02:15.02 ID:E7tKWa34.net]
確かにそう書いてあるな
Windows 7 SP1 以降がターゲットなら Win10 SDK でいいのか。

https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk

714 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 00:55:09.30 ID:SrP9qrPF.net]
Win10SDKにまだ手を出していないんだけど、ようするに
Platform SDK、Windows SDK と思っていいんだよね?

715 名前:デフォルトの名無しさん mailto:sage [2017/07/01(土) 02:14:37.92 ID:3PhSHuZP.net]
>>706
Win10SDKは directX SDK が変な統合のされ方しててインクルード警告が沢山でる。実害はない。

716 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 01:10:58.28 ID:u//qTFEB.net]
fast-uploader.com/file/7054567135089/
ウインドウを表示するだけのC++コードなんですが
ウインドウを消して終了しようとするとアクセス違反の例外が発生します
誰か解決方法を教えてください

717 名前:デフォルトの名無しさん [2017/07/03(月) 20:14:34.18 ID:pLc9U1QI.net]
const WCHAR *className = L"MainWindow";

static const WCHAR *className = L"MainWindow"; 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


718 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 22:00:50.05 ID:QZMxmlWX.net]
>>708
WM_NCDESTROY だか WM_POSTNCDESTORY が来るまで
window のインスタンスを消しちゃいけなかったような

PostQuitMessage の前に DestroyWindow しておけば良かったような

719 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 00:24:40.83 ID:UJlaPfcf.net]
VS2017でそのままビルド実行してみたけど例外など発生せずに正常に終了した
何か条件とかあるのかね

720 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 00:48:55.57 ID:vYvTEYNl.net]
708です
原因がわかりました
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/12b5bb0f-d2f1-470b-9b9b-39e3e834aa80/win32api?forum=vcgeneralja
ウイルスバスターが原因でした
許さんぞ



721 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 02:04:52.19 ID:XS8CaxP/.net]
とはいえ、
「ウイルスバスターを利用されている場合はエラーが出ます」
ってわけにもいかないだろうからこの先面倒だね。
健闘をお祈りします。

722 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 02:37:05.07 ID:48gcNEwZ.net]
ウィルスバスター入れてても、その自作プログラム以外のソフトでは
そういう終了時に例外が出る問題は出ないんだよね?
とすると、そのプログラムが何かを踏んでるようにみえるけど

723 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 02:41:32.21 ID:DygcEzqH.net]
原因は >>710 で大方間違いないし

724 名前:デフォルトの名無しさん [2017/07/05(水) 10:54:07.33 ID:Qpg00Afa.net]
>>708
>>710
while( GetMessage( &msg, NULL, 0, 0 ) < 0 )
じゃないのか

725 名前:デフォルトの名無しさん mailto:sage [2017/07/05(水) 11:14:56.55 ID:K9O/lDO5.net]
GetMessageの戻り値が-1ならbreakもな

726 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 14:11:37.94 ID:eR2pXU0u.net]
ウイルスバスター側にしてみれば
DestroyWindow されてないのに SendMessage したら落ちたww
ということだろうな

727 名前:デフォルトの名無しさん mailto:sage [2017/07/06(木) 19:13:43.60 ID:Uj2/753t.net]
>>712
static LRESULT CALLBACK proc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )

wc.lpfnWndProc = &proc;

これはどういうことかね、くわしく説明してもらおう

728 名前:デフォルトの名無しさん mailto:age [2017/07/09(日) 21:40:21.92 ID:u50+Yb/E.net]
Windows10タブレットで、画面の右端のメニュー(?)でディスプレイの明るさを変更できるじゃないですか。
あれをプログラムから変更できるようにしたいんですが、Win32APIで可能ですか?

729 名前:デフォルトの名無しさん mailto:sage [2017/07/09(日) 22:21:40.92 ID:sO4xRRZ4.net]
>>720
PowerWriteACValueIndex
難易度高めだよ

730 名前:720 mailto:sage [2017/07/09(日) 22:58:40.50 ID:u50+Yb/E.net]
>>721
ありがとうございます!
む、難しいですか・・・。
頑張ってみます!



731 名前:デフォルトの名無しさん [2017/07/11(火) 10:34:24.01 ID:x+ezuj+Y.net]
ソケット通信でUDPでrecv関数でデータ取ってるのですが
これrecvでデータを取る前に何バイト溜まってるか確認するAPIあったら教えてください

732 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 11:58:32.19 ID:EEzJWlBe.net]
>>723
.netではioctlsocketでFIONREADを読んでるっぽいのでそれでいんじゃね

733 名前:デフォルトの名無しさん mailto:sage [2017/07/11(火) 15:22:08.77 ID:x+ezuj+Y.net]
>>724
おお、マジでできましたありがとう

734 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 22:50:08.62 ID:scyI/W/6.net]
#include <thread>
using namespace std;

・・・

SOCKET Sock = accept( ・・・ );

だとエラーになるんですが、

threadをincludeしない、あるいはusing namespace stdを書かないと、
正常なソケットを返します。

なぜこんなことが起こるのでしょうか??

735 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 11:47:56.92 ID:vFZ8mgsl.net]
名前が衝突してるから

736 名前:726 mailto:sage [2017/07/13(木) 19:49:38.44 ID:NRXck0Ni.net]
>>727
でも、エラーもなくコンパイル通りますし、VS上で定義を参照しても、
いずれの場合もWinSockのaccept()が参照されます。

同じWinSockのAPIでbind()がstd::bind()と衝突することはありましたが、
今回のaccept()はそれとは違う感じです。

737 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 19:54:13.72 ID:EhXEoqOX.net]
エラーになるけどエラーないってことか

738 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 20:11:37.92 ID:WT5N9OT5.net]
>>728
エラーになる最小のコードを晒さんとなんとも言えんわ

739 名前:726 mailto:sage [2017/07/13(木) 20:44:11.52 ID:NRXck0Ni.net]
>>729
コンパイルエラーはありませんが、
実行時にaccept()がエラーを返します。

>>730

#include <winsock.h>
#pragma comment( lib, "wsock32.lib" )

#include <thread>
using namespace std;

int main()
{
WSADATA WSAData;
WSAStartup( MAKEWORD( 1, 1 ), &WSAData );

SOCKET SockListen = socket( AF_INET, SOCK_STREAM, 0 );

SOCKADDR_IN Addr;
Addr.sin_family = AF_INET;
Addr.sin_addr.s_addr = htonl( INADDR_ANY );
Addr.sin_port = htons( 1234 );

bind( SockListen, ( SOCKADDR* )&Addr, sizeof( SOCKADDR ) );

listen( SockListen, 1 );

SOCKET SockAccept = accept( SockListen, NULL, NULL );

closesocket( SockAccept );
closesocket( SockListen );

WSACleanup();

return 0;
}

これが、accept()がエラーを返すコードです。
#include <thread>かusing namespace std;のいずれか、あるいは両方をコメントアウトすると
正常なソケットを返します。
IDEはVisual Studio Express 2015 for Windows Desktopです。

740 名前:726 mailto:sage [2017/07/13(木) 20:49:20.67 ID:NRXck0Ni.net]
自己解決しました!
std::bind()とwinsockのbind()が入れ替わってました!
::bind()とすればaccept()もエラーを返さなくなりました。
以前はエラーが出たと思ったのですが、うっかりしてました・・・。

失礼しました!



741 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 20:58:52.65 ID:WT5N9OT5.net]
ドンマイ

742 名前:デフォルトの名無しさん mailto:sage [2017/07/13(木) 21:25:50.23 ID:ICDc/LUP.net]
bindというマクロが定義されてるライブラリがあって困ったことがあるな

743 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 10:38:54.13 ID:V0t+uF1e.net]
>>728
名前衝突のときエラーメッセージみるのは
リンク時だろ

744 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 12:41:08.29 ID:g8QLqbc9.net]
>>735
今更だし
的はずれだし

745 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 14:56:41.55 ID:QI5b+orn.net]
>>731
>using namespace std;
そもそもコレできるけど関数名書かないならやらない方がいい

746 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 21:54:21.02 ID:rNsHAWgc.net]
エンコードした動画データをWinSockを使ってUDPで送信しているんですが、
通信速度が妙に制限されている感じがします。

送信PC → (有線LAN GbE) → Wi-Fiルーター → (無線11ac) → Winタブ

有線の方はGbEなのに、データ量を増やすと8Mbpsあたりで頭打ちになり、
無線の方も11acなのに3Mbpsあたりで受信が頭打ちになります。
(いずれもタスクマネージャーのパフォーマンスタブで確認)

無線の方は最初もっと酷くて、調べたらワイヤレスアダプタが省電力モードになっていたので、
これを解除すると改善はしたのですが、それでも上記の通り3Mbps程度です。
実効帯域は理論値には及ばないとは思いますが、それにしても酷くないですか??
何かリミッターがかかっているのでしょうか?
それともこんなもんでしょうか?

747 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 00:49:20.22 ID:9CUWPUhe.net]
受け取り側WinXPにしても速度一緒かね?
DDOS対策されたに一票

748 名前:デフォルトの名無しさん [2017/07/15(土) 11:33:44.05 ID:UAO9e8fy.net]
>>738
jumboフレームにしてないとかいうオチ

749 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 17:41:49.53 ID:9CUWPUhe.net]
jumboじゃなくても100MBsecぐらいすぐ出るかと

750 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 19:33:47.48 ID:jhhap/jh.net]
1byte毎にsend()してるとかかも w



751 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 19:39:10.00 ID:GPnBT/AI.net]
>>742
+1

752 名前:738 mailto:sage [2017/07/17(月) 11:59:14.97 ID:/eGUIGmm.net]
>>739
XPのPCがないので検証できないですね。
DDOS対策だとすると、成す術なしでしょうか・・・。

>>740
ジャンボフレームの設定は、Surfaceではできないみたいです。
仮にジャンボフレームじゃないにしても、今の帯域は小さすぎ

753 名前:る気がします。

>>742
送り側はsendto()で、一度に送れる最大サイズの65507バイトで送ってます。
[]
[ここ壊れてます]

754 名前:デフォルトの名無しさん mailto:sage [2017/07/17(月) 15:26:50.32 ID:JChZsj9+.net]
>>744
むしろ一度に送りすぎでは?
etherのフレームに入り切らないとipレベルでフラグメンテーションを起こして余計遅くなることもある。
1500-20-8=1472以下だとどうなる?

755 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 07:29:21.72 ID:pxoS8Rlj.net]
>>744
ソケットのバッファが溢れているのかもしれない。UDPだからsendしても黙って破棄されうる。これが原因だったらsetsockoptで送信、受信のバッファを大きくすれば良い。
また、UDPではOSが送信速度の調節をしないから、アプリケーション側で一定の速度でsendしないと途中のデバイスや受信側で破棄されることもある。
例えば、5Mbpsで送っているつもりでも、10ms間に500Mbpsで送り、後の990msは何もしていない可能性がある。その場合途中のWi-Fiルータのバッファが溢れるかもしれない。
送信用のスレッドを作り、send毎に経過時間と送信量を調べ、適当にsleepさせれば良い。

756 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 13:10:40.68 ID:Qgn2HB2W.net]
LANケーブルの方は10Mbpsでリンクアップしてない?

757 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 13:18:25.28 ID:LIY57LJN.net]
パケットキャプチャしないの?

758 名前:738 mailto:sage [2017/07/18(火) 23:58:54.20 ID:wXjNiN5C.net]
本日、色々検証してみまして、分かったことを書きます。

送信側(優先)のPCで、whileループでひたすらsendto()しまくる単純なプログラムを動かしたところ、
何と1Gbps近く出ました!
動画圧縮・送信アプリで送信制限があるかに見えたのは、
単にエンコードのAPIが、一定以上のビットレートではデータサイズが飽和しているだけのようです。
このアプリを複数起動したところ、1プロセス×起動数分の帯域(12Mbps等)をちゃんと消費しました。

しかし、一方の受信側(無線)のタブレットPCでは、whileループでひたすらrecvfrom()しまくっても
5Mbps程度でやはり頭打ちしました。

これらはすべてUDPでの送受信ですが、
試しにTCPではどうか検証してみたところ、
フリーのFTP転送アプリで、送受信ともに、何と200Mbpsくらい出ました!

そんなバカな、と思い、自分でTCP送受信だけをひたすら行う単純なプログラムを書いて実行してみたところ、
200Mbpsには至らなかったものの、26Mbpsくらいまでは送受信ともに出せました。
なお、帯域を大きくすればするほど、送信に失敗する確率が高まる傾向が見られました。
これはTCPで見られる、受信側のバッファ枯渇によるものと思われます。
アプリ側でsetsockopt()で受信バッファを拡張してやると改善し、上記bpsに至りました。

FTP転送アプリがなぜ200Mbpsも叩き出せたかは分かりませんが、
今回の動画送受信アプリでは26Mbpsでも十分な帯域なので、結果的にはUDPからTCPに変更ことで対策が完了しました。

759 名前:738 mailto:sage [2017/07/19(水) 00:04:16.35 ID:eXD5VvDv.net]
今回の検証で、以下のような仮説が立ったのですが、いかがでしょうか?

・11acにまで広帯域化し、TCPの再送制御等のオーバーヘッドが相対的に小さくなった
・11acで帯域は向上し、エラーレートも抑えられているものの、パケットロスする絶対数(機会)は
増加しているため、UDPには向かなくなっている

こうなると、「大容量のデータを効率的に送受信」というUDPのメリットは失われ、
ブロードキャスティングでデータ共有の利点が残る程度になるのかなぁ、という感じです。

この考察は的を射ているでしょうか?
だとしたら、業界では知られてることなんでしょうかね?

760 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 01:57:20.58 ID:Q4K+dCVc.net]
>>750
@TCPのオーバーヘッドは送受信の処理が重いことが主で、別にそれほど帯域を浪費する訳ではない。
ヘッダによる消費は、UDPだと1500バイト中28バイト、TCPだと1500バイト中40バイト。TCPだと適宜ACKが返ってくるが、それも各パケット数十バイト。
送受信側の処理速度向上が大きい。
AUDP向きかどうかは当然何をしたいかに依る。
TCPの処理が邪魔になる場合(遅延やパフォーマンス等の理由で)、「何もしない」UDP上に独自の実装をする。TCPで問題ないならTCPで良い。
信頼できるストリーム通信が必要なら、結局UDP上にTCPもどきを作ることになるだけ。
BTCPの欠点に、RTTが大きいと遅くなることがある。海外との大量のファイル転送はUDP上の独自プロトコルで行ったりする。あと、TCPoverTCPはパフォーマンスが劣化するから、VPNやトンネリングはUDP上が良い。
また、コネクションレスであることは、NATやFWを越える時に便利だったりする。
C普通、何もしないUDPは、余計な処理をするTCPより遅くはならない。UDPで5Mbpsしか出ないのは、どこかのバッファが溢れているか、大きすぎるデータをsendしてフラグメンテーションを起こしているかどちらかの可能性が高い。



761 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 09:22:44.41 ID:q1yo5LZE.net]
>>750
>・11acで帯域は向上し、エラーレートも抑えられているものの、パケットロスする絶対数(機会)は
>増加しているため、UDPには向かなくなっている

そんなにパケットロスしているとtcpも速度出ないですよ。
原理的には、制御して再送する分だけudpより遅くなるでしょう。

udp で速度が出ないのは主として送受信側のバッファ溢れでしょうから、

・送信側は溢れないレートで送信する
例えば帯域1GHz WiFi で 1Gbps で送信したら帯域を食い潰して受信側へ再送出できませんよね。
ケーブルの場合と違って電波は PC->基地局-> 受信側とairを2回経由します。
あまり大量に送ると基地局まで届いてもそこでドロップされます。

・read側はなるべくread I/O を発行しっぱなしにしてあげる
スレッド使うなどカーネルの受信バッファあてにしないで頑張る。

762 名前:デフォルトの名無しさん [2017/07/19(水) 11:44:11.55 ID:+fK80sDM.net]
>>749
FTPはpasvじゃね

763 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 22:12:25.78 ID:54vs2xq7.net]
>>750
> 今回の検証で、以下のような仮説が立ったのですが、いかがでしょうか?
全然的はずれ

764 名前:738 mailto:sage [2017/07/19(水) 23:45:01.11 ID:eXD5VvDv.net]
詳細なご助言、ありがとうございます。
ソケットプログラミングを舐めてました・・・。
勉強します。

765 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 21:24:45.77 ID:i/1Azv/r.net]
Windows10の環境で、ShowCursor(FALSE);、ShowCursor(TRUE);
が何故か動かないですが、原因わかりますか?代用のAPIってありますか?
カーソルの形状を透明に置き換えるしかないかな。。。

766 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 21:33:57.11 ID:gJMUPJMf.net]
>>756
自分のプログラムではWindows10で動いてるよ。

複数回呼んだりしてない?
ShowCursor()は内部の参照カウントみたいなのをインクリメント/デクリメントして、
0以上かどうかで表示/非表示が変わる。
確実にやるならwhile文で戻り値(カウント値)をチェックしてやる。

767 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 00:50:38.22 ID:Q/sCu+tw.net]
自分のアプリ内だけ消したいとかならWM_SETCURSORでSetCursorにぬるぽ渡してるなあ

768 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 01:03:43.40 ID:ApWJ+3q2.net]
動かない原因がわかりました。。。
自分のWINDOWを表示していない場合、カーソル非表示にならないっぽいです。

ジョイスパッドで操作するマウスを作っていて、マウスを移動した後で、
自動的にマウスカーソルの表示/非表示したかったのですが、
自分のウインドウを表示していないためにうまくいかない;;

カーソルの形状変えて回避を試すか、透過ウインドとかで回避?

769 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 01:40:41.42 ID:ApWJ+3q2.net]
もしかして、フック使わないとだめ?

770 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 02:06:27.33 ID:etlzFZfn.net]
どうだったかなぁ
グローバルにマウスカーソルを消す方法はあったかなぁ
相当な迷惑行為だからなぁ
そんな事をしたい奴も居ないだろうしなぁ



771 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 02:58:51.42 ID:mnSWSFmQ.net]
透過ウィンドウが王道じゃなかったか
忘れたけど

772 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 08:28:59.85 ID:axe1Ox+X.net]
透過ウィンドウ最大化でなんとかしてた

773 名前:デフォルトの名無しさん [2017/07/24(月) 15:15:22.73 ID:BdqEvISL.net]
vfd

774 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 00:03:21.82 ID:SY0Mxk4f.net]
SetSystemCursorで一応変更できるけど完璧にはできない

775 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 21:44:38.92 ID:dmLhcxPj.net]
マウスの件ですが、サイズ1x1のウインドウを作って、WM_TIMERでウインドウを追尾するようにして対処しました。
透過ウインドでアルファ1設定しています。0にしちゃうとダメっぽいです。もっといい方法あるのでしょうか?
hWnd = CreateWindowEx(WS_EX_TOPMOST | WS_EX_LAYERED, szWindowClass, szTitle,WS_POPUP,0, 0, 1, 1, NULL, NULL, hInstance, NULL);
SetLayeredWindowAttributes(hWnd, 0, 1, LWA_ALPHA); // 透明1
int n;do { n = ShowCursor(0); } while (n >= 0); // マウスカーソルを消す
case WM_TIMER: POINT pt;GetCursorPos(&pt);SetWindowPos(hWnd, HWND_TOPMOST, pt.x, pt.y, 0, 0, SWP_NOSIZE);

776 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/26(水) 21:49:04.00 ID:bC5SPfn2.net]
ウィンドウを仮想スクリーンいっぱいにすれば、追尾の必要はない。

777 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 22:17:49.99 ID:dmLhcxPj.net]
>>767
仮想スクリーンサイズいっぱいにウインドウを作っちゃうと、CPU/GPUのパワー無駄に使いませんか?
1x1サイズのほうが、アプリ的には、軽いと思うんですが?

778 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/27(木) 01:34:42.30 ID:vaTNWP9F.net]
>>768
WS_EX_TRANSPARENTを使えば描画が透過になるらしい。

779 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 16:09:43.62 ID:5IXklzdW.net]
そのようなことが本当に可能かどうかの確認もせずに書き込むのはなぜなんですか?
実際に昔自分が試したことがあって、完全にわかっているなら良いと思うけど
やったこともないことを、試しもせずに、どうして適当書き込むの?

まずレイヤードウィンドウで、SetLayeredWindowAttributes でアルファ値を0にした場合
完全な透明になるとともに、マウスの当たり判定も何もなくなって
まるでウィンドウが存在していないかのような扱いになるので
マウスカーソルがウィンドウ上に有るよっていう扱いが無くなって
マウスカーソルを非表示にしても、非常時にはならない
で、アルファ値を1とか適当な値にするとマウスの当たり判定が出来るので
めでたくマウスカーソルを非表示にすることが出来る
ここまでは質問者が書いている内容

ここで、ウィンドウサイズを画面いっぱいに広げると
画面全体がアルファ値の「1」の分の影響を受けそうだということもあるが
とりあえず質問者はGPUの負荷を気にしている
そこでアルファ値を0にするとWindows内の最適化でGPUでの合成処理はスキップされるだろうが
しかし先ほども書いた通りマウスの当たり判定も無くなるのでマウスカーソルは消えなくなる
で、この場合WS_EX_TRANSPARENTの何が有効なんだという話
これを指定したからといって、アルファ値が1であればウィンドウは表示されるし
表示されるんなら、GPUに負荷がかかることに変わりなし

だが、ここまでであればまだよい、まだわかる、それはいい、本当の問題は
レイヤードウィンドウにおいてのWS_EX_TRANSPARENTは、「マウスイベントを透過させる」の意だ
つまり、ウィンドウは半透明とかで表示するけども、マウス的には無きものとして扱う
そういう意味であるので、マウスの判定は無くなるし、ウィンドウ上にマウスがあるって扱いも無くなるので
「マウスカーソルは消えない」
だから、レイヤードウィンドウでWS_EX_TRANSPARENTだと
アルファ値が何であろうと、ウィンドウサイズが何であると、関係なく
そもそもマウスカーソルは消えない

つまり言ってることが二重三重にデタラメ

780 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 16:26:35.88 ID:TSUPQXzA.net]
とりあえず全部読んだ



781 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 16:32:39.41 ID:5IXklzdW.net]
ちなみにレイヤードウィンドウじゃない普通のウィンドウに
WS_EX_TRANSPARENTを指定しても
今回の件はうまくいかないからな
WS_EX_TRANSPARENTの仕様はその昔のWindowsの描画の仕様に強く依存していて
それ故にかなり複雑な動きをするところもあったかもしれないが
しかしながら今回の件において、それも既に関係が無い
なぜなら今はデスクトップコンポジションだから

ウィンドウは自分のビットマップを持ってるので
かつてのWindowsの再描画の仕様によってもたらされていた
ウィンドウの下のものが透けて見えるように感じる、という現象は起こらない

782 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/27(木) 17:02:53.88 ID:LWV2Yf86.net]
WM_ERASEBKGNDをつぶせば透過に

783 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 17:54:30.49 ID:5IXklzdW.net]
良くわからないなら少なくとも出来るかどうか確認してから言えといっただろ

784 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 18:03:15.82 ID:DvER6G26.net]
それがにちゃんねるクォリティというもの、コードを貼らない書き込みに期待しないのがいい

785 名前:デフォルトの名無しさん [2017/07/27(木) 18:06:42.35 ID:46kBibo2.net]
誰に確認してから言えって言ってるの?
回答側に確認義務があるなら、だれも回答したくなくるしヒントも言えんわ。

786 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 18:22:49.05 ID:t8Fq16Nl.net]
片山はNGワードでOK

787 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 18:29:25.65 ID:DvER6G26.net]
>>775
これは質問者にもいえる、最低限のコードを貼れない様ではまともな回答も期待できない
うんこQZでも1万ステップ程度のコードを貼っていた
まずは手を動かしたほうがいい

788 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 19:16:34.98 ID:P1js1uXh.net]
責任ある解答が欲しけりゃ金払えよ
払っても責任とってくれるかどうかは知らんけど w

789 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 20:24:33.89 ID:5IXklzdW.net]
スレの運営方針とか、自治的な何かとは、関係ない
2chのスレがグダグダになろうが、嘘であふれかえろうが、知ったことではない

知りもしないことを、調べもしないで、確かめることもせず
知ったかがしたいという唯それだけのために適当なことを書き込む
あなたはいったい何なんだ?そして実際間違ってる
という単なる個人攻撃

そして、また間髪おかず間違ったことを書き込んだから
なぜ同じ過ちを繰り返す?としたまで

拡大解釈して一般化してどうこう言うようなものではないぞ

790 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 20:39:13.38 ID:7IEdpfIL.net]
>>780
しったかが多いのは何もにちゃんねるに限らない,世間様でもあきれ返るばかりに多いんだよ



791 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 21:17:08.86 ID:lePSsggt.net]
>>780
無駄な正義感で生きにくそう

792 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 21:57:41.84 ID:P8zzUyc0.net]
>>780
2chがどうなろうと知ったこっちゃないのに個人が間違ったこと書くのは許せないとか
アホすぎ w

793 名前:デフォルトの名無しさん [2017/07/27(木) 22:02:56.93 ID:DDfF3pSC.net]
株式会社メビウス(mob)
matsuri.2ch.net/test/read.cgi/infosys/1501121465/

794 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 22:40:03.60 ID:lBgNNeyr.net]
ネットでデタラメ狩りしてもキリがないもんな
大抵は質問する側の方が知識あるから大丈夫

795 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 23:21:44.69 ID:TSUPQXzA.net]
知識がある質問側が知識のない回答者に訊くのか

796 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 01:04:49.84 ID:/BbkHPYe.net]
質問する人は自分でやってみて上手くいかず答えが難しいから質問するわけで、
やったこともなく難しいということすらわからず当てずっぽうな返答を書く人よりは知識あるでしょ。

797 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 01:14:51.00 ID:/BbkHPYe.net]
ところで当てずっぽうで書くけど拡張ウィンドウスタイルで透明にして
erasebkgnd やら ncpaint やらで描画サボっても透明になるんじゃないか
昔のバイナリはそうやって穴あきウィンドウとか実装してたわけで
その辺は今でも互換性あるでしょ

798 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 04:15:41.18 ID:OlX0v1uA.net]
>>787
どこまで頭悪いとそういう理論にたどり着くのか

799 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 07:47:39.36 ID:bTFRT7jO.net]
>>786
そういえば、知識のある人に訊いたつもりなのに知識ない人から変な回答が付くってのはよくあるなぁ。

800 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 09:01:08.00 ID:QaJRNrxO.net]
つもりだからでしょ
つもりしゃなくてそうしなよ



801 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 10:41:48.20 ID:HR9e4R3v.net]
>>780
>>770で言っていることは正しいと思うよ
理想としてはね
でも現実にはそういう人はなくならない
なら相手に「誠心誠意真実のみを語る」ことを求めるより
相手の言葉をヒントとして自分で試す、実践していくことのほうが
より確実に真実に近づくと言えるのではないだろうか

>>787
でも質問した内容について、「どっちも知識ない」ことは同じじゃないだろうか
目くそ鼻くそなんだし仲良くすればいいと思うよ

802 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 20:56:53.43 ID:bTFRT7jO.net]
「知識のある人だけ答えてください」とか書いたら余計バカが集まるw






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<264KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef