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/
探検
Win32API質問箱 Build124
■ このスレッドは過去ログ倉庫に格納されています
2017/11/11(土) 19:23:00.69ID:TpLoCFAx
10片山博文MZ ◆T6xkBnTXz7B0
2017/11/12(日) 19:03:29.37ID:hcIx1LXl SendMessage(hLV, WM_LBUTTONDOWN, ...);
SendMessage(hLV, WM_LBUTTONUP, ...);
SendMessage(hLV, WM_LBUTTONUP, ...);
11片山博文MZ ◆T6xkBnTXz7B0
2017/11/12(日) 19:06:05.53ID:hcIx1LXl LVM_ENSUREVISIBLE
LVM_GETITEMRECT
LVM_GETITEMRECT
12デフォルトの名無しさん
2017/11/12(日) 19:25:07.33ID:g8teYUTq13片山博文MZ ◆T6xkBnTXz7B0
2017/11/12(日) 19:38:02.33ID:hcIx1LXl >>9
LVM_ENSUREVISIBLEメッセージで、リストビューの項目を表示させる。
LVM_GETITEMRECTメッセージで、項目の位置を取得する。
取得した場所に対して、WM_LBUTTONDOWN/UPメッセージを呼ぶ。
LVM_ENSUREVISIBLEメッセージで、リストビューの項目を表示させる。
LVM_GETITEMRECTメッセージで、項目の位置を取得する。
取得した場所に対して、WM_LBUTTONDOWN/UPメッセージを呼ぶ。
2017/11/12(日) 19:59:30.69ID:yKCfx7dw
>>12
若いな
若いな
15デフォルトの名無しさん
2017/11/12(日) 20:17:24.65ID:g8teYUTq >>13
リストビューにフォーカスがない状態でWM_LBUTTONDOWN/WM_LBUTTONUPを2回送信して、
ダブルクリックが仮想的に実行できるか試してみましたが、選択位置(フォーカスがないので灰色)が変わるだけで反応なしでした。
WM_LBUTTONDBLCLKだと灰色位置の変化もなし。
WM_LBUTTON*系のメッセージを使わない正規の方法があるかと思ったのですが、なさそうですね。
回答ありがとうございました。別の方法考えます。
リストビューにフォーカスがない状態でWM_LBUTTONDOWN/WM_LBUTTONUPを2回送信して、
ダブルクリックが仮想的に実行できるか試してみましたが、選択位置(フォーカスがないので灰色)が変わるだけで反応なしでした。
WM_LBUTTONDBLCLKだと灰色位置の変化もなし。
WM_LBUTTON*系のメッセージを使わない正規の方法があるかと思ったのですが、なさそうですね。
回答ありがとうございました。別の方法考えます。
16片山博文MZ ◆T6xkBnTXz7B0
2017/11/12(日) 20:19:35.68ID:hcIx1LXl クライアント座標とスクリーン座標があって、クライアント座標系はウィンドウごとに場所が違うから注意が必要だ。
17片山博文MZ ◆T6xkBnTXz7B0
2017/11/12(日) 20:29:12.30ID:hcIx1LXl18片山博文MZ ◆T6xkBnTXz7B0
2017/11/12(日) 20:43:32.51ID:hcIx1LXl19デフォルトの名無しさん
2017/11/12(日) 21:45:52.37ID:g8teYUTq >>18
当方、送信したい相手はdllから読み込んだ同一プロセス上のリストビューなので、GetWindowLongPtr(GWLP_WNDPROC)でイベントをフックして使った。
NM_DBLCLKイベント自体はフックしたプロシージャにちゃんと送られていることは確認できた。
NM_DBLCLKイベント送受信は成功したが、期待するダブルクリック時の振る舞いをしてくれないので、求めていた機能は成功していない状態。
これ以上はdll側の実装依存との格闘になるので、ここでの質問は終わらさせていただきます。
当方、送信したい相手はdllから読み込んだ同一プロセス上のリストビューなので、GetWindowLongPtr(GWLP_WNDPROC)でイベントをフックして使った。
NM_DBLCLKイベント自体はフックしたプロシージャにちゃんと送られていることは確認できた。
NM_DBLCLKイベント送受信は成功したが、期待するダブルクリック時の振る舞いをしてくれないので、求めていた機能は成功していない状態。
これ以上はdll側の実装依存との格闘になるので、ここでの質問は終わらさせていただきます。
2017/11/12(日) 23:18:10.01ID:Kj+Cizk6
人工無能同士の会話みたい
2017/11/13(月) 12:36:22.40ID:Q60O1ghY
ダブルクリックには常に先行するシングルクリックがあるとか2回目のシングルクリックもあるとかちゃんとやってるよね
2017/11/13(月) 21:39:25.70ID:dnspAOl6
ダブルクリック処理面倒くさい
ドライバーレベルで峻別してくれないかな
ところでGetDoubleClickTime()にあわせてタイマーイベントすると
体感長く感じるんだがどう処理するのが正しいのかな
ドライバーレベルで峻別してくれないかな
ところでGetDoubleClickTime()にあわせてタイマーイベントすると
体感長く感じるんだがどう処理するのが正しいのかな
2017/11/14(火) 00:02:34.16ID:FWNbLyCJ
ブラウザゲームとかダブルクリック使わないので
ダブルクリックなしのUIに慣れてきている自分
ダブルクリックなしのUIに慣れてきている自分
2017/11/21(火) 18:35:19.43ID:t2ie3Fqr
Windows7などでタスクバー上の自身のアプリにマウスを置いたときに表示される
サムネイルを別の画像にしたいのですが、やり方やサンプルなどはありませんか?
サムネイルを別の画像にしたいのですが、やり方やサンプルなどはありませんか?
2017/11/21(火) 18:57:28.67ID:IqvSRvvZ
ITaskbarList3
2017/11/22(水) 13:33:15.33ID:NgxFNsMl
エディットコントロールに値を手入力した後、フォーカスを失った時点で飛んでくるメッセージはありませんか?
エディットコントロールの値を、作業する直前に取り込む、という方法では、いろいろと不都合が出てきました。(たとえばレジストリへのバックアップなど)
エディットコントロールの値を、作業する直前に取り込む、という方法では、いろいろと不都合が出てきました。(たとえばレジストリへのバックアップなど)
27デフォルトの名無しさん
2017/11/22(水) 13:39:07.14ID:TZAtmSaI あります
28片山博文MZ ◆T6xkBnTXz7B0
2017/11/22(水) 15:59:34.39ID:QYl/HC3N EN_KILLFOCUS
30片山博文MZ ◆T6xkBnTXz7B0
2017/11/22(水) 18:08:51.27ID:QYl/HC3N フォーカスのあるコントロールにWM_KILLFOCUSを送信。
31片山博文MZ ◆T6xkBnTXz7B0
2017/11/22(水) 18:21:42.81ID:QYl/HC3N SendMessage(GetFocus(), WM_KILLFOCUS, 0, 0);
2017/11/24(金) 13:46:55.30ID:HWVyDVmi
SetWindowHookExのグローバルフックってもう使えないのかな?
64bitと32bitのアプリケーションが混合してる世の中だけど
64bitと32bitのアプリケーションが混合してる世の中だけど
2017/11/24(金) 14:10:48.48ID:+7IWktV2
使える
2017/11/24(金) 15:30:15.15ID:HWVyDVmi
>>28
このたびはありがとうございました。無事に実装を完了させました。
このたびはありがとうございました。無事に実装を完了させました。
2017/11/24(金) 15:41:26.89ID:pohwH8o0
最初から64bitDLLをマッピングすりゃいいんじゃないの?
2017/11/24(金) 16:01:57.91ID:+7IWktV2
If a 64-bit application installs a global hook on 64-bit Windows, the 64-bit hook is injected into each 64-bit process, while all 32-bit processes use a callback to the hooking application.
2017/11/24(金) 20:44:09.53ID:Y2cmNidj
ウィンドウメッセージを監視するVisualStudioの付属ソフト Spy++ でさえ32bitアプリ監視向けと64bitアプリ監視向けで別々に必要なのだからしょうがない。
2017/11/25(土) 01:59:09.56ID:QwJx+kFY
32と64のexeからそれぞれhookをするしかないよ。
SetWinEventHookとかで代用できるなら片方のみでもいける。
SetWinEventHookとかで代用できるなら片方のみでもいける。
2017/11/25(土) 08:23:45.59ID:WF+T0grB
インジェクションとグローバルフックが混同してる
2017/11/25(土) 15:27:02.72ID:J6q+ZC/L
Windows10上で 64ビット開発してListViewを使う
レポート形式で列を複数作り、カラムの幅の総和がリストビューの幅を超えるようにする。
項目をマウス左右(どちらでも)ドラッグで複数選択しようとすると、列の末尾にスクロールが発生し、
このときマウスカーソルがディスプレイの右下や右上に吹っ飛ぶ。
win32(x86)では発生しない。
専用テストプログラム組んで発生したのでこの場合コントロールのバグ確定でいいかな。
古めのSDK(2008とか)使っているので、最新の開発環境で作っている人の発生状況を知りたい。
レポート形式で列を複数作り、カラムの幅の総和がリストビューの幅を超えるようにする。
項目をマウス左右(どちらでも)ドラッグで複数選択しようとすると、列の末尾にスクロールが発生し、
このときマウスカーソルがディスプレイの右下や右上に吹っ飛ぶ。
win32(x86)では発生しない。
専用テストプログラム組んで発生したのでこの場合コントロールのバグ確定でいいかな。
古めのSDK(2008とか)使っているので、最新の開発環境で作っている人の発生状況を知りたい。
4241
2017/11/25(土) 17:17:50.99ID:J6q+ZC/L 追加条件
ビジュアルスタイルを適用で発生・・・代替案不明
ビジュアルスタイルを適用で発生・・・代替案不明
2017/11/25(土) 18:13:49.32ID:KR9Edo9E
45デフォルトの名無しさん
2017/11/28(火) 12:44:11.35ID:EqW/cfNY e糞plorereで再現
46片山博文MZ ◆T6xkBnTXz7B0
2017/11/28(火) 18:01:50.95ID:TWDwWwDO ご相談させてください。
SetDIBitsToDevice 関数を使用して、bmp を表示させてようとしています。
ここで、メモリから bmp の一行分を読み込んで、SetDIBitsDevice() にて一行分だけ表示し、
繰り返し読み込みと表示を行数分だけおこなって表示させる方法を(特に)探しています。
https://ideone.com/v0METS
にて試行していますが、画面が真っ黒になりうまくありません。
どこが悪いのでしょうか?また、SetDIBitsToDevice() の第6〜第9パラメータ
int XSrc, // 転送元長方形の左下隅の x 座標
int YSrc, // 転送元長方形の左下隅の y 座標
UINT uStartScan, // 配列内の最初の走査行
UINT cScanLines, // 走査行の数
についてヒントをいただけないでしょうか?
よろしくお願いいたします。
SetDIBitsToDevice 関数を使用して、bmp を表示させてようとしています。
ここで、メモリから bmp の一行分を読み込んで、SetDIBitsDevice() にて一行分だけ表示し、
繰り返し読み込みと表示を行数分だけおこなって表示させる方法を(特に)探しています。
https://ideone.com/v0METS
にて試行していますが、画面が真っ黒になりうまくありません。
どこが悪いのでしょうか?また、SetDIBitsToDevice() の第6〜第9パラメータ
int XSrc, // 転送元長方形の左下隅の x 座標
int YSrc, // 転送元長方形の左下隅の y 座標
UINT uStartScan, // 配列内の最初の走査行
UINT cScanLines, // 走査行の数
についてヒントをいただけないでしょうか?
よろしくお願いいたします。
2017/11/28(火) 23:45:44.00ID:7WoPw74F
デフォルトだと上下が逆になってたような
49デフォルトの名無しさん
2017/11/29(水) 15:39:20.27ID:wmbD4JNt ドキュメントにバグがあるやつか
2017/12/01(金) 05:40:43.29ID:k0FZtccS
バグだらけのひどいコードだな!
>>47よ!動かないの当たり前だ!
まず、グローバル変数で、HANDLE hFileを共有する設計前提で作ってるの?
51行目からのint WINAPI WinMain内でのバグっぽいの発見!
55行目:HANDLE hFile;
ローカル変数で定義だと…?
ローカル変数で定義するなら、そのコード内でhFileをCloseHandle();なぜしていないの?
hFileをグローバル変数で使いまわすなら、55行目のHANDLE hFile;のローカル変数の定義は不要じゃねーの?
まずは、55行目を削除しろ!
グローバル変数と、ローカル変数をちゃんと理解して使いましょう!
9行目からの LRESULT CALLBACK WndProc内でのバグ
14行目:int WIDTH = 0;
アプリケーションが終了するまで、イベントごとに毎回ウインドメッセージを処理する意味で、このプロシージャー呼ばれることは理解してるよな?
仮に、ローカル変数を確保はいいとして、case WM_PAINTでWIDTHは常に0なんだけど?
24行目〜のWM_CREATE内で一度だけ初期化して値をずっと保ちたいなら14行目は、static int WIDTH=0;じゃねーの?
そもそもCALLBACK WndProcの仕組み理解してる?
24行目
WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount) + 31 / 32);
はぁ…なんで意味不明な計算してるの?
WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount + 31)/ 32);
こっちが正しいんじゃね?これどういう意図で計算しているかわかってる?
猫のページ見てるならまずは、動くコードをコピペして動かせよ!手打ちでバグ作ってどーする!
コード見てて、ローカル変数の使い方や、ウィンドウプロシージャの仕組みがちゃんと理解できていないように見えるので、
直ちに、ウィンドウプロシージャでググってコールバック関数とはなにかを理解することを勧める。
猫のページの7〜10ざっくりみたけどウインドメッセージとウィンドウプロシージャの詳しい説明してないので別のとこ探して読んだほうがいいぞ。
>>47よ!動かないの当たり前だ!
まず、グローバル変数で、HANDLE hFileを共有する設計前提で作ってるの?
51行目からのint WINAPI WinMain内でのバグっぽいの発見!
55行目:HANDLE hFile;
ローカル変数で定義だと…?
ローカル変数で定義するなら、そのコード内でhFileをCloseHandle();なぜしていないの?
hFileをグローバル変数で使いまわすなら、55行目のHANDLE hFile;のローカル変数の定義は不要じゃねーの?
まずは、55行目を削除しろ!
グローバル変数と、ローカル変数をちゃんと理解して使いましょう!
9行目からの LRESULT CALLBACK WndProc内でのバグ
14行目:int WIDTH = 0;
アプリケーションが終了するまで、イベントごとに毎回ウインドメッセージを処理する意味で、このプロシージャー呼ばれることは理解してるよな?
仮に、ローカル変数を確保はいいとして、case WM_PAINTでWIDTHは常に0なんだけど?
24行目〜のWM_CREATE内で一度だけ初期化して値をずっと保ちたいなら14行目は、static int WIDTH=0;じゃねーの?
そもそもCALLBACK WndProcの仕組み理解してる?
24行目
WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount) + 31 / 32);
はぁ…なんで意味不明な計算してるの?
WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount + 31)/ 32);
こっちが正しいんじゃね?これどういう意図で計算しているかわかってる?
猫のページ見てるならまずは、動くコードをコピペして動かせよ!手打ちでバグ作ってどーする!
コード見てて、ローカル変数の使い方や、ウィンドウプロシージャの仕組みがちゃんと理解できていないように見えるので、
直ちに、ウィンドウプロシージャでググってコールバック関数とはなにかを理解することを勧める。
猫のページの7〜10ざっくりみたけどウインドメッセージとウィンドウプロシージャの詳しい説明してないので別のとこ探して読んだほうがいいぞ。
2017/12/01(金) 08:06:09.81ID:lcmprfyj
俺からも追加
SetFilePointer は ReadFile の前にしないと
2度目以降の WM_PAINT で1ライン目がおかしくなる
最近のWindowsだと「2度目以降の〜」自体そんなに来ないかもしれんが
SetFilePointer は ReadFile の前にしないと
2度目以降の WM_PAINT で1ライン目がおかしくなる
最近のWindowsだと「2度目以降の〜」自体そんなに来ないかもしれんが
>>51
ありがとうございます。
・hFile はこの関数(WinMain) だけで使う変数で、ここで一気にビットマップを読み込むのに使っています。確かに CloseHandle(hFilt) とした方がいいですね。
・int WIDTH = 0 はひどい、static int WIDTH にするべきでした。
・WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount) + 31 / 32); これもひどいなあ…ご指摘されてはじめてまずさがわかりました。
ようはビットマップの一行の幅を 32ビット単位にする操作ですね。31をたして、全体を 32 で割って DWORD 数を出し、それに 4 をかけてバイト数を出す、
ご指摘のとおり
WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount + 31)/ 32); にいたしました。
すると画面に縦じまが現れました。これは重大な進歩です、これを元にもう一度元ソースを見直します。
ありがとうございました。
ありがとうございます。
・hFile はこの関数(WinMain) だけで使う変数で、ここで一気にビットマップを読み込むのに使っています。確かに CloseHandle(hFilt) とした方がいいですね。
・int WIDTH = 0 はひどい、static int WIDTH にするべきでした。
・WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount) + 31 / 32); これもひどいなあ…ご指摘されてはじめてまずさがわかりました。
ようはビットマップの一行の幅を 32ビット単位にする操作ですね。31をたして、全体を 32 で割って DWORD 数を出し、それに 4 をかけてバイト数を出す、
ご指摘のとおり
WIDTH = 4 * ((bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount + 31)/ 32); にいたしました。
すると画面に縦じまが現れました。これは重大な進歩です、これを元にもう一度元ソースを見直します。
ありがとうございました。
>>51>>53
ご指摘を受けたあたりを修正して、うまく表示できるようになりました。
コメントをいただき、ありがとうございました!
https://ideone.com/W8wuOF
>>52
SetFilePointer() は次回 WM_PAINT 時に備えたものだと考えています。
ご指摘を受けたあたりを修正して、うまく表示できるようになりました。
コメントをいただき、ありがとうございました!
https://ideone.com/W8wuOF
>>52
SetFilePointer() は次回 WM_PAINT 時に備えたものだと考えています。
2017/12/01(金) 22:26:20.38ID:rQkaX9hI
2017/12/02(土) 19:13:30.95ID:K6qIkKEG
線だけで長方形を描画したいのですが、もっとも簡単に実現できるAPIはどれですか?
cで使えるものでお願いします
cで使えるものでお願いします
58デフォルトの名無しさん
2017/12/02(土) 19:16:20.77ID:XRYOyseR copyrect
2017/12/02(土) 20:06:49.33ID:r+fJBrgb
ブラシをNULLにして普通にRectangle
2017/12/02(土) 20:31:13.22ID:VR8xyICx
62デフォルトの名無しさん
2017/12/03(日) 11:52:35.88ID:cCU4BKBm jpg や png などの2D静止画を高速描画するのに最も適したライブラリってどれだろう?
gdiplus? DirectX?
gdiplus? DirectX?
2017/12/03(日) 12:14:03.55ID:I8IEjg5G
ハードウェア描画前提ならdirectXじゃないかなー
wikiでgdiを調べると詳しく書いてあるかもよ。
好きなライブラリー使えばいいよ。
wikiでgdiを調べると詳しく書いてあるかもよ。
好きなライブラリー使えばいいよ。
2017/12/03(日) 12:26:39.95ID:FVppKXn3
最終的にはメモリDCに書き込んだのをBitBlt()するのが組みやすい
フォーマット変換だけならwicやOpenCV
フォーマット変換だけならwicやOpenCV
65デフォルトの名無しさん
2017/12/03(日) 12:47:14.81ID:cCU4BKBm メモリDCで作業してるのに、スレッド排他ロックでアプリ側のマルチスレッド実装を台無しにしてくれるgdiplus
2017/12/03(日) 13:01:46.59ID:FVppKXn3
jpgだとJpegTurboってのがあって、それなりに速かった
jpgで画像を連続で送ってくるカメラがあって、それで試しに使ったことがある
jpgで画像を連続で送ってくるカメラがあって、それで試しに使ったことがある
2017/12/03(日) 16:05:28.97ID:FvsK2hd0
>>62
表示だけならライブラリ探さなくてもOleLoadPicture()で読み込んでDCにIPicture::Renderするだけでいいんじゃないか?
表示だけならライブラリ探さなくてもOleLoadPicture()で読み込んでDCにIPicture::Renderするだけでいいんじゃないか?
68デフォルトの名無しさん
2017/12/03(日) 19:28:19.70ID:WsUY0GNs >60 1pixel小さいです
2017/12/03(日) 20:10:00.66ID:S5PX0FVt
可哀想な頭だ
70デフォルトの名無しさん
2017/12/04(月) 15:02:45.68ID:6cKdvMQZ メモリDCへの拡大縮小画像のレンダリングを高速に実現する最適な方法ってなんなのだろう?
ちなみにGDI+ gdiplusは論外。GraphicクラスでメモリDC渡してレンダリングすると、GDI+がスレッドロックするので並列化による省時間はできない。
ちなみにGDI+ gdiplusは論外。GraphicクラスでメモリDC渡してレンダリングすると、GDI+がスレッドロックするので並列化による省時間はできない。
2017/12/04(月) 15:23:27.29ID:1/3RfdNR
最適ならDirectX一択だろ
最速になると描画よりも拡大縮小アルゴリズムの話になりそう
最速になると描画よりも拡大縮小アルゴリズムの話になりそう
72デフォルトの名無しさん
2017/12/04(月) 16:26:01.49ID:6cKdvMQZ >>67 の方が教えてくれた IPicture::Render はWindows2000時代からあるレンダリングAPIという認識。
わざわざVista時代にDirect2dをリリースした意味は何なのか、という疑問がありまして、その辺どうなの、と。
わざわざVista時代にDirect2dをリリースした意味は何なのか、という疑問がありまして、その辺どうなの、と。
2017/12/04(月) 19:17:48.59ID:7Hssi5iQ
32bitARGB画像ならDirect2Dだな、小数点座標指定できるし。
Direct2DのAPIではピクセルフォーマット変換とかHeight方向反転とかできなかったと思うので
異なる場合には渡す前に変換しておく必要がある
Direct2DのAPIではピクセルフォーマット変換とかHeight方向反転とかできなかったと思うので
異なる場合には渡す前に変換しておく必要がある
74デフォルトの名無しさん
2017/12/04(月) 20:29:21.18ID:6cKdvMQZ せめて有名Webブラウザ並みの描画速度で複数画像を一覧表示できてほしいんだけど、その点、gdiplusはダメダメ。
Wikipediaなどの情報によると有名WebブラウザはDirect2Dによる描画らしいので、Direct2Dがいいのかな。
Wikipediaなどの情報によると有名WebブラウザはDirect2Dによる描画らしいので、Direct2Dがいいのかな。
2017/12/04(月) 21:10:25.84ID:1/3RfdNR
今作ってるソフトの遅い部分が「描画」でそこを改善したいんじゃなくて、たぶんこれから作るソフトの計画だよな
ある程度形になってからどこに時間食ってるか調べてそこを潰したほうが開発時間も動作速度もいいと思うな
ある程度形になってからどこに時間食ってるか調べてそこを潰したほうが開発時間も動作速度もいいと思うな
2017/12/04(月) 22:09:44.67ID:5YKgC1OQ
>Direct2DのAPIではピクセルフォーマット変換とかHeight方向反転とかできなかったと思うので
当然SetTransformはあるしなんなら自分で書いたシェーダを挿入できるエフェクトグラフもあるでよ?
当然SetTransformはあるしなんなら自分で書いたシェーダを挿入できるエフェクトグラフもあるでよ?
2017/12/04(月) 22:43:49.45ID:7Hssi5iQ
2017/12/04(月) 22:54:06.06ID:m/z1wPSa
考えるもなにも普通にスケール-1ちゃうんか
2017/12/04(月) 23:12:40.00ID:7Hssi5iQ
>>78
oh www
oh www
低レベルな話ですみません。
ダイアログアプリケーション(calc.exe と同様)
を win32api/C で書いています。
希望:ベースのダイアログの色を起動後に変えたい。
したこと: WM_CTLCOLORSTATICを捕らえて、
SetBkColor((HDC)wp, BackGroundColorG); および
return HBRUSH / HBRUSH を DefWindowProc() に渡さずに返す
以上で、スタティックコントロールの背景色およびエディットコントロールのディスエイブル時の背景色は変わりました。
しかし、ベースダイアログの色は変わりません。
頭で、RegisterClass() にわたす前に設定する WNDCLASS の hbrBackground の値が、ダイアログのCreateWindow() の後も反映されています。
後から
SetClassLongPtr((HWND)lp, GCL_HBRBACKGROUND, (LONG)hbrBackGroundS)
しても反映されないことを確認しています。
起動後にダイアログの色を変えるにはどうすればいいでしょうか?
明日には再現コードをお見せできると思います。
アドバイスいただきたくよろしくお願いいたします。
#WINDCLASS.hbrBackground = NULL にすると、透けてデスクトップが移りこみ、これはこれで面白いです…もう寝ます
ダイアログアプリケーション(calc.exe と同様)
を win32api/C で書いています。
希望:ベースのダイアログの色を起動後に変えたい。
したこと: WM_CTLCOLORSTATICを捕らえて、
SetBkColor((HDC)wp, BackGroundColorG); および
return HBRUSH / HBRUSH を DefWindowProc() に渡さずに返す
以上で、スタティックコントロールの背景色およびエディットコントロールのディスエイブル時の背景色は変わりました。
しかし、ベースダイアログの色は変わりません。
頭で、RegisterClass() にわたす前に設定する WNDCLASS の hbrBackground の値が、ダイアログのCreateWindow() の後も反映されています。
後から
SetClassLongPtr((HWND)lp, GCL_HBRBACKGROUND, (LONG)hbrBackGroundS)
しても反映されないことを確認しています。
起動後にダイアログの色を変えるにはどうすればいいでしょうか?
明日には再現コードをお見せできると思います。
アドバイスいただきたくよろしくお願いいたします。
#WINDCLASS.hbrBackground = NULL にすると、透けてデスクトップが移りこみ、これはこれで面白いです…もう寝ます
81デフォルトの名無しさん
2017/12/05(火) 02:14:11.47ID:7/1p3S3k >>80
WM_CTLCOLORDLG でブラシを返す
WM_CTLCOLORDLG でブラシを返す
>>81
コメントいただき感謝しています。
試してみたのですが、よくありません。やはりダイアログは WNDCLASS.hbrBackground の指定が優先されています。
現象を再現させたコード次のとおりです。こちらでは cygwin/mingw 32 ビットでコンパイルしています。
test.c https://ideone.com/pch378
test.h https://ideone.com/1iKq2z
test.rc https://ideone.com/kZH3Uf
makefile https://ideone.com/9MDXT0
コメントいただき感謝しています。
試してみたのですが、よくありません。やはりダイアログは WNDCLASS.hbrBackground の指定が優先されています。
現象を再現させたコード次のとおりです。こちらでは cygwin/mingw 32 ビットでコンパイルしています。
test.c https://ideone.com/pch378
test.h https://ideone.com/1iKq2z
test.rc https://ideone.com/kZH3Uf
makefile https://ideone.com/9MDXT0
83片山博文MZ ◆T6xkBnTXz7B0
2017/12/05(火) 04:05:08.93ID:KBxdaLdg WM_ERASEBKGND
84デフォルトの名無しさん
2017/12/05(火) 04:43:50.94ID:wJV4W7rZ ここ参照
https://stackoverflow.com/questions/20519533/change-the-background-color-of-a-dialog-box-win32api
Tab キーによるフォーカス移動などを司る IsDialogMessage を呼んでいる辺りも注目
https://stackoverflow.com/questions/20519533/change-the-background-color-of-a-dialog-box-win32api
Tab キーによるフォーカス移動などを司る IsDialogMessage を呼んでいる辺りも注目
>>81, >>83-84
コメントありがとうございます。
状況が変わりました。すなわち、
1. DefWindowProc() ではなく、DefDialogProc() にする
2. (>>81) WM_CTLCOLORDLG メッセージ処理(ブラシを返す)
によりダイアログのベースの色が変わりました。
現在典拠を探しています。
遅いところ皆様ありがとうございました。勇気がでてきました!
https://ideone.com/ZBuhbz
>>84
StackOverflow のプログラム例は、(通常)ウィンドウがあって、そこから CreateDialog で新しくモードレスダイアログを作るときの作法ですね。
IsDailogMessage() が必要かどうかは、まだよくわかりません。
コメントありがとうございます。
状況が変わりました。すなわち、
1. DefWindowProc() ではなく、DefDialogProc() にする
2. (>>81) WM_CTLCOLORDLG メッセージ処理(ブラシを返す)
によりダイアログのベースの色が変わりました。
現在典拠を探しています。
遅いところ皆様ありがとうございました。勇気がでてきました!
https://ideone.com/ZBuhbz
>>84
StackOverflow のプログラム例は、(通常)ウィンドウがあって、そこから CreateDialog で新しくモードレスダイアログを作るときの作法ですね。
IsDailogMessage() が必要かどうかは、まだよくわかりません。
86デフォルトの名無しさん
2017/12/05(火) 07:41:30.27ID:S7FU9Yl0 大雑把に言うと WindowProc に来る前 DefDlgProc が
値を返しちゃうので色が変わらないわけです (多分)。
他にも DefDlgProc が反応するメッセージについては WindowProc ではなく DlgProc で処理する必要があります。
どれがそうか一覧等あるのかは知りませんが。
値を返しちゃうので色が変わらないわけです (多分)。
他にも DefDlgProc が反応するメッセージについては WindowProc ではなく DlgProc で処理する必要があります。
どれがそうか一覧等あるのかは知りませんが。
2017/12/08(金) 17:59:18.20ID:UBTxsLd5
フルスクリーンでも、色の取得ができるAPIは存在しないのでしょうか?
GetPixelを試みましたが、何故かフルスクリーン対象にすると 常に0を返されます
フルスク色取得が可能なapi、もしくはGetPixelでも出来るのでしたらやり方を教えてください
GetPixelを試みましたが、何故かフルスクリーン対象にすると 常に0を返されます
フルスク色取得が可能なapi、もしくはGetPixelでも出来るのでしたらやり方を教えてください
88デフォルトの名無しさん
2017/12/08(金) 21:57:36.41ID:TcYdv7Hd MemDC にコピーしてから好きに弄ぶ
2017/12/09(土) 12:37:57.44ID:nuTX+Pqx
できましたありがとう
90デフォルトの名無しさん
2017/12/09(土) 22:01:16.23ID:Lkee30cD 質問です。
あるソフトがしたUSBの出力を、コンピュータの外部ではなくそのコンピュータ内の他のソフトへリダイレクトすることはできますでしょうか?
あるソフトがしたUSBの出力を、コンピュータの外部ではなくそのコンピュータ内の他のソフトへリダイレクトすることはできますでしょうか?
2017/12/09(土) 22:33:28.46ID:rMepMJ5T
>>90
方法1 (「あるソフト」にパッチが可能なら)
CreateFile()/WriteFile()などをフックする。
ただし、これらはKernel32.dllにあるAPIなので通常の方法ではフックできない。
「あるソフト」内のByte列"Kernel32.dll"を(例えば)"Xernel32.dll"に書き換え、
Xernel32.dllを作成・フックする。
方法2
対象デバイス用デバイスドライバと同じAPIを持ち、かつその入出力を「他のソフト」
へ受け渡すAPIを持つデバイスドライバを作成する。
方法3 (本物のUSBデバイスも生かしておくなら)
フィルタードライバーを作成し、そこで「あるソフト」の出力を盗み見る。
方法1 (「あるソフト」にパッチが可能なら)
CreateFile()/WriteFile()などをフックする。
ただし、これらはKernel32.dllにあるAPIなので通常の方法ではフックできない。
「あるソフト」内のByte列"Kernel32.dll"を(例えば)"Xernel32.dll"に書き換え、
Xernel32.dllを作成・フックする。
方法2
対象デバイス用デバイスドライバと同じAPIを持ち、かつその入出力を「他のソフト」
へ受け渡すAPIを持つデバイスドライバを作成する。
方法3 (本物のUSBデバイスも生かしておくなら)
フィルタードライバーを作成し、そこで「あるソフト」の出力を盗み見る。
2017/12/09(土) 23:13:14.29ID:ntUKDUa2
kernelにあっても普通にインジェクトでフックできるような・・・
2017/12/09(土) 23:53:32.26ID:ntUKDUa2
と、書き込んでからプロキシ思い出した。あれ64bitのは作るの面倒すぎだけど32だったらありだな
94デフォルトの名無しさん
2017/12/10(日) 04:43:00.48ID:Ivp7Fyt3 USBハブで物理的にteeすることって可能なんだろうか
2017/12/10(日) 04:49:03.51ID:jPbEe7nV
Window API Hook で検索すればすぐ出てくるけど API のフックはかなり簡単にできる
DLL インジェクション併用で CreateFile / WriteFile をフックするのがいいかもね
DLL インジェクション併用で CreateFile / WriteFile をフックするのがいいかもね
2017/12/10(日) 09:52:56.38ID:tk0MZw2P
> ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
テンプレのこれいるか?ってほど簡単にできるしな
1つのページを見るだけではできなくても
いくつかのページの情報を自分なりにまとめたらできるようになる
テンプレのこれいるか?ってほど簡単にできるしな
1つのページを見るだけではできなくても
いくつかのページの情報を自分なりにまとめたらできるようになる
97デフォルトの名無しさん
2017/12/10(日) 10:07:01.58ID:0DY65cdk 皆さまありがとうございました
APIフックを試します
APIフックを試します
2017/12/10(日) 10:07:15.33ID:0xn5varO
>>94
usbアナライザ
usbアナライザ
うーむ、やっとコンパイルできた…
32ビットコードは 32ビットのODBCデータソースしかみないし
64ビットコードは 64ビットのODBCデータソースしかみないのか…
手持ちの excel は 32ビットで、見に行くODBC テーブルは 32 ビット用であったことが混迷に拍車をかけてしまっていた
cigwin の odbcライブラリとしては -lodbc32 でコンパイルしているが、32ビットなのか 64 ビットなのか、いったいどうなっているんだ?!
32ビットコードは 32ビットのODBCデータソースしかみないし
64ビットコードは 64ビットのODBCデータソースしかみないのか…
手持ちの excel は 32ビットで、見に行くODBC テーブルは 32 ビット用であったことが混迷に拍車をかけてしまっていた
cigwin の odbcライブラリとしては -lodbc32 でコンパイルしているが、32ビットなのか 64 ビットなのか、いったいどうなっているんだ?!
100デフォルトの名無しさん
2017/12/10(日) 20:10:47.46ID:NCCsPX6A shell32.dll とか kernel32.dll とかもそうだし、
32→64 ビットではモジュールの名前変わらなかったからね
32→64 ビットではモジュールの名前変わらなかったからね
101片山博文MZ ◆T6xkBnTXz7B0
2017/12/10(日) 20:15:22.78ID:mhuWrsB5 dumpbin 使え。
102デフォルトの名無しさん
2017/12/10(日) 20:23:53.29ID:bN2Fk6CS >-lodbc32 でコンパイル
これで実行時に見に行くのが 32 になるか 64 になるかは決まらない
いわんか wow64 を見るのか system32 を見るのかをや
これで実行時に見に行くのが 32 になるか 64 になるかは決まらない
いわんか wow64 を見るのか system32 を見るのかをや
103デフォルトの名無しさん
2017/12/12(火) 10:54:59.64ID:dxitcW2N WS_POPUPの子ウィンドウって、
親ウィンドウからはGetNextWindow()などのループで辿っていけないものですか?
GW_ENABLEDPOPUPだと、見えているものしか出てこないようです。
親ウィンドウからはGetNextWindow()などのループで辿っていけないものですか?
GW_ENABLEDPOPUPだと、見えているものしか出てこないようです。
104デフォルトの名無しさん
2017/12/12(火) 11:15:35.06ID:79jDOY0/ 見えてる=enabled popup
ってことなんだな。普通にGW_CHILD使えばいいじゃん
ってことなんだな。普通にGW_CHILD使えばいいじゃん
105デフォルトの名無しさん
2017/12/12(火) 11:48:53.11ID:dxitcW2N >>104
GW_CHILDだとWS_POPUPのやつは出てこないようです
GW_CHILDだとWS_POPUPのやつは出てこないようです
106デフォルトの名無しさん
2017/12/12(火) 12:27:55.11ID:RQRbm0+h 人間は見えるものしか見ない
馬鹿は観たいものしか見ない
馬鹿は観たいものしか見ない
107片山博文MZ ◆T6xkBnTXz7B0
2017/12/12(火) 12:33:23.81ID:pbeXhwoZ EnumWindows、EnumChildWindows推奨。
108デフォルトの名無しさん
2017/12/12(火) 13:04:46.42ID:79jDOY0/ ためしたらまじでgw_childだめなんだなw
全ウインドウの親見てくのか
全ウインドウの親見てくのか
109デフォルトの名無しさん
2017/12/12(火) 13:05:49.05ID:dxitcW2N■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【MLB】ドジャース・佐々木朗希、故障の可能性 右腕の痛み訴える… ロバーツ監督「今は言えない」 自身初の中5日登板が影響か [冬月記者★]
- 「国民は暗殺者なの?」“愛子さまの万博警備”批判投稿が炎上、厳戒態勢の背景に“火炎瓶・刃物”事件 [夜のけいちゃん★]
- 【🗻】市長「道楽で富士山に登る人を公費で救う必要あるか」…ヘリは1時間40万円、救助は命がけ [ぐれ★]
- 【フジ】中居正広氏の代理人弁護士が第三者委員会報告に反論「性暴力の実態は確認できず」★21 [Ailuropoda melanoleuca★]
- 湯船は不要か…いま“浴槽レス”物件に熱視線 コスパとタイパ良…湯船入りたい時は「友達の家」 [夜のけいちゃん★]
- 川口クルド人、中国人など「党としてしっかり対応すべき」外国人問題で自民が特命委設置へ [香味焙煎★]
- 【ネトウヨ悲報】とんこれ東浩紀さん「僕の読者は幼稚な人が多すぎる」でしょうな🤔 [359965264]
- フジテレビで特集「氷河期世代、救う?見捨てる?」👈見捨てるって選択肢あるのかよw [476167917]
- 天皇が使ってそうなシャンプー [377482965]
- 佐々木朗希故障か?
- 真面目な話、日本人は外資で働いて外国人大家に家賃払って外国のITサービス使うだけの小作人になるよな [819729701]
- コメ卸大手のヤマタネ、食品事業の営業利益が約3.7倍 コメ高騰で大儲け [481941988]