Win32API質問箱 Build123©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
Win32APIについての質問はこちらへどうぞ。

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

■過去スレ
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
2017/02/05(日) 19:59:38.66ID:lBwes1rb
WindowsAPIのRect系は右と下の1ドットは含まれないはずだったが
2017/02/05(日) 20:00:15.60ID:Kv3SwlRy
ピクセルの左上の隙間の位置を返す仕様(Javaと同じ)
なので単純に差を出して指定しないと膨らむ
2017/02/05(日) 20:02:41.46ID:wagcFIA6
>>387
画面DPI100%以外になってない?vista以降はそれ原因で従来のAPIの扱いが面倒になってる
391デフォルトの名無しさん
垢版 |
2017/02/05(日) 20:05:12.27ID:ajRW1B46
MSDNを見ると
GetClientRectはleftとtopが常に0で
rightとbottomには幅と高さが入ってくると書かれていて
事実その通りになっていますが
GetWindowRectのほうは
ウインドウの左上座標と右下座標と表記されてるので
right-left+1 が幅になるはずです
なのでこの仕様はおかしいと思います
2017/02/05(日) 20:08:48.13ID:DkYFBwwC
>>391
英語版みたらちゃんと書いてあったよ

ていうかこの関数に限らず
Rect構造体の定義としてbottomとrightは1ピクセル外側を示すことになってる
393デフォルトの名無しさん
垢版 |
2017/02/05(日) 20:19:29.52ID:ajRW1B46
オセロでなく碁盤で数えろってことですね
納得しました
2017/02/06(月) 11:44:22.96ID:atuXlQHb
>>392この辺ちゃんと理解してないと1ドット足りないみたいな事態になるんだよな
VBerとか1オリジンでUboundとか慣れてるとドはまりしそう
2017/02/06(月) 15:30:39.87ID:sNAkUIYE
>>391
GetClientRectの話だけど
left=top=0だとして
right=bottom=1だったら
幅と高さは1で
ウィンドウは(0,0)-(0,0)で1ピクセルのウィンドウだから
やっぱり幅と高さは1だし矛盾しない
2017/02/06(月) 16:17:17.14ID:atuXlQHb
画像の部分クリップとかやりだすとちょっと混乱したりする教訓か
ドトネトなんかではx y width heightなプロパティを別に持っている
2017/02/06(月) 17:51:48.08ID:2YUAIh/k
SetWindowPosとMoveWindowとで
ウィンドウを動かした時に何か違いはあるんでしょうか?
SetWindowPosでウィンドウは動かせるのに
MoveWindowは何のために用意されてるんですか?
2017/02/06(月) 18:06:24.84ID:myCEQNc2
>>397
SetWindowPosの方がフラグ指定や挿入位置指定など、できることが多い。
2017/02/07(火) 08:29:41.33ID:g0+JjgLn
>>398
ではMoveWindowは何のために存在しているの
2017/02/07(火) 09:23:30.46ID:mtDQmVBr
フラグとか触らないでただ動かす時のため
2017/02/07(火) 11:23:40.44ID:IHNU1ydF
昔のことは知らないけど SetWindowPos が後から追加されたんじゃないの
2017/02/07(火) 11:40:48.78ID:+LdvU0fQ
理由も昔のことも知らないけど 今はMoveWindowの内部でSetWindowPosが呼ばれてたと思う
2017/02/07(火) 15:19:54.85ID:LuCsRke8
後方互換性のため
2017/02/07(火) 22:51:17.46ID:m2J0GXa0
DeferWindowPos
2017/02/17(金) 18:42:29.90ID:xKxGFEhy
実行ファイルの埋め込みマニフェストの実体をいじらずに
内容を修正した上で起動したり、任意の外部マニフェストファイルを読めるように
操作できませんか?
具体的には、マニフェストのcompatibilityの項目なんですが。。。
406デフォルトの名無しさん
垢版 |
2017/02/17(金) 19:08:12.47ID:yGnzX63H
OSのバージョンにより異なる
ttps://msdn.microsoft.com/ja-jp/library/ms235342%28VS.80%29.aspx
ttp://www.taosoftware.co.jp/blog/2008/02/windows_1.html
ttp://nekojiru.blog.so-net.ne.jp/2007-09-03
2017/02/17(金) 19:35:32.23ID:xKxGFEhy
Windows7以降は埋め込み優先で、
実行ファイルのマニフェスト自身を書き換える方法、レジストリでOS自体の設定をいじる方法、
ActivateActCtx()でcommctl.dllは変更できるっぽい?
ってのはわかったんですが、個別に実行ファイルをいじらずに操作する方法があるかな、と思った次第です。
2017/02/17(金) 19:51:35.09ID:Z3/lG4/1
ショートカット作って、そのプロパティにアクセスして、互換性編集して、そのショートカットで起動させるとか?
2017/03/01(水) 19:41:47.62ID:GhHUeiw5
windows8.1/10 マルチモニター環境で、ウインドウの位置がタッチパネルデバイスを
有するモニターであるかを調べたい場合どうすればよいですか?

HMONITOR hMonitor = MonitorFromWindow(hWnd,MONITOR_DEFAULTTONEAREST);
これで、モニターのハンドルは調べられるのですが、
このモニターがタッチパネルを有するモニターを調べる場合どうすればいいかわかりません。
2017/03/01(水) 19:53:26.09ID:IeB4TnBd
Win32_PointingDeviceあたりだろうな
2017/03/02(木) 16:15:18.67ID:35Ccu8m+
Win32 Pointhig Device軽く調べたんですが、それっぽいのないですね;;
2017/03/02(木) 16:33:06.48ID:j0RdOmJS
それでタッチかどうかわかるでしょ
あとはWin32_VideoController、Win32_DesktopMonitor、GetMonitorInfoあたりと情報突き合わせたら
その座標がタッチ対応かわかる
2017/03/02(木) 17:34:40.28ID:HWkXh2UP
応用がきくプログラマーを目指せ
2017/03/02(木) 19:31:01.50ID:ZV5SMkF2
ここさわって

っていううメッセージを描いておく
2017/03/02(木) 20:19:05.81ID:HWkXh2UP
俺ならそのメッセージでもマウス操作しかしなさそうだわw
2017/03/02(木) 21:11:15.50ID:35Ccu8m+
ユーザー側に、全てのモニターをタッチさせて、有効無効を設定してくれとダイアログだろうかと思いましたが、
プライマリーモニターかどうかを調べるのは簡単だったので、プライマリーモニターのみ対応にしたほうが混乱ないかなーと思いました。
2017/03/02(木) 21:14:09.87ID:35Ccu8m+
ユーザー側に、全てのモニターをタッチさせて、有効無効を設定してくれと、ダイアログを出そうかと思いましたが、
プライマリーモニターかどうかを調べるのは簡単だったので、プライマリーモニターのみ対応にしたほうが混乱ないかなーと思いました。
418デフォルトの名無しさん
垢版 |
2017/03/03(金) 12:32:15.32ID:IUFykjWp
Windowsじゃ何やっても無駄ですよ。
生産性はないです。

まともにタブで操作すると考え方をタブに合わせて全体を設計し直さないとダメでです。
ポインターの概念を画像で処理する必要ががります。
マルチで接触してる部分の個々の中心点を求めて

接触している部分にボタンの候補があるかどうか
そういう処理を行わないとだめ
Windowsが使えないのは、ポインティングデバイスから無理に
座標変換してるので誤操作と誤作動だらけになる。

マイクロソフトにはこの分野は作れないと思いますよ。
2017/03/03(金) 12:56:20.62ID:Loi48FLt
入力なんていう低レベルからシェア捕れる可能性を秘めてる
集金システムもまともなのがないからそこもね
ハードからソフトまでガチガチなiphoneやandroidと違ってビジネスチャンスに溢れた自由なOS。それがWindows
2017/03/03(金) 16:55:05.95ID:7kccr9GO
>>418
窓板に何年も毎日貼り付いてるキチガイタイポマカーのコピペじゃねえかw
2017/03/04(土) 13:10:48.65ID:aE/wnzST
どんなに優れていても誰にも使われなければ意味が無い。
2017/03/04(土) 13:24:45.44ID:il8vJgV1
使われてるやん
って言ったら使ってる奴がアホってか?
423デフォルトの名無しさん
垢版 |
2017/03/04(土) 14:25:59.12ID:GRvQ2lmz
シェア獲得率と優劣は比例しない
2017/03/04(土) 14:32:38.90ID:svzWwCAT
そう言っておかないとシェア4%のMacなんか何の立場もないもんな
2017/03/04(土) 14:46:44.82ID:nGVyMKq0
シェア獲得率が高いものは、シェアに優れてる
2017/03/04(土) 15:10:40.29ID:aE/wnzST
別に使われてると思ってるなら良いんでない?
俺は趣味でもあり金を稼ぐ道具でもあるからMacなんて使わんけど。

だいたい、知らんもんで金は稼げない。
2017/03/04(土) 18:17:19.42ID:ZJLt6oM8
MacをPCだとするとシェア4%になるが
DTMコンソールやCG用レンダラーだとするとシェアが何倍にもなる不思議
2017/03/05(日) 13:07:20.68ID:Fl7T0tas
>>419
でも優良見込み客を囲い込んでるのは i & a なんだよなぁ
2017/03/05(日) 13:41:54.91ID:1JomNGIg
>>427
2015年での世界におけるAppleのシェアは7.5%だそうです。

http://ascii.jp/elem/000/001/104/1104428/20160113_yohiro_PCShipment_03_767x659.png
2017/03/05(日) 14:27:40.01ID:zkc5hO4d
ベンダー出荷シェアとかOSの販売数ってのは利用率なシェアとは別モンだからな
2017/03/05(日) 17:20:05.73ID:KDLljhIv
光学ドライブのAutoRunを無効にしてると、ディスクを入れ替えたことに気付けないみたいですが、
どうやったらディスクの情報をリフレッシュさせることができるのでしょうか?
ディレクトリ一覧を取得しようとしても、入れ替え前のディスクのディレクトリが出てきて困ってます
2017/03/05(日) 19:16:54.98ID:zkc5hO4d
今のOSはAutoRun最初から無効だから、それが本当ならほとんどのPCでまともに取得できないってことになるな
ソースどっかミスってるんでしょ
2017/03/05(日) 19:23:58.07ID:91bxBwXE
もちろんエクスプローラーで開けば情報は更新されます。プログラムからトレイを開閉しても情報は更新されます。
光学ドライブのボタンで開閉すると、情報が更新されないままなのです。
2017/03/05(日) 19:45:45.34ID:1JomNGIg
>>431
この辺、参考にならないかな

https://support.microsoft.com/ja-jp/help/163503/how-to-receive-notification-of-cd-rom-insertion-or-removal
2017/03/10(金) 01:12:03.58ID:5qliBH2Z
https://ideone.com/i4fQGS
Win32API勉強中なんですが、ウィンドウを作ることができません、hWndがNULLになってしまって途中で終わってしまいます
ウィンドウクラスの登録も失敗していないみたいなので原因がわかりません、どこが悪いのか教えてください
2017/03/10(金) 03:42:45.84ID:Vp9TD86Z
自分のウインドのZオーダーが変化したタイミングを調べたいのですが、
ウインドメッセージでなにかありましたっけ?
2017/03/10(金) 03:48:47.30ID:G57q42um
>>435
× defalut
〇 default
>>436
WM_WINDOWPOSCHANGEDかな
2017/03/10(金) 04:07:50.94ID:Vp9TD86Z
WM_WINDOWPOSCHANGEDは、だめでした。

ちなみにウインドウはCreateWindowExで、WS_EX_TOPMOSTしています。
ウインドウのスタートメニューが重なっと時にそれよりも前面に表示したいのですが。。
WM_WINDOWPOSCHANGEDにメッセージ来てないっぽいです。

今は、代案として1秒ごとに、SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);を入れているのですが、
もっといい方法ないでしょうか?

いま、GetWindowあたり調べているのですが、GetWindow(hWnd, GW_HWNDPREV);だと
imeのハンドルが取れるっぽいのでなんか違う。。orz
2017/03/10(金) 05:09:47.00ID:j91K0HTy
ランサムウェアですねわかります
2017/03/10(金) 05:17:14.60ID:Vp9TD86Z
>>439
悪さするアプリじゃないんだが?
441デフォルトの名無しさん
垢版 |
2017/03/10(金) 07:10:36.82ID:n8W4k0Sb
異教徒の大量虐殺をためらわない一神教の思想性を理解するのに役立つ。
いずれ日本がアメリカに復讐する日が来るだろう。
2017/03/10(金) 07:13:07.30ID:n8W4k0Sb
>>441 誤爆失礼
2017/03/10(金) 08:47:49.51ID:Lkoti1g0
>>440
昔からこういう奴はいるから気にするな
444デフォルトの名無しさん
垢版 |
2017/03/10(金) 14:11:40.65ID:wwCDmvkp
図星ですねわかります
2017/03/10(金) 14:29:16.92ID:iyjWrKHK
NG: (HBRUSH)COLOR_BACKGROUND
OK: (HBRUSH)(COLOR_3DFACE + 1)

ShowWindow(hWnd, SW_SHOW);の後にUpdateWindow(hWnd);がない。
2017/03/10(金) 14:30:21.93ID:iyjWrKHK
ShowWindow(hWnd, SW_SHOW);
じゃなくて、ShowWindow(hWnd, nCmdShow);
かShowWindow(hWnd, SW_SHOWNORMAL);にしろ。
2017/03/10(金) 14:40:49.87ID:ALHJU+Fn
>>437
ありがとうございますこれでいけました
2017/03/10(金) 16:29:28.86ID:ALHJU+Fn
すいませんまた質問させてください
テトリスを作る動画を見ながらこれを作っているのですが、リソースの画像を一度表示されたんですが、画像のサイズが変だったので訂正したところ表示されなくなりました
どこが悪いのか教えて頂けないでしょうか?
https://ideone.com/i4fQGS
449デフォルトの名無しさん
垢版 |
2017/03/10(金) 17:21:39.95ID:wwCDmvkp
r.right = 24 * 10;
r.bottom = 24 * 20;
2017/03/12(日) 21:56:50.24ID:EdU52Ynw
タスクトレイのShell_NotifyIcon();について質問です。
タスクトレイのアイコンサイズは32x32または16x16が一般的っぽいのですが、
64x32などの長方形サイズなどのカスタムアイコンを設定できるのでしょうか?
icdata.dwInfoFlagsで NIIF_LARGE_ICONっていうパラメーターを設定したのですが、
反映されていないっぽいです。
case WM_CREATE:
{
ZeroMemory(&icdata, sizeof(icdata));
hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
icdata.cbSize = sizeof(NOTIFYICONDATA);
icdata.hWnd = hWnd; icdata.uID = 0;
icdata.uFlags = NIF_MESSAGE | NIF_TIP | NIF_SHOWTIP | NIF_ICON;
icdata.dwInfoFlags = NIIF_LARGE_ICON;
icdata.uCallbackMessage = WM_USER;
icdata.uVersion = NOTIFYICON_VERSION_4;
icdata.hIcon = hIcon;
wcscpy_s(icdata.szTip, sizeof(icdata.szTip), L"左クリックで終了");
Shell_NotifyIcon(NIM_ADD, &icdata);
}
451450
垢版 |
2017/03/12(日) 22:56:10.20ID:EdU52Ynw
LoadIconは、LoadIconMetricでした。
HRESULT hr = LoadIconMetric(hInst, MAKEINTRESOURCE(IDI_ICON1), LIM_LARGE, &hIcon);
しかし、変化なし。。
2017/03/13(月) 06:26:15.42ID:cVbgmuk1
右クリックとかでよく出るポップアップメニューの
フォントの大きさを変更したい場合どうすればよいですか?
case WM_RBUTTONDOWN:
{
POINT pt;
pt.x = LOWORD(lParam);pt.y = HIWORD(lParam);
ClientToScreen(hWnd, &pt);
TrackPopupMenu(hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL);
}
break;
2017/03/13(月) 06:47:05.65ID:cVbgmuk1
自己解決。。調べたら、メニュー・オーナードローについて詳しいページが出てきました。
2017/03/13(月) 08:55:13.87ID:hLVIfrQc
紀平さんのか
2017/03/13(月) 13:01:19.28ID:VNPYsRzK
>>450
shell icon sizeで画一的に決まってる。
2017/03/13(月) 13:43:30.21ID:N3DmujAP
>>450
オーナードロー
2017/03/13(月) 13:49:46.45ID:wbj+4uLG
>>456
それだけじゃ答えから遠い
2017/03/13(月) 17:27:27.81ID:RCZql05q
>>449
違うみたいです・・・
2017/03/13(月) 20:18:35.18ID:DGoKmeFN
https://ideone.com/i4fQGS
VC++で見ているんですが24行目のhBitmapにはちゃんとアドレスが確保されているのになぜか描画されません
どういった原因が考えられるでしょうか?
2017/03/13(月) 20:24:18.16ID:VNPYsRzK
>>459
SelectObjectは、BeginPaintの後に呼ばないといけない。HDCが違う。
2017/03/13(月) 23:00:39.35ID:cCiuixm4
>>459
コンパイルして実行してみたけど表示されたよ。bmpファイルがおかしいんじゃない?
あとWM_DESTROYでhMemDCとhBlockDCをDeleteObjectしてるけどDeleteDCじゃないとダメ
462デフォルトの名無しさん
垢版 |
2017/03/14(火) 10:21:04.36ID:vbV/Jpv3
>>459
テトリスのひとか
がんがれ
463459
垢版 |
2017/03/14(火) 23:58:45.78ID:MclzPbbI
環境も書いたほうがいいですね、Win7 x64でVC++2010 Expressです、rcファイル作って「BLOCKS BITMAP "block.bmp"」と書いてます
ファイル名は間違えていないですし、リンクしてoファイルは作っていないですけど間違っていますか?
最初は自作のbmpファイルでやっていたんですけど、途中から作られたbmpファイルでやろうとして表示されなくなりました
ここにあるblock.bmpというやつです
https://github.com/DQNEO/CppTetris

動画を見てロジックを理解しながら学習したいのですが、なかなか捗らないです

>>460
ごめんなさい、何行目のことかわからないです

>>461
修正しました!

>>462
ありがとうございます
2017/03/15(水) 12:08:58.48ID:7YWEdixI
馬鹿には無理
2017/03/15(水) 12:54:33.61ID:rPK+nkkO
用意されてたbmpでは動く。自作bmpでは動かない。ってことかよ。だとしたら原因ひとつじゃん
2017/03/15(水) 13:11:54.57ID:h6gBY/+f
>>463
imgurにでも自分で作ったbmp上げてみてよ
2017/03/15(水) 13:37:27.01ID:7YWEdixI
imgurって内容変わるんじゃね
2017/03/15(水) 13:42:29.19ID:h6gBY/+f
マジかごめん
2017/03/15(水) 16:58:13.14ID:0QbqsbzH
>>463
たぶん表示されてるんだと思う
WM_CREATE内の//debugの下の行を
BitBlt(hMemDC, 0, 0, 24, 24, hBlockDC, 0, 24, SRCCOPY);
にするとどうなる?
2017/03/15(水) 18:59:14.47ID:Jw8FgjFy
ちょっと見てみたよ
bmpのIDだけど、BLOCKS と "BLOCKS" は別だからね
BLOCKSは数値に置き換えられてるけどLoadBitmapは文字列の"BLOCKS"で読もうとしてる
初心者の頃はやりがちなやつだな
2017/03/15(水) 20:15:49.77ID:5s+i++Yx
>>469
ありがとうございます、これで表示されました
でもhttp://dqn.sakusakutto.jp/2012/11/cpp_tetris.htmlこの動画とは別の画像が表示されます
動画上では灰色ブロックが出てきているのに、自分の環境では赤色のブロックが出てきている状況です

>>470
動画では「"BLOCKS"」と定義されていたので自分は「TEXT("BLOCKS")」と定義したんですが両者は違うものなのでしょうか?
472デフォルトの名無しさん
垢版 |
2017/03/15(水) 20:16:40.91ID:LU+w+iAT
rcの方だろ
2017/03/15(水) 21:50:38.03ID:5BC7GJpQ
USBメモリなどUSB機器の接続検知をおこないたいのですが、WM_DEVICECHANGEを使用すると
https://qanda.rakuten.ne.jp/qa5211631.html
のようにUSBメモリによってはDBT_DEVICEARRIVALが何度か来てしまいます。
↑のQ&Aにあるように、正常に認識されたときを検出するにはどうすればよいでしょうか?
2017/03/15(水) 23:07:40.31ID:5s+i++Yx
>>472
rcのほうが間違えているということですか?
では「"BLOCKS" BITMAP "block.bmp"」ってことですか?
2017/03/16(木) 09:34:05.83ID:fy4K8iiJ
こうやって手取り足取りな奴はイライラする
2017/03/16(木) 11:58:27.68ID:bBZQNLcb
>>475
じゃあ来なければいいよ
2017/03/16(木) 15:14:09.34ID:Oq2mLnGK
お前が手足を完全にもいでトドメを刺せばいい
478デフォルトの名無しさん
垢版 |
2017/03/16(木) 17:17:19.21ID:Xe646fvV
モイっ!
2017/03/16(木) 22:29:13.60ID:xw1bzJ/c
>>473
((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype が全部同じなの?
2017/03/19(日) 01:08:24.24ID:bawtCMkE
SHAppBarMessage(ABM_QUERYPOS, &abd);が正しい値を取得できない場合どうすればいいですか?

Windows10の設定:システム:ディスプレイ:ディプレイカスタマイズ画面
テキスト、アプリ、その他の項目サイズを変更する
で100%から175%までいろいろ変化させてみると表示位置のずれが発生します。
2017/03/19(日) 04:28:36.19ID:yhAiVzME
>>473
デバイスイベントが来たら、タイマーで少し時間が経ってからデバイスをチェックする。
時間が経つ前に次のデバイスイベントが来たら、タイマーをセットしなおしてまた少し時間が経つまで待つ。
2017/03/20(月) 10:38:14.59ID:px9bK4BM
タスクトレイの自動的に隠すになっているかを調べる場合どうすればよいですか?
2017/03/20(月) 11:02:11.90ID:OlmnVrTw
レジストリでも見ればわかるんじゃない?
484482
垢版 |
2017/03/20(月) 11:03:48.79ID:px9bK4BM
自己解決・・
APPBARDATA appbardata;
appbardata.cbSize = sizeof(APPBARDATA);
appbardata.hWnd = FindWindow(L"Shell_TrayWnd", 0);
if(SHAppBarMessage(ABM_GETSTATE, &appbardata))
{
// 自動的に隠れている
}
2017/03/20(月) 23:28:19.28ID:pgDQQg6b
最近、win32 はいつまで残るんだろうな、とふと不安になる
.net とか妙なものが蔓延ってるけど。
2017/03/21(火) 00:19:55.43ID:3zup+qvo
MS32bitOSが居る限りはなくならないだろ
.netだって内部的にWin32API呼び出しているし
2017/03/21(火) 02:42:20.25ID:dRq3wtLU
ここまで来て過去の莫大な資産を捨てることなんてあるの?
過去のwindowsアプリが新しいwindowsで動かなくなる日が来たら、それはもうwindowsじゃないと思う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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