TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
a4です。P2P人工知能「T」開発。
Ruby で GUI するスレ
【GPGPU】くだすれCUDAスレ part8【NVIDIA】
MFC vs .NET
くだすれPython(超初心者用) その37
Prologでまったり Part5
【ActionScript3】Webツールを作ろう【GPL】
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
音声合成プログラムを作りる
Rust Part7

Win32API質問箱 Build124


1 :2017/11/11 〜 最終レス :2018/09/05
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.sc/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.sc/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.sc/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.sc/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2017 Part4
http://mevius.2ch.sc/test/read.cgi/tech/1509244956/
【C++】 DirectX初心者質問スレ Part40 【C】
http://mevius.2ch.sc/test/read.cgi/tech/1474782237/

2 :
■番外編
WindowsDDK各種についてのスレ
http://mevius.2ch.sc/test/read.cgi/tech/1049116134/
D言語 Part34
http://mevius.2ch.sc/test/read.cgi/tech/1422155249/
Cygwin + MinGW + GCC 相談室 Part 8
http://mevius.2ch.sc/test/read.cgi/tech/1411399211/
Borland Developer Studio 2006 No.13
http://mevius.2ch.sc/test/read.cgi/tech/1175861395/
Borland C++ Compiler オ ワ タ
http://mevius.2ch.sc/test/read.cgi/tech/1206951221/

3 :
■ネイティブなやつとか
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
http://mevius.2ch.sc/test/read.cgi/tech/1270793556/
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 18
http://mevius.2ch.sc/test/read.cgi/tech/1488948543/
●●●●TCL/TKなら俺に聞け 4●●●●
http://mevius.2ch.sc/test/read.cgi/tech/1375678740/
Gtkプログラミング on Windows!!!
http://mevius.2ch.sc/test/read.cgi/tech/1147024203/

4 :
■需要あるかしらん
OpenGL 2.0 専用スレ
http://mevius.2ch.sc/test/read.cgi/tech/1126268759/
OpenGL/Vulkanスレ Part22©2ch.sc
http://mevius.2ch.sc/test/read.cgi/tech/1440666771/
SDL=Simple DirectMedia Layerでゲームだ
http://mevius.2ch.sc/test/read.cgi/tech/1103655588/
Google NaCl プログラミング 2mol
http://mevius.2ch.sc/test/read.cgi/tech/1298614677/
【boot】nasm【loader】
http://mevius.2ch.sc/test/read.cgi/tech/1377053129/
MASM32 - 選ばれし本物のプログラマ
http://mevius.2ch.sc/test/read.cgi/tech/1348574727/

5 :
>1 乙

6 :
いちもつ

7 :
>>1
乙ですー

8 :
>>1

9 :
Win32API標準 のリストビュー(クラス名 SysListView32) 上のリストアイテムに対して、keybd_event()やmouse_event() を使わずに
プログラムからキー押下やクリックのイベントを起こすにはどうしたらよいですか。

10 :
SendMessage(hLV, WM_LBUTTONDOWN, ...);
SendMessage(hLV, WM_LBUTTONUP, ...);

11 :
LVM_ENSUREVISIBLE
LVM_GETITEMRECT

12 :
>>10,11
スレの性質上、意味のない無駄な書き込みはやめてもらえますか。お願いします。
意味もなくAPI名やキーワードを羅列することは、情報が冗長になりスレの価値を下げることになります。

13 :
>>9
LVM_ENSUREVISIBLEメッセージで、リストビューの項目を表示させる。
LVM_GETITEMRECTメッセージで、項目の位置を取得する。
取得した場所に対して、WM_LBUTTONDOWN/UPメッセージを呼ぶ。

14 :
>>12
若いな

15 :
>>13
リストビューにフォーカスがない状態でWM_LBUTTONDOWN/WM_LBUTTONUPを2回送信して、
ダブルクリックが仮想的に実行できるか試してみましたが、選択位置(フォーカスがないので灰色)が変わるだけで反応なしでした。
WM_LBUTTONDBLCLKだと灰色位置の変化もなし。
WM_LBUTTON*系のメッセージを使わない正規の方法があるかと思ったのですが、なさそうですね。
回答ありがとうございました。別の方法考えます。

16 :
クライアント座標とスクリーン座標があって、クライアント座標系はウィンドウごとに場所が違うから注意が必要だ。

17 :
http://forums.codeguru.com/showthread.php?415399-ListView-double-click-in-code-c
これが役に立つかも知れない。

18 :
https://stackoverflow.com/questions/974722/send-a-double-click-to-a-listview-c-not-net
これはどうかな?

19 :
>>18
当方、送信したい相手はdllから読み込んだ同一プロセス上のリストビューなので、GetWindowLongPtr(GWLP_WNDPROC)でイベントをフックして使った。
NM_DBLCLKイベント自体はフックしたプロシージャにちゃんと送られていることは確認できた。
NM_DBLCLKイベント送受信は成功したが、期待するダブルクリック時の振る舞いをしてくれないので、求めていた機能は成功していない状態。
これ以上はdll側の実装依存との格闘になるので、ここでの質問は終わらさせていただきます。

20 :
人工無能同士の会話みたい

21 :
ダブルクリックには常に先行するシングルクリックがあるとか2回目のシングルクリックもあるとかちゃんとやってるよね

22 :
ダブルクリック処理面倒くさい
ドライバーレベルで峻別してくれないかな

ところでGetDoubleClickTime()にあわせてタイマーイベントすると
体感長く感じるんだがどう処理するのが正しいのかな

23 :
ブラウザゲームとかダブルクリック使わないので
ダブルクリックなしのUIに慣れてきている自分

24 :
Windows7などでタスクバー上の自身のアプリにマウスを置いたときに表示される
サムネイルを別の画像にしたいのですが、やり方やサンプルなどはありませんか?

25 :
ITaskbarList3

26 :
エディットコントロールに値を手入力した後、フォーカスを失った時点で飛んでくるメッセージはありませんか?
エディットコントロールの値を、作業する直前に取り込む、という方法では、いろいろと不都合が出てきました。(たとえばレジストリへのバックアップなど)

27 :
あります

28 :
EN_KILLFOCUS

29 :
>>28
ありがとうございます。
強制的に、フォームに配置しているすべてのエディットコントロールへのフォーカスを失わせる方法はありますか?
関係ないコントロールにフォーカスを移す方法でもいいです

30 :
フォーカスのあるコントロールにWM_KILLFOCUSを送信。

31 :
SendMessage(GetFocus(), WM_KILLFOCUS, 0, 0);

32 :
SetWindowHookExのグローバルフックってもう使えないのかな?
64bitと32bitのアプリケーションが混合してる世の中だけど

33 :
使える

34 :
>>33
64bitのアプリケーションに32bitDllをマッピングしたら当然エラーが起きてプログラムが死んだんだけど・・・
マッピングするDllを切り替える方法とかが有るのですか?

35 :
>>28
このたびはありがとうございました。無事に実装を完了させました。

36 :
最初から64bitDLLをマッピングすりゃいいんじゃないの?

37 :
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.

38 :
ウィンドウメッセージを監視するVisualStudioの付属ソフト Spy++ でさえ32bitアプリ監視向けと64bitアプリ監視向けで別々に必要なのだからしょうがない。

39 :
32と64のexeからそれぞれhookをするしかないよ。
SetWinEventHookとかで代用できるなら片方のみでもいける。

40 :
インジェクションとグローバルフックが混同してる

41 :
Windows10上で 64ビット開発してListViewを使う

レポート形式で列を複数作り、カラムの幅の総和がリストビューの幅を超えるようにする。
項目をマウス左右(どちらでも)ドラッグで複数選択しようとすると、列の末尾にスクロールが発生し、
このときマウスカーソルがディスプレイの右下や右上に吹っ飛ぶ。
win32(x86)では発生しない。
専用テストプログラム組んで発生したのでこの場合コントロールのバグ確定でいいかな。
古めのSDK(2008とか)使っているので、最新の開発環境で作っている人の発生状況を知りたい。

42 :
追加条件
ビジュアルスタイルを適用で発生・・・代替案不明

43 :
>>41
対処法は俺も知らんけど
FCU入れるとコモンコントロールのListView使ってるアプリは全部同じ挙動になるから
OS側の不具合で間違いないと思うよ

44 :
>>43
情報サンクス
しばらく様子見かな・・・

45 :
e糞plorereで再現

46 :
た、す、け、て!
https://teratail.com/questions/102359?nli=5a1d03c4-2eb8-452f-88e5-5b2b0a000162

47 :
ご相談させてください。
SetDIBitsToDevice 関数を使用して、bmp を表示させてようとしています。
ここで、メモリから bmp の一行分を読み込んで、SetDIBitsDevice() にて一行分だけ表示し、
繰り返し読み込みと表示を行数分だけおこなって表示させる方法を(特に)探しています。

https://ideone.com/v0METS
にて試行していますが、画面が真っ黒になりうまくありません。

どこが悪いのでしょうか?また、SetDIBitsToDevice() の第6〜第9パラメータ

int XSrc, // 転送元長方形の左下隅の x 座標
int YSrc, // 転送元長方形の左下隅の y 座標
UINT uStartScan, // 配列内の最初の走査行
UINT cScanLines, // 走査行の数

についてヒントをいただけないでしょうか?
よろしくお願いいたします。

48 :
デフォルトだと上下が逆になってたような

49 :
ドキュメントにバグがあるやつか

50 :
>>49
「猫Winプログラム」を並行して修正しながらやっています。
というか、猫Winプログラムに乗り換えようか…

51 :
バグだらけのひどいコードだな!
>>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ざっくりみたけどウインドメッセージとウィンドウプロシージャの詳しい説明してないので別のとこ探して読んだほうがいいぞ。

52 :
俺からも追加
SetFilePointer は ReadFile の前にしないと
2度目以降の WM_PAINT で1ライン目がおかしくなる
最近のWindowsだと「2度目以降の〜」自体そんなに来ないかもしれんが

53 :
>>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); にいたしました。

すると画面に縦じまが現れました。これは重大な進歩です、これを元にもう一度元ソースを見直します。
ありがとうございました。

54 :
>>51
>>53
すみません、hFile はグローバル変数でした。ローカル変数定義を削除しました

55 :
>>51>>53
ご指摘を受けたあたりを修正して、うまく表示できるようになりました。
コメントをいただき、ありがとうございました!
https://ideone.com/W8wuOF

>>52
SetFilePointer() は次回 WM_PAINT 時に備えたものだと考えています。

56 :
>>46
解決したみたいだけど、デバッグの知識は身につけといた方がいいよ。
無駄な試行錯誤をする事が減って使える時間が増える。

57 :
線だけで長方形を描画したいのですが、もっとも簡単に実現できるAPIはどれですか?
cで使えるものでお願いします

58 :
copyrect

59 :
>>57
MoveToEx
LineTo

60 :
ブラシをNULLにして普通にRectangle

61 :
win32APIのみなら>>59 >>60のを使うといいよ
速度重視で2d描画をしたいなら、Direct2dのAPI使ったらどうだ?線を描くならDrawLine、長方形ならDrawRectangleで描けるぞ。

62 :
jpg や png などの2D静止画を高速描画するのに最も適したライブラリってどれだろう?
gdiplus? DirectX?

63 :
ハードウェア描画前提ならdirectXじゃないかなー
wikiでgdiを調べると詳しく書いてあるかもよ。
好きなライブラリー使えばいいよ。

64 :
最終的にはメモリDCに書き込んだのをBitBlt()するのが組みやすい
フォーマット変換だけならwicやOpenCV

65 :
メモリDCで作業してるのに、スレッド排他ロックでアプリ側のマルチスレッド実装を台無しにしてくれるgdiplus

66 :
jpgだとJpegTurboってのがあって、それなりに速かった
jpgで画像を連続で送ってくるカメラがあって、それで試しに使ったことがある

67 :
>>62
表示だけならライブラリ探さなくてもOleLoadPicture()で読み込んでDCにIPicture::Renderするだけでいいんじゃないか?

68 :
>60 1pixel小さいです

69 :
可哀想な頭だ

70 :
メモリDCへの拡大縮小画像のレンダリングを高速に実現する最適な方法ってなんなのだろう?
ちなみにGDI+ gdiplusは論外。GraphicクラスでメモリDC渡してレンダリングすると、GDI+がスレッドロックするので並列化による省時間はできない。

71 :
最適ならDirectX一択だろ
最速になると描画よりも拡大縮小アルゴリズムの話になりそう

72 :
>>67 の方が教えてくれた IPicture::Render はWindows2000時代からあるレンダリングAPIという認識。
わざわざVista時代にDirect2dをリリースした意味は何なのか、という疑問がありまして、その辺どうなの、と。

73 :
32bitARGB画像ならDirect2Dだな、小数点座標指定できるし。
Direct2DのAPIではピクセルフォーマット変換とかHeight方向反転とかできなかったと思うので
異なる場合には渡す前に変換しておく必要がある

74 :
せめて有名Webブラウザ並みの描画速度で複数画像を一覧表示できてほしいんだけど、その点、gdiplusはダメダメ。
Wikipediaなどの情報によると有名WebブラウザはDirect2Dによる描画らしいので、Direct2Dがいいのかな。

75 :
今作ってるソフトの遅い部分が「描画」でそこを改善したいんじゃなくて、たぶんこれから作るソフトの計画だよな
ある程度形になってからどこに時間食ってるか調べてそこを潰したほうが開発時間も動作速度もいいと思うな

76 :
>Direct2DのAPIではピクセルフォーマット変換とかHeight方向反転とかできなかったと思うので
当然SetTransformはあるしなんなら自分で書いたシェーダを挿入できるエフェクトグラフもあるでよ?

77 :
>>76
SetTransformで鏡像反転できるのか
マトリクス係数考えてみるわ

78 :
考えるもなにも普通にスケール-1ちゃうんか

79 :
>>78
oh www

80 :
低レベルな話ですみません。

ダイアログアプリケーション(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 :
>>80
WM_CTLCOLORDLG でブラシを返す

82 :
>>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

83 :
WM_ERASEBKGND

84 :
ここ参照

https://stackoverflow.com/questions/20519533/change-the-background-color-of-a-dialog-box-win32api

Tab キーによるフォーカス移動などを司る IsDialogMessage を呼んでいる辺りも注目

85 :
>>81, >>83-84
コメントありがとうございます。
状況が変わりました。すなわち、

1. DefWindowProc() ではなく、DefDialogProc() にする
2. (>>81) WM_CTLCOLORDLG メッセージ処理(ブラシを返す)

によりダイアログのベースの色が変わりました。
現在典拠を探しています。

遅いところ皆様ありがとうございました。勇気がでてきました!
https://ideone.com/ZBuhbz

>>84
StackOverflow のプログラム例は、(通常)ウィンドウがあって、そこから CreateDialog で新しくモードレスダイアログを作るときの作法ですね。
IsDailogMessage() が必要かどうかは、まだよくわかりません。

86 :
大雑把に言うと WindowProc に来る前 DefDlgProc が
値を返しちゃうので色が変わらないわけです (多分)。

他にも DefDlgProc が反応するメッセージについては WindowProc ではなく DlgProc で処理する必要があります。
どれがそうか一覧等あるのかは知りませんが。

87 :
フルスクリーンでも、色の取得ができるAPIは存在しないのでしょうか?
GetPixelを試みましたが、何故かフルスクリーン対象にすると 常に0を返されます

フルスク色取得が可能なapi、もしくはGetPixelでも出来るのでしたらやり方を教えてください

88 :
MemDC にコピーしてから好きに弄ぶ

89 :
できましたありがとう

90 :
質問です。
あるソフトがしたUSBの出力を、コンピュータの外部ではなくそのコンピュータ内の他のソフトへリダイレクトすることはできますでしょうか?

91 :
>>90
方法1 (「あるソフト」にパッチが可能なら)
CreateFile()/WriteFile()などをフックする。
ただし、これらはKernel32.dllにあるAPIなので通常の方法ではフックできない。
「あるソフト」内のByte列"Kernel32.dll"を(例えば)"Xernel32.dll"に書き換え、
Xernel32.dllを作成・フックする。

方法2
対象デバイス用デバイスドライバと同じAPIを持ち、かつその入出力を「他のソフト」
へ受け渡すAPIを持つデバイスドライバを作成する。

方法3 (本物のUSBデバイスも生かしておくなら)
フィルタードライバーを作成し、そこで「あるソフト」の出力を盗み見る。

92 :
kernelにあっても普通にインジェクトでフックできるような・・・

93 :
と、書き込んでからプロキシ思い出した。あれ64bitのは作るの面倒すぎだけど32だったらありだな

94 :
USBハブで物理的にteeすることって可能なんだろうか

95 :
Window API Hook で検索すればすぐ出てくるけど API のフックはかなり簡単にできる
DLL インジェクション併用で CreateFile / WriteFile をフックするのがいいかもね

96 :
> ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
テンプレのこれいるか?ってほど簡単にできるしな

1つのページを見るだけではできなくても
いくつかのページの情報を自分なりにまとめたらできるようになる

97 :
皆さまありがとうございました
APIフックを試します

98 :
>>94
usbアナライザ

99 :
うーむ、やっとコンパイルできた…
32ビットコードは 32ビットのODBCデータソースしかみないし
64ビットコードは 64ビットのODBCデータソースしかみないのか…

手持ちの excel は 32ビットで、見に行くODBC テーブルは 32 ビット用であったことが混迷に拍車をかけてしまっていた
cigwin の odbcライブラリとしては -lodbc32 でコンパイルしているが、32ビットなのか 64 ビットなのか、いったいどうなっているんだ?!

100 :
shell32.dll とか kernel32.dll とかもそうだし、
32→64 ビットではモジュールの名前変わらなかったからね

101 :
dumpbin 使え。

102 :
>-lodbc32 でコンパイル

これで実行時に見に行くのが 32 になるか 64 になるかは決まらない
いわんか wow64 を見るのか system32 を見るのかをや

103 :
WS_POPUPの子ウィンドウって、
親ウィンドウからはGetNextWindow()などのループで辿っていけないものですか?
GW_ENABLEDPOPUPだと、見えているものしか出てこないようです。

104 :
見えてる=enabled popup
ってことなんだな。普通にGW_CHILD使えばいいじゃん

105 :
>>104
GW_CHILDだとWS_POPUPのやつは出てこないようです

106 :
人間は見えるものしか見ない
馬鹿は観たいものしか見ない

107 :
EnumWindows、EnumChildWindows推奨。

108 :
ためしたらまじでgw_childだめなんだなw
全ウインドウの親見てくのか

109 :
>>107
デスクトップの子ウィンドウを巡っていって、
片っ端からその親を調べていくしかないってことですか?

110 :
EnumChildWindowsだけでいっか。

111 :
>>99
引き続き ODBC まわりを触っている
コンパイラの警告を黙らせるために、いい加減に適当にキャストしていたのが、バグ(c++ delete が失敗する)のもとになっていた
ああ、ダウンキャスト/アップキャストの区別がつかない、こまったこまった

112 :
(´・ω・`)知らんがな

113 :
ODBC を完全に把握した
しかし、面倒なので jdbc を使うことにした…

114 :
IsWindows10OrGreater関数を、
Windows10最新版(build16299)で使用すると、
Windows10にも関わらずfalseが返ってきます。
原因に心当たりのある聡明なお方はいらっしゃいませんか…?

115 :
>>114
http://yamatyuu.net/computer/program/sdk/base/GetVersionEx/index.html

116 :
GetVersionExはウソつきだが、OSのバージョン番号に依存するアプリは地獄へ行かねばならぬ。

117 :
質問に対する答えを書かないアホは地獄行きだバカ

118 :
それapiじゃなくてVersionHelpers.hにある関数じゃないか?デバッグして何かえってるか見ろ

119 :
VersionHelpers.hの実装はVerifyVersionInfoだけどどのみちマニフェストでの指定は必要ってだけやね

120 :
GetCursorPos ってマルチモニタに対応してるんですかね?

121 :
>>120
している。仮想スクリーンの座標系になる。

122 :
>>121
ウソを書いてしまった。ごめんなさい。
仮想スクリーンではなく、プライマリーなスクリーン座標になる。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd145136.aspx
これとSM_XVIRTUALSCREENとSM_YVIRTUALSCREENを使って座標値をずらすと仮想スクリーン座標が得られる。

123 :
>>122
ありがとうございます!!

124 :
あれでうまく動いたのか?

125 :
あけおめ

126 :
しっかし、おっさん臭いスレだな

127 :
若者はモバイルだからな

128 :
モバイルカテゴリの人がWindows関連スレを覗きに来るか?

129 :
win32api の記述を C から C++ に移行中です
CreateWindow() が hwnd を返すタイミングより先に、ウィンドウプロシージャに WM が流れ始めることを特定するのに時間がかかりました…

130 :
>>129
20年前位にやったなあ
WindowProc
DialogProc
ThreadProc
****Callback
この辺を包んでクラス化

ウィンドウの場合
CreateWindowのパラメータでクラスのポインタを渡し
WM_CREATEで受け取るって感じ

131 :
>>130
そうです、それです!WNDCLASS.cbWndExtra を使うのがミソです!

CreateWindow(..... 最後 (Derived)this);

extern "C" long CALLBACK WindProc(...) {
if (msg == WM_CREATE) {
p = (Derived*)((LPCREATESTRUCT)lp)->lpCreateParams;
SetWindowLong(hwnd, 0, (LONG)p);
p->hwnd = hwnd // これを見つけるのが大変だった
.
} else {
p = GetWindowLong(hwnd, 0)
return p->WindowProc() // goto Derived::WindowProc()
}
Derived::WindowProc() {
this->Base::WindowProc()

virtual Base::WindowProc() {
HWND hwnd // member instance variable
return ::DefWindowProc(this->hwnd, mwg, wp, lp);

温故知新…

132 :
厳密にはWM_CREATEの前にもいくつかメッセージ飛んでくるけどね

133 :
>>132
了解!そういうのは全部まとめて ::DefWindowProc() に流しちゃっているのでダイジョブです!

134 :
この行いらね
HWND hwnd // member instance variable

135 :
>>134
ごめんなさい >>131 ははおって書いたので、内容が今一つはっきりしなかったこと謝罪いたします。
その行は、自作 Window クラスのメンバとして書いたつもり、Window クラスに hwnd を持たせたいと考えているのです

136 :
片山先生の MZC4 みたいなのを作ってるわけね

137 :
>>136
はい
https://github.com/katahiromz/MZC4/blob/master/include/MWindowBase.hpp をみました
私の趣向としては、hwnd は完全に隠蔽したい、そのため WNDCLASS.cbWndExtra をあえて使うことになります

138 :
cbWndExtra == 0なウィンドウには使えないから、結局、設計思想が間違っている。

139 :
GWLP_USERDATAをライブラリ側で潰してる時点で同レベルだな

140 :
しかし、ハンドルマップにしたら、コストがかかるんだよな。

141 :
他人に設計思想が間違ってると宣いつつ自分は即座に言い訳
さすがカス山

142 :
MFCはハンドルマップ

143 :
ATL方式もあるよ

144 :
ATLは機械語直接いじってジャンプかぁ

145 :
ジャンプmemo
http://blog.trendmicro.co.jp/archives/16735

146 :
MSゴシックやMS明朝のフォントで描画するとき、
小さいときはビットマップフォントが使われることは知っているのですが、
常にビットマップフォントを使わないように
CreateFontなどで指定することはできませんか?

147 :
使われることも知らなかったが、小さいとドットが出てくるからビットマップをやめるメリットがなく逆に処理が多くなるデメリットが大きくなるんじゃないか?

148 :
DirectWriteだと強制的にヒンティング切れるからそれでイケる
GDIはGetGlyphOutlineでAA付きで書き出すくらいしか知らん

149 :
24dot x 24dot とかで truetype 描画とかしたいの?

150 :
ワイは大きめのビットマップメモリ領域に一度描画してから、縮小表示という無駄オブ無駄処理しとるやで

151 :
MZC4、ハンドルマップに切り替えできるようになったよ。
https://github.com/katahiromz/MZC4

#define MZC4_HANDLE_MAP

152 :
IPアドレスコントロールのEDIT子ウィンドウがGWLP_USERDATAを使っているみたい。。。

153 :
結局、設計思想が間違っていたなカス山

154 :
GWLP_USERDATAを使うのは低コストな選択肢としてアリ。ただし、IPアドレスコントロール内部やユーザー側のコントロールに触れる場合は、
問題が生じる可能性がある、という結論でファイナルアンサー。

155 :
extradataはチェインにして使うもんじゃね?

156 :
>>154
問題が生じる可能性があるけど選択肢としてアリなら
なぜ他人の実装には間違ってるなんてケチつけたんだ?

157 :
>>147-150
ありがとうございます。
やっぱり簡単にはいかないんですかね。
印刷の処理は今のままでよく、画面上をその印刷イメージに近づけたいので、
DirectWriteの勉強をしてみたいと思います。

158 :
印刷物をモニターに等倍表示したいんだ!ってわけじゃないだろ?
モニター上に拡大表示すりゃいいじゃん

159 :
わざわざ小さいときはビットマップフォントを使うのは、
その方が綺麗だからなんだけど

160 :
>>157
>印刷の処理は今のままでよく、画面上をその印刷イメージに近づけたいので
やったことないけど・・・
CreateDC(プリンタドライバ名・・・)
CreateCompatibleDC()
CreateCompatibleBitmap()
でプリンタ互換のメモリデバイスコンテキストを作成し、これに印刷と同じ描画を行った後、
BitBltで画面にコピーするなり、DIBセクションにコピーするなりすれば良いんじゃね?

161 :
それするとデバイスコンテキストに書き込んだ時に、フォントがビットマップ描画になるから嫌ってんでしょ
そもそもプリンタ自体の解像度とかあるから、ビットマップやめたとこでそれ意味あんのって感じだけどw

162 :
>>161
解像度の高いプリンタではTrueType中のVectorデータ、解像度の低い画面ではTrueType
中のビットマップデータが使われることで、文字幅(→結果的に文字位置)が微妙に違って
しまうのを嫌っているんじゃないかとエスパーした

163 :
せやからワイが>>150で書いたんや

164 :
TeX使え

165 :
Acrobat Readerは、MSゴシックやMS明朝で画面上の表示が小さいときも
ビットマップフォントは使われないようですし、
やはりビットマップフォントよりも綺麗に見えるので、
これと同じような描画ができないかと思った次第です。
もちろん、AdobeがGDIだけで描いているとは思ってませんが。

166 :
Instructs the font mapper to choose from only TrueType fonts.

167 :
AdobeはBGRに対応してなくて糞

168 :
文字コード総合スレ Part11
http://mevius.2ch.sc/test/read.cgi/tech/1516629503/

169 :
win32api直接叩いてるんですけど、タブオーダーってどうやって設定されるんですか?
多分 CreateWindow 呼んでコントロールを作った順番そのままだと思うんですが、
なんかTABキー押してもフォーカスが移動しないんです

170 :
モーダルダイアログじゃないと動かないよ

171 :
モードレスの場合は、メッセージループにIsDialogMessage呼び出しが必要。

172 :
タブキー押されたらsetfocus

173 :
ああー
助かりました
IsDialogMessage でうまくいきました。
余談ですが CreateWindow の呼び出し順とは逆に移動するんですね。
Z手前から奥に向かって移動する感じですかね。
とりあえず後はどうにかなりそうです

174 :
プリプロセッサマクロ値 "_MSC_VER" を知る方法はありませんか?
cuda 9.1 提供のヘッダの #error が反応してしまいます

175 :
は?
printfでもしてみればいいだろ

176 :
VS2008でも使ってるのか?

177 :
>>175
ありがとうございます、なるほど!
現時点の最新は _MSC_VER = 1912 でまだ cuda が追従できていないようです
https://devtalk.nvidia.com/default/topic/1022648/cuda-9-unsupported-visual-studio-version-error/

178 :
ズコー

179 :
dll間でデータを共有するのはdata_segでできるけど
dllAで動的確保したデータ(クラスでメンバ関数有り)をdllBでも使えるようにするには
マッピング以外に何がある?

180 :
ふつうにポインタ渡せばいいんじゃね?もちろんクラスの定義は一致している前提だけど。

181 :
ごめんdllA, dllBって書いたけど間違い

正しくはexeAとexeBが同じdllを使ってる状況で
exeAで動的確保して初期化もしたクラス(メンバ関数有り)をexeBのdllでも使いたいんだ

182 :
ふつうにポインタをdata_segに置くが

183 :
プロセス間で共有したいんだろ?
共有メモリでもなんでも使ってデータ本体を保管
データ本体にアクセスするクラスを作ってそれはプロセス内でのみ利用すりゃいい
要はクラスそのものはプロセス間で利用しようと考えない

184 :
>>182
それだとメンバ関数実行でexeBのdllが異常終了する

>>183
やっぱそういうのしかないんかな
ありがとう

185 :
クラスにnew と new[] 定義すればエラーにならないでしょ?

186 :
Windowsがシャットダウンした時刻を記録したいんだけど、
1秒おきにファイルに時刻を書き込み続けるしかないかね?

187 :
カーネルエラーで落ちたのでなければイベントログにシャットダウン時刻が書いてあるはずだが

188 :
VS2015とVS2017のsplitpathがMBCS対応してないんだけどどういうこと?

189 :
>>186
イベントログの他には
WM_QUERYENDSESSION
WM_ENDSESSION
WM_POWERBROADCAST

190 :
初歩的な内容で申し訳ないのですが、、、

親ウィンドウと子ウィンドウがあります。
子ウィンドウは自分でCreateWindow()を使い、親のウィンドウハンドルを指定して作っています。

そこで質問ですが、親ウィンドウでWM_DESTROYを処理する際に、子ウィンドウに対して
明示的にDestroyWindow()を一々実行する必要はありますか?
自分としては子ウィンドウは親の破棄に伴って暗黙のうちに破棄されると勝手に解釈しているのですが、
間違いがあればご指摘ください。

191 :
確認不足でした。
DestroyWindowをしなくてもちゃんと破棄されていましたね。
WM_DESTROYが来ていました。
すみませんでした。

192 :
わかればよろしい

193 :
ウィンドウサイズが変更禁止されているウィンドウを強制的にサイズ変更する方法を教えてください

194 :
聞く前にとりあえずあっちのスレの>>134をやったらどうだ?

195 :
http://katahiromz.web.fc2.com/re/ja
https://github.com/katahiromz/RisohEditor
リソーエディタ、一応完成したから、使ってやってな。無料。

196 :
>>195
電子署名付けろよ、ばーか

197 :
>>195
電子産廃を作らないで下さい

198 :
>>195
チョコもらわないで、何作ってんだよ、ヒマジン。

ネトウヨ超きも。

199 :
Wwwwwwwwww

受けるw

200 :
>>196-199
おまいら全員、逝ってよし。

201 :
ツリービューに対してTVS_DISABLEDRAGDROPを設定してるのに、
右ドラッグをするとTVN_BEGINRDRAGが発生するのは仕様なのでしょうか。

しかもそのまま右ドラッグ操作をすると、
TVS_DISABLEDRAGDROPを設定していないときの左ドラッグと同じように、
選択位置が元に戻ってしまい、とても格好悪い動きになります。

左右どちらもドラッグ操作を無効にしたい場合、
左はTVS_DISABLEDRAGDROPで、右は自力でという変な方法しかないのでしょうか。
それとも、なにか他にスタイルがあるのでしょうか。

202 :
モーダルダイアログの子ウィンドウとしてモードレスダイアログを使用している場合
モードレスダイアログをキー操作するにはどうすればいいですか?
IsDialogMessageでメッセージを捕捉できません
そもそもメッセージが発生しません

203 :
親に全部メッセージ来てないか

204 :
試しに
モーダルダイアログ(親)のPushButtonAと
モードレスダイアログ(子)のPushButtonBを同じコントロールIDにしてみましたが
ボタンBのメッセージは子にしか来ていませんでした

205 :
ああ、キー操作ね・・・・

親もモードレスにしてメッセージループ回せばいいんじゃないかな
なお、Enterは(略

206 :
キー操作ならDS_CONTROLをつければすべて自動でやってくれる。

207 :
ありがとうございます
親はモーダルダイアログ固定でお願いします

子にDS_CONTROLスタイルを追加で操作はできるようになりましたが
ボタン1 ボタン2
この状態でボタン2で方向キー右を押したらボタン1がアクティブに
ボタン1で方向キー左を押したらボタン2がアクティブになるようにできませんか?

今の状態だとボタン1で左やボタン2で右を押すと親ダイアログのコントロールにフォーカスがうつってしまいます

208 :
補足です
ボタン1にWS_GROUPは追加してあります

209 :
WS_EX_CONTROLPARENT もつけてみてください。

210 :
ありがとうございます
親に追加したら親のコントロールから子のコントロールへ移動ができるようにはなりましたが
>>207の状況は変化無しでした

ボタン1 -> ボタン2 -> 親のコントロール ではなく
ボタン1 -> ボタン2 -> ボタン1 -> ボタン2 のようにフォーカス移動させられませんか?

211 :
親だけでなく子ダイアログにもつけてください。

212 :
ありがとうございます
やっぱりダメでした

213 :
>>210
ボタン2の次にフォーカスが来るコントロール(親ダイアログ側)にも
WS_GROUPを付ければよいのでは

214 :
ありがとうございます

WS_GROUPを追加するとグループ開始で次のWS_GROUPが見つかるとそれ以降は別グループの繰り返しですよね
同ダイアログ内では問題無いですが
今回の条件では親コントロールに追加していてもフォーカスが親コントロールにうつってしまいます

215 :
wsh 使って Environ("Volatile") とかの環境変数書き換えたあと
WM_SETTINGCHANGE 呼べば親プロセスの環境変数書き換え出来ますか?

216 :
別プロセスならできないだろ
やるならレジストリいじってだろうが、変更適用されるかはアプリ次第

217 :
WM_SETTINGCHANGE は別プロセスには届かないのですね

218 :
こんなのもありました
http://www.garbagecollect.jp/~usa/d/200803a.html

219 :
IMEによる日本語入力の際、今時よくある予測変換ウィンドウを自アプリでは
表示しないようにしたいのですが、なにかいい方法はないでしょうか。

ImmSetCandidateWindow()を試してみましたが、どのような値を入れても
通常の変換候補ウィンドウすら制御できず(何も変化無し)でした。

OSはWindows8.1です。
よろしくお願いします。

220 :
Win32APIの範疇ではない

221 :
そうではない根拠と該当範疇をどうぞ

222 :
MSIMEとGoogleIMEとかで違ったと思う(だからやるならターゲットIMEごとにウインドウ捕まえて消すことになるんじゃないかな)
そういう意味じゃ範疇じゃないな
でも使うのはwin32だから範疇だろ

223 :
なにその俺様が使うからなんでもここでOK論理

224 :
>>221に答えろよw

225 :
おまいらキーロガーほんと好きだな

226 :
>>224
そのくらい自分で調べなよ

227 :
IMM系列はWin32APIだろ
小学生は黙ってろよ

228 :
今やっていることは、仮想キーボードを使って文字入力する画面があるのですが、
入力中に予測変換候補ウィンドウが仮想キーボードに被ってしまって仮想キーボードの
キーが押せなくなる(もちろん移動すればいいですが)問題の回避を検討しています。

文字入力中に EnumWindow()等を使って調べてみましたが、関係しそうなのは
クラス名 CiceroUIWndFrame, MSCTFIME Composition, mscandui40.* あたりで、
mscandui40.candidate を DestroyWindow()すれば予測変換・変換候補ウィンドウともに
非表示にはできました。

しかし mscandui40.candidate は MS-IME 使用時のみしか捕まえられませんし、
MS-IME のバージョンでクラス名が変わってしまう可能性もあるのでやり方を変えました。

というか、正攻法では Imm系の処理で行けそうです。

229 :
WM_IME_NOTIFY メッセージで IMN_OPENCANDIDATE を処理すれば何とかなりそうではあります。
ググってC#のサンプルは見つけましたが、それは上記のメッセージを捕まえてその後処理せずに
(ように見える)いるだけみたいです。

しかし、こちらはC/C++なのでそのメッセージを捕まえて、処理せずリターンしている
(CallWindowProc()を処理しない)ものの変換候補ウィンドウが表示されてしまいます。

解決は近そうなのですが、ご助言お願いいたします。

230 :
見つけたサイトの短縮URLを貼ると書き込めなかったので、検索ワードを貼ります。
「IMEの変換ウィンドウを表示しないようにする」
(ページタイトルそのまま)

231 :
>>229
だからWin32APIじゃないってのに

232 :
かまってちゃんの幼稚園児はおうちに帰ってね

233 :
>>231
Win32APIです。

234 :
>>233
プ

235 :
https://github.com/pauldotknopf/WindowsSDK7-Samples/blob/master/winui/WindowsSearch/IFilterSample/Dll.cpp
このサンプルソースで使われてる

#define SZ_FILTERSAMPLE_CLSID L"{6C337B26-3E38-4F98-813B-FBA18BAB64F5}"
#define SZ_FILTERSAMPLE_HANDLER L"{1AA9BF05-9A97-48c1-BA28-D9DCE795E93C}"

この部分のguidって自分用に修正すべきguidだよね?
なんかこのguidググるとWindows10のPDF用フィルターで使ってるみたいでよく分からんぞ

236 :
どうせ変えるんだからサンプルの値が何に使ってたかなんて考える必要ないやん

237 :
guidそのまま使ったらまずいかな

238 :
個人で遊ぶぶんにゃ問題起きることなんてまずないよ

239 :
うむ

240 :
ある自作DLLの処理の中でGetWindowRectでウィンドウの座標を取得する場面があります。
Pythonから呼び出すと正確な値が取得できるのですが、C++から呼び出すと実際の数値と異なる値が取得されてしまいます。
同じapiを呼び出してるはずなのになぜ違いが出るのでしょうか?

241 :
クイズすんなっての
全然違うとこでバグってんだろどうせ

242 :
クライアントのハンドルかアプリのハンドルかで間違うケース
右下の座標を幅と高さで間違うケース

243 :
GetWindowRectとかはvista以降色々あってdpi上げてると挙動がおかしくなる
挙動をきちんとする方法はぐぐれ

244 :
>240
セットでマウスカーソル合わせたら?

245 :
dpi manifestでぐぐるよろし

246 :
https://github.com/katahiromz/EntryPointExamer

エントリーポイントの静的解析ツールを作ったよ。EXEがどのWindowsで起動するかを簡易的にチェックできるよ。

247 :
https://blogs.msmvps.com/gdicanio/2018/03/27/string-performance-tests-atl-vs-stl/

という事です

248 :
Short String Optimization (SSO)凄い。最初から標準のstd::stringを使えば良かったんや。

249 :
何を今さら

250 :
OneDrive というアプリもSTLを使っている。以下の内容のログファイルaria-debug-nnnn.logをTEMPに吐くことから察せられる。

C:\build\aria-cpp-v1\clienttelemetry\src\LogManagerImpl.cpp(626):
class Microsoft::Applications::Telemetry::ILogger *__thiscall Microsoft::Applications::Telemetry::LogManagerImpl::Initialize(
const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const struct Microsoft::Applications::Telemetry::LogConfiguration &)
WARNING: Invalid in-ram queue size (20971520), adjusted to max ram queue size

251 :
OneDriveってアプリなのか?

252 :
記事書いたよ。Win32の学習にお使い下さい。

http://katahiromz.web.fc2.com/win32/page01.html

253 :
用語の出し方がめちゃくちゃ
誰を読み手のターゲットにしてるのか

254 :
https://msdn.microsoft.com/ja-jp/library/d1587c1h.aspx
ウィンドウズでは exe,dllは共に実行可能ファイル

255 :
せめてメッセージクラッカーとリソースエディタのページ背景統一したら?

256 :
.NET FrameworkにあるDataGridViewのような物って、Win32にありますか?

257 :
ListViewかなー

258 :
_tmainで始まるコンソールアプリで、ウインドウプロシージャを使う方法はありますでしょうか
WM_TIMERを使いたいのですが・・

259 :
>>258
Sleepでミリ秒待つ。

260 :
>>259
やっぱりコンソールだとそのやり方になるんですか・・・
Sleepでやりますありがとうございます

261 :
タイマースレッドからWM_TIMER相当のをバンバン投げりゃいいな

262 :
ウインドウ作れば・・・

263 :
デジャヴかと思った
https://social.msdn.microsoft.com/Forums/vstudio/en-US/96639123-b543-4ca3-b8ca-0cbbde4621f1/timer-s-in-win32-console-application?forum=vclanguage

264 :
>>258
HWND_MESSAGEでぐぐればよろし

265 :
コンソールアプリなら、プロシージャを使わずに
マルチメディアタイマー周期を設定してコールバックからイベントを送って
メインループ側は WaitForSingleObject で待ったりすることが多い
昔からゲームアプリでよく使われてる

266 :
ありがとうございます。
HWND_MESSAGEとWaitForSingleObject、ちょっと試してみます。

267 :
次の質問はスレッドかな

268 :
CPUの周波数と温度を取得する方法を教えていただけないでしょうか
CPU使用率(%)については、下記サイトのようにpdh.hを使う方法で取得できました
http://home.a00.itscom.net/hatada/windows/tips/performance02.html

269 :
WMI

270 :
>>269
こちらを参考にオペレーションシステムの名前取得まではできました
もう少しいじればできそうなので頑張ってみます。ありがとうございます
https://msdn.microsoft.com/en-us/library/aa390423.aspx

271 :
wshとかpythonとかでも同じ方法でもっと楽に取れるから
そっちでテストプログラム書いてから逆移植すると楽

272 :
その逆移植が面倒な部分だからな
一番簡単なのはスクリプトの結果受け取る方法。でもこういうの嫌がる人多いw

273 :
逆移植する前にもうやりたいこと出来たからそこで終わるパターンが最近多い

274 :
CPUの温度ってCPU自身が持ってるけど、それにアクセスするには特権が必要で、そのためには署名されたデバイスドライバーが必要。
フリーソフトで温度を取れるのもあるけど、自前でドライバーを用意してるか、MS的にグレーっぽいドライバーを利用してる。

275 :
こちらのサイトを参考に、WMIによる温度取得できました
https://stackoverflow.com/questions/23314886/get-cpu-temperature

しかし、何度アクセスしても27.85℃のままです
試しに水を止めて50℃まで上げてからプログラムを立ち上げてみましたが、27.85℃でした
リアルタイムの温度を取得するのは無理なのでしょうか

276 :
誰かが作ったwmiのツール使って温度見て同じく27.85だったらcpu(ドライバー)が原因
きちんとしてたらおまえが原因

277 :
一文字も変えずに丸々コピペしてみましたがやはり27.85と表示されます・・

278 :
こちらでも同じく temp=27.850000 でした (Visual Studio 2015 Community)

279 :
> it's always the same and it's not the CPU temperature at all
ソースコードのコメントがこれなんだから、丸々コピペならそうなるんじゃないか?
だから丸々コピーしても意味ないだろ。原因探せよ・・・

280 :
WMIでは無理なんですね・・
winring0というもののサンプルコードをいじってみたところ取得できたので、こちらを移植する方法でやってみます
ありがとうございました

281 :
結局>>274ってことだったんだな

282 :
おまえらがWMIなんて言うから無駄な遠回りしとるやんかわいそうに

283 :
27.85℃=301K

284 :
Windows10になって増えたWin32APIとか調べたい場合どうするのが確実?
ネットで調べるとXP以前の例ばかり

285 :
>>284
ググってみると SDK のヘッダの変化を見てチェックしてる人いるな

https://naughter.wordpress.com/2015/05/15/changes-in-the-windows-10-sdk-compared-to-windows-8-1-part-one/

https://naughter.wordpress.com/2015/05/24/changes-in-the-windows-10-sdk-compared-to-windows-8-1-part-two/

細かい API 一つ一つの追加とかまでは書かれていないけど参考になるんじゃないだろうか
winerror.h に SQLite のエラーコードが(740行も!)追加されたとか豆知識得られた

この人は最近のSDKについても調べてる

286 :
いやWindows10で何が追加されたかを調べたい
という質問じゃなかったのか、もしかすると…

287 :
ヘッダ比べるのは現実的な方法

288 :
音声にいろいろなエフェクトをかけてスカイプやdicordなどに流せるようなソフトを作りたいんですけど
仮想デバイスを作るにはどうすればいいんでしょうか

マイク入力をうけとってエフェクトをかけてスピーカーから再生するまではできたんですが
他のアプリに仮想デバイスとしてみせる方法が分からなくて困っています

289 :
VST かな

290 :
この辺かな
https://qiita.com/funatsufumiya/items/c2a009a300ecdc88247a
もう古いって言われるかも知れんが

291 :
>>289
すばやい返答ありがとうございます

軽く検索みてみたらGUIみたいなのがたくさんでてきます
サンプルコードが一切でてこないですけど
プログラムの中にうめこむライブラリとしてつかえるものなんでしょうか?

292 :
>>290
分かりやすいサイトありがとうございます
サンプルコードがあるので読んで見ます

293 :
あとフィルタはたぶんこっち
https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/windows-audio-architecture
https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd317589(v=vs.85).aspx
https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd375473(v=vs.85).aspx
がんがれ

294 :
必要なのはVSTじゃなくて仮想デバイスドライバの作成方法なんじゃないのか?

295 :
そだねーJap

296 :
vst 経由なら vst skype とかでググればやり方は見つかるし

297 :
自アプリで簡単な手書きメモ機能があるのですが、Win10タブレット端末でペン操作すると
うまく文字が書けません。
短い線が書けない感じです。

恐らくマウス周りのメッセージの代わりに WM_GESTURE 系メッセージが来ていると思うのですが、
真っ当にこれらのメッセージを処理するのではなく、自アプリではこれまで通りマウス処理しかしない
と何らかの方法で設定・宣言することによってペン・タッチ操作関連のメッセージを来なくすることは
可能でしょうか?

OSレベルで全体的にこの機能をOFFにすることは可能なようですが、自アプリだけこれを適用できれば
と思っています。
よろしくお願いします。

298 :
自アプリだろ?要らないメッセージ無視すりゃいいじゃん

299 :
>>297
使ったことないけど
WM_TABLET_QUERYSYSTEMGESTURESTATUS
で色々disableしてあげれば良いんじゃないだろうか

300 :
ほかに .Net だとメッセージフィルターでWM_POINTERDOWN / UP を無視するなんてやり方を紹介している人も多い

301 :
フルボッコすぎる

302 :
https://teratail.com/questions/121464?sip=n0070000_019&uid=11595

早く返事が来ないかな。ワクワク

303 :
一応分かりやすく画像で状況を補足します。
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 系の処理を追加すれば対処はもちろん可能でしょうが、簡単に既存処理を生かせる方法が
ないものか、情報をお持ちの方よろしくお願いします。

304 :
インクとジェスチャーの両方が必要ということかな。

305 :
いやゼスチャの判定が優先されるから少し動かさないと WM_LBUTTONDOWN とかが来ないんだよ
それを簡単にマウスの時と同様すぐメッセージが来る動作にできないか、という話

ゼスチャ無効化してもダメとは面倒な話だよね

306 :
今日の収穫は、OLEオートメーションがめちゃややこしいことがわかっただけだ。

307 :
言語でネイティブにサポートされたヴァリアント型があればもっと簡単なんだが。

308 :
そもそもマウスとジェスチャー分ける必要あったんかいな
軌跡はないが矛盾はしないだろうに

309 :
コンソールのmain関数のコマンドライン引数argv、argcを引数にとる関数があるのですが、
これはwinmain関数内でも使えますか?
その場合argv、argcの代わりにcommandshowとcommandlineを引数にする必要があるとおもうのですが、
どのようにすればエラーが出ずにargv、argcをcommandshowとcommandlineに変換できますか?
よろしくお願いいたします。

310 :
__argc、__argvでアクセスできる

311 :
>>310
ありがとうございます。
早速それでやってみます。

312 :
>>309
なんかどっちに変換したいのかよくわからんが
__argv、__argc、GetCommandLineW、CommandLineToArgWあたりで調べてよきにはからへ

313 :
>>303
そんな古臭いメッセージ処理せずに、下記のメッセージで処理したら?
WM_POINTERDOWN: WM_POINTERUPDATE: WM_POINTERUP:
win8以降しか対応してないけどな。xp/vista/7とかでタッチパネルの処理は切り捨て推奨

314 :
旧来のアプリなんかタッチやフリックに対応してるわけないのに、そんなアプリに対してそれらのメッセージを投げつけて
マウス関連のメッセージを投げないという仕組みがMSらしいというか融通が利かないというか、バカバカしいな。
タッチやフリックを要求するアプリのみにそれらのメッセージ投げるだけでいいのに。

旧来アプリでも旧来アプリなりにペンタッチで動くようにすりゃ、裾野も広がりやすいだろうにな。

315 :
ちょっと古いシステムなのでそのままちょっと直すだけで動かないものかと
試行錯誤していました。

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

皆さんありがとうございました。

316 :
>>314
いやタッチのメッセージを処理しなけりゃ普通にマウスのメッセージにフォールバックはされるぞ
マウスメッセージのみで手を抜きたいけど目的の品質の届かないって趣旨の質問じゃろ

317 :
>>316
上でも書きましたが、タッチのメッセージを処理しないようにすると
ペン入力自体全くできなくなりました。

318 :
関係あるんだかないんだかはわからんが
EnableMousePointer なんて api があるな

319 :
Surfaceでしか確認してないけどそういやFCUだかでペンのスワイプの既定が
カーソル移動からスクロールに変更されてたなあ
そのへんが原因かもね

320 :
>>318
ありがとうございます。
飛びついてみましたが、変化ありませんでした。
逆の考え方で、マウスをポインティングデバイスとして使うためのものかも知れませんが、
マウス操作しても前と変わらずでした。
もしかするとマウスでフリック操作などができるようになるのかも?という気がしますが、
そのような自作アプリがないのでこれ以上は分かりません。(なお、デフォでDisableが設定されていた)


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

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

色々アドバイスいただき、皆さんありがとうございました。

321 :
タッチパネルのみのメッセージである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;

322 :
タブレット持ってないからわかんないけどさ
>>303の◎ってOSが出してて、OS自体が入力を拒んでるんじゃないのか?
だとしたらどのモジュールがその処理してるのか調べてその処理置換してwindows自体の挙動を変える必要があると思う

323 :
処理置換しなくてもrawinputだとか入力関連のapi叩いても盗れる可能性あるか

324 :
>>323
取る方法はいくらでもあってドキュメント化もされている
今回の質問は簡易なコードでマウスと同様の動作をさせる方法は無いか?ということ。

325 :
◎の中はメッセージ来ないから困ったって質問かと思ったんだが違ったのか
わかんないもんに口出すべきじゃないなw

326 :
書き忘れてた。WM_TOUCH系の初期化すると◎のジェスチャーとか、不具合でるよ。
初期化しないで、321のコード実装してみたらいいと思う。

327 :
サーバー上のファイルを編集中に、他人からの全てのアクセスを禁止したいのですが
CreateFileでdwShareModeを0にすれば排他制御は万全だと思いますか?
良い方法があれば教えてください。

328 :
補足。クライアントからサーバー上のファイルを編集するときです。

329 :
deleteされちゃいますよ

330 :
linux やわunix サーバなら消されちゃうかもね

331 :
編集完了までCloseHandleしなければdelete出来ないんじゃないでしょうか。悪意のある攻撃者はいないとして。

私が心配しているのは、一つのファイルに対して、複数のクライアントから同時に排他Open(CreateFile)が
発生したとして、複数のクライアントで排他Openが成功してしまう可能性があるんじゃ無いかって事です。

332 :
>>331
Open/Close は排他ロックにならない、ときいたことがある

333 :
>>332
そうですか、、
小さいシステムなので、サーバ側プロセスまで作りたくないなーと思ってたんですが。

334 :
smb なら排他的にロックされる
2つのクライアントが矛盾する共有モードでファイルをオープンしたり削除したりはできない。

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

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

もしも目的が他のクライアントにエラーを返すとこでなく
書き終わった時点でアプリが書いた内容になっていることを保証したい
(書いている途中のファイルを読まれないように)だけなら
別名のファイルを作って書き終えたところで MoveFile するというよくある手法もある。

335 :
上のurlはazureのドキュメントだけどsmbでWindowsサーバなら同じ仕様だと思う

336 :
>>324
私にsmbはちょっと難易度高杉のようです。
妥協 or 違うアプローチを考えてみます。

337 :
質問です。
glutを使ったプログラムで、描画の後ダブルバッファ交換のglutSwapBuffers();を入れると、
windowの画面が真っ白になってしまって何も表示されなくなるのですが、どうしたらいいですか?

338 :
>>336
Windows の標準ファイル共有プロトコルSMBを用いて接続している
ファイルサーバ上のファイルなら
CreateFile の共有モードでロックができるということです。

339 :
>>338
なるほど。でしたら概ねロックできそうです。
ごく少数のクライアントは無料のVPNツールでLAN外からサーバーにアクセスしているんですが
これもSMBプロトコルなのかどうかは調べてみます。
情報ありがとうございました。

340 :
>>337
どこに描いたの?
何を表に持ってきたの?

341 :
Windowsのコールバック関数の中のWM_PAINTにダイレクトXの描画処理を書くと、エラーが出て実行されないのですが、どうしてですか?どうしたらいいですか?

342 :
まず全裸になります

343 :
使わなくてもいいからDCだけ確保

344 :
ドリームキャスト手に入れるのは大変そうだ

345 :
ぴぴん

346 :
dc1 = beginpaint
dc2= getdc
dc2= releasedc
dc1=endpaint

347 :
>>344
MDが復刻されるらしいじゃん。
上手くいけばSSやDCも行けるよ。

348 :
カードキャプターさくら

349 :
初歩的な質問ですが、fgxsdkを使ったプログラムと、openGLを使ったプログラムをつくりましたが、
どちらか片方づつだけしか使えません。ひとつのプログラムで両方使おうとするとエラーが出てしまいます。
どうしてそうなるのですか?またどうすればいいのですか?

350 :
バッファを上書きしないように気を付ける

351 :
297ですが、WM_POINTER 系を WM_LBUTTON や WM_MOUSEMOVE に
投げることで無事解決しました。
WM_POINTER 系はスクリーン座標、マウス関連はクライアント座標という
不一致の整合性を取ることと、ペン操作中の描画がされないので
UpdateWindow を随時実行すること、あとは WM_POINTER 系の処理後に
DefWindowProc は実行しないことで快適に動作するようになりました。
(描画については元の作りが甘いのが原因かもですが)

>>321
色々とありがとうございました。
取りかかりが遅くなりましたが、おかげさまで対応できました。

352 :
> WM_POINTER 系を WM_LBUTTON や WM_MOUSEMOVE に
> 投げることで無事解決しました。

なんか変ですね。

WM_POINTER 系処理時に、併せて適切な WM_LBUTTON や WM_MOUSEMOVE
も SendMessage or PostMessage で送信することで無事解決しました。

353 :
surfaceのペンの筆圧などの情報を取得したい場合、何というキーワードで調べるべきですか?

354 :
>>356
SurfaceはWin32APIを使いません。代わりにWindows RTを使います。

355 :
言葉足らずかも知れません。
surface proのペンの情報もwindows rtですか?

356 :
>>353
直前までのスレの話題がそのまんまなんだがなあ
とりあえずこのへんを満遍なく読んでおきなさい
https://msdn.microsoft.com/en-us/library/windows/desktop/hh454916.aspx
ちなみに筆圧/傾きは基本的にGetPointerPenInfo系


片山は馬鹿だから無視しとけ

357 :
ありがとうございます。

358 :
>>356
筆圧取得できました。

ペンだけでなくタッチもわかったのはとてもありがたい。
今後の課題は筆圧の最大値の取得、座標のズレの解決だ。
lParamからx,y座標取得してスクリーン座標からクライアント座標に変えたけど最大4pxぐらいずれてる(気がする)

359 :
ありがとうございます。

360 :
https://docs.microsoft.com/en-us/windows/arm/

ハードが高杉て買えません

361 :
WiXでディレクトリを作ってCreatorOwner(S-1-3-0)にアクセス権設定してみたら
プロパティのアクセス許可エントリにに"CREATOR OWNER"というグループが出てきた。
こんなの初めて見た。

362 :
へ?

363 :
saclsなんかでS-1-3-0を指定しても実在の所有者のSIDに置き換わるじゃん。そもそもそのためにあるわけだし。
ACLには入らないものかと思ってた。

364 :
ん?

365 :
何十年も経ってるのに今更初めてとか

366 :
何十年てなんぞ?

367 :
ゲームの効果音を鳴らすのにmciSendCommandで鳴らそうとすると
一瞬画面が固まるので別スレッドで再生するようにしたのですが改善せず固まります。

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

DirectSoundを使うしか画面が固まるのを回避する方法はないでしょうか?

368 :
鳴らす毎に固まるん?
ロード画面とかでオープンだけ先にやっておいて
後は鳴らし終わったら最初にシークしてまた鳴らしたらいいんでない?
的外れてたらごめんな

369 :
すみません。自己解決しました。
キーが連続して入力されたと判定されないように
前回から0.1秒以下の間隔で入力されたキーを無視する部分で
レンダリングまで無視してしまっていました。

370 :
>>367
waveout

371 :
ズコー

372 :
度々すみません。
音の再生で画面が固まらないようには出来たのですが、
オープン、シークを事前に行っておいても再生までに少し時間がかかってしまいます。
例えばクリックでクリック音を鳴らせるようにすると、クリックを連打した時に鳴らなくなってしまいます。
クリック音は1フレーム目から音が鳴るように調整済みで、高速化のためwavファイルにしてあります。
core i5 8250u, m.2 ssdの環境で最適化ビルドでも再生まで0.2秒以上かかります。
mcisendcommandを高速に動作させる方法はないでしょうか?

373 :
MessageBeepでは?

374 :
sndPlaySoundでは?

375 :
まさかのWM_LBUTTONUP?

376 :
>>372
ないんじゃない?

377 :
20年近く前に設置されたお手軽APIにリアルタイム性を求めるのもな…

ゲーム用の効果音ならDirectXTKのAudio(XAudio2のラッパー)がお手頃かしら

378 :
OpenALでもいいんじゃね?

379 :
キーボードの入力だけを無効化するAPIを教えてください
BlockInputだとキーボードとマウスの両方が無力化されてしまうので。

380 :
そのものずばりなapiはないんじゃないかな

381 :
ないじゃねーんだよアホ
だったらどうすりゃ実現できるのか教えろよ

382 :
うわあ

383 :
フィルタドライバ

384 :
ローレベルフックでキーボード入力を捨てられた気が

385 :
>>381
教えろよじゃねーんだよアホ
だったらどうなりゃ理想なのか教えろよ

指定したプロセスのみ無効化?
全てのプロセスで無効化?
BlockInputを試したという事は全てのプロセスで無効化でいい?

386 :
BlockInputはそのスレッドだけじゃないかな
おまえらこんな糞な奴のをよく答える気になるなw

387 :
キーボードを取り外す
展示とかに使うならこれだなw

388 :
16bit時代にはそのものズバリのapiがあった

389 :
easyhookを使えるようにするにはどうすればいいのですか?
たすけて

390 :
チュートリアルにサンプルコード載ってるじゃん

391 :
ごめんなさい
プログラムするんじゃなくて、インストールの仕方、使えるようにする方法がわからない

392 :
ducumentationにインストール方法書いてあるじゃん

393 :
どれ?。。
プロジェクトに追加されてたらOKなの?
EasyHookをつかってるプログラムが動かないんだけど
RemoteHooking.Injectがエラーになる

394 :
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.

395 :
おまえこんなスレチなのをよく答える気になるなw

396 :
ごめんなさい
どこいけばいいの?

397 :
あるならEasyHookをつかってるプログラムのスレ
無いなら入手元良く見る

398 :
keymapでも壊してみたらいいんじゃね?

399 :
壊すのも元に戻すのも再起動必要になるだろ

400 :
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

IAVAJ

401 :
IAVAJ

402 :
Windows10で仮想デスクトップを使った場合
そのどちらのデスクトップに自作アプリがあろうとも
GetDC(0)って現在表示しているデスクトップを取得するんだな

子ウィンドウだけを仮想デスクトップに移動しておいて
その子ウィンドウにスクリーン・ショットを取らせようと考えていたんだが
所詮、仮想なんだ?
もしかしてGetDC(1)で仮想の方を取得できないかもやったが真っ白だた

403 :
そらgetdcの引数は仮想デスクトップ番号じゃないかならなw
ivirtualdesktopmanagerじゃそういうのできないしどうしたらいんだろうな

404 :
アクティブじゃない仮想デスクトップにあるUWPアプリとか
サスペンドするようにもなってるしDWM的に無理じゃないかしら

405 :
このスレがまだあってよかった。
いま時 Win32APIを使ってゴリゴリ書いてるんだけど、
RegisterClassEx 構造体の lpszClassName に指定する文字列って、
ローカルな変数で指定しても大丈夫? つまり、ウィンドウクラスの登録後に
文字列のメモリが解放されてしまうことになっても問題ない?
それとも文字列リテラル(静的文字列)じゃないとダメなの?

406 :
すまそ、変な書き方をした。
>RegisterClassEx 構造体の

WNDCLASSEX 構造体の、lpszClassNameフィールド。

407 :
登録されたら、文字列の内容が記録されるから、ローカル変数で結構毛だらけ。

408 :
>>407
ご回答ありがとうございます、了解です(>∀<;)

409 :
declspec dllexport使ってなかったから気づかなかったけど
x64で仕様変わったんだな

410 :
呼び出し規約が?

411 :
x86だと先頭にアンダーバーが 後ろに@引数バイト数がついてたけど
それが無くなって関数名だけを勝手にエクスポートしてくれるみたいだ

412 :
https://msdn.microsoft.com/ja-jp/library/56h2zst2.aspx
これのことか。

413 :
Cの話なのね

414 :
++でも同じだよ。結局使うのはc形式なんだから

415 :
Windows7でRemoveMenu関数を使ってコマンドプロンプトのクローズボックスを無効化したあと
タイトルバーからプロパティが開けなくなるようですが、コマンドプロンプトを再起動する以外で
回避する方法はありますか?

416 :
cmdが内部で特殊な処理してない限りそんなこと起きないと思うんだけど・・
単にプロパティの位置が一番下だから間違えて消してるんじゃない?

417 :
RemoveMenu呼び出しの周辺のコードさらせ。

418 :
コマンドプロンプトやPSのコンソールの実装はかなり特殊だよ
1ウィンドウと同じに考えてはいけないと思ってる

419 :
本当かよっと思って試しにやってみたら何のトラブルもなく閉じるだけ消えてプロパティ開けるぞ

420 :
LOGFONTのlfUnderlineを設定したフォントで文字を描画した際、下線が引かれますが、
この下線の位置や太さを決定するルーチンはありませんか?
点線なども引けるようにするため、lfUnderlineを使わずに自分で描きたいのですが、
単純に下端に描くと、メイリオだと全然違う位置になってしまいます。

421 :
つまりアンダーラインが相対的にどこに来るかを指定してる属性を取りたいっていう質問でしょうか?

422 :
>>421
そういう感じです。
CreateFontIndirectで作成したフォントを使って文字を描画したあと、
その文字の位置に自分で下線を引きたいと思っています。

423 :
追記ですが、理想としてはlfUnderlineのときと
全く同じ位置や太さで描きたいと思っています。

424 :
baseline memo
http://d.hatena.ne.jp/satosystems/20140210/1392019342
http://marupeke296.com/DXG_No66_OutlineFont.html
http://d.hatena.ne.jp/It_lives_vainly/20100331/1270002338
http://k3tec.net/neko_wiki/index.php?%A3%D7%A3%E9%A3%EE%A3%B3%A3%B2%A3%C1%A3%D0%A3%C9%B9%D6%BA%C28%B2%F3
http://chokuto.ifdef.jp/urawaza/struct/LOGFONT.html 👀
Rock54: Caution(BBR-MD5:79b7e0206b0fd5ffcfddd514fa488d36)


425 :
質問者じゃないけど、フォント周りのコードを弄ってるときに
ベースラインやレディングについて実際に値が欲しいときがちょくちょくあったなあ。
結局分からなかった思い出。

>>424
結局概念しか分からないw

win32apiじゃなくて、これしかないのかな?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms533824(v=vs.85).aspx

426 :
汝らよ、汝らはWin32APIに関してわからないことがあったら、このスレで質問しなさい。
そして我が見守るこのスレで、誉れと思って、おにーさんおねーさんたちから、適切なアドバイスを受けなさい。

427 :
さすれば、弥勒菩薩が降臨するまでに回答が得られるであろう

428 :
芽っていう意味だよ

429 :
>>423
アセント、ディセントの値を取ってベースラインを割り出すとか出来たような…
とにかく、アセント、ディセントをググってみるのがいいと思う

昔、似たようなことやって、えらい苦労した覚えがあるわ
詳しいことはもうほとんど忘れた

430 :
DirectWriteだとカスタム描画用にIDWriteTextRenderer::DrawUnderlineというコールバックがあるで

431 :
もしかして GetTextMetrics で取得した TEXTMETRIC の tmAscent, tmDescent
で分かるんじゃないの?

432 :
>>416-419
原因が分かりました
↓のGetSystemMenuをTRUEで呼ぶ箇所をなくしたら、実行後でもプロパティが表示されました
MSDNに「TRUE を指定すると、この関数は、ウィンドウメニューをリセットして Windows の既定の状態へ戻します。」と
書いてあったので、cmdなら起動直後の状態に戻るものだとばかり・・・orz

HMENU  hmenu;
/* ボタンの状態を変更する前に、コンソールのカスタマイズを取り消す */
GetSystemMenu(GetConsoleWindow(), TRUE);
/* コンソールメニューハンドルのコピーを取得する */
hmenu = GetSystemMenu(GetConsoleWindow(), FALSE);
/* 引数に応じて "閉じる"、"最小化"、"最大化" 各ボタンを無効化する */
if (!(button_stat & 0x01))
 RemoveMenu(hwnd, SC_CLOSE, MF_BYCOMMAND);
/* 以下省略 */

433 :
来たよ!!!
https://twitter.com/katahiromz/status/1010659723119509504
https://twitter.com/katahiromz/status/1010661747433172992

434 :
また片山の宣伝かよ

435 :
一応、Win32APIで書いたんですけど。

436 :
そういう考えで今まで何度も宣伝してたのかw
ここはwin32api質問用のスレ。言い換えるとAPIの使い方に関するスレであって、
API使ってるアプリ紹介スレじゃないんだよ

437 :
あ? なんだよ「C++11に準拠してarray::operator[]で範囲チェックしろ」とかラリってる糞コテは片山かよ

438 :
>>436
リソースエディタがWin32APIに関係ないって?

>>437
誤解です。関係ない話を勝手に結び付けないで下さい。

439 :
2ちゃんねるは、広告料と浪人の収益によって成り立っています。

440 :
関係ないよ
質問内容によってはリソース編集が関係してくることはあるが、そんなソフトが関係することはまずない

441 :
コマーシャルの仕組みについて皆さまのご理解をお願い致します。

442 :
>>440
お前の中ではな。

443 :
お前ら、Win32を知り尽くしているんだろ?
だれかReactOSで日本語入力できるようにしてくれよ。

444 :
Win32Apiで何ができるかをを知り尽くしているが
Win32Apiが何をしているのかは何も知らない

445 :
if(sa::sendkey[cnt]!=NULL){
if(sa::sendcontrol[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, VK_CONTROL, 0 );
if(sa::sendalt[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, VK_MENU, 0 );
if(sa::sendshift[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, VK_SHIFT, 0 );
SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, sa::sendkey[cnt], 0 );
SendNotifyMessage(sa::hWndSa, WM_KEYUP, sa::sendkey[cnt], 1);
if(sa::sendshift[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYUP, VK_SHIFT, 1);
if(sa::sendalt[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYUP, VK_MENU, 1);
if(sa::sendcontrol[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYUP, VK_CONTROL, 1);
}
sa::sendkeyにデータキーが有る時、sa::sendcontrol、sa::sendalt、sa::sendshiftがtrueならば、
「Ctrl+Alt+Shift+データキー」といったふうに送信したいのですが、
データキーしか送信されません。
何がいけないのでしょうか?

446 :
keybd_eventもしくはsendinput使う

447 :
非アクティブウィンドウのままがいいならこれでどうでしょう
ShiftとEndの同時押しが出来ることを確認しました

void send_shift_and_end()
{
HWND hWnd = FindWindow(L"Notepad", NULL);
if (hWnd == NULL) {
return;
}
HWND hEdit = FindWindowEx(hWnd, NULL, L"Edit", L"" );
if (hEdit == NULL) {
return;
}
BYTE kstats[256], shiftstat;
DWORD srctid, dsttid;
srctid = GetCurrentThreadId();
dsttid = GetWindowThreadProcessId(hEdit, NULL);
AttachThreadInput(srctid, dsttid, TRUE);
GetKeyboardState(kstats); // 実行前の状態を保存
shiftstat = kstats[VK_SHIFT];
kstats[VK_SHIFT] |= 0x80; // shift を押下状態に
SetKeyboardState(kstats); // 状態を更新
SendMessage(hEdit, WM_KEYDOWN, VK_END, 0); // SendMessage は OK, PostMessageは NG
kstats[VK_SHIFT] = shiftstat;
SetKeyboardState(kstats); // 実行前の状態に復帰
}

448 :
レスありがとうございます。

このようにしてみたのですが、送りたいウィンドウがもともとアクティブな時は送信されるのですが、
アクティブ出ない場合、アクティブに出来ずに居ます。

if(sa::sendkey[cnt]!=NULL){
 //ターゲットををアクティブに
 HWND hWndTemp = SetActiveWindow(sa::hWndSa);
 char t0[256 + MAX_PATH];
 sprintf(t0, "sa::hWndSa:%d(%x), hWndTemp:%d(%x)", sa::hWndSa, sa::hWndSa, hWndTemp, hWndTemp);
 strscr_set(t0);

 //Key Event送信
 if(sa::sendcontrol[cnt]) keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
 if(sa::sendalt[cnt]) keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
 if(sa::sendshift[cnt]) keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
 keybd_event(sa::sendkey[cnt], 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
 keybd_event(sa::sendkey[cnt], 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
 if(sa::sendshift[cnt]) keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP | 0, 0);
 if(sa::sendalt[cnt]) keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
 if(sa::sendcontrol[cnt]) keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

 //元のウィンドウをアクティブに
 SetActiveWindow(hWndTemp);
}

デバッグ情報を見る限り、ウィンドウハンドルは取得できてます。何がまずいのでしょうか?

449 :
ちょっと>>447さんの方法も試してみます。
有り難うございます。

450 :
Ctrl+Alt+Delは、セキュリティで保護されているんじゃ中田家?

451 :
>>447さんの方法で無事うごきました。
ありがとうございましたm(_ _)m

452 :
SetActiveWindow の代わりに SetForegroundWindow を試してみたら?

453 :
blinkWindowtop

454 :
言いたかないがCOMでマジで糞だなと思うのは
アパートメントか何だか知らないが
勝手に内部でメッセージループ回すな!!!
たまにそうなって通常ではあり得ない順番で関数が呼ばれてデッドロックするんだよ糞野郎
そういう糞メソッド見つけるたびにメインスレッドとは別のスレッドで実行するように書き直すんだが
実に馬鹿らしい
どのオブジェクトのどのメソッドでそうなる可能性が有るかMSDNのどこにも書かれてないしな
どうしろと

455 :
別スレッドにしたら余計危ないだろw

456 :
いやまじでさ
しかも今まで大丈夫だったのに最近のWindows10のアップデートを当てたら
なぜかメッセージループ回すようになったやつとかあるし
いつ何のタイミングでメッセージループが回るか分からねぇ
アパートメントモデルはマジで糞過ぎ
全部マルチスレッド対応でいいだろ意味不明

457 :
ただスレッドモデルのせいでメッセージループが回ってるのかどうかは良くわからないんだがな
原因は分からんが勝手にメッセージループ回すのはマジで迷惑だからやめてほしい
何がどの順で実行されるか分からなくなるから

458 :
548

459 :
Direct2D いいね。
4K画像もヌルヌルに縮小拡大表示できる。回転や鏡像反転も大丈夫だった。

460 :
1台のPCにマウスAとBを接続し、
マウスAは普通のマウスとしてWindowsで、マウスBを特定のプログラムのみで使いたいのですが
どのようにすればよいでしょうか?

461 :
特定のプログラムのみで使うってのをどういう意味にするかだな
フィルタードライバ作ってBを潰すと同時に操作をアプリに送って、アプリから特定のプログラムへマウスメッセージでも送るとか

462 :
Low-Level Mouse HookでデバイスIDは取れなかったと思うし
ソフトでやる場合ドライバまで降りるしかないね

463 :
GetGlyphOutlineでサロゲートペアの文字のビットマップを取得するには
どうすればいいでしょうか
普通の2バイトの文字はできます

調べると、グリフインデックスを取得して〜みないな内容は
ぽつぽつ見つかったのですがよくわかりません
コピペして適当に真似てみたのですが、GGO_GLYPH_INDEXを指定すると
謎の小さいデータ(abc間隔とかいうやつでしょうか)が返ってくるだけです
これまた試しにGGO_GRAY8_BITMAP | GGO_GLYPH_INDEX とやってもサイズは0でした

464 :
INDEXをもらったら本体を取りに行く

465 :
>>464
それはINDEXから直接アウトラインデータを持ってきて自前で処理するという意味でしょうか
本体を取りに行くというのがわからないです

466 :
カーネルモードからユーザーモードアプリにデータを渡すいい方法ないかな?
イメージとしてはマウスのボタンを押したらその情報をアプリが受け取るとか、ネットワークメッセージを受信したらそれをアプリに渡すというもの
CreateEventの通知と共有メモリ使えばできるけど、もっといい方法ないかな

467 :
>>463
これですがインデックス取得後、GGO_GRAY8_BITMAP | GGO_GLYPH_INDEXで
普通にサロゲートペアのビットマップを取得することが出来ました
原因は単にテストに使用していたフォントがサロゲートペアに対応してなかっただけでした…

もしそういうフォントの場合は
自分で取得前に代替フォントに切り替えるという認識であってますか
それともどこかで指定する方法はあるんでしょうか

468 :
>>466
> もっといい方法ないかな


「いい」はあなたの脳内でのみ定義された概念なので他人には答えようがない。

469 :
>>468
あなたが考える「いい」方法を教えてって意味でしょwww

470 :
カーネルモードでFDDに保存
ユーザーモードはFDDの中身を定期的に読む

これで良い

471 :
>>469
答えたらそれは俺の「いい」と違うって言われるだけだろ

472 :
プログラマなんてアスペキチばっかだから質問を読み取ってくれないのはよくあることよ
それにDDKスレ見りゃ分かるが質問は海外ですべき。国内じゃ回答つかん

共有メモリだとデータ欠落がありえるから(受け渡し済みデータをメモリ内から消す仕組みを作るのが大変だから)
FIFOにためて通知後にdeviceiocontrolで読み出させる

473 :
いい方法はわからないが正しい方法はあるだろう
システムはある方法が正解になる前提で全体ができている
それに逆らうと別の局面で何か問題が発生する

474 :
煽りぬきで、まず「いい」の定義から。
信頼性を優先するのか、速度を優先するのか、ソースコードの使いやすさを優先するのか、メモリ消費を抑えることを優先するのか、等。

475 :
用途が挙げられてるからそこから読み取れってことよ
その用途で実装するならこういう処理の方が「いい」となる

476 :
質問者や発注者は、何を優先し、何を犠牲にする覚悟があるかを明確にすることが必要。
それは金であったり時間であったりする。お前らの工数と人件費を犠牲にしたい場合が多い。

477 :
まあ、「いい」は人それぞれな部分はあるかもしれないけど、そこやこだわりが書かれて無いならテキトーで良いんじゃね?
「お手軽な」という程度の解釈で。

478 :
発注側が受注側にわざと曖昧な要件を出して、受注側が提案したアイデアを無償で手に入れるのも重要な技術。
いかにしてコストを相手に押し付けるかが重要になる。

479 :
相手の自尊心を刺激しつつ、情報をタダで引き出す技術は極めて重要。省資源の基本。

480 :
>>471
だよな

481 :
逆に言えば「CreateEventの通知と共有メモリ」ではダメな理由は何なのか?
当人(>>466)が思うダメな理由が判れば、それを改善するものが「いい方法」なんじゃね?

482 :
ネットワークモニターを共有メモリで実装すること考えたらダメと感じる理由分かるだろうよ

483 :
・・・・・この感覚・・・・・・感じるぞ・・・・・・

484 :
memory mapped file

485 :
共有メモリは誰が最後に開放するか問題があった気がする
代表プロセス(サービスとか)が全部やることにすればいいんだろうけど

486 :
Win32APIでHDCに描画していくルーチンでPDFを作成できて、
プリンタドライバではなくDLLなどで提供されているものはありませんか?

ユーザーが印刷でAcrobatなどを選択するのではなく、専用のコマンドを用意して、
DLLのAPIからHDCを作成してそこに描画していく、という方法を探しています。

487 :
pdfium

488 :
ごめん、pdfiumは表示ができるけどPDF作成はできないんだった。

489 :
HDC って描いてるからダメなんだろうけど
win32api じゃなくて良ければ
matplotlib の dll

490 :
>>486
いっそpdfを自分でゴリゴリ作るライブラリを作って公開しよう

491 :
PDFつくるの割と簡単だからな。読むのは難しいが

492 :
PDFは、Win32APIの範疇じゃないから、HDCにこだわる必要はないと思う。
どうしてもHDCで描くなら、ビットマップを使うことになる。

493 :
>>486
libharu
手書きPDF (http://www.kobu.com/docs/pdf/pdfxhand.htm)

494 :
どうしてもHDCからデータを取る必要があるのなら、pdfじゃなくてemfはダメなの

495 :
やっぱりこういうライブラリは無いものなんですかね。

プリンタのHDCに対する印刷処理は実装済みで、
普通にAcrobatなどを選んで印刷すればPDFは作成できるので、
PDF作成用のHDCさえ作れれば、Acrobatなどに依存せずに、
今の処理でPDFを作成できるんじゃないかと思った次第です。

もちろん、プリンタのHDCに描画する処理とは別に、
PDFを作成する処理を新たに作れば可能なんでしょうけど、
今の印刷結果と一致させるもの大変そうだと思いました。

496 :
HDC→bmp→手書きPDFの調子で画像埋め込みpdf生成
これで終わり。1日あればできるでしょw

497 :
>>496
説明不足ですいません。
それだと文字がコピーできなくなってしまいます。

498 :
>>469
じゃぁそう書けばいいじゃん

499 :
>>497
まさにここに>>471の実例がw

500 :
HDCをDLLから作れないと思う。プリンタドライバ入れないと無理じゃないかな
それでもプリンタドライバを入れたくない&HDC使いたいってなら、手書きPDFしかないと思う
HDC使う処理を全てフックして手書きPDF処理に渡して生成
フォントは埋め込めるし、当然座標指定もできるから見た目を合わせるのは難しいことじゃない

501 :
https://www.colorpilot.com/emf2pdfsdk.html

502 :
EMFがPDFになってもうれしくないんだよな

503 :
嬉しいとか悲しいという感情はしまい込め

504 :
EM_DOCUMENT_AddPageFromMetaHandleというメソッドがあるみたいだから試してみては。
$4995-が高いかどうかは自分で考えな。

https://github.com/sybrexsys/VersyPDF
というものもある。

505 :
プロプロイエタリっぽいな。日本人にはまだ未踏の分野みたいだ。

506 :
IE(11)のタブってspy++で見ると、タブコントロールじゃないように見えるけど
これ自前かな?
タブの入れ替えの時も、タブがするすると動いて入れ替わる動作だし
これってタブコントロールだと無理だよね?

基本的に、IE,Edge,Chrome,Firefox,Opera,Vivaldi等のブラウザのタブって
タブコントロールじゃなくて、自前で描画しているのかな?

507 :
基本的に自前だよ

508 :
char *p = "hello";
を書くと、「型 const char * の値を使用して型 char * のエンティティを初期化することはできません 」
と表示されるんだが、どうすればいいんだ?
CQ出版社の『Win32 API完璧マスタ』189ページにも書いてある構文なのに・・・

509 :
スレタイ

510 :
char q[] = "hello";
char *p = q;

511 :
そんなのはCスレで聞けよ
char p[] = "hello";

512 :
こうか

char q[] = "hello";
char *p = (char *)q;

513 :
これをTextOutしたいんだが・・・
TextOut(hdc,10,10, p, strlen(p) );
と書いてもエラーになってしまうし、
pをqに変えてもエラーが出る

514 :
>>513
「型 char * の引数は型 LPCWSFR のパラーメータと互換性がありません
BOOL TextOutW(HDC,int,intLPCWSTR,)int: 引数 4 を char[6] から LPCWSTR へ変換できません。」
って出てしまう。

CQ出版社の本には、
「TextOut(ps.hdc,10,10, p, strlen(p) ); 」って書いてあるのに。

515 :
>>513
>508のエラーなのか TextOut のエラーなのか

516 :
あー、面倒なので正確には調べないが、文字コードセットかソースファイルのコードを調べて
全部マルチバイト文字にでも統一すれ

517 :
コンパイラのオプションでユニコードを使うを無効化しろ
もしくはTCHARとかTextOutWとかTextOutAとかその辺でぐぐれ

518 :
>>515
TextOutの際に、いちいち
TextOut(hdc, 10, 10, TEXT("hello"), 5);
と文字列と字数を毎回入力したくないし、
表示文字を"good morning"とか "good bye" とか違う字数の文字列にも置き換えたいんだ。

だから、変数を使って文字列をpとかqとかに置き換えたいんだけど、そこで
型 char * の引数は型 LPCWSFR のパラーメータと互換性がありません 」
とかのエラーが出てしまう。

519 :
charは1バイト文字の型
LPCWSTRは2バイト文字の型
ものが違うんだよ
ってかwin32の本ならそのくらい書いてあるだろ。もし書いてないならゴミだから捨てろw

520 :
TCHAR p[] = TEXT("hello");

TextOut(hdc, 10, 10, p ,lstrlen(p));

521 :
>>518
後から文字列を変更するのであれば、初期化の時に配列の要素数に注意

#define MAX_LENGTH 256; // 要素数に注意

TCHAR p[MAX_LENGTH] = TEXT("hello");

522 :
>>516-517
今から覚える人に非推奨のMBCS版を勧めるのはどうかと。
VSでも2015辺りからMBCS版のバグを治さず放置してたりするのだし。

523 :
「TCHAR p[MAX_LENGTH] = TEXT("hello");」
で「式が必要です」ってエラーが出てしまうし。
「TCHAR p[256] = TEXT("hello");」って直接に数値指定するとエラーメッセージが消えるから、
なんかdefineが働いてないっぽい

524 :
>>521
「256」の後の「;」は不要

525 :
>>523
すまんね
流石に気付くだろうと思って黙ってたけど、define文の末尾にうっかり余計なセミコロン付けてしまっているので注意してね

とりあえずいまどきの環境なら、charはTCHAR、char *はLPTSTR、const char *はLPCTSTRを使い、リテラルはTEXTマクロで囲って
文字列操作関数はl付きの関数strlenならlstrlen、strcpyならlstrcmpなどに置き換えればほとんど問題はないよ

526 :
被った、
指摘ありがとう>>524

527 :
いろいろと教えてもらい、スレの皆様、ありがとうございます。

自分、最終的にゲームっぽいのを作りたくって、
それで会話メッセージが何百個もあるから、どうしても文字列を変数にする必要があるんです。

エラーコード↓です。

TCHAR p[256] = TEXT("hello");
TextOut(hdc, 10, 10, p, lstrlen(p));

p = TEXT("good morning");
TextOut(hdc, 30, 30, p, lstrlen(p));


こんな感じで、1つのpを使いまわしたいんです。
strcpyかとも思ったんですけど、「strcpy(p, TEXT("good morning") );」でも
「char*のパラメーターと互換性がありません」ってエラーが出て、なんか違いそうだし・・・

ググッても、Win32APIで1つの文字列変数を複数の文字列に何度も書き換える事例が見つからなくて、困ってます。

528 :
>>525でstrcpyとstrcmpがごっちゃになってた、訂正

529 :
>>522
でもなこのレベルだとstrcpyすらできずに詰むぞw

530 :
>>527
多分 lstrcpy でいける

531 :
>>527
私なら(char *) にキャストしてしまいますね…これは悪手ですが

532 :
解決しました!こうですね

TCHAR p[MAX_LENGTH] = TEXT("hello");
TextOut(hdc, 10, 10, p, lstrlen(p));

lstrcpy(p, TEXT("good morning") );
TextOut(hdc, 30, 30, p, lstrlen(p));


じぶん "lstrcpy" の存在を知りませんでした。
買ってたCQ出版社の本が2001年の本で古くって、
それで、ここら辺の話題が見当たらなくって、地元書店にWin32APIの本が無くって、
困ってました。月曜日に、銀行からカネを引き出して、都会の本屋に買い物に行こうかと思ってたところです。

質問に回答してくださった皆様、ありがとうございます。

533 :
>>527
中身を直接書き換えないならLPCTSTRで十分
LPCTSTR p = TEXT("hello");
p = TEXT("good morning");

534 :
>>533
LPTSTRなら可能だけどLPCTSTRだと無理じゃないかな

535 :
なぜ?

536 :
>>513
TextOutA使え
お前にTextOut/TextOutWはまだ早い

537 :
>>534
無理と決め付ける前に、まずは試してみるべきじゃないかな。

538 :
>>507
やっぱり自前ですか。
ベースにコモンコントロールのタブコントロール使ってるかと思ったら
どのブラウザも完全にオリジナルのタブコントロールを作ってる
みたいなんですよね。

これだけで一仕事だ、せめて手を抜く方法が無いものか。

539 :
コモンコントロールでつくりゃいい
何も真似することないでしょ

540 :
>>508
レスをつけてたここの住人はある意味、意地悪だなw
508よ、VS2017とか使ってるなら、プロジェクトのプロパティから、
構成プロパティ -> C/C++ -> 言語 の画面に、準拠モードという項目があるので、準拠モードをオフにしてみろ。
コンパイラが悪さしているだけだw
たとえば、準拠モードONだとこのコードは、こんなエラーになる。オフなら無事コンパイルできる。
#include <stdio.h>
int main(){
char *p = "hoge\n";
printf(p);
return 0;
}
1>------ ビルド開始: プロジェクト: test0001, 構成: Debug Win32 ------
1>test0001.cpp
1>d:\test0001\test0001\test0001.cpp(3): error C2440: '初期化中': 'const char [6]' から 'char *' に変換できません。
1>d:\test0001\test0001\test0001.cpp(3): note: 文字列リテラルからの変換では const 修飾子が失われます (/Zc:strictStrings を参照)
1>プロジェクト "test0001.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

541 :
>コンパイラが悪さ

最低だなこいつ

542 :
マルチバイト文字の設定しろって書き忘れた。
構成プロパティ -> 全般 -> 文字セット
マルチバイト文字セットを使用する
の項目をセットしておけ。
古い本ベースで作るならそっちで十分だ。
慣れて来たらunicode文字セットにしてwchar_tとか使えばいいよ。

543 :
>>541
本読んでる初心者相手に、難しいこと言って混乱させるよりはいいだろう。
まずは動くようにするのが先じゃね?w

544 :
コンパイラとか言う野郎最悪だな
そんなもんに頼むなよ

545 :
だな
ハンドアセンブルとかハンドコンパイルしろ

546 :
https://www.suruga-ya.jp/database/pics/game/978050199.jpg

547 :
>>542
意地悪も何も、そのレスをとっくにしとるんだが

548 :
cygwin/mingw-gcc で文句がでなければ、ほぼ問題ない、としています

549 :
成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPIって何なんだよクソ野郎め

550 :
getlasterror

551 :
もちろんそんなの知ってるけど、GoがWindows API用に生成してくれるコードが返り値をチェックしちゃっててしばらくハマった

552 :
>成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPI

ちなみにどのAPI?

553 :
GetClassLongPtrとか

554 :
Goがクソなだけじゃん
リファレンス読んでコード生成しろよバーカ

555 :
>>549-550
「失敗が返って来たときは関数を呼びます」
だっけ

556 :
>>549
「失敗したら0を返します」の対偶は「非ゼロが返ったら成功している」だ。
「成功したら非ゼロを返す」ではない

これが分からない人には if文は書けない

557 :
>関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

これな

558 :
>>557
>>拡張エラー情報を取得するには、 関数を使います。

これがわからない人には、プログラムは書けない

559 :
>>554-555
>リファレンス読んでコード生成しろよバーカ
>失敗が返って来たときは関数を呼びます

しばしば、動詞の主語がないせいで誰が対象なのか、わからないことが多い。
バカなのは誰なのか。
関数を呼ぶのは誰なのか、関数が関数を勝手に呼んでくれるのか。
的な。

560 :
馬鹿なのは読み手に決まってるだろww

561 :
まさかと思うけど英語読めないとか?

戻り値
関数が成功すると、要求した値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
https://msdn.microsoft.com/ja-jp/library/cc364638.aspx

Return value
Type: ULONG_PTR
If the function succeeds, the return value is the requested value.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633581(v=vs.85).aspx

562 :
訳が全然ちげぇ、ってネタだろ。

563 :
う〜ん
実に使いにくい

564 :
ダークサイドの貧乏マは、インターネットのどこかにWin*2 Pr*gramm*rs' Refer*nceというヘルプファイルがあるから、別に。。。まあ、できる奴はサプスクリプションをイッチャッテ。

565 :
>>561
このひどい訳文はテンプレのようになってて
このGetClassLongPtr()の例だけじゃなく
Win32APIのいたるところで見るんだが
ほんとうにやめてほしい

566 :
>>562, >>565
訳が酷いと言うよりなぜかわからんが関数名(GetLastError)が無くなってるって話だろ

567 :
もう慣れたわ

568 :
GetClassLongPtrのように値だけ返すやつは、失敗時ややこしいってのはAPIに限ったことじゃなく関数作ったことあればだれでも知ってること
MSDNの日本語ページはの罠は無数にあるから少しでもWindowsプログラミングしたことあれば英語ページ見ることになる
どっちも超初心者じゃないとひっかからない罠

昨日のニュース
日本国内でのプログラミング言語別の年収ランキング、中央値1位は「Go」
http://www.itmedia.co.jp/news/articles/1808/07/news087.html

569 :
>>566
それを訳がひどいって言うんだよ

570 :
みんな間抜けなんでマジレスするけど、SetLastError(0)でクリアしてから呼ばないと、成功したのか失敗したのかわからん仕様です。

571 :
>>569
周回遅れ乙

>>570
みんなそんなことは分かってるだろ
普通に考えたら失敗/成功をBOOLで返して取得した値はポインタ経由で返せばいいのに
って思ってる人は多いと思う

572 :
ぬるぽ

573 :
>>566
これを見るたびに何でどうしたらこんなことになるのかと考え込んで作業が中断してしまうのだ

574 :
開発が遅れるわけだw

575 :
悟ってお仕事

576 :
スナップできるのはどういうウィンドウかあるいはどういう条件なのか、具体的な要件の一覧ってどこかで見られますか。

自作デスクトップアプリケーションのウィンドウがスナップ機能の対象になってないことに気づいて、少しプログラムをいじってみたところ
すぐにウィンドウスタイルによってスナップ機能が働かないことがあるのはわかりました。
具体的にはWS_MAXIMIZEBOXが無いとスナップできません。

で、他のスタイルやスタイル以外の条件もあるかもしれないと思い、
まずはウィンドウスタイルとスナップの関係性から調べてみましたがスナップ機能の条件についての情報は見つけられませんでした。

よろしくお願いします。

577 :
スナップなんてOSの設定で最初に切る項目だぞ
気にするな

578 :
ダイアログにすればいい

579 :
ついでに質問だけど
win10あたりからウィンドウの枠のちょっと外まで(影なしにしてても)
ウィンドウのリサイズとかマウスアイコン⇔の判定に使われてるみたいで
ウィンドウの下のウィンドウを上にもって来たくてクリックしたつもりが
違うウィンドウが上に来てしまうことが多くて困ってる
これなんとかする設定どこにある?

580 :
このスレ的な解決だとFrameRectをフックして少し大きめの枠に変えちゃえばいいのかな

581 :
> 具体的にはWS_MAXIMIZEBOXが無いとスナップできません。
win7 WS_MAXIMIZEBOXなしのタイトルバーをマウスでつまんで
desktopの上辺に移動してマウスを放すと、
タイトルバーが完全に表示されるように再移動される
これもsnapではないのか

582 :
>>581
そうですね。即席で調べただけなので見落としてました。
いずれにせよ、スナップ操作時にどういったウィンドウならばどういう作用が起こるのか、
逆に特定のスナップの効果が欲しい場合にどういうウィンドウをセットアップすればよいのか
みたいなことがわかる情報を探しています。

583 :
片山の取り巻きは帰れ

584 :
実行中のGUIアプリケーションのコントロールを取得して表示させたいのですが良い方法はありますか?

585 :
spyのソースを読むべし

586 :
hwnd検索するだけの質問だったのか
てっきりインジェクトして中身奪い取るとかそんなのかと思ったわww

587 :
そっちならAppInit_DLLsの勉強しなされ
ってのが回答かな

588 :
難しいのはインジェクトの先だから・・・

589 :
悪用出来るからこの先は自分でお勉強

590 :
>>589
素直にわからないって言えよ
>>588の「先」は、「自分のプロセスに貼ったコントロールを、そのまま残しつつさらに別プロセスのウインドウに貼り付けて表示する」ということだからな

591 :
>>590
なんでそんなことするのか全然わからん。
>そのまま残しつつ
>貼り付けて

592 :
>>591
>>584がもしも>>586ならそうなるでしょ

593 :
そのまま残してんなら奪ってないやん

594 :
>>593
飽きれるほどくだらない揚げ足取りだな
「パスワードを奪い取る」の考えてみろ。残さないとは限らないんだよ

595 :
>>594
飽きれるほど下手な例えだな
パスワードは残さないと使えないだろ

596 :
パスワードはいただいた
返して欲しければ1BC用意しろ

597 :
いただいた(変更した)

598 :
入力するパスワードを勝手に変えたら駄目じゃん

599 :
パスワード変えずに「パスワードはいただいた」って?
それ何の脅しにもならんやん
元の持ち主が別のに変更して終わり

600 :
せっかくギャグを入れてやったのにしょうもねえ奴ら

601 :
え?おもしろいとでも思ってたの?
もしかして渾身のギャグなの?
恥ずかしくないの?

602 :
程度が同じじゃないとジョークは通じないらしい
ただ今回はガキとバカだからどちらも等しく低いように見えるな

603 :
謎の上から目線

604 :
昔のゲームのコードを弄ってて困った事があります。
ウィンドウの大きさを変えると一緒に表示中の画面も引き延ばされるのですが
引き延ばされた時に粗くなって美しくないです。内部のバッファをウィンドウを最大化された時の大きさで確保しておき
ゲームの処理の方でフィルタ処理を施せば上手く行きますが出来れば小さいバッファのままで
ウィンドウのリサイズ時にAPI側でフィルタ処理できないでしょうか?
あと気になるのが環境によっては上記の処理を勝手にやってくれている環境もあります(ディスプレイドライバによるのかもしれません)。
出来れば確実にこちらで処理できるようになれば嬉しいです。

605 :
>>604
普通、WM_SIZEの都度ゲームのフレームバッファを再作成するもんじゃねえの?

606 :
>>605
出来ればバッファの大きさは固定で行きたいんです。
最大化された時にいかにも拡大してフィルタリングされた感じを出したいので。
環境によってはウィンドウがリサイズされると勝手にフィルタリングしてくれて
ぼやっとした画面になるので出来ればそれを確実にやりたい感じです。
何か設定でもあるんでしょうか。OSの設定としてあるならそれを知りたいです。

607 :
SetStretchBltMode

608 :
>>607
良さげですね!試してみます。ありがとうございます。

609 :
どのタイミングでStreachBltを呼び出してるのかわからない…
ウィンドウを制御するクラスの中のWM_PAINTは空だし。
初期化時にDirectXのAPIにhWndを渡してるので勝手にDirectX内部で呼び出してるのかな?
リサイズされた時にhWndを元にHDC作ってそこでStreachBltとか。その後HDC破棄みたいな。
そうなると手出しできないってこと?

610 :
それともウィンドウ作成時のスタイル設定などで
リサイズに合わせてスケーリングをどうするのかみたいな設定があるのかな。
それだとそこの設定でどうにかなりそうな気もするけどよく分からない。
ちなみにウィンドウ制御クラスの中のWM_PAINTでは動画などのスケーリングは自前でやってた。
なので少なくともWM_PAINTの中では自分でウィンドウ内部の他の表示のスケーリングはやってない。

611 :
ここ見たらたぶん同じような症状で困ってた人がいて
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=past&no=1506
基本的に手出しができず綺麗に拡大されるかはドライバによるという事らしい…

え〜やだやだ〜 納得できない。やっすいPCでも綺麗に拡大されてるのに
家の高いPC(ドライバも新しい)で汚いなんて納得できないよ〜!

612 :
> 現状ではコーラさんがお書き込みになられた方法しかありません
あるって書いてあるじゃn

613 :
>>612
うん。そうだけど、たっかいグラボ積んでる家のマシンで汚く表示されて
やっすい3万くらいのPCで綺麗に表示されるのが納得いかないの。

614 :
>>612
あ、ごめん見間違った。
方法はあるんだけどバッファの大きさは固定でやりたいの。

615 :
だからバッファ固定でできるって

616 :
なんか意味不明な質問だなと思ったら、それWin32じゃなくてDXライブラリとかいう
よくわからんライブラリの話やん。

617 :
拡大した時に粗くなる→最初から内部のバッファの解像度を上げておけばよくね?
ってのはナシで。
あくまでも内部のバッファの大きさは今のままでウィンドウが拡大された時に
勝手にドライバがやる部分をどうにかしたい。けど無理そうだね…

納得いかないのは、やっすいPCでは綺麗に表示されてるのに
たっかいPCで汚く表示されてしまうこと… 逆なら納得したのにこれはないよな〜

618 :
>>616
いやDXライブラリでも制御できない部分なので
Win32APIの方でなんとかならないのかなと思って。でも無理なのかな。
ここの人ならなんか解決法わかるかなと思ってたけど。

619 :
win32でやるならSetStretchBltMode
おまえがやるべきなのは小さい画面サイズのでいいからそのDCを取り出すこと
それしたらあとは表示するだけ

620 :
>>619
要するにそれは内部バッファのHDCを取り出して
SetStretchBltModeを設定し、その後ウィンドウのクライアント領域に自前で
StretchBltで描画しろってことになるかな?まあそれしかないのかやっぱ。

621 :
さすがに自前でやったらGDI+使っても速度が全然でなかった(毎フレーム描画しないといけないので)。
諦めます〜

622 :
なんか基本的な部分から盛大に勘違いしてそうだな

Direct3D使ってるならドライバ依存になるのはスワップチェインのバックバッファが
ターゲットウィンドウのサイズとかみ合わない場合に
Presentの呼び出しでウィンドウにフィットするように自動でスケーリングされる部分だ

ドライバ依存の挙動を回避したいならバックバッファをウィンドウに合わせてリサイズするのは必須なの

逆に、バックバッファの解像度をゲームの解像度と考える必要も無い

バックバッファがどんなサイズであれゲーム自体は固定サイズのレンダーターゲット用テクスチャにレンダリングし
バックバッファへはそのテクスチャをスプライトとして張り付けるだけ
拡縮フィルタリングをニアレストにするのもバイリニアにするのもアプリでしっかり管理できる
なんならシェーダでLanczosにしても良い

623 :
せっかく諦めたのに

624 :
>>622
なるほど〜バッファをリサイズしないと必ずドライバ依存のスケーリングになってしまうってことね。
その辺りをもうちょい考えてどう対処するか検討してみるよ。ありがとう。
>>623
まだまだ諦めんぜえ〜ww

625 :
野菜の日

626 :
CreateFile()で取得したハンドルをGetMailslotInfo()に渡していいものでしょうか?
CreateFile()の第1引数には、別プロセスでCreateMailslot()したときの第1引数と同じ
です。

627 :2018/09/05
流石にmsdn見ろとしか

ふらっと C#,C♯,C#(初心者用) Part143
3Dアルゴリズム全般
【JavaScript系】 NILScript 【AutoHotkey風】
くだすれPython(超初心者用) その37
C言語相談室(上級者専用)
Ruby で GUI するスレ
(´・ω・`)人間はプログラムやがな
【信者】C++の問題点【アンチ】
Visual Studio 2015 Part8
【License】ライセンス総合【利用許諾】
--------------------
【二代目】SLOT魔法少女まどか☆マギカ2 part 139
非処女のメリット
【政治資金で不倫^-^】人妻と不倫 #小泉新次郎 ホテルでメール「ついたよ^-^部屋は◯ね^-^」「待ってるよ^-^」
【ゲオ】 DVD/CDレンタル、ゲームスマホ中古販売GEO
☆オールナイトニッポンの地方CM時の音楽★2時代
カードキャプターさくらカレー2杯目
ぬるぽして60分以内にガッされなければパンデミ@新感板
【1000まで】ひたすら保守のスレXII【逝ったらいいな】
■ JKすみれ=カステラさん
この板は 統 合 失 調 症 の人が居るよね
【ラジオ】嵐、サザン、プリプリの曲も…絶対に名曲になる“魔法のリズム”とは?
【Netflix】ダーククリスタル/The Dark Crystal
【作家志望者】「あるある」集【ワナビなら納得】
【HKT48】ドラフト3期生 総合スレ【D3】
「田園」とはなんと退屈な曲だろう
STAP細胞はありまーせん
ポルナレフがありのまま起こった事を話すガイドライン247
穂乃果「ベイスターズファイトだよっ!」 Part99
【GS盗撮】お尻盗撮youtuberおのだ8【乗客盗撮】
ブフッ。よろしくブー。(その2)
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼