15/08/05 14:10:04.50 OyFAH2W/.net
OSのっていうか、コントロールパネルの地域で選択されている国(場所)又は言語を取得するAPI教えてくださ
3:デフォルトの名無しさん
15/08/05 14:26:46.22 e4gAPQI9.net
GetUserDefaultLCID とかじゃね?
4:デフォルトの名無しさん
15/08/05 14:28:06.28 e4gAPQI9.net
言語はGetUserDefaultUILanguage
地域と言語は別だよね
5:デフォルトの名無しさん
15/08/05 15:37:41.50 MnmW9vnG.net
ノ ゚.ノヽ , /} ...
,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ i`'} .:::::::::::::::::::::::
~つ '-ー、 i | i' ...:::::::::::::::::::::::
/ < / 。/ ! ......::::::::::::::::::::::::: これは>>1乙じゃなくて
/ ~^´ /},-'' ,●::::::::::::::::::::::::::::::::::::
i、 ,i' _,,...,-‐-、/ i :::::::: .:::::::::::::
..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら
) {~''~>`v-''`ー゙`'~ ..::::::::: ........::.
{ レ_ノ ..::::::::. ......:::::::::
ノ '' ..::::::: ...::.:...:::::::::
.::::::::: ...:......:::::::::::: .
.:::::::::::. ..... .. ..:::::::::::::::::::::::: :::.
::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::..
.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::.
::::::::::::::::: :::::::::::::::::::::::::::::: :::::
.:: ::. :::
6:デフォルトの名無しさん
15/08/06 15:23:29.70 c3bf75DV.net
windows7なんですかテストモードONにしてもデジタル署名を要求されます
テストモードは未署名のドライバでも動かせるのではないのですか
未署名ドライバを署名無しのまま動作させるAPIを教えろください
7:デフォルトの名無しさん
15/08/06 16:54:34.81 /1pEP5C4.net
お断りします
8:片山博文MZ ◆T6xkBnTXz7B0
15/08/06 17:21:33.98 4xD13DN7.net
>>7
よいではないか
9:デフォルトの名無しさん
15/08/06 19:14:01.34 79+p9Mbt.net
WM_SIZING message
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
このメッセージを受け取れば、lParamで変更しようとしているウィンドウサイズを取得できますが、
そのウィンドウサイズでのクライアントサイズを取得したい場合、
GetClientRectは使えず(ウィンドウサイズ変更はまだ完了していないため、現在のクライアント領域が返ってくる)、
現状はGetSystemMetricsでクライアント領域周りの枠などのサイズを取得して
変更しようとしているウィンドウサイズから引いて算出しています。
しかし、この方法だと、ウィンドウスタイルを変えたときに、併せて変更せねばならず、
保守性の点では好ましくありません。
ウィンドウスタイルごとに条件分岐すれば対応できるものの、あまり美しくありません。
これら以外の方法で、スマートに変更しようとしているウィンドウサイズにおけるクライアント領域を
取得する方法があればご教示ください。
よろしくお願いします。
10:デフォルトの名無しさん
15/08/06 19:23:52.88 YtIxgi9m.net
1.GetWindowRectとGetClientRectを呼んで、差分を計算する
2.AdjustWindowRectを呼んで、差分を計算する
そんで、WM_SIZINGのlParamから逆算するとかどうでしょうか
でも、スクロールバーがある場合は面倒なことになりそう
11:デフォルトの名無しさん
15/08/06 19:30:52.64 oUBwSLmn.net
単にWM_SIZEを使えばいいのでは
確かWindows98あたりでサイズ変更中に描画を更新するオプションができて
WM_SIZINGのように使えるようになった
12:デフォルトの名無しさん
15/08/06 21:35:17.53 SdwUOFG4.net
WM_NCCALCSIZE送ったら計算してくれなかったっけ
13:片山博文MZ ◆T6xkBnTXz7B0
15/08/07 15:57:03.53 UeH7dSGn.net
MAKEROP4(SRCCOPY,0xED0000)
↑何だこれ?
14:デフォルトの名無しさん
15/08/07 18:20:35.84 5Zt0WqrR.net
ググレカス
15:9
15/08/07 23:44:31.50 AvOHJMxe.net
>>10
その方法でいけました!
これでウィンドウスタイルに依存せずにWM_SIZINGでクライアント領域を取得できるようになりました。
ありがとうございました!
>>11
やりたいことはクライアント領域のアスペクト比を固定する処理で、
最初はWM_SIZEでやってたんですが、
何だかぎこちない動きになってしまったので、調べていたらWM_SIZINGの存在を知り、
そちらでやると滑らかな動きになったのでWM_SIZINGで何とかしたいと思った次第です。
>>12
ご助言ありがとうございます。
今回は>>10さんの方法で対処できましたが、
教えていただいたWM_NCCALCSIZEを使う方法についても調べてみます。
16:デフォルトの名無しさん
15/08/09 21:51:12.54 nWjgkEEO.net
i7 2600Kみたいな4コア8スレッドのCPUで、プロセスのアフィニティを変更する時
8ビットをそれぞれ1論理コアに対応させて使う論理コアを指定しますが、
その時に1と2が1つの物理コアに対応してるのでしょうか?
それとも1と5が1つの物理コアに対応してるのでしょうか?
17:デフォルトの名無しさん
15/08/09 22:50:57.54 nd2w8Mp+.net
どれが物理コアかなんて区別はないよ
ゲームで物理4コアのi5が好まれる理由もそれ
18:デフォルトの名無しさん
15/08/09 23:49:21.06 nWjgkEEO.net
>>17
ちょっと回答の意味がわからないです
どのビットがどの物理コアに割り当てられるかは変動的で決まってない、ということですか?
i7のスレッド2倍化は1つの物理コアの余ってる時間に割り込ませるものなので、
確実に1つの物理コアを空けたいんです。なので同じ2つの論理コアを不使用にさせるにしても、
8ビットあるうち例えば1|2を休ませるか、1|16を休ませるかの、どっちかが1つの物理コアを確実に休ませる指定になると思うんです
(ビット1と2がセットで1物理コア、またはビット1と5がセットで1物理コアとなっているかのどっちかだと想像してます)
その割り当てが知りたいんです
熱対策や故障コアのために1つの物理コアを確実に開けたいんだと読み替えてもらっても結構です
19:デフォルトの名無しさん
15/08/10 00:56:39.57 sjbJ+sY3.net
>>18
(俺は>>17氏ではないが)
URLリンク(msdn.microsoft.com)
のコメントには、以下の3通りの主張がされている(ように思われる)
1. >>16の後者だ(…と言う前提で書いてあるMSの記事がある)
2. いや全く当てにしてはならない
3. BIOSで事実上>>16の前者に設定されてる
ひとまずご自身で内容を吟味されたし。
20:デフォルトの名無しさん
15/08/10 01:25:26.47 Yz/DBb/r.net
もう10年以上前の話ですが Prestonia XEON プロセッサを2個搭載できるマザボで Hyper-Threading
を ON にしたときどの仮想プロセッサがどの物理プロセッサに対応付けられているのか気になって調べた
ところ 1, 3 が一つの物理プロセッサ、2, 4 がもう一つの物理プロセッサに対応してました。
比較的重いプログラムを2つ走らせ、タスクマネージャでアフィニティーマスクの設定を変えながら
ファンコントローラーの温度計測値で物理プロセッサの温度を読み判断しました。
ただ、こういうのは >>19 の 2 のように、はっきり決められた事ではないんじゃないかなと思ってます。
21:デフォルトの名無しさん
15/08/10 05:14:15.39 joKVIITR.net
APIのスレで聞くことじゃないな
22:デフォルトの名無しさん
15/08/10 12:40:35.44 a4ap/1LI.net
>>21
APEだから仕方ない
23:デフォルトの名無しさん
15/08/10 15:31:07.76 Vh7AZwN0.net
自プロセスを呼び出した親プロセスEXEのフルパスを取得したいのですが、
親プロセスは自プロセスを呼び出したら即終了してしまいます。
なので、Process32First()などで情報を取得しようにもその時には列挙されません。
別の監視プロセスを用意するなりの対処法はあるでしょうが、自プロセス
だけで親プロセスを知る方法はありませんか?
24:デフォルトの名無しさん
15/08/10 15:55:46.59 5q1c3acf.net
自プロセスを呼び出す際に親プロセス(?) のフルパスを渡せばいい
25:デフォルトの名無しさん
15/08/10 16:36:29.46 Vh7AZwN0.net
どうもすみません。
前提条件として、親プロセスの修正は不可能です。
26:デフォルトの名無しさん
15/08/10 16:52:54.44 HDdiOC7r.net
親プロセスを実行しているのはだれ?
27:デフォルトの名無しさん
15/08/10 16:55:45.28 5q1c3acf.net
修正不可能な親プロセスは赤の他人
親プロセスの定義は?
28:デフォルトの名無しさん
15/08/10 20:07:24.73 8ijckzev.net
スレチは氏ね
29:デフォルトの名無しさん
15/08/10 21:36:23.15 65tjAOy9.net
親プロセス名を渡さないときは強制終了すればいい
30:デフォルトの名無しさん
15/08/10 21:39:02.42 /eMcOwxL.net
馬鹿なことやってないでまともな設計しろよ
質問箱と尻拭い相談所はちげーぞ
てめえのケツはてめえで拭け
31:デフォルトの名無しさん
15/08/10 21:49:23.32 k4VnlTc/.net
ケツ…!!
( ゚д゚ ) ガタッ
.r ヾ
__l_l / ̄ ̄ ̄/_
\/ /
32:デフォルトの名無しさん
15/08/10 21:57:46.69 joKVIITR.net
親のインスタンスが二つ以上いることは考えにくいから
ウィンドウクラスで検索すれば特定できるかも知れない
33:デフォルトの名無しさん
15/08/10 22:35:38.71 Vh7AZwN0.net
不正コピーされたインストーラーでインストールされた場合、インストール直後に
インストーラーから起動されたプロセスからインストーラーを特定したかったんです。
フルスキャンする訳にも行かないし。
Process32First()とか使ってフルパスを得るところまで作って、インストーラーが
終了していることに気付いた次第で代替案を探していました。
ここまで詳しい経緯は長すぎ産業でOKと思ったので省略してました。
無理そうですね。
どうもありがとうございました。
34:デフォルトの名無しさん
15/08/10 23:24:56.99 oSHGrBYa.net
初歩的な質問なのですが、教えてください
Windows VISTA環境で
「PEP K32GetProcessMemoryInfo が
DLL KERNEL32.dll から見つかりませんでした」と表示されました
いろいろ調べた結果、WIN7以降とは異なり
VISTAのkernel32.dll内部には、K32GetProcessMemoryInfoは存在せず
その代わり、旧来のpsapi.dll内部に、GetProcessMemoryInfoがあると分かりました
そこでpsapi.dllで代用するため、以下の式を追加したいのですが、その先が分かりません
#ifndef PSAPI_VERSION
#define PSAPI_VERSION 1
#pragma comment (lib, “PSAPI.Lib”)
#else
#pragma message (“defined PSAPI_VERSION *************”)
#endif
以上の式をexeファイルに追加するにはどうすればいいのでしょうか
単純にバイナリエディタで開いただけでは無意味な英数字が並んでいるだけでした
よろしくお願いします
35:デフォルトの名無しさん
15/08/10 23:34:24.57 5q1c3acf.net
自分のプログラムならソースに追加すればいいだろ
他人のプログラムなら改竄するな
36:デフォルトの名無しさん
15/08/10 23:44:38.23 AMzePwd7.net
不正である事を確認しようとするより正規である事を確認するほうが楽
37:デフォルトの名無しさん
15/08/10 23:52:40.03 4jBvfEp+.net
スレチの説教好きだねぇ
38:デフォルトの名無しさん
15/08/11 07:35:15.78 LfA/skDI.net
>>33
APIフックは?
39:デフォルトの名無しさん
15/08/11 09:56:56.39 sbfi/bwK.net
常駐して監視するのでもなければ、
親プロセスが死んでいる前提なら無理。親プロセスIDしか情報が無い上にそのIDすら親の死亡時に付け替えられる。
40:デフォルトの名無しさん
15/08/11 14:59:02.28 dsDvvWMK.net
よく使うアプリの一覧とかあるじゃん。
実行アプリの履歴がレジストリかどこかに残ってないの?
41:デフォルトの名無しさん
15/08/11 15:36:53.18 HguuZcyi.net
そういえば一時期、Office2013にも似たようなカーネルエラーが頻発してたけど
あれも理論上は回避可能ということか
解決策としては
①exeにpsapi.dllのAPIを使用するよう指定ソースを組みこむ
②VISTA用の拡張カーネルを作成して、kernel32.dllにK32GetProcessMemoryInfoを追加する
いつかXPやVISTAにも某黒翼猫氏のような救世主が現れて、拡張カーネルが用意されるのかしら
42:デフォルトの名無しさん
15/08/12 23:53:20.47 G8qcToBK.net
どっかでフックしてIAT書き換るかDLL挿げ替えかな
43:デフォルトの名無しさん
15/08/14 07:54:19.40 vjnCwLdg.net
>>33
ただでさえインストーラは環境依存のクレーム地獄になりがちなのに
おかしなことをするんじゃない
>>34
きさまぷろぐらまじゃないな
帰れ
>>41
>救世主が現れて、拡張カーネルが用意されるのかしら
Windows Update サーバーを乗っ取ることが前提かな
よし全機撃墜
44:デフォルトの名無しさん
15/08/14 11:01:39.44 IL9iPg3p.net
アホはお帰りください
45:デフォルトの名無しさん
15/08/14 11:03:06.69 2p3m0KlY.net
みんな帰ろう
46:デフォルトの名無しさん
15/08/14 11:27:26.86 WAFSmjQt.net
そして誰もいなくなった
47:デフォルトの名無しさん
15/08/14 13:17:55.88 Q/AtP1Be.net
7 x 7 = 49
48:片山博文MZ ◆T6xkBnTXz7B0
15/08/14 21:49:09.41 qMkXaiUF.net
IATを書き換えて実行ファイルを再構築できるようなハッカーはここには居ない
49:デフォルトの名無しさん
15/08/14 22:14:26.57 2p3m0KlY.net
それが存在しないのは、それが必要ないからであることが多い
50:デフォルトの名無しさん
15/08/14 22:31:22.18 WAFSmjQt.net
お金は必要だけど、オレの財布にはあまり存在しないという例がもある
51:デフォルトの名無しさん
15/08/14 22:35:47.25 qMkXaiUF.net
>がも
はい、減点。
52:デフォルトの名無しさん
15/08/14 23:04:18.82 2p3m0KlY.net
なんでID晒して名前隠してんの?
はい、減点。つーか0点。
53:デフォルトの名無しさん
15/08/15 02:12:39.84 Krwjugvl.net
まあ大概のことは「片山さんだから仕方ない」で済ませられる程度だろ
54:デフォルトの名無しさん
15/08/15 04:44:29.63 Yk3bSSFS.net
>片山博文MZ ◆T6xkBnTXz7B0
はい、減点。
55:デフォルトの名無しさん
15/08/15 07:15:55.06 7sJYyU2X.net
>>48
APIフックする過程でIAT云々はさわるだろうけど
実行ファイルを再構築なんてできたらSAOの世界じゃね
56:デフォルトの名無しさん
15/08/15 08:04:09.11 lGrRobx2.net
岩手朝日テレビがどうしたって?
57:デフォルトの名無しさん
15/08/15 08:25:24.67 SxlpnIr4.net
メモリ上の再構築は共有セクションの扱い以外は別に難しくはない。改変チェックが入っている場合は潰す必要があるが。
58:片山博文MZ ◆T6xkBnTXz7B0
15/08/18 00:37:16.25 7ZRpZn5E.net
>>57
その辺を詳しくブログに書いて下さい、お願いします。
59:デフォルトの名無しさん
15/08/18 19:00:36.45 eHhh5Jxo.net
>>56
MIT
.
60:デフォルトの名無しさん
15/08/18 21:51:06.26 LehTl7m4.net
一つIMEで質問がありますが、ここで良いですか?
SetInputScope()でIME設定をして、IME問い合わせGetInputScope()?があってもいいと思いますが
Win8では見当たりません、
TF_GetInputScope()があったのですが使えるのか使えないのか…。
どなたか知っている方ヒントだけでも教えて下さい!
61:デフォルトの名無しさん
15/08/21 10:27:50.79 v385Kh+A.net
inet_ntoa ってchara*返すけどWCHAR*返すのおしえてよ
62:デフォルトの名無しさん
15/08/21 10:45:39.38 c/THd06T.net
InetNtop
63:デフォルトの名無しさん
15/08/21 17:48:25.85 NHu7az4C.net
VC++でWin32APIを使いゲームを制作しようと思っています。
URLリンク(zahyou.6.ql.bz)
↑のサイトを参考に簡単なゲームをつくってみたのですが
効果音を鳴らすとそれまで流れていたBGMが少し止まってしまいます。
BGMと効果音を止まることなく流すにはどうすればいいでしょうか?
使用している関数はmciSendCommandです
64:デフォルトの名無しさん
15/08/21 18:03:56.39 106+9rwN.net
MCI だと止まる
65:デフォルトの名無しさん
15/08/21 18:11:32.53 c/THd06T.net
>>63
同期・非同期
66:デフォルトの名無しさん
15/08/21 18:12:03.16 106+9rwN.net
waveoutを使うといいです
67:デフォルトの名無しさん
15/08/21 18:12:28.78 106+9rwN.net
あとダブルバッファリンもした方がさらに良くなります
68:デフォルトの名無しさん
15/08/21 21:00:41.93 Tu1fJmAa.net
優しいなお前ら
69:デフォルトの名無しさん
15/08/21 21:04:35.93 x7vlwrmr.net
子供は1回1錠な
70:デフォルトの名無しさん
15/08/21 21:15:40.67 AXgC1r2C.net
痛風の発作が出ているときにバッファリンを飲むと悪化します
71:デフォルトの名無しさん
15/08/22 03:43:30.96 R1h6gxCt.net
バファリンは、胃にやさしくない成分と、頭痛に効かない成分とで出来ています。
72:デフォルトの名無しさん
15/08/22 08:20:07.85 cPJQ97tL.net
おい子供にバファリン使うな
小児用バファリン使え
73:デフォルトの名無しさん
15/08/22 09:44:24.66 OcPmzwVT.net
え、ワーファリン?
74:デフォルトの名無しさん
15/08/22 10:06:15.94 fLuaARar.net
>>66
効果音をwaveoutやmidioutにしたところBGMに支障なく流すことができました。
本当にありがとうございます。
75:デフォルトの名無しさん
15/08/27 12:14:42.27 RnCy/tzb.net
C#でアプリを作ってはいるんですがwindowsAPIを使ったことがほとんどありません
windowsAPIを覚えたいんですが、どういうアプリを作りながら覚えたらいいでしょうか?
76:デフォルトの名無しさん
15/08/27 12:21:31.54 Eaj+az2t.net
Hello Windows
77:デフォルトの名無しさん
15/08/27 13:10:33.61 0465F1pc.net
C#だけで閉じこもってるなら必要ないだろ
使うならCくらいは読めて書けるようにならないと
78:デフォルトの名無しさん
15/08/27 13:35:56.67 RnCy/tzb.net
>>77
Cの読み書きはある程度はできます
windowsAPIを使えるようになるまですごい時間がかかりそうで・・・
何か作りながら覚えたいんですがむずかしいでしょうか?
79:デフォルトの名無しさん
15/08/27 13:43:02.13 Eaj+az2t.net
作りながらじゃなきゃ覚えられない。まずはこれ。
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
80:デフォルトの名無しさん
15/08/27 13:43:17.06 K9LHu2e1.net
>>78
自分が過去につくったC#アプリをWinAPIだけで再現してみたら?
81:デフォルトの名無しさん
15/08/27 19:00:26.66 tpdP6kqy.net
SetLayeredWindowAttributes みたいな感じで透過じゃなくフォーム全体を暗くしたりするAPIあったら教えて下さいね
82:片山博文MZ ◆T6xkBnTXz7B0
15/08/27 19:08:34.43 oqQcnINP.net
>>81
p%透過にしてウィンドウの下に黒い別のウィンドウを重ねる。
83:デフォルトの名無しさん
15/08/29 01:24:22.96 rZ+W6Zab.net
>>78
作りながら覚えるなら簡単なアプリを作ればいいじゃん
ありきたりだけど例を挙げれば
・キッチンタイマー
・アラーム時計
・カレンダー
・電卓
・画像ビューア
・テキストエディタ
・音楽プレイヤー
上記の中で自分が作れそうな簡単そうなものを選んで作ればいい
最低限の機能を備えたものが出来たらリファクタリングやバージョンアップするといい
84:デフォルトの名無しさん
15/09/06 17:45:58.22 cLh5ZyHa.net
中途半端なAPIプログラマなので、C#の生産性に勝てない。
鍛えればなんとかなるのかな?
85:デフォルトの名無しさん
15/09/06 17:50:23.11 3Oih9VSM.net
C#キモい。
WinAPI一筋だ。
86:デフォルトの名無しさん
15/09/06 18:20:23.46 vWlWpWil.net
レイヤーが違う
C#だってWinAPI使えるで
87:デフォルトの名無しさん
15/09/06 21:35:38.22 ANWjJC8V.net
C++で、画面や文字列を簡単に扱えれば…
メッセージループとか、未だにわからないです。
洋書でもいいので、おすすめ書籍ないですか?
88:デフォルトの名無しさん
15/09/06 21:45:59.52 GpoQks5m.net
MFCとかWTL使っとけば
おすすめ書籍なら理解できるとか言われて本当かよ~?って思うぜ
メッセージループすら理解できてない時点で
89:デフォルトの名無しさん
15/09/06 23:34:08.57 zJiA8SF0.net
メッセージポンプかい?
GUIアプリは、イベントドリブン(駆動)だから、
何かのイベントが起こるのを待つ、受け身の作り
イベントキューがあって、
そこにマウス操作やキーボードのイベントが投入されると、
そのキューから順番に、
イベントが取り出されて、処理される
自分で処理を書きたい、イベントの処理だけをOverrideする。
例えば、OnMouseClick()など。
Overrideしないイベントは、OSの既定の処理がされる
ただし、画面更新のイベントは、優先度が低いため、
一番最後に処理される
60フレームなら1秒間に60回、
30フレームなら1秒間に30回、画面が描かれる
90:デフォルトの名無しさん
15/09/07 09:55:01.12 ArTvcv08.net
ダイアログ/フォーム アプリケーションなら
ウインドウに直にデータを突っ込んで設計のことをあまり考えなくて済むよ
ぐふふ
91:デフォルトの名無しさん
15/09/07 17:17:44.71 ifJ6MFQh.net
ダイアログアプリケーションなら、なんとか・・
「ぐふふ」が気になる
92:デフォルトの名無しさん
15/09/07 19:20:08.77 kLL2g65z.net
目的:
ダイアログ上に、"決定"ボタン、エディットコントロールを配置しています。
エディットコントロールで"Enter"キーを入力された場合に、
"決定"ボタンを押されたことにしたい。
やってみてダメだったこと:
ダイアログのウインドウプロシージャに
WM_KEYDOWN
を追加しVK_ENTERを処理するコードを書いた。
↓
どうやらダイアログのウインドウプロシージャにはWM_KEYDOWN自体がこない模様。
というところで困っています。
質問1
どのようにすれば目的の内容を実現できますか?
質問2
MFCのSubclassDlgItemの変わりになるようなものはありますか?
93:デフォルトの名無しさん
15/09/07 19:30:42.31 8kmrGT2g.net
>>92
IsDialogMessage
94: ◆QZaw55cn4c
15/09/07 19:42:51.28 w2psTc+y.net
>>92
それはエディットコントロールのウィンドウプロシージャで捕まえるもの
MFC は知らんが
GetWindowLong(hwndEdit, GWL_WNDPROC);
SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG)callbackFunction);
でどうとでもなる,2~3年に一回質問される FAQ だね
95:デフォルトの名無しさん
15/09/07 19:43:17.81 yWiuJpNl.net
>>92
回答2
CWnd::SubclassDlgItem() のソースを参照すると、GetDlgItem(), SetWindowLongPtr() 等を
使って関数に仕上げているだけなコトがわかる。
96:デフォルトの名無しさん
15/09/07 20:02:17.05 8kmrGT2g.net
>>92
それと>>93の場合決定ボタンをBS_DEFPUSHBUTTONにしてBN_CLICKEDを処理ね
97:デフォルトの名無しさん
15/09/07 20:56:39.35 kLL2g65z.net
>>93-96
すいません。
回答にたどり着けなくてコード貼りました。
見よう見まねでやっているので色々問題あるかもしれません。
URLリンク(codepad.org)
上記コードのWinProc、DlgProcともWM_KEYDOWNがこない状況です。
どんな感じに直せばいいでしょう?
98:デフォルトの名無しさん
15/09/07 21:23:33.51 8kmrGT2g.net
>>97
モーダルダイアログ、モードレスダイアログで調べて
99:デフォルトの名無しさん
15/09/07 21:36:48.33 P3iiIg+v.net
アニメーションカーソルについて質問です。
アニメーションカーソルを自分でHDCに描画したい場合どうすればいいですか?
作ってみたんですが、アニメーションカーソルの総数がうまく取得できないのとカーソルの登録を選べません。
アニメーションカーソルのフォーマットは拡張?された48x48っぽいものです。
島風 マウスカーソル 通常.aniは、ニコニコのリンクにあった素材です。
HICON hIcon;SHFILEINFO sfi;IImageList *pImageList;
BOOL MyInit(){hIcon = 0;
if (!SHGetFileInfo(L"島風 マウスカーソル 通常.ani", 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX)) return false;
if (SHGetImageList(SHIL_EXTRALARGE, IID_IImageList, (void**)&pImageList) != S_OK) return false;
if (pImageList->GetIcon(sfi.iIcon, ILD_TRANSPARENT, &hIcon) != S_OK) {hIcon = 0;return false;}
pImageList->Release();return TRUE;}
void MyFree(){if (hIcon) DestroyIcon(hIcon);}
void myDraw(HDC hdc,int number){DrawIconEx(hdc, 0, 0, hIcon, 0, 0, number, NULL, DI_NORMAL);}
よろしくお願いします。
100:デフォルトの名無しさん
15/09/07 21:48:51.98 yWiuJpNl.net
>>97
わからないから添削しろ、では芸がない。
そもそも、
>エディットコントロールで"Enter"キーを入力された場合に、
>"決定"ボタンを押されたことにしたい。
は、Windowsプログラムとして正しいのか考えてみよう。
ex) 漢字変換中に誤って2度 Enter キーを押したら誤動作する とかね。
101:デフォルトの名無しさん
15/09/07 21:57:06.07 yWiuJpNl.net
>>97
書き忘れた。
if (!hPreInst) { if (!RegisterClass(&iWCls)) return FALSE; }
みたいなコトは今はやらない。Win16 プログラムでないかぎり、hPreInst は常に NULL。
102:92
15/09/07 22:04:52.49 kLL2g65z.net
>>94
すいません。↑これでいけました。
URLリンク(codepad.org)
↑最初WM_KEYDOWNの中でVK_RETURNを処理して確認していたのですが、
EDITTEXTではEnterKeyが効かないみたいで、
"上手くいかない"と判断してました。
VK_RETURNが効かない件は別問題なので、これから調査します。
とりあえず >>92 の質問は解決しました。どうもありがとう。
103:99
15/09/07 22:58:10.86 P3iiIg+v.net
日本語が変だったので訂正です。
やりたいこと。
・アニメーションカーソルの総数を取得したい。
・アニメーションカーソルの画像をhDCにイメージ番号を指定して描画したい。
先ほど記述したソースだと、イメージ番号0番のみが表示されるだけみたいです。
素材の場所は URLリンク(www1.axfc.net) DLパス⇒かんこれ
です。
ご教授お願いします。
104:92
15/09/07 23:33:31.78 kLL2g65z.net
度々すいません。
>>102 のVK_RETURNが効かない件解決したので一応下記のソース報告します。
URLリンク(codepad.org)
EDITTEXTのスタイルにES_MULTILINEを追加すればいいみたいです。
また >>92 の質問2ですが、意図としては上記のEditProc見たいな事をやりたかったので、
これも解決しました。
>>98
今回はモーダルの予定ですので必要ないですが、
今後のために調べときます。
>>100
> Windowsプログラムとして正しいのか
については少し考えて見ます。
105:片山博文MZ ◆T6xkBnTXz7B0
15/09/07 23:42:58.94 wiJUwYLf.net
>>103
外部ライブラリ使う、RIFF形式ファイルとして解析する、以外に簡単な方法は無かったはず
106:片山博文MZ ◆T6xkBnTXz7B0
15/09/07 23:50:26.92 wiJUwYLf.net
アイコンの抽出はExtractIcon,ExtractIconEx,IExtractIconと
いろいろサポートしてるのにアニメカーソル抽出のサポートは貧弱
107:デフォルトの名無しさん
15/09/08 02:00:50.39 WpGjOpsu.net
>>92
>エディットコントロールで、"Enter"キーを入力された場合に、
>"決定"ボタンを押されたことにしたい
この仕様自体が、おかしいような気がする
筋論で言うと、
1. エディットコントロールで、キーイベントを取る
2. エディットコントロールから、
その親であるダイアログにアクセスする
3. ダイアログから、その子である決定ボタンに、
ボタンを押すイベントを投入する
4. 決定ボタンで、既定のボタンが押されたイベントを処理する
親 ダイアログ
子 エディットコントロール
子 決定ボタン
こういう階層では、子1から子2へは(兄弟間では)、
直接アクセスできないので、
子1 → 親 → 子2 という経路でアクセスする
108:デフォルトの名無しさん
15/09/08 02:12:44.72 WpGjOpsu.net
>>99
SHGetImageList で、連続するアニメの、
複数のイメージが取得できているの?
取得できないのなら、プロジェクトのアセットのパスに、
正しく取得できるように置く
また画像は、正しいファイル名の連番とするなど、
正しい形式で並べる
(もし連番としている場合の話です。
漏れはどういう形式か、よく知らないけど)
109:99
15/09/08 08:39:26.20 M6zfIWdf.net
>>106,108
アニメーションカーソルは複雑なんですね。
SHGetImageListそのものが使うの初めてだったのでよくわかってないです。
情報集めて、アニメーションカーソルの制御どうするか考えます。
外部ライブラリーとかで、組み込みフリー的な便利なものあればいいですが。。
あとは、MSDNあたり調べてみるかなぁ。。
110:デフォルトの名無しさん
15/09/08 08:50:14.73 uJSOxUGR.net
最初にMSDNあたれよバカ
111:デフォルトの名無しさん
15/09/08 09:17:02.10 S6LsUKWF.net
>>104
そんな事しなくても
16行目 PUSHBUTTON → DEFPUSHBUTTON にするだけで
エンター押した時にWM_COMMAND IDC_SET BN_CLICKEDが発生するから
EditProcもGet/SetWindowLongも不要
112:デフォルトの名無しさん
15/09/09 11:52:53.38 zLKTZ6N+.net
>>99
そもそも最終的に何がしたいの?
描画しただけで終わりじゃないんじゃないの?
条件後出しして嫌がられるパターンにみえる
113:デフォルトの名無しさん
15/09/09 14:46:05.94 UbDBGCr0.net
win32の色んな意味で時代遅れな関数群を使うのが億劫になって来た。
114:デフォルトの名無しさん
15/09/09 16:44:51.77 61epwTm+.net
クラス化しないで直呼び?
115:デフォルトの名無しさん
15/09/09 18:10:55.30 tEPd2G1m.net
"ゴミ箱にいれないで完全に削除する"の意味でNukeという用語を使っているMSを告訴しよう
9条マンセー
116:デフォルトの名無しさん
15/09/10 10:35:49.99 pvKn3bkq.net
アプリケーションキューに入っているメッセージが消えるタイミングは普通に考えてプロシージャの処理が完了した後ですよね?
誰か確実に知りませんか
117:デフォルトの名無しさん
15/09/10 10:40:17.77 DGBnp3I7.net
WM_PAINTを除いて GetMessage() が削除するんじゃなかったっけ。
118:デフォルトの名無しさん
15/09/10 11:19:27.31 pvKn3bkq.net
>>117
調べたらそうっぽいですね
っていうか普通に考えたらそうですよね
ありがとうございまいた
119:デフォルトの名無しさん
15/09/10 23:43:53.85 Lt3YsJ/Z.net
WM_PAINT?
BeginPaintを呼ばないとループするって話?
120:デフォルトの名無しさん
15/09/10 23:53:28.53 DGBnp3I7.net
WM_PAINTは GetMessage() を実行した時点では削除されず
ウィンドウプロシージャでの処理が終了した時点で消える という話
121:デフォルトの名無しさん
15/09/11 10:56:33.16 IOXejlDX.net
SetThreadAffinityMaskやSetThreadIdealProcessorを使用して
CPUコアの割り振りを明示的にしないとマルチコアに最適化されたアプリケーションとは言えない?
122:デフォルトの名無しさん
15/09/11 11:17:24.29 GHVwR1ig.net
>>121
そんなのやらなくてもosが勝手にやってくれるだろ
123:デフォルトの名無しさん
15/09/11 13:09:56.43 WE/d+c/8.net
物理的にマウスボタンが押されている状態で、
SendInput等のAPIによってマウスのボタンを上げられた状態であることを判定する方法ってありますか?
124:デフォルトの名無しさん
15/09/11 13:29:49.05 dcIIi90q.net
どういう場面で必要になるのかな?
「マウスボタンは物理的に押されている」
↓
「SendInput等によってマウスのボタンが離されているよう偽装している」
↓
「このたわけモノが! 実際には押されているだろ!?」←これを判定する方法でしょ?
125:デフォルトの名無しさん
15/09/11 13:37:43.79 WE/d+c/8.net
状況としてはですね、
自作アプリにマウス右ボタンを使った機能があるんですが
外部のマウスジェスチャー系の常駐アプリが右クリックを戻しているようなんです
GetKeyState/GetAsyncKeyState などでVK_RBUTTONの状態が取れません。
126:デフォルトの名無しさん
15/09/12 00:01:38.57 t9wfuOfk.net
そういうのは競合状態といってな
どっちかを無効にするもんだよ
無理になんとかしようとしても時間の無駄
127:デフォルトの名無しさん
15/09/12 08:59:57.32 lTmP7o65.net
ボクの知らない常駐アプリを同時に使わないでくださーい
ってのは割りと当たり前のこと
だけど初心者にはその主張は通用しないので
自アプリの起動時に常駐アプリの有無をチェックして警告を出すのがスマート
128:デフォルトの名無しさん
15/09/12 09:15:16.54 bK+LJe1a.net
>>125
右クリックのマウスジェスチャーにマウスを右クリックする機能を割り当てて解決
129:デフォルトの名無しさん
15/09/12 09:26:53.57 OKvTRLUv.net
>>122
そうなんかありがとう
130:sage
15/09/17 15:36:32.51 rzmccn0E.net
Win32APIを使ってテキストファイルから1文字だけ取り出そうとしているのですが、できません。
アドバイスもらえないでしょうか?
以下ソースコードです。
=====ここから=====
int _tmain()
{
HANDLE hFile = NULL;
TCHAR *strFileName = 0;
TCHAR buff = 0;
DWORD byte_read = 0;
_tsetlocale(LC_ALL, TEXT("ja"));
// 読み込むファイルのフルパス。
strFileName = TEXT("D:/visualStudio/test/test3.txt");
131:sage
15/09/17 15:37:04.86 rzmccn0E.net
// 読み込むファイルのファイルハンドル。
hFile = CreateFile(
strFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
);
// ファイルハンドルのエラー処理。
if (hFile == INVALID_HANDLE_VALUE || hFile == NULL) {
_tprintf(TEXT("hFile error.\n"));
_gettchar();
return 0;
}
// ファイルから1文字読み込む。
ReadFile(hFile, &buff, (DWORD)sizeof(TCHAR), &byte_read, NULL);
// 読み込んだ1文字を表示。
_tprintf(TEXT("%c\n"), &buff);
CloseHandle(hFile);
_gettchar();
return 0;
}
=====ここまで=====
132:デフォルトの名無しさん
15/09/17 15:49:41.02 U6MHK03R.net
×_tprintf(TEXT("%c\n"), &buff);
○_tprintf(TEXT("%c\n"), buff);
133:デフォルトの名無しさん
15/09/17 15:53:01.19 b2VOzBjq.net
test3.txtの文字コードも見てみてね
134:デフォルトの名無しさん
15/09/17 15:53:11.74 9BEBkVT9.net
ファイル自体読み込めてないんだろう
135:130
15/09/17 16:06:25.74 rzmccn0E.net
レスありがとうございます。
>>132
>>133
&buff→buffに変更してもコマンドプロンプトには?しか表示されないままです。
test3.txtはサクラエディタを使って、Unicode、改行文字コードCRLFで保存しています。
test3.txtの内容は1行目にabcという文字列があります。
>>134
temp = ReadFile(hFile, &buff, (DWORD)sizeof(TCHAR), &byte_read, NULL);
// 読み込みのエラー処理。
if (temp == 0) {
_tprintf(TEXT("ReadFile error.\n"));
_gettchar();
return 0;
}
としてみましたが、特にエラーは出てないようです。
なぜできないのか、心当たりが無くなってしまって途方に暮れています。
ちなみに1文字ではなく、文字列全体を取得することならできました。
136:デフォルトの名無しさん
15/09/17 16:15:22.60 Nh2CPZLE.net
BOMのせいに決まってんじゃん
137:130
15/09/17 16:26:57.31 rzmccn0E.net
>>136
ありがとうございます!
試してきます!
138:デフォルトの名無しさん
15/09/17 16:50:41.97 b2VOzBjq.net
>>137
まず%cじゃなく%02Xで値見てみる
139:130
15/09/17 17:23:07.39 rzmccn0E.net
>>138
つかめてきました!
ありがとうございます!
結局引っかかっていたのはUnicodeのBOMが大きな要因でした。
助かりましたorz