Win32API質問箱 Build50at TECH
Win32API質問箱 Build50 - 暇つぶし2ch1:デフォルトの名無しさん
07/02/17 23:10:48
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

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

2:2
07/02/17 23:13:16
自己解決しました。
>>1にカチンときたので教えません。
バーカ!

3:デフォルトの名無しさん
07/02/17 23:13:49
49 スレリンク(tech板)
48 スレリンク(tech板)
47 スレリンク(tech板)
46 スレリンク(tech板)
45 スレリンク(tech板)
44 スレリンク(tech板)
43 スレリンク(tech板)
42 スレリンク(tech板)
41 スレリンク(tech板)
40 スレリンク(tech板)
39 スレリンク(tech板)
38 スレリンク(tech板)
37 スレリンク(tech板)
36 スレリンク(tech板)
35 スレリンク(tech板)
34 スレリンク(tech板)
33 スレリンク(tech板)

4:デフォルトの名無しさん
07/02/17 23:14:18
32 スレリンク(tech板)
31 スレリンク(tech板)
30 スレリンク(tech板)
29 スレリンク(tech板)
28 スレリンク(tech板)
27 スレリンク(tech板)
26 スレリンク(tech板)
25 スレリンク(tech板)
24 スレリンク(tech板)
23 スレリンク(tech板)
22 スレリンク(tech板)
21 スレリンク(tech板)
20 スレリンク(tech板)
19 スレリンク(tech板)
18 スレリンク(tech板)
17 スレリンク(tech板)
16 スレリンク(tech板)
15 スレリンク(tech板)
14 URLリンク(pc5.2ch.net)
13 URLリンク(pc5.2ch.net)
12 URLリンク(pc5.2ch.net)
11 URLリンク(pc5.2ch.net)
10 URLリンク(pc5.2ch.net)
9 URLリンク(pc5.2ch.net)
8 URLリンク(pc5.2ch.net)
7 URLリンク(pc3.2ch.net)
6 URLリンク(pc3.2ch.net)
5 URLリンク(pc3.2ch.net)
4 URLリンク(pc3.2ch.net)
3 URLリンク(pc.2ch.net)
2 URLリンク(pc.2ch.net)
1 URLリンク(pc.2ch.net)

5:デフォルトの名無しさん
07/02/17 23:14:49
- MSDN ホームページ
URLリンク(www.microsoft.com)
- MSDN ライブラリ
URLリンク(msdn.microsoft.com)
- MSDN 2 ライブラリ
URLリンク(msdn2.microsoft.com)
- 猫でもわかるプログラミング
URLリンク(www.kumei.ne.jp)
- Google
URLリンク(www.google.com)
- MSDN ライブラリ 2006年6月版
URLリンク(www.microsoft.com)
- Platform SDK Update
(WindowsR Server 2003 R2 Platform SDK Full Download)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)

- Win32 API入門
URLリンク(wisdom.sakura.ne.jp)
- Win32 プログラミング入門
URLリンク(www7.plala.or.jp)

- Advanced Windows (書籍)
URLリンク(www.amazon.co.jp)

-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
URLリンク(www.2chsearch.info)
URLリンク(makimo.to)

6:デフォルトの名無しさん
07/02/17 23:15:19
MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
URLリンク(msdn.microsoft.com)
URLリンク(msdn2.microsoft.com)

おまけ;Windows SDK for Windows Vista RC1の文書。
URLリンク(windowssdk.msdn.microsoft.com)

MSDN ライブラリ 2006年8月版
URLリンク(www.microsoft.com)


windowssdk.msdn.microsoft.comは、もうmsdn2へ転送されるようになっている。

7:デフォルトの名無しさん
07/02/17 23:27:21
これも追加しようよ。

Microsoft® Windows® Software Development Kit for Windows Vista™ and .NET Framework 3.0 Runtime Components
URLリンク(www.microsoft.com)

8:デフォルトの名無しさん
07/02/18 00:44:35
リストボックスにアイテム挿入してるんだけど
一番左のカラムにしか文字列が挿入されないんですが。

ちゃんとiSubItemの値を変えてるのに何でだろうと2時間ぐらい悩んでてもう限界です。
何か心当たりがある事があれば教えてください。

9:デフォルトの名無しさん
07/02/18 00:50:22
妹「お兄ちゃんって落ち込んだ時どうする?」
俺「んー、別に何も。寝るかな」
妹「ふーん・・」
俺「どうした?何かあったか?」
俺「ううん、ちょっとね」
俺「何だよ水くさいな、言ってみろよ」
俺「う、うんとさ・・・」
俺「おう」
俺「お兄ちゃん、この間一緒に歩いてた人、彼女?」
俺「・・・は?」
俺「前学校の近くで話してたじゃん」
俺「ああ・・・あいつか。なわけないだろ、ただのクラスメートだよ」
俺「ほんと?」
俺「嘘言ってどうすんだよ」
俺「そっか」
俺「てかそんな話はいいんだよ。落ち込んでたんじゃなかったのか?」
俺「ううん、それならいいんだ!えへへ」
俺「おかしな奴だな」
俺「ふふ♪お兄ちゃんに彼女なんてできるわけないよね、よく考えたら。」
俺「こらこら、失礼だぞ」


10:デフォルトの名無しさん
07/02/18 00:52:47
>>9
ちょ、途中から自作自演w

11:デフォルトの名無しさん
07/02/18 00:55:25
ここまで点プレ

12:デフォルトの名無しさん
07/02/18 01:26:12
俺「お・に・い・ちゃん!」
俺「なんだ勝手に部屋に入っちゃだめだろ」
俺「えへへ…」
俺「あたし…知ってるんだよ…おにいちゃんのベットの下に…」
妹「あんた何やってるん?」




13:8
07/02/18 01:28:21
item.mask = LVIF_TEXT;
item.pszText = TEXT("aa");
item.iItem = 0;
item.iSubItem = 0;
ListView_InsertItem(List, &item);
item.mask = LVIF_TEXT;
item.pszText = TEXT("bb");
item.iItem = 0;
item.iSubItem = 1;
ListView_InsertItem(List, &item);
item.mask = LVIF_TEXT;
item.pszText = TEXT("cc");
item.iItem = 0;
item.iSubItem = 2;
ListView_InsertItem(List, &item);
item.mask = LVIF_TEXT;
item.pszText = TEXT("dd");
item.iItem = 0;
item.iSubItem = 3;
ListView_InsertItem(List, &item);


これで何で一番最初のカラムにしか文字がはいらないんだsdlgkj;あfwぇk;うぇふぃじこあ;sdlふぁうぇ

14:デフォルトの名無しさん
07/02/18 01:32:20
わっふるわっふる

15:デフォルトの名無しさん
07/02/18 01:37:10
>>13
iSubItem=1 以降は ListView_SetItem()

16:デフォルトの名無しさん
07/02/18 01:46:22
>>13
もしかして、LVCOLUMNってのか?

わっふるわっふる

17:8
07/02/18 01:54:09
>>15
ちょっと試してみます。

>>16
LVCOLUMNですが何か特別な問題でもあるんでしょうか?

18:8
07/02/18 01:59:46
できました。ありがとうございます

19:デフォルトの名無しさん
07/02/18 04:32:54
仕事でもなく寝ずにSDK書いてる俺ってもうダメかな?

20:19
07/02/18 04:33:49
もうすぐ日が昇ってくるぜ

21:19
07/02/18 04:36:18
反応が無いからなのか何故だかわからないが目の前のディスプレイが歪んできた

22:19
07/02/18 04:37:08
やっぱ誰もいないべな

23:19
07/02/18 04:40:32
もう疲れたし、オ○ニーでもして寝るか

24:19
07/02/18 04:45:52
仲間がいたぜwwwwwwww

25:デフォルトの名無しさん
07/02/18 04:55:28
SDKで書いてるなら、がんがれ
SDKを書いてるなら、もっとがんがれ

26:19
07/02/18 04:58:24
息抜きに続き考えたぜwwwwwww

俺「あっ・・・いや、学校での・・・・演劇の・・・練習をちょっと・・。」
妹「はっ?私もあんたと同じ学校だけどうちの学校に演劇部なんてないでしょ?」
俺「いやだかr」
妹「あんたさー。妄想するのは勝手だけど私をネタにするのはやめてくれる?(笑)」
妹「この・・・邪気眼が!!!!!!!!!!」
バタンッ・・・


俺「やれやれ、もう少しで俺の手が暴れだす所だったぜw」



















俺「・・・・・・アッー!!!」


27:19
07/02/18 05:01:30
>>26
この人頭大丈夫? もう寝ろって。

28:19
07/02/18 05:04:53
すんませんwwwwwwwww
もう寝れない時間まで起きてしまいました
今日仕事で今寝ると絶対遅刻しちゃってそりゃもう大変な事になってしまいます

29:19
07/02/18 05:10:44
それじゃ、もう寝るです。おやすみなさい。

30:19
07/02/18 06:05:37
おはようおまえら

31:デフォルトの名無しさん
07/02/18 07:37:38
Win32API始めたばかりです。
下の三つのファイルにわけてメインのウインドウの
メニュー画面で選択したら時計画面が起動するように
したいのですがどうすればよいのでしょうか?


URLリンク(sa-wiki.com)

32:デフォルトの名無しさん
07/02/18 08:05:24
>>31日本語でおk

33:19
07/02/18 08:30:22
あ、プリキュア見なきゃ

34:19
07/02/18 08:33:42
おお、いかんいかん忘れるところだった㌧㌧

35:デフォルトの名無しさん
07/02/18 09:58:00
裏切派遣って知ってる?
元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて、派遣やってるバカのことw

前の会社を裏切り、結局派遣先からも騙されてる。
そもそも信頼されてるなら直接契約するか正社員にするはずだが、派遣会社経由って舐められ杉

自分でも騙され裏切れられることは薄々わかったるから派遣問題の話が出るとウッキー!って逆ギレw


36:19
07/02/18 10:09:54
何人いるんだよwwwwwwwwww

37:デフォルトの名無しさん
07/02/18 14:13:27
CTRL+ALT+DELをプログラムからPCに送る方法ありませんか?
keybd_eventやVNCがやってる方法では期待する動作になりませんでした。
単にタスクマネージャーを出したいわけではなく、割り込みを発生させたいのです。


38:デフォルトの名無しさん
07/02/18 14:16:37
その質問どこかで見た

39:デフォルトの名無しさん
07/02/18 14:28:15
>>38
前スレの最期の方の質問。

お  ま  え  ら  カ  チ  ン  と  来  る  な  よ  !

40:31
07/02/18 16:04:04
たびたび申し訳ない。
WINXPでWIN32プログラムの質問です。
下のコードでメニュー画面からアナログ時計画面を
出した後、アナログ時計画面を閉じて再度メニュー画面から
アナログ時計画面を選択しても無反応です。
何回でも表示することができるようにしたいのですが
どなたかご教授いただけんだろうか。

URLリンク(sa-wiki.com)




41:デフォルトの名無しさん
07/02/18 16:10:19
sageろ低脳

42:デフォルトの名無しさん
07/02/18 16:18:02
>>40
アナログ時計画面を閉じた時点で、アナログ時計画面が破棄されている。

メニュー選択時に作成するようにするとか、
アナログ時計画面のWM_CLOSEで、ShowWindowで隠すだけにして、DestoroyWindowしない。

43:31
07/02/18 16:50:47
>>42
解決しました、どうもありがとう!!!


44:デフォルトの名無しさん
07/02/18 20:15:10
>37
割り込みを発生させたい、の意味が分からん。

45:デフォルトの名無しさん
07/02/18 21:26:24
システムがヒィヒィ言ってるときでも速やかに応答させたいんじゃないの

46:デフォルトの名無しさん
07/02/18 21:29:41
今、彼女をヒィヒィ言わせてますが何か?

47:46
07/02/18 21:38:10
昨日、仕事から帰ってきた姉に、オナニー見られて大爆笑された。
その後、部屋に真っ赤になって閉じこもってたら、 姉から携帯にメールがあって、
「あたしも毎日やってるんだから気にするな!ファイト!!」 って書いてあった。



48:デフォルトの名無しさん
07/02/18 21:49:12
素朴な疑問なんだけどCTRL+ALT+DELとかALT+TABってシステムコールなん?

49:デフォルトの名無しさん
07/02/18 21:56:59
SAS。winlogonが最優先で奪取するキーの組み合わせ。

50:デフォルトの名無しさん
07/02/18 22:00:12
仮想空間アドレスがどの物理メモリに割り当てられているか知る術がありますか。

51:デフォルトの名無しさん
07/02/18 22:05:49
>>47
ワッフルワッフル


52:デフォルトの名無しさん
07/02/18 22:06:30
>>50
マルチ
スレリンク(tech板:444番)

53:デフォルトの名無しさん
07/02/18 22:16:46
Win32APIのレベルでは、「知ってどうするの?」だなー。

54:デフォルトの名無しさん
07/02/18 22:25:44
>>49
サンクス
つまりwinlogonにTerminateProcessするとunknown hard errorになる代わりに
CTRL+ALT+DELを横取りされなくなるんですね

55:デフォルトの名無しさん
07/02/18 22:54:36
確かに横取りは出来なくなると思うが、それはOSが落ちる事を意味するのでは?
一度試してみれ。


56:デフォルトの名無しさん
07/02/18 22:58:06
マジレスされちゃったので答えとくと当然青画面になるよ

57:デフォルトの名無しさん
07/02/18 23:38:08
BSODってドライバ以外から作り出せるのかね

58:デフォルトの名無しさん
07/02/19 00:13:44

GetFontUnicodeRanges( dc , NULL )が返す値について教えて下さい

cRangesの値が4でWCRANGEの0~3が下記のような値が得られました。

ranges[0].wcLow = 0x0000
ranges[0].cGlyphs = 0x0081
ranges[1].wcLow = 0xf8f0
ranges[1].cGlyphs = 0x0004
ranges[2].wcLow = 0xff61
ranges[2].cGlyphs = 0x003f
ranges[3].wcLow = 0xffff
ranges[3].cGlyphs = 0x0001

平仮名の'あ'(0x3042)は、得られたWCRANGEのいづれにも
含まれないのでTextOutでの表示はできないと思っていた
のですが、問題なく'あ'が表示できます。

現在選択中フォントのUNICODE文字有無は、GetFontUnicodeRanges()では
できないのでしょうか?

環境は、Windows2000+VC6+SP6です。

59:デフォルトの名無しさん
07/02/19 00:27:23
自分でペイントで作ったマウスカーソルを使いたいのですが
調べてもよく方法がわかりませんでした
よろしければ教えてください

60:19
07/02/19 00:29:33
>>59
まずはリソースエディタについて調べろ。

61:デフォルトの名無しさん
07/02/19 02:02:42
>58
フォントリンクがあるからねぇ。

62:567
07/02/19 06:28:56
おまいら久しぶり

63:デフォルトの名無しさん
07/02/19 09:17:51
>61

そうなると任意のunicode文字が表示可能かを判断する方法は
フォントリンクまでたどらないと判別できないという事ですね?

なんか単純な方法は、ないかなぁ・・・


64:デフォルトの名無しさん
07/02/19 09:40:49
DrawText で DT_CALCRECT 矩形サイズなり LastError なりで判定できないもんかな?

65:デフォルトの名無しさん
07/02/19 12:40:27
>>63
要点が見えないんだが・・・
もう少し詳しく説明してくれね?

何をしたいのか、命題はいかに?

66:デフォルトの名無しさん
07/02/19 12:55:05
>>65

やりたい事は、「表示しようとしているunicode文字が
現在のフォントで表示できるか判断したい」です。

表示しようとしているunicode文字が現在フォントに
グリフが無ければ代替文字(×マークとか?記号とか)にして
存在すればそのまま表示したいのです。

67:デフォルトの名無しさん
07/02/19 13:45:00
サービスの ServiceMain コールバック関数に、
ユーザー定義データを渡せないのは痛いね。
オブジェクト指向化しにくいね。みんなどうやってる?

68:デフォルトの名無しさん
07/02/19 14:41:21
ドライブレターを割り当てていないパーティションがあって、
そのパーティションにアクセスしたい(そのパーティションの情報を取得したい)
どうすればできますか?

無理なら無理矢理空いているドライブレターを割り当ててそこから情報を取得
すればいいと思うけど、割り当てをプログラム上からできるのかしら・・・?


69:デフォルトの名無しさん
07/02/19 14:58:57
FindFirstVolume、FindNextVolume でみつかる?

70:デフォルトの名無しさん
07/02/19 16:04:49
>>69
ボリューム名は取得できました。
そこからはどうすればいいでしょうか?
QueryDosDeviceでデバイスを取得して、そのデバイスをCreateFileで開いてハンドルを
取得してDeviceIoControlで情報取得しょうか?


71:デフォルトの名無しさん
07/02/19 16:35:47
TransparentBltやAlphaBlendはWindowsMeでは機能しないんですか?

72:デフォルトの名無しさん
07/02/19 17:09:36
たしかにMSDNライブラリを見るとWindows 2000からと書いてあるね。

73:デフォルトの名無しさん
07/02/19 18:17:27
Windows98/SEでTransparentBltを使うとすごい勢いでGDIハンドルが増加していくんだよな
Meでは使い物になるんだろうか

74:デフォルトの名無しさん
07/02/19 18:33:25
>>70
それでいけると思う。
末尾の \ は消さないとCreateFile()で失敗するかも。
あとOSによって差が大きかった気がする。

75:デフォルトの名無しさん
07/02/19 19:36:37
>>72
英語版を読むと、98/MEもいけそうだよね

76:デフォルトの名無しさん
07/02/19 20:24:19
コードが配置されてる先頭のアドレスが知りたいのですがうまくできせん

CONTEXT c = {0};
c.ContextFlags = CONTEXT_CONTROL;
GetThreadContext(hThread, &c);

LDT_ENTRY ldt = {0};
GetThreadSelectorEntry(hThread, c.SegCs, &ldt);

77:デフォルトの名無しさん
07/02/19 20:39:29
そのアドレス、って何アドレスだ? 物理か?セグメント相対か?

78:デフォルトの名無しさん
07/02/19 21:13:26
質問です。
親ウインドウから子ウインドウを起動させて、子ウインドウを終了させると
親ウインドウがアクティブウインドウになってくれず他のウインドウの
下に隠れてしまいます。親ウインドウがアクティブになる方法を
教えてちょんまげ。

79:デフォルトの名無しさん
07/02/19 21:19:27
ちょんまげにキレた。子ウィンドウ終了時にShowWindowじゃダメなのか。


80:デフォルトの名無しさん
07/02/19 21:49:29
>>76
PEヘッダに書いてあるベースアドレス+セクションの仮想アドレスで求まる。
コードサイズも同じ場所の仮想サイズから特定できる。
exeが読めない状況でもPEヘッダ自身はベースアドレスにロードされてる。
ほとんどの場合は上記の方法で判るが、意地の悪いプログラムだと
デバッガを化かすコードが入ってたりするので、実際のコードの開始
アドレスはプログラム毎に任意と考えるべき。
信用して良いのはGetThreadContextで得たEip以降のコード。

81:デフォルトの名無しさん
07/02/19 22:00:13
ウィンドウを終了、tぽいう表現に違和感を感じる今日この頃。

82:デフォルトの名無しさん
07/02/19 22:01:03
書き忘れてたけどベースアドレスはGetModuleHandleで判るからね。

83:デフォルトの名無しさん
07/02/19 22:19:06
>>78
Owned Windowは、WS_POPUPにすべし

84:デフォルトの名無しさん
07/02/19 22:37:14
“普通”の、例えばMFCを中心に使っている初級Windowsプログラマが見て
「そこまでトリッキーなことはしていなさそう」と感じる程度の
アプリケーションを開発する上で、
>>80みたいな知識が必要になることってどれくらいあるんですか?
1.他プロセスにアタッチするようなアプリケーションはかなり特殊な
  存在であって、「普通の」アプリ開発者とは接点がない
2.普段は使わない知識だが、時々必要になることがあるので
  こうして質問する人がやって来る
3.実はWindowsでプログラムを書く上では割と基本的な知識

85:デフォルトの名無しさん
07/02/19 22:39:44
他のアプリケーションに介入して弄り回したいときとかは、場合によっては
必要になることもあるかもしれない。詳しく知っててモノ書いてる連中は
だいたいMVP持ってたりするな。

86:デフォルトの名無しさん
07/02/19 22:41:35
俺は1だと思うが、2だと言う意見の人がそれなりにいてもおかしくないとは思う。
それに実際必要かどうかはともかく80くらいは豆知識として知っていておいて損はない。

87:デフォルトの名無しさん
07/02/19 22:49:21
勘違いでなければ多分こんなの?

DWORD dwDummy;
IMAGE_DOS_HEADER dos;
IMAGE_NT_HEADERS nt;
if ( ::ReadFile(hFile, &dos, sizeof(IMAGE_DOS_HEADER), &dwDummy, NULL) // DOSセクション分読む
  && dos.e_magic == IMAGE_DOS_SIGNATURE  // DOSですか?
  && ::SetFilePointer(hFile, dos.e_lfanew, NULL, FILE_BEGIN)          // dos.e_lfanew==エントリーポイント
  && ::ReadFile(hFile, &nt, sizeof(IMAGE_NT_HEADERS), &dwDummy, NULL) // PEセクション分読む
  && nt.Signature == IMAGE_NT_SIGNATURE )      // PEですか?
{
  entryPoint = nt.OptionalHeader.ImageBase + nt.OptionalHeader.AddressOfEntryPoint;
}

俺はそれよりGetThreadSelectorEntryの使い道が全く判らない

88:デフォルトの名無しさん
07/02/19 22:49:34
1であり2である

89:デフォルトの名無しさん
07/02/19 22:50:23
>>84
2かな。他プロセスに干渉するアプリは確かに特殊な部類ではあるけど
必要に迫られて使うことって結構あると思うし。
WindowsプログラミングするならAdvanced Windowsは持っといて損は無いと思うよ。
全部理解するのに余裕で2ヶ月とかかかるけど。学生ならそのうちにやっとくのも良し。


90:デフォルトの名無しさん
07/02/19 22:52:39
>>85-86
他プロセスへのAPIフックぐらいなら出来るのですが、
それがどうしても必要になるといった状況にはなかなか出会ったことがなくて、
しかしこのスレにはかなりの頻度で他プロセスが絡む質問が出てくるので
疑問に思って質問させていただきました。
何にせよ、知っていて損はしないので、ぼちぼち覚えていこうと思います。
ありがとうございました。

91:デフォルトの名無しさん
07/02/19 22:53:37
>>75
ただしWin98のAlphaBlendはバグ持ちなので実質的に使えない。
(WinMeでは修正されてる)
>>87
WOW32とかOS/2サブシステムとかで必要だったものをついでにWin32にも
開放してみたという感じかと

92:デフォルトの名無しさん
07/02/19 22:54:05
自分以外の指定したウインドウが更新されたかどうかと、その更新された
領域を知りたいと思っています。SetWindowsHookEx()を使ってWM_PAINTを
フックしているのですが、監視対象の子ウインドウが更新されたかどうか
まではわからないようです。この場合、子ウインドウも全てフックして
やるしかないのでしょうか?

93:デフォルトの名無しさん
07/02/19 22:55:03
つーかAlphaBlendなんて自前でやるもんだろ
フルスクラッチ(ryでも買って読めば誰でもできるし

94:デフォルトの名無しさん
07/02/19 22:57:41
>>89
"Advanced Windows"、興味は前々から持っていたのですが
いかんせん自腹で買うのには少々高くて二の足を踏んでいました。
これを機に検討してみます。。

95:デフォルトの名無しさん
07/02/19 22:59:36
昔VIPのプログラムやろうぜスレにSSE2使った
アルファブレンドのソースがあってたまげたの思い出した。

96:デフォルトの名無しさん
07/02/19 23:07:24
>>93
kwsk

97:デフォルトの名無しさん
07/02/19 23:12:39
>>91
そういう理屈なのかー
なんかPEB拾うとかいう用途はあるみたいだけどNtQueryでできるし

98:デフォルトの名無しさん
07/02/20 00:24:30
俺「なー姉貴。ReadFileEx関数の、最後の引数なんだよ?」
姉「あぁそれね・・・完了ルーチンのポインタなんよ」
俺「へ?」
姉「読込処理が終わった時に呼ばれる、完了ルーチンのポ・・・・ぽ」
(急に小声)
俺「?」
姉「終わったときに呼ばれる関数のポインタ!!。変なこと聞かないデ!!」
(なぜかプリプリ怒ってる)

99:デフォルトの名無しさん
07/02/20 00:37:06
やあ義弟

100:デフォルトの名無しさん
07/02/20 00:43:05
くだらねーwww

101:デフォルトの名無しさん
07/02/20 00:52:17
チンポイン

102:デフォルトの名無しさん
07/02/20 01:33:00
日本にWin32について語れる姉弟が何組いるのか

103:デフォルトの名無しさん
07/02/20 04:02:11
わっふるわっふる

104:デフォルトの名無しさん
07/02/20 04:05:01
アルファブレンドって、何かうまそうじゃね?
秋葉でカフェオレとかをアルファブレンドコーヒーに名前変えたら売れね?

105:デフォルトの名無しさん
07/02/20 04:55:37
ここにアルファー

106:78
07/02/20 06:43:35
>>79 >>83
レスありがとお。試してみます!!

107:デフォルトの名無しさん
07/02/20 07:26:33
>>96
フルスクラッチによるグラフィックスプログラミング入門
秀和システム発行

108:デフォルトの名無しさん
07/02/20 07:35:39
>>107
thx

109:デフォルトの名無しさん
07/02/20 09:23:18
3つのSTATICの子ウインドウを作ってサブクラス化し、ひとつのプロシージャで
処理をしたいと思っています。
どのウインドから飛んできたのかを知りたいのですが、どのパラメータを見たら
それがわかるのでしょうか?

質問の仕方がわかりづらければ申し訳ありません。
解ればお教えください。

110:デフォルトの名無しさん
07/02/20 09:39:07
HWNDが違うんじゃないの?

111:デフォルトの名無しさん
07/02/20 09:51:04
HWNDで判断するしかないのでしょうか?

CreateWindow時の子ウィンドウIDを取得する方法がないでしょうか?
という質問の仕方に気づかず余計な回答をさせてしまって申し訳ありません。

今もGoogleで調べているのですが、ちょっと難しくてなかなか回答に
たどり着くことができていません。

112:デフォルトの名無しさん
07/02/20 10:01:04
あなたの日本語がわかりません。

113:デフォルトの名無しさん
07/02/20 10:05:09
>>111
質問読まず書き子
メニューのリソースIDで判別できるんじゃね?

114:デフォルトの名無しさん
07/02/20 10:12:22
>>111
GetWindowLong(hWnd, GWL_ID)

115:デフォルトの名無しさん
07/02/20 10:13:31
>>113
質問の仕方がわるくて本当に申し訳ありません。
それです。
それを取得する方法を探しています。
勉強をはじめたばかりで回答になかなかたどり着けなくて・・・。

116:デフォルトの名無しさん
07/02/20 10:15:36
>>111
いまいち、何を言いたいのか見えてこないが

たぶん、GetWindowLongでGWL_ID

117:デフォルトの名無しさん
07/02/20 10:16:38
>>114
ありがとうございました。

118:デフォルトの名無しさん
07/02/20 10:22:39
>>116
サンプルを作って試してみました。
その方法を探していました。
回答ありがとうございました。

119:デフォルトの名無しさん
07/02/20 12:37:31
ウインドウの上からマウスが外れたときに検地するにはどうしたら良いでしょうか?

120:デフォルトの名無しさん
07/02/20 12:40:40
>>119
日本語が不自由だとなにかと不便だよね。
日本での生活は辛いかも知れないけど、母国のことを思い出してがんばってね。

121:デフォルトの名無しさん
07/02/20 12:41:23
>>119
>検地
歴史書を紐解くといいと思います。

122:デフォルトの名無しさん
07/02/20 12:58:46
TrackMouseEventが使いにくいからといってフックしたり常時監視したりするアホ

123:デフォルトの名無しさん
07/02/20 13:34:22
ウィンドウに乗っているコントロールに対して
透過でフェードアウトを実装する事は可能でしょうか?

AnimateWindow
SetLayeredWindowAttributes

あたりで可能でしょうか?
見た感じでは、Window限定のような気がするのですが・・・。

124:デフォルトの名無しさん
07/02/20 16:43:37
GDIで透過色付きで且つ半透明なものを描画しようと思うんですが、
ワーキングメモリとしてのビットマップは静的にある程度の大きさを持つものを予め用意しておくか、
描画用の、AlphaBlend等のAPIをラップした関数を呼び出すたびにその関数のスコープ内部で済ませるか迷っているんですが、
前者の場合は始終無視できない程度のメモリが占有される事が、
後者の場合は関数呼び出しのたびのオーバーヘッドの事が心配で一向に開発が進みません。
普通はどうするんでしょうか。

125:デフォルトの名無しさん
07/02/20 16:56:01
まず以下のことを明確にせよ。
無視できない程度のメモリは何メガなのか?
無視できる程度のメモリは何メガなのか?


126:デフォルトの名無しさん
07/02/20 17:05:02
>>124
普通はそれぞれどの程度の問題になるのか数値化して検討する。

いや、寧ろこんなところで聞かない。

127:デフォルトの名無しさん
07/02/20 17:05:36
静的に確保するとすれば、512KB以上は無視できない。
関数のオーバーヘッドは、1KB以上であれば無視できない。

128:デフォルトの名無しさん
07/02/20 17:14:47
ばーか

129:デフォルトの名無しさん
07/02/20 17:28:33
そろそろカチンときそうです。

130:デフォルトの名無しさん
07/02/20 17:34:52
>>124
その描画関数がどんなタイミングでどの程度呼ばれることになるのか?
とかも考えましょう。アプリケーション自体の寿命に対して局所的かつ連続して呼ばれる
なら初期化関数、描画関数、終了関数に分けて以下のようにするとか。
初期化関数()
 描画関数()
 ...
 描画関数()
終了関数()

131:デフォルトの名無しさん
07/02/20 17:45:38
親ウインドウに子ウインドウは貼り付けて、子ウインドウだけを
半透明にさせることって出来ますか?
ウインドウ全体を半透明にするのは簡単に出来たのですが、
子ウインドウだけってのは無理でした。
自分のソースが間違っているのか、そもそも無理なのか
解らないので知っていたら教えてください。

132:デフォルトの名無しさん
07/02/20 17:53:13
みんな!
あたしの為の、カチンとならないで!!

133:デフォルトの名無しさん
07/02/20 18:14:10
VistaでCSIDL_PROFILE の仮想フォルダ のCSIDLってないですか?

134:デフォルトの名無しさん
07/02/20 18:23:59
Win32APIの32とはなにですか?しりたいのです。

135:デフォルトの名無しさん
07/02/20 18:26:47
16の倍で、64のちょうど半分です

136:デフォルトの名無しさん
07/02/20 18:29:26
丁度指が足りなくなる数

137:デフォルトの名無しさん
07/02/20 18:31:48
ゲイツ「えと、なんとなく…」

138:デフォルトの名無しさん
07/02/20 18:33:30
√1024

美しいと思わないかね?

139:デフォルトの名無しさん
07/02/20 18:36:01
Win32は32ビットCPUを対象として開発されたものだから32ビットの32。
当然Win16もあった。

x64やIteniumのはWin64かと思いきゃ、
Win32 for 64-bit Windowsという呼称が一部で見受けられる。
(無論WOW64のことではない)

140:デフォルトの名無しさん
07/02/20 18:44:42
ゲイツ「そうだったんだー、へー」

141:デフォルトの名無しさん
07/02/20 18:51:18
質問箱って書いてありますが、ここ、箱じゃないですよね。
なのに何で箱なんですか?
タイトル名からうそをついているようではとてもじゃないけどうその答えを
返されそうで質問できません。

142:デフォルトの名無しさん
07/02/20 18:54:26
日本語でおk

143:デフォルトの名無しさん
07/02/20 18:54:46
おまえさんは箱の定義を勘違いしてるんだろう。

144:デフォルトの名無しさん
07/02/20 18:56:50
ネタにマジレスってカッコイイよね

145:デフォルトの名無しさん
07/02/20 18:57:50
pc10 (banana313) も↓こんな感じでしょ。 箱詰めぎっちりだわさ
URLリンク(www.maido3.com)

146:デフォルトの名無しさん
07/02/20 19:31:48
質問できないといいつつ、質問してるのはお約束だな。

147:デフォルトの名無しさん
07/02/20 20:11:50
>>141
君はこのスレは箱ではないと思っているから、ここは箱ではないんだ。
ここが箱でない以上それは尤もな考え方であって、つまりここは箱ではないんだ。
しかし、よくよく考え直してみてくれ。ここが箱であったっていいじゃないか。
そういうわけで、仮にこのスレが箱だとしてみると、君の考え方は間違っていることになる。
それは即ちここが箱であるということに他ならず、仮定は正しかったということになるんだ。

148:78
07/02/20 20:31:23
何度もすんまそん。
子ウインドウのテキストエディタを終了させた後、親ウインドウが
アクティブにならず他のウインドウの下に隠れてしまって悩んでいます。
親ウインドウアクティブにて戻るにはどうすればよいのでしょうか。

URLリンク(sa-wiki.com)

149:133
07/02/20 20:59:20
自己解決しました。
FOLDERID_UsersFilesですね。

しかし糞スレだな

150:デフォルトの名無しさん
07/02/20 21:05:37
はこ 【箱/▼函/▼筥/▼匣/▼筐】

(5)厠(かわや)に置いて大便を受けるもの。しのはこ。また、大便。
「―すべからず/宇治拾遺 5」

151:デフォルトの名無しさん
07/02/20 21:59:57
>>141
そうか

152:デフォルトの名無しさん
07/02/20 22:19:51
キャスト以外の方法で、
整数を受け取って席轍に変換されたvoid*を返すようなAPIってありますか?

153:デフォルトの名無しさん
07/02/20 22:20:54
席轍→適切のミスです 

154:デフォルトの名無しさん
07/02/20 22:22:39
意味不明

155:デフォルトの名無しさん
07/02/20 22:24:46
そもそも整数はデータ表現の問題で、キャストはコンパイラと言語仕様の問題、
それがAPIと何の関係があるんだ?

156:19
07/02/20 22:25:35
>>152
つ union

157:デフォルトの名無しさん
07/02/20 22:29:07
うん、つっこまれて気づいた ごめんなさい

158:デフォルトの名無しさん
07/02/20 22:43:05
>>152
つ TlsGetValue

159:デフォルトの名無しさん
07/02/20 23:52:34
>>121
日本語が不自由な奴に秀吉見せたらファビョるぞ

160:デフォルトの名無しさん
07/02/21 03:41:03
サウンド機能についてです。
色々なメディアプレイヤーを使っていると
勝手に音量の位置が変わってしまいます。
これを固定とかしようと思うのですが
どうすればいいですか?

既存ソフトだと細かい事ができないので
自分で何とかしたい訳ですが・・・


161:デフォルトの名無しさん
07/02/21 03:53:33
>>160
mixerOpen

162:デフォルトの名無しさん
07/02/21 07:41:42
ミキサー勝手に弄るアプリは死んで良いと思う今日この頃。

163:デフォルトの名無しさん
07/02/21 08:14:42
>>162
RealOneとかどうにかしてよw

164:デフォルトの名無しさん
07/02/21 08:40:10
>>160
VISTAに移行しるw

165:デフォルトの名無しさん
07/02/21 13:16:58
サブクラス化したSTATICでTrackMouseEventでウインドウからマウスが外れたことを
知りたいと思うのですが、プロシージャのどの部分でTrackMouseEventを
設定すればよいのか、またメッセージのWM_MOUSELEAVEをどこで受け取ればよいのか
が解りません。

サブクラス化が良く理解できていないのは解りますが、理解の助けになる、
もしくはマウスが外れたことを知る方法の参考になるサイトなどがありましたら
教えてください。

166:デフォルトの名無しさん
07/02/21 13:44:41
サブクラス化
URLリンク(wisdom.sakura.ne.jp)

ここを参考にSTATICのサブクラス化を学んでいます。
サブクラス化したプロシージャでマウスの左ボタンを押したことを
GetKeyState(VK_LBUTTON)にて検知していますが、switch (msg)で
case WM_LBUTTONDOWN:を使って検知することはできませんでした。
WM_LBUTTONDOWNなどのメッセージを受け取るにはどうするのでしょうか?

WM_MOUSEMOVEなどのメッセージを受け取りたいと考えていますが、
何から理解していけば良いのか途方にくれています。
ご助言をお願いします。

167:デフォルトの名無しさん
07/02/21 19:21:36
たぶんSTATICでメッセージ受けるのはサブクラス化以前で説明済みなんだろうな

168:デフォルトの名無しさん
07/02/21 20:02:19
>>76とか>>80とかを見て実験してみようと思って
IMAGE_DOS_HEADER dos = {0};
ReadProcessMemory(proc, (LPCVOID)base, &dos, sizeof(dos), &bytes);
if(sizeof(dos) != bytes || dos.e_magic != IMAGE_DOS_SIGNATURE)
 return false;

bytes = 0;
IMAGE_NT_HEADERS pe = {0};
ReadProcessMemory(proc, (LPCVOID)(base + dos.e_lfanew), &pe, sizeof(pe), &bytes);
if(sizeof(pe) != bytes || pe.Signature != IMAGE_NT_SIGNATURE)
 return false;

ULONG64 start = pe.OptionalHeader.ImageBase+pe.OptionalHeader.BaseOfCode;
ULONG64 end = start+pe.OptionalHeader.SizeOfCode;
std::cout << (void*)start << " -> " << (void*)end << std::endl;
とコードを書いて実行したら0x00401000 -> 0x0048e000と表示されたのだが0x0048e000以降も関数が配置されてるorz. なにか勘違いしちゃってますか?
ちなみにターゲットはVC7.1で作った、いたって標準的なHelloWorldです

169:デフォルトの名無しさん
07/02/21 21:22:09
>>168
アドレスの計算の仕方はそれで合ってる。
ただしそのサイズはアラインメントされたサイズなので、
仮想メモリにマップ後の実際のコードサイズの値は、
セクション毎のVirtualSizeを見ないとわからんよ。
普通のコードセクション(.text)なら
SizeOfCode == SizeOfRawData >= VirtualSizeだから、
大よそが判れば良いなら>>168の方法でもいいけど、
SizeOfRawData < VirtualSizeもありうる。

>以降も関数が配置されてる
これはどういう方法で確認してる?
実際の所コンパイルオプション見ないとわからんけど、
インポートアドレステーブルだったり他のセクションが
混ざってるとかじゃないかね。
OptionalHeaderだけじゃなくてその後のセクションの
情報も見て位置を把握しないと判りづらいと思うよ。

170:168
07/02/21 22:29:37
>>169 ありがとうございます
IMAGE_SECTION_HEADERから得られた情報でいけそうです

IMAGE_SECTION_HEADER::Nameによると名前にtextが含まれるセクションが2つありました (.textbssと.text
startに.textbssのIMAGE_SECTION_HEADER::VirtualAddress+base
endに.textのIMAGE_SECTION_HEADER::VirtualAddress+IMAGE_SECTION_HEADER::.Misc.VirtualSize+base
としたところ列挙された関数をすべて含むことが確認できました
関数列挙にはSymNextを使いました

しかしSizeOfCodeは信用ならんとして関数が配置されてるアドレス範囲をしらべるには
IMAGE_SECTION_HEADER::Nameに"text"が含まれるかどうかみたいな判定をしてごにょごにょみたいな方法しかないのかな。。。

171:デフォルトの名無しさん
07/02/21 22:33:02
printf風にデバッガに出力するコードを考えたんだが
これだと小数を出力できない。。。
小数もOKにしたいのだけどどうしたらいいですか?

void DebugPrintf(LPSTR lpszFormat, ...)
{
LPSTR *lplpParam;
static char szTextBuff[128];
lplpParam = ((LPSTR *)&lpszFormat) + 1;
wvsprintf(szTextBuff, lpszFormat, (LPSTR)lplpParam);

OutputDebugString(szTextBuff);
}

172:デフォルトの名無しさん
07/02/21 22:36:07
APIのは対応してないと明示されてるので、諦めてCRTのvswprintfを使う。

173:デフォルトの名無しさん
07/02/21 22:37:20
>>171
っ stdarg.h
っ va_start
っ va_end

174:デフォルトの名無しさん
07/02/21 22:37:39
すでにAPI関係ないな

175:デフォルトの名無しさん
07/02/22 01:24:11
>>172

vsprintfにするだけでよかったのか
アリガトン

switch文で
%fの場合、
%sの場合、
とかめんどいことして対処してたorz

176:デフォルトの名無しさん
07/02/22 11:45:38
ウィンドウをTOPMOSTに変更し、サイズをデスクトップと同じにするとフルスクリーンの表示ができます
ですがフルスクリーンに切り替わった時、タスクバーの表示が消えるのが一拍遅れます

実際メディアプレイヤーなんかだとフルスクリーンは瞬時に切り替わりますし、ちょっと気になります
APIの呼び出し順とかに問題があるんでしょうか
切替は同一関数内で以下のような呼び出しで行っています

CRect rect;
GetDesktopWindow()->GetWindowRect(rect);
SetWindowLong(m_hWnd, GWL_STYLE, WS_POPUP|WS_VISIBLE);
SetWindowPos(&CWnd::wndTop, 0, 0, rect.Width(), rect.Height(), SWP_SHOWWINDOW);

ちなみにソースはMFCです


177:デフォルトの名無しさん
07/02/22 12:45:27
メディアプレイヤーのフルスクリーンは DirectX のフルスクリーンモードではないかと…

178:デフォルトの名無しさん
07/02/22 12:52:38
DirectXの切替だと結構もっさりするんですよね
デスクトップの解像度と同じで切り替えたとしてももっさり
調べてるわけじゃないけどメディアは瞬時に切り替えてるからDirectXじゃないんじゃないかな

179:デフォルトの名無しさん
07/02/22 13:13:25
いや、Media Playerは少なくともDirectShowを使っている。

180:デフォルトの名無しさん
07/02/22 13:30:01
論点が滅茶苦茶だな。

ハードウエアの解像度変更と、ソフトウエアでのスケーリングを混同するな。

181:デフォルトの名無しさん
07/02/22 13:55:18
>>178は「モニターの解像度切り替えと似てもっさりしてる」と言ってるだけで
同列に扱ってるわけじゃないと思うんだけど、違うのかな

182:デフォルトの名無しさん
07/02/22 14:14:35
>>181
デスクトップの解像度でD3Dフルスクリ-ン と
コンテンツの解像度でD3Dフルスクリ-ン とでは微妙に違う。

183:デフォルトの名無しさん
07/02/22 14:30:13
>>179
あぁすまん、DirectShowは使ってると思う。
>>178はDirectGraphicsのCreateDevice()のフルスクリーン切替は使ってないんじゃない?
と言いたかった

>>180
誰あてのレス?

>>181
そう、その通り

>>182
IDirect3DDevice9::CreateDevice()を使った切替ではデスクトップ/コンテンツの解像度に
よる違いって殆ど感じられなかったけど。(両方もっさり)


184:182
07/02/22 14:36:50
>>183
そっか。
profile 取って、どこが遅いか見たほうが良いかもしれないし、
>>176 コードをベースに悪あがきするのも良い

185:178
07/02/22 14:42:01
ちょっと勘違い、再確認したら

IDirect3DDevice9::CreateDevice()でのフルスクリーン切り替えはもっさりしてない
というか一瞬ブラックアウトして、描画が復帰するまで一呼吸いるだけ
>>176 で単にTOPMOSTにするだけならブラックアウトしないってだけだった

メディアプレイヤーもフルスクリーン切替時に背景ブラックだしDirectGraphicsでフルにしてんのかな



186:デフォルトの名無しさん
07/02/22 16:09:02
画面いっぱいに窓広げているだけだろ。アフォか?

187:デフォルトの名無しさん
07/02/22 16:52:55
なら >>176 に回答してみろ、できなきゃオマエが真性アフォ

188:デフォルトの名無しさん
07/02/22 17:20:05
馬鹿バッカー

189:デフォルトの名無しさん
07/02/22 18:18:32
SetWindowPosの使い方が間違っている。HWND_TOPMOSTを指定しろ。というか全画面はこれが常識。
APIリファレンスも見ない馬鹿しかいないのか?

190:デフォルトの名無しさん
07/02/22 18:34:32
>>177が無知なくせに頓珍漢なことを言うから変な流れになるんだよ。

191:デフォルトの名無しさん
07/02/22 18:36:19
僕ハッカー

192:176
07/02/22 18:37:49
>>189
うぉぅっ、CWnd::wndTopMostを指定してるもんだとばかり思ってた
これは恥かしい、ありがとう解決した

挙動も意図したものになったよ

193:デフォルトの名無しさん
07/02/22 18:40:51
ウィンドウが全画面になった後、タスクバーがあった場所に
自分の描画をするのがもっさりしてるんじゃね?

194:デフォルトの名無しさん
07/02/22 19:20:10
インターネット回線や電話回線が
使える状態かどうかわかるAPIを教えてください

195:67
07/02/22 19:40:43
#シカトされたので再送
サービスの ServiceMain コールバック関数に、
ユーザー定義データを渡せないのは痛いね。
オブジェクト指向化しにくいね。みんなどうやってる?

196:デフォルトの名無しさん
07/02/22 19:43:55
質問です。
なぜ、構造体に、それ自身のサイズを代入しないといけないのですか?
xxxinst.dwSize = sizeof(xxx);
みたいにするなら、必要ないと思うのですが…

197:デフォルトの名無しさん
07/02/22 19:46:23
>>196
過去との互換性のため。
例えば、Rev1のときはサイズが100バイトだったのが、Rev2では120バイトになったりしたら、サイズがあれば便利。

198:デフォルトの名無しさん
07/02/22 19:46:56
>>196

>>197さんが言うように、
それで、構造体のバージョンを判別することもある。
DEVMODE,OSVERSIONINFOとかね

199:デフォルトの名無しさん
07/02/22 19:48:57
>>194
InternetAttemptConnect関数かな?

200:デフォルトの名無しさん
07/02/22 19:59:35
>>197
>>198
なるほど。んじゃあ、これってプログラマのためにある変数なんですか。
OSがメモリ確保するときに必要なわけじゃないんですね。

201:デフォルトの名無しさん
07/02/22 20:02:24
>>195
ドキュメント嫁

202:デフォルトの名無しさん
07/02/22 20:02:41
>>200
OS側で、どこまでのメンバをコピーすべきかの有効判別の意味が大きいかもにゃん。

203:デフォルトの名無しさん
07/02/22 20:22:12
>>196
例えば、OS側にお菓子レコードがあって、以下のデータがある場合・・・

|せ き は ら さ ゆ き 00|00 9E|00 50|00 3C|00 52|

SDK側のヘッダファイルは以下のように定義すれば楽珍なわけで。

typedef struct t_prf{
 WORD cSize;
 char Name[];
#if(WINVER >= 0x0400)
 WORD Height;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
 WORD Bust;
 WORD Waist;
 WORD Hip;
#endif
#endif
}PRF;



204:デフォルトの名無しさん
07/02/22 20:24:11
>>203

ちょwwww
志村!
志村!

char Name[8];

205:67
07/02/22 20:30:26
>>201
どこらへんを読んだらいいでしょうか。

206:デフォルトの名無しさん
07/02/22 21:07:13
>>205
まず、どこがどう分からないかを具体的に記しなさい。

207:デフォルトの名無しさん
07/02/22 21:12:21
サービスのインスタンスは1プログラム中に10も20もあったりしないと思うのだが。

208:デフォルトの名無しさん
07/02/22 21:35:07
サービス関係のAPIを一通り目を通せば、目的の物が見つかるはず。
読んでないから、わからないんだろ。

あと今でも使われている古きテクニックとしてはマシン語生成ってのもある。

209:デフォルトの名無しさん
07/02/22 21:35:55
svchost.exeみたいに、同一プロセスに複数のサービスがあるのならまだしも。

210:67
07/02/22 21:54:48
> サービスのインスタンスは1プログラム中に10も20もあったりしないと思うのだが。
いや、あるんですけど。

211:デフォルトの名無しさん
07/02/22 22:08:29
意味がわからんのだけど
ServiceMain内でインスタンス生成すればいいんじゃないの?

212:デフォルトの名無しさん
07/02/22 22:42:10
知識がないわけじゃないのに工夫ができない子はいらない子

213:デフォルトの名無しさん
07/02/22 22:48:27
何ができなくて困ってるのかよく解らん。
ユーザ定義データを渡せると仮定して、渡せないときに比べて何ができるようになる?

214:デフォルトの名無しさん
07/02/22 23:49:03
マウスの動作を拡張するソフトって、どうやってるんですか?
自分で登録したクラスなら、メッセージ取れるけど、
ほかのウィンドウクラスに送信されたメッセージって
メッセージキュー以前の段階でとらないといけいないですよね。

ヒントだけでもください。

215:デフォルトの名無しさん
07/02/23 00:14:34
Hook

216:デフォルトの名無しさん
07/02/23 00:18:28
>>214
SetWindowsHookEx
使うとか

217:デフォルトの名無しさん
07/02/23 01:10:03
どうも。

218:デフォルトの名無しさん
07/02/23 02:00:53
「オーナー描画ボタン」を少し改造しています。
URLリンク(wisdom.sakura.ne.jp)

大雑把にですが>>219のようなにしています。
処理 1の部分は実行されず、処理 2の部分だけが実行されます。
SubBtnProcのWM_DRAWITEM:の部分を消しても結果は同じです。
処理 1も処理 2も実行されると思っていたのですが、何故でしょう?

自分の理解はSetWindowLongでSubBtnProcに飛んで、引数をそのままDefBtnProcに
代入されている WndProcに飛ぶのだと思っていました。
どこを勘違いしているのかわかりませんので、どなたかご指摘をお願いします。


219:デフォルトの名無しさん
07/02/23 02:04:18
LRESULT CALLBACK SubBtnProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {

switch (msg) {
case WM_DRAWITEM:
~何かの処理 1~
return TRUE;
}
return CallWindowProc(DefBtnProc , hwnd , msg , wp , lp);
}

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {

switch (msg) {
case WM_CREATE:
hBT = CreateWindow(
TEXT("BUTTON") , TEXT("") ,
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,
0 , 0 , 400 , 100 , hwnd , (HMENU)1 ,
((LPCREATESTRUCT)(lp))->hInstance , NULL);

DefBtnProc = (WNDPROC)GetWindowLong(hBT, GWL_WNDPROC);
SetWindowLong(hBT, GWL_WNDPROC , (LONG)SubBtnProc);
return TRUE;
case WM_DRAWITEM:
~何かの処理 2~
return TRUE;
}
return DefWindowProc(hwnd , msg , wp , lp);

220:デフォルトの名無しさん
07/02/23 07:13:45
>>218
WM_DRAWITEMは親ウィンドウに送られてくるものなので、それでOK。

221:194
07/02/23 10:34:57
>>199
そういう感じのAPIで
繋がってる回線の数等わかるものはないですか?

222:デフォルトの名無しさん
07/02/23 11:36:46
>>221
WNetEnumResource関数も見たほうがいいかもね

223:デフォルトの名無しさん
07/02/23 11:42:44
>>222
それは違う関数だと思う。

>>221
WMIにあるかもね

224:デフォルトの名無しさん
07/02/23 11:54:36
繋がってる回線というのを具体的に定義すればわかるかもよ

225:デフォルトの名無しさん
07/02/23 11:59:37
繋がってるTCPコネクションの事なのか
LAN回線の接続数の事なのか

226:デフォルトの名無しさん
07/02/23 12:06:25
LANではなくて電話回線の数を数えたいのですが
WindowsのAPIで可能でしょうか?


227:194
07/02/23 12:37:30
>>225
両方とも教えてください

228:デフォルトの名無しさん
07/02/23 12:40:16
コンボボックスで今何番目の項目が選択されているか調べたいのですけど
どのようにすればいいでしょうか?

229:デフォルトの名無しさん
07/02/23 12:40:31
>>226
WMIでWin32_POTSModemクラスかな?

230:デフォルトの名無しさん
07/02/23 12:43:48
>>228
CB_GETCURSEL
メッセージ

231:228
07/02/23 12:52:48
ShowMessage( SendMessage(In,CB_GETCURSEL,0,0) );
試しでこんな風に書いてみたのですが、
0しか返ってきません。
書き方は間違ってませんよね?

232:デフォルトの名無しさん
07/02/23 14:30:36
In、て、なんだ、ハゲ。

233:デフォルトの名無しさん
07/02/23 14:50:25
ShowMessageって何かと思ったらbc++か

234:228
07/02/23 15:59:17
環境はC++Builder6
Inはただ適当につけたハンドルです。

235:デフォルトの名無しさん
07/02/23 16:04:30
で、Inはそのコンボボックスのハンドルなの?
いちおー、0は有効値(見つからないと-1)だから
ハンドルが違ってる可能性高い

236:デフォルトの名無しさん
07/02/23 16:29:13
EnterCriticalSection した後、
その中で CreateThread しても問題ない?

237:デフォルトの名無しさん
07/02/23 16:48:10
>>236
問題ない

238:デフォルトの名無しさん
07/02/23 17:29:06
根拠は?経験上?仕様上?

239:デフォルトの名無しさん
07/02/23 17:38:41
そもそもクリティカルセクション中にCreateThreadしちゃいけないって
何で思ったの?

240:デフォルトの名無しさん
07/02/23 17:40:50
なんとなく

241:デフォルトの名無しさん
07/02/23 17:58:30
クリティカルセクションは他のスレッドへの切り替えを抑止するような役目を果たしてるから、
EnterCriticalSectionの後にスレッド作ってそこでもクリティカルセクションを使った場合に大丈夫かって思ったんじゃないの?

242:デフォルトの名無しさん
07/02/23 17:58:51
>>234
実際に選択項目を変えてみたの?

243:228
07/02/23 18:34:51
項目を変えたりしても、変わらないです。

244:デフォルトの名無しさん
07/02/23 18:37:21
CB_GETCURSEL以外はうまくいくのか?
CB_GETCOUNT とか CB_RESETCONTENT とか

245:228
07/02/23 18:46:25
void __fastcall ~~~(SealInに項目を追加)

void __fastcall TForm2::Button1Click(TObject *Sender)
{
ShowMessage( SendMessage(SealIn , CB_GETCURSEL , 0 , 0) );
}
てか、ほんとこれくらいのプログラムしか出来てない;;

>>244
試しでその二つや0以外が返ってきそうなものをやってみましたけど、
結果変わらずです

246:デフォルトの名無しさん
07/02/23 18:52:38
>>245
>SealIn
上の(SealInに項目を追加)が気になる
これってコンボボックスの名前か?
まさかだけど
ShowMessage( SendMessage(SealIn->Handle , CB_GETCURSEL , 0 , 0) );
ってことないよね?


247:デフォルトの名無しさん
07/02/23 18:55:04
あと、SendMessage()直後にGetLastError()を

248:228
07/02/23 19:07:48
SealInがコンボボックスの名前です
SealIn->Items->Add(text);
で、項目を追加してます。
それ以外の処理はまだないです。

GetLastErrorを追加しましたが、エラーコード返ってきませんでした

249:デフォルトの名無しさん
07/02/23 19:09:02
>>248
ならSealInはハンドルじゃない
ShowMessage( SendMessage(SealIn , CB_GETCURSEL , 0 , 0) );
SealInの部分を SealIn->Handle にする
ShowMessage( SendMessage(SealIn->Handle , CB_GETCURSEL , 0 , 0) );

250:228
07/02/23 19:11:20
>>249
うまくいきました。
ありがとうございます

251:デフォルトの名無しさん
07/02/23 19:27:18
TFormってことはVCLも使ってるだろうになんでわざわざそんなめんどくさいことを
SealIn->ItemIndexじゃいかんのか

252:デフォルトの名無しさん
07/02/23 19:30:21
>>251
Win 32 SDK板ですからね

253:デフォルトの名無しさん
07/02/23 19:33:33
>>251
私も思ったけど、たぶん練習じゃないかなと思った
メッセージってどんな感じ?みたいな
私も昔やったことある

254:デフォルトの名無しさん
07/02/23 23:24:49
必要な場合だけ AllocConsole を使って動的にコンソールを割り当てた。
そんで GetStdHandle で標準入力のハンドルをもらった。
このとき、標準入力に入力があったことを WaitForMultipleObjects で
通知してもらうことってできる?
標準入力とともに他のハンドルのシグナル状態も検出したいのです。


255:デフォルトの名無しさん
07/02/24 00:41:46
シミュレーション作ってるんですが
スクロールバーを動かしてる時に
処理が止まらないようにする方法はありますか?

256:デフォルトの名無しさん
07/02/24 00:55:05
マルチスレッドで描画と計算を分けるのは前提だよな。

257:デフォルトの名無しさん
07/02/24 08:19:25
>>255

>>256氏が言っている様に、
シミュレーション側とGUI周り側を切り分けて、
プログラムをマルチスレッド化するべきかもね。

CreateThread関数、
WaitForSingleObject関数、WaitForMultipleObjects関数あたりを見てみ。

258:デフォルトの名無しさん
07/02/24 09:16:35
>>254
コンソール入力を待てると書いてあるし、
URLリンク(msdn.microsoft.com)
読み取られていない入力があったときにシグナル状態になると書いてあるし、
URLリンク(msdn2.microsoft.com)
平気だろう。

259:デフォルトの名無しさん
07/02/24 17:58:00
扶桑社から12月号 
URLリンク(www.microsoft.com)


260:デフォルトの名無しさん
07/02/24 20:36:30
どなたか助けてください。

Windows アプリケーションを作成していて、
URLリンク(home.earthlink.net)
ここの方法でコンソールを割り当てて、その上で、

    while (1) {
        char buf[256];
        fgets(buf, 200, stdin);
        fputs(buf, stdout);
    }

のようなコードを書いたんですが、
コンソールで高速にキーボード入力して Enter を押すと、
入力していない 'T' という文字が、コンソールの行の先頭に表示されるんです。

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

261:デフォルトの名無しさん
07/02/24 20:52:49
char buf[0x100];
while(1){
fgets(buf,200,stdin);
fputs(buf,stdout);
}

262:デフォルトの名無しさん
07/02/24 20:57:14
やってみたけど、変わらないですよ。

263:デフォルトの名無しさん
07/02/24 21:07:19
>>260
ふしぎだね。

四角形になるRFGTでRFGを同時押しすると
Tも押したことになってしまうタイプのキーボードとか。
んなこたーねーか

264:デフォルトの名無しさん
07/02/24 21:09:51
呪われておる

265:デフォルトの名無しさん
07/02/24 21:42:40
>>260
必ず’T’なのか?
>コンソールで高速に
知らず押しちゃってるってことない?

266:デフォルトの名無しさん
07/02/24 21:48:10
uhihigd(ここでEnter)
Tuhihigd
こんな感じになるってこと?

267:デフォルトの名無しさん
07/02/24 21:48:55
押してないよ。T がよく出るんだけど、さっきやったら ] も出てきた。
z x c v をがちゃがちゃとランダムに押しながら、
ときどき Enter を押すと、20回に1回ぐらいの割合で出てくる。

268:デフォルトの名無しさん
07/02/24 21:50:01
>>266
そう!そんな感じ!

269:デフォルトの名無しさん
07/02/24 21:51:14
それはそのプログラムだけで発生するわけ?

270:デフォルトの名無しさん
07/02/24 21:52:21
キーボードってさ、
キーの数だけ配線が二本ずつあるのではなくて
一本は横一行で共有
もう一本は縦一列で共有
同時押しがあると見分けつかないから
昔のキーボードでは良く起きた。

271:デフォルトの名無しさん
07/02/24 21:53:04
>>270
とおもう。

272:260
07/02/24 21:53:48
VC 2005 + SP1 を使っています。

ウィザードから普通のコンソール アプリケーションを作成して
同じようなプログラムを作成しても、このようなことは起きないんです。

Windows アプリケーションを作成して、動的にコンソールを作成すると
このような現象が出てくるんです。

別の人のマシンでも再現したので、私のマシンの問題ではないと思う。
(両方のマシンとも Dell 製だが、機種は違う。)


273:デフォルトの名無しさん
07/02/24 21:57:35
ソース見てみたい

274:260
07/02/24 22:19:59
>>273
いや >>260 に書いたとおりなんですけど。。。
あのサイトのコードを使ってコンソールをセットアップして、
その後で fgets . fputs を繰り返すループを書くだけです。


275:デフォルトの名無しさん
07/02/24 22:24:38
じゃあWindowsかVCの不具合なのかもな

276:デフォルトの名無しさん
07/02/24 22:36:09
260を見て思ったんだが、FILE構造体同士の代入ってやっていいのか?
freopen("con", "w", stdout);とか
(またはconの代わりにCONOUT$など)では駄目か?

277:デフォルトの名無しさん
07/02/24 22:45:56
>>276
もし俺がやるとしたら俺も>>276のほうだな

278:260
07/02/24 22:50:59
直った!下記のコードでうまくいった!ありがとう!

freopen("con", "r", stdin);
freopen("con", "w", stdout);
freopen("con", "w", stderr);


279:デフォルトの名無しさん
07/02/24 23:19:32
質問です

gethostnameとgethostbynameを利用してローカルIPは取得できたのですが、
グローバルIPはAPIで取得できるのでしょうか?

280:デフォルトの名無しさん
07/02/24 23:21:38
[グローバルIP]がブロードバンドルータに付いているものを指すなら、
UPNPでとるとか、実際の通信相手からpeernameを戻してもらうしかない。

281:デフォルトの名無しさん
07/02/24 23:33:46
>>280
やっぱりAPIで楽はできないですかorz
ご助言ありがとうございました。

282:デフォルトの名無しさん
07/02/24 23:49:20
XPに限定してもいいならUPnPを操作するAPIがあったはず

283:デフォルトの名無しさん
07/02/24 23:54:40
>>270
ダイオードあげる

つ ─━─

284:デフォルトの名無しさん
07/02/24 23:58:24




285:デフォルトの名無しさん
07/02/25 00:17:51
Win32_PingStatusじゃ無理か?

286:デフォルトの名無しさん
07/02/25 00:20:36
>>270
実際には横一列、縦一列じゃなくてばらばらに設定されてる
1本回路が死んだら横1列、もしくは縦1列全滅だからな
それ防ぐため

らしい

287:デフォルトの名無しさん
07/02/25 00:27:04
>>283 >>284
そうだね!

288:デフォルトの名無しさん
07/02/25 08:15:54
プロテインだね!!

289:デフォルトの名無しさん
07/02/25 10:18:14
VC では open_osfhandle を呼び出すことで OS のファイルハンドルから
ファイル記述子に変換することはできますが、
逆に、ファイル記述子から OS のファイルハンドルを取得するには
どうしたらよいでしょうか。

290:デフォルトの名無しさん
07/02/25 10:20:39
_get_osfhandle


291:デフォルトの名無しさん
07/02/25 11:47:14
フォルダやファイルを、どのアプリケーションが開いているか確認する方法はないですか。

292:デフォルトの名無しさん
07/02/25 12:02:20
Process Explorerにそんな機能があったな。

293:デフォルトの名無しさん
07/02/25 12:07:50
ProcessExplorerそんな機能ないだろ
単にモジュール列挙じゃない?

294:デフォルトの名無しさん
07/02/25 12:18:26
Unlockerにはそういう機能がある。

295:デフォルトの名無しさん
07/02/25 12:19:54
FindメニューのFindHanlde or Dll
ってそういうものだと思ていたが。

296:デフォルトの名無しさん
07/02/25 13:02:30
FileMon じゃねーの?

297:デフォルトの名無しさん
07/02/25 13:50:48
Handleは?

298:デフォルトの名無しさん
07/02/25 14:00:11
c:\windows\system32\openfiles.exeは?

299:デフォルトの名無しさん
07/02/25 14:01:36
OH.EXEは?

300:デフォルトの名無しさん
07/02/25 14:23:48
URLリンク(www.atmarkit.co.jp)
これか

301:デフォルトの名無しさん
07/02/25 15:58:29
あれ、WindowsXPなのに、openfiles.exeがない!

302:デフォルトの名無しさん
07/02/25 15:59:12
なんだプロだけかよ…

303:デフォルトの名無しさん
07/02/25 18:28:59
うんにゃ、サーバにもありんす

304:デフォルトの名無しさん
07/02/25 19:26:06
regmon.exe どっかにないの?

305:デフォルトの名無しさん
07/02/25 20:51:13
Process Monitorでレジストリの監視もできるだろ
と言いたいところだがLog Bootの機能がなくなってる。
Vistaで起動時のレジストリアクセスを調べるにはどうしたらいいんだ

306:デフォルトの名無しさん
07/02/25 21:27:17
バイナリデータ(AA00CCDD0Aとか)を文字に変換かけるAPIとかってありますか?

307:デフォルトの名無しさん
07/02/25 21:41:56
wsprintf

308:306
07/02/25 21:46:41
wsprintfでできるんだっけ?
補足するとバイナリファイルを16進表記で表示させるプログラムを作りたいんだが。

バイナリで読み込んだものをwsprintfA(..."%X"...);でやるとおかしくなった気がします。
何かの間違いかもしれないからもう一度試してきます。

309:306
07/02/25 21:49:34
やはりAA00CCDD0Aというバイナリがあったとして
wsprintfでやるとAAまでしか取得できません。
0x00に反応してると思われ

310:デフォルトの名無しさん
07/02/25 21:51:29
>>309
ソースを晒すべし
0x00 は多分関係無い 言語にもよるだろうけど

311:デフォルトの名無しさん
07/02/25 21:52:54
いや、1byte毎ぐるぐる回しながら、%Xで変換、という話だと思うが

312:306
07/02/25 21:54:16
>>311
あー、なるほどそういうことか。
試してみます。

313:デフォルトの名無しさん
07/02/25 21:57:15
>>305
regmon.exe あったぁ~
MSに買収されてたとは知らんかった
サンクスです


314:306
07/02/25 23:14:59
できましたが
AA0001とかだとA01としかならないです

315:デフォルトの名無しさん
07/02/25 23:17:27
>>314
%02X

316:デフォルトの名無しさん
07/02/25 23:18:02
%02X

317:306
07/02/25 23:24:15
>>315
それは既に試していて
もう一度やりましたがやっぱりダメでした。

A0000とかなっちゃいます

318:デフォルトの名無しさん
07/02/25 23:24:58
>>306
ソースうp

319:306
07/02/25 23:30:25
URLリンク(zetubou.mine.nu)

320:デフォルトの名無しさん
07/02/25 23:35:12
>wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
これが原因。buff[i]はいいけど、lpPack[i]は1ループで2進むことがあるから。

321:デフォルトの名無しさん
07/02/25 23:36:22
buffへコピーする必要は無いだろ。
せいぜいBYTE* packet = lpPacket;で十分。

322:デフォルトの名無しさん
07/02/25 23:36:26
>>319
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}

{
int j=0;
for(i = 0; i < Size; i++)
{
j+=wsprintf(&PackData.lpPack[j], TEXT("%X"), buff[i]);
}
}

323:デフォルトの名無しさん
07/02/25 23:37:03
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}

{
int j=0;
for(i = 0; i < Size; i++)
{
j+=wsprintf(&PackData.lpPack[j], TEXT("%02X"), buff[i]);
}
}

324:306
07/02/25 23:37:06
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}

Sizeはパケットのサイズ
buffにはパケットのデータをmemcpyしてます(デバッグ用)
上記の状態でやるとAA00020B00がA02B0になっちまいます

325:306
07/02/25 23:38:32
>>320
あー、UNICODEベースで組んでるのが原因かなぁ

326:デフォルトの名無しさん
07/02/25 23:40:59
>>325
>>323 が正解

327:デフォルトの名無しさん
07/02/25 23:44:20
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);

wsprintf(&PackData.lpPack[i*2], TEXT("%02X"), buff[i]);

328:306
07/02/25 23:45:04
>>327
それはむしろi * sizeof(TCHAR)でやるべきかと。

後やはりA02B0になっちまいやすorz

329:306
07/02/25 23:46:08
多分BYTEが1バイトだからなのかなーと思うんですが


330:デフォルトの名無しさん
07/02/25 23:46:23
>324
VC++のウォッチ式ならコピーせずともどうにでもできる。
>325
PackData.lpPackの型がTCHARの配列やそれに類するものでなく、
charやunsigned charなどだったらwsprintfAかs(n)printfでも使いなさい。
>327
そこは2文字書き込むから2をかけてあるのであって、
sizeof (TCHAR)では全くお門違い。



331:306
07/02/25 23:48:45
>>330
あー、そういうことなのか

>>325についてはリストビューをUNICODE形式にしちまってるから
なんとかならないですかのう。Aに全てやり直すの酷だ・・

332:デフォルトの名無しさん
07/02/25 23:56:02
320の件は323なり327なりの方法で解決できる。
Unicodeは関係ない。

333:306
07/02/25 23:58:40
全然違うソースを改変してビルドしてたんでまったく結果が同じという
オナニーショーを演じていましたどうもすみません。



334:306
07/02/25 23:59:17
(´・ω・`)


335:デフォルトの名無しさん
07/02/26 00:02:31
よく頑張ったお前は神だよ

336:デフォルトの名無しさん
07/02/26 02:31:42
もっとわかりやすいデータを食わせて何がおきてるのかさぐる、とか
そもそも%02Xはどういう意味なのか、くらい調べようぜ

337:デフォルトの名無しさん
07/02/26 12:57:25
特定のアプリに対して
キーボードのBackword/Forwardキーとかの特殊キーで
WM_COMMANDが送られるのをブロックしたいのですが、
どうすればいいですか?

338:デフォルトの名無しさん
07/02/26 15:21:58
キーボードフック

339:337
07/02/26 21:36:43
>WM_COMMAND
すみませんWM_APPCOMMANDでした・・・orz

SetWindowsHookExでフックをいろいろやってみましたができません・・・orz
最初、WH_KEYBOARDをやったらWM_KEYDOWNより前に送られてるのでダメ・・・
で、PostでなくSendされてるのでWH_GETMESSAGEではキャッチできず・・・
WH_CALLWNDPROCでは
>The hook procedure can examine the message; it cannot modify it.
となっていてブロックできず・・・

340:デフォルトの名無しさん
07/02/26 22:00:19
>>339
フックだけじゃダメだって。
ジャブやアッパーも織り交ぜないと。

341:デフォルトの名無しさん
07/02/26 22:19:40
LVM_DELETEITEMとかでアイテムを削除した後
アイテムを追加するとInsertItemは追加できるのにSetItemのほうは
追加できなくなりました。原因に心当たりのある方がいたら教えていただきたいのですが。

342:デフォルトの名無しさん
07/02/26 22:22:49
>>340
フックって意味分かってる?
あんなの出すんだったらジャブとかアッパーだしたら隙が出ちゃうよ?

343:デフォルトの名無しさん
07/02/26 22:26:34
>>341
SetItemは追加じゃないんだけど、、、まあそれは置いておいて、

SetItemに指定してるアイテム番号が違うのでは?
例えばInsertItemの戻り値がアイテム番号なので、それをSetItemに指定するとか。

344:デフォルトの名無しさん
07/02/26 22:27:31
CreateWindowで"BUTTON"をBS_OWNERDRAW指定して作った子ウインドウに
WM_PAINTでビットマップをコピーして表示することはできました。
このWM_PAINTをWM_LBUTTONDOWNに変えるとビットマップが表示されません。

すみませんが、どうしてなのか教えてください。

345:デフォルトの名無しさん
07/02/26 22:29:19
>>343
それはないと思うんですが。
まず、LVM_DELTEITEMを送る前まではちゃんとSetItemできてて
LVM_DELTEITEMをSendした後から追加しようとするとできなくなってしまいます

346:デフォルトの名無しさん
07/02/26 22:30:09
BeginPaint/EndPaintはWM_PAINTの中でしか使えない。
またそれを解決しても、後のWM_PAINTで上書きされるということが起きそう。

347:デフォルトの名無しさん
07/02/26 22:31:02
>>344
BeginPaint の PAINTSTRUCT を見てみて

348:デフォルトの名無しさん
07/02/26 22:35:33
>>344
よくわかんないけど、WM_DRAWITEMを使うのは?

349:341
07/02/26 22:37:51
解決しました。

350:デフォルトの名無しさん
07/02/26 22:42:04
後々の為に方法を書いておくんだ

351:デフォルトの名無しさん
07/02/26 22:42:35
>>347-348
ご回答ありがとうございます。
手がかりにして調べてみます。

352:341
07/02/26 23:16:12
>>350
単純に消去した時のカウントがそのままでというか
項目数取得使っとけば良かったのに何で俺staticな変数で
インクリメントしてたんだろう・・・。

という話です

353:341
07/02/26 23:41:12
ふとした疑問。
ListView_GetItemCountで取得した項目数をそのまま
ListView_InsertItemを使って追加していった場合、
果たしてそれは正しいやり方なんだろうか・・・・。

354:デフォルトの名無しさん
07/02/27 00:03:48
>>339
フックでメッセージを消したいときは、メッセージをWM_NULLに
書き換えればいいんだよ。

355:デフォルトの名無しさん
07/02/27 00:04:44
>>353
意味が分からんが、ちょっと興味ある。
詳しく

356:デフォルトの名無しさん
07/02/27 00:32:50
テンプレのWIn32API入門の第11章の終了処理のプログラムを実行すると
Proglam still running ? というエラーがでてビルドできません
これはどういうエラーなんでしょう?
環境はWin98でBorlandの5.5です

357:339
07/02/27 00:43:42
>>354
メッセージの変更は
WH_GETMESSAGEではできるみたいですが
WH_CALLWNDPROCではできないようです。
WH_GETMESSAGEではキャッチできませんでした・・・orz

358:デフォルトの名無しさん
07/02/27 00:46:27
>>356
コンパイル結果のと同じ名前のEXEが現在実行中。

359:デフォルトの名無しさん
07/02/27 00:46:29
>>356
ビルドの対象のプログラムがまだ実行中

360:デフォルトの名無しさん
07/02/27 02:23:23
win32apiの関数で画像の加算合成をするにはどうしたらいいですか?

361:デフォルトの名無しさん
07/02/27 02:42:03
gl何とか

362:デフォルトの名無しさん
07/02/27 02:53:04
>>360
DIBにすればピクセル単位で普通にCPUで読み書きできる。

363:デフォルトの名無しさん
07/02/27 10:06:16
>>360
結局、演算部は自作ですよ。

364:デフォルトの名無しさん
07/02/27 10:22:42
自作ルーチンで演算
これがほんとの自作自演ナンチャッテ

365:デフォルトの名無しさん
07/02/27 11:06:58
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

366:デフォルトの名無しさん
07/02/27 11:09:53
( ´д)……(´д`)……(д` )

367:デフォルトの名無しさん
07/02/27 12:09:26
そのまましばらくお待ちください


368:デフォルトの名無しさん
07/02/27 12:11:43
  __        __       __
  |よし| ΛΛ  |よし| ΛΛ   |よし| ΛΛ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 〃 ̄∩ ゚Д゚) 〃 ̄∩ ゚Д゚)  〃 ̄∩ ゚Д゚) < >>364 全員一致で逝ってよし!
    ヾ.   )    ヾ.   )     ヾ.   )   \_____________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
\                                                \
  | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
  |          逝ってよし認定委員会                    |
  |                                           |
\|                                           |

369:デフォルトの名無しさん
07/02/27 12:47:16
>>358 >>359
解決しました、ありがとう~

370:デフォルトの名無しさん
07/02/27 13:40:46
ウィンドウクラスとウィンドウスタイル定数が全部載ってるサイト教えれ

371:デフォルトの名無しさん
07/02/27 13:55:38
マイクロソフトのサイト

372:デフォルトの名無しさん
07/02/27 13:56:15 BE:139752498-2BP(222)
>>370
winuser.h

373:デフォルトの名無しさん
07/02/27 14:12:01
BCCなんですが、GDI+のライブラリがないとjpgって表示できないんですか?

374:デフォルトの名無しさん
07/02/27 14:30:57
>>373
jpg解凍ルーチンを自分で書けばいいと思うよ

375:デフォルトの名無しさん
07/02/27 14:41:15
他の板ならともかく、ここで「解凍」って見るとすごくバカっぽいな。


376:デフォルトの名無しさん
07/02/27 14:42:23
>>374
だめなのか。。。('A`)メンドクセ
㌧クス

377:デフォルトの名無しさん
07/02/27 14:58:40
ライブラリ無いとどんな画像形式でも表示なんか無理だと思うんだが…

378:デフォルトの名無しさん
07/02/27 15:00:54
GDI+じゃなくても、OleLoadPictureあたり使えばイインジャネ?

379:デフォルトの名無しさん
07/02/27 15:10:46 BE:11646623-2BP(222)
IEコンポにやらせるとか。

380:デフォルトの名無しさん
07/02/27 17:17:10
>>373
自分でこっそり使うツール程度で単に表示させたいだけなら、
Susieプラグインでも使えばいいんじゃない。
BMP(DIB)さえ扱えるなら、.spiは結局DLLなので
静的ロードしてやれば自分で書くコードはほとんど無くて済むだろうし。
# 昔読んだプラグイン仕様の記憶から書いてるのでどっか間違ってるかも。

一例としてSusieプラグインを挙げたけど、
JPEGならフリーのライブラリがいくらでもあると思う。
# 思いついた確実に存在するJPEG読み込みのDLLがSusieプラグインだったので。

もし商用利用する場合はライブラリのライセンスを要確認のうえで。


381:デフォルトの名無しさん
07/02/27 17:21:09
むしろlibjpeg

382:デフォルトの名無しさん
07/02/27 17:26:30
UpdateLayerdWindowでblend.SourceConstantAlphaに255をセットした場合は成功して表示されるんですが、それ以下の数字を入れた場合Functionがエラーとなりエラーコードが87=パラメータが違います。となってしまいます。
Functionを呼ぶ前のスタイルとか何かに問題があるんでしょうか?

383:デフォルトの名無しさん
07/02/27 18:09:00
>>382
スレ違い...と言いたいが、
GDI+スレはないんかいw

384:デフォルトの名無しさん
07/02/27 18:12:11
Platform/Windows SDKにヘッダとライブラリがあるんだし、扱うとしたらここだろ。
その違いが把握できるなら.NET系のスレもありだとは思うが。

385:デフォルトの名無しさん
07/02/27 18:34:05
何ですれ違いなん?普通にUser32.dll のAPIじゃなかと?

386:デフォルトの名無しさん
07/02/27 18:35:29
gdiplus.dllだろ

387:デフォルトの名無しさん
07/02/27 18:56:35
GDI+スレとか無いからここでいいんじゃね?
APIじゃないけど

388:デフォルトの名無しさん
07/02/27 19:00:56
URLリンク(msdn.microsoft.com)

ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用

というわけで、gdiplus.dll の関数ではなく、単なる Win32API です。

389:デフォルトの名無しさん
07/02/27 20:26:46
>>373
jpg表示したいだけなら、OleLoadPictureでいいんじゃね?
前処理が面倒だが、jpgだけじゃなくBMP/GIF他も一緒に扱えるし。



390:デフォルトの名無しさん
07/02/27 21:39:34
やべー jpg なんて libjpeg 一択と思ってた
png に libpng 使ってるんですが、これもひょっとしてメジャーじゃなかったり?

391:デフォルトの名無しさん
07/02/27 22:06:55
>>382
255 = 0xFF = 0b11111111で 、
実際はblend.SourceConstantAlphaをリングシフトして、
OS(ドライバ?)は最下位ビットをAND判定してるとか?

nパーセントの透過率 = ((0xFF * n) / 100)

392:デフォルトの名無しさん
07/02/27 22:34:01
>>382
::GetDeviceCaps(hDC, SHADEBLENDCAPS)の結果は?

393:389
07/02/28 00:13:00
>>390
表示だけでなく、生成や変換もやる場合は、libXXXでいいんじゃね?
Susieプラグインとかよりライセンス条件緩そうだし。
WindowsのAPI/DLLだけで済むならそのほうがいいと思うんでOleLoadPicture
を勧めた訳だが。


394:デフォルトの名無しさん
07/02/28 07:57:46
子プロセスの出力をパイプで受け取り、それをistreamで読み出すには
どうしたら良いのでしょうか?
スレ違いなら誘導お願いします。

395:デフォルトの名無しさん
07/02/28 08:01:00
パイプで受け取る方法はググればサンプルが見つかる。
istreamがC++のやつのことなら、Boost.Iostreamsを使うのが楽。

396:394
07/02/28 08:18:45
>>395
ありがとうございます。おっしゃる通りistreamはC++のやつのことです。
これからググって調べてみる事にします。

397:デフォルトの名無しさん
07/02/28 14:18:14
他のアプリが呼び出した DeviceIoControl()
の内容を横取り(もしくは覗き見)する方法はあるでしょうか?


398:デフォルトの名無しさん
07/02/28 14:20:09
アル

399:デフォルトの名無しさん
07/02/28 14:27:15
ラッパDLLは無理くさいからIAT書き換えればいいんじゃないのかな。
Advanced Windowsに物凄い詳しく書いてあるよ。

400:デフォルトの名無しさん
07/03/01 07:37:23
新規質問お願いします。

デバイスコンテキストに文字を書くAPIを探しています。

「A」と書いたときには「∀」と文字を上下反転させる事ができるAPIはないでしょうか?
TextOut、DrawTextにはしてい方法が見つかりませんでした。

APIの組み合わせでもフォント設定でもいいので知っていたらお願いします。

後、文字の背景は透過しているので、「TextOut」→「StretchBlt」で張り付けた絵を反転するのは無しでお願いします

401:デフォルトの名無しさん
07/03/01 08:14:20
>>400
単純に回転ならCreateFont関数でnEscapementで角度指定だっけな?

垂直、水平はしらん

402:デフォルトの名無しさん
07/03/01 08:15:36
CreateFont

403:402
07/03/01 08:16:36
かぶったすまん

404:デフォルトの名無しさん
07/03/01 11:56:14
>>400
g.TranslateTransformで反転表示させることも出来るよ(・∀・)イイ!!
そのほうが多分効率いいと思う。

405:デフォルトの名無しさん
07/03/01 18:25:26
画像のビューワみたいなものが作りたいのですが、サムネイルを表示する部分は
そのようなコントロールがあるのでしょうか。それともウィンドウに直接(?)書いて
マウスの座標などでクリックされた画像を判定したりしているのでしょうか。

開発環境は Visual C++ 2005 Express Edition です。

406:デフォルトの名無しさん
07/03/01 20:09:35
>>405
IExtractImageインターフェイスだっけな?

407:デフォルトの名無しさん
07/03/01 21:07:05
リストビューでよくね?

408:405
07/03/02 08:41:49
>>406
ありがとうございます。
調べてみたのですが、サムネイルを生成するのに非常に便利そうで助かります。
この取得した画像を表示するコントロールなどがあるものかと悩んでいました。

>>407
リストビューの大きいアイコン表示を使うということでしょうか。
それとも(あまり詳しくはないですが)オーナードローというもので、描画する
のでしょうか。とりあえず試してみたいと思います。
ありがとうございました。


409:デフォルトの名無しさん
07/03/02 08:47:10
>>408
正しいかどうかは分からないが、俺はリストビューの大きいアイコンで画像サムネイルビューアを作ったことがある。

後は つ[イメージリスト]

410:デフォルトの名無しさん
07/03/02 21:29:09
お気に入りとか、履歴とかのシステム標準(?)のアイコンを取得する汎用的な
やり方はありますか?

今はExtractIconEx()でshell32.dllからインデックス直値で取ってますが...
OSが変わるたびに変えないといけないし('A`)

411:デフォルトの名無しさん
07/03/02 21:53:29
あ、SHGetSpecialFolderLocation()→SHGetFileInfo() でいけそうですが
他に簡単な方法があれば。

412:デフォルトの名無しさん
07/03/02 23:19:36
画像編集ソフトなどのアンチエイリアスをかけたペンをつくるため
Ellipseの範囲内を(線も)1ピクセルずつ操作したいのですが、
何か良い方法はありませんか?

413:デフォルトの名無しさん
07/03/02 23:41:34
具体的にどのレベルの話をしてるんだい?
「DIBでやるのが普通」って答えを求めてるのか、
それとも「普通にやったんじゃ遅いから高速化する
方策はないか」てな話なのか。

414:デフォルトの名無しさん
07/03/02 23:55:06
>>413
一応読み込んだピクセルビットにXY軸指定すれば
ピクセルを修正できる関数は作ったんですよ。
それをSetDIBitsToDeviceで表示するという感じで。
だからリージョンかラスタオペレーションか何かで
いじればできないかな・・・って

415:デフォルトの名無しさん
07/03/03 00:21:49
>>414
1.グラデーション分のペン作成(単色のペンで)
2.ペンのストロークをサンプリング
3.2のストロークに対し、1のペン描画を反映。グラデーション分のビットマップを作成。
4.グラデーション別に平均化処理し、ORる

だめか?

416:デフォルトの名無しさん
07/03/03 11:04:04
サウンド音量固定の件で質問した者ですが、
おかげ様でできました!

でAPIの質問ではないのですが、
いきがかり上聞かせて頂きます。

まずければ他へ行きます。

ボリューム再設定アプリを実行するタイミングとして
1. Windows起動音が鳴るより前
2. Windows終了音が鳴る前
としたいのですが、うまくできません。
(ボリュームが上がっててビックリする事が多いので(^^;)

スタートアップに登録したら1の場合、
いつも鳴ってる途中で実行されます。

2の場合やりかたがわかりません。
Windows XP HOMEなのですが・・・

417:デフォルトの名無しさん
07/03/03 12:44:50
エクスプローラやIEのアドレスバーの様にReBarにコンボボックス、ボタンを順に配置したいです。
ツールバーにコンボボックス(セパレータの上に配置)を入れてをバンドに入れる方法を見つけたのですが、
このコンボボックスはリサイズできないのでしょうか?
厳密には、セパレータの幅変更になりますけど。
また、目的のアドレスバーをスパイしてみると、ひとつのバンドにコンボボックスとツールバーを入れているようでした。
それを行うメッセージなりAPIがあるんでしょうか。

418:デフォルトの名無しさん
07/03/03 13:01:43
URLリンク(msdn.microsoft.com)

419:デフォルトの名無しさん
07/03/03 13:05:33
1つのバンドは1つのウィンドウしか占有できないから、
適当な子ウィンドウをバンドに置いて、その子としてコンボボックスなりツールバーなり置けばいい。

420:デフォルトの名無しさん
07/03/03 14:25:52
>>416
うちのPC音でないから起動音のタイミングはわからないけど
サービスにすればスタートアップよりはやい

2は一番安直なのが常駐させてWindows終了時のメッセージ(忘れた
を捕捉する方法かな
サービスにしても常駐になるし

vectorとかに行けば終了時の処理を登録できるものぐらいあると思うからそれ使うのも楽かもね

421:デフォルトの名無しさん
07/03/03 14:57:22
>>416
1・HKLM\Software\Microsoft\Windows\CurrentVersion\Runはどうだい
2・Windowsはシャットダウンする手前に全トップレベルウィンドウに対して
 WM_QUERYENDSESSIONを投げるからそれを受け取って処理してみたらどうだい。
 ちなみにWM_QUERYENDSESSIONに対してTRUEを返せばシャットダウンを許容、
 FALSEを返せばシャットダウンを禁止(シャットダウン自体が中止される)する。
 一つでもウィンドウがFALSEを返せばシャットダウンは中断される。

422:デフォルトの名無しさん
07/03/03 17:39:02
終了時に保存等の処理をしたいならWM_QUERYENDSESSIONよりも、
WM_ENDSESSIONだと思うけど。

423:デフォルトの名無しさん
07/03/03 18:26:48
WNDCLASSとWNDCLASSEX
CreateWindowとCreateWidnowEx
どこがどう違うのか教えてください。

424:デフォルトの名無しさん
07/03/03 18:29:02
指定できるのが増えてる

425:デフォルトの名無しさん
07/03/03 19:19:06
なるほど、だからExですか。なんつってww


426:デフォルトの名無しさん
07/03/03 19:50:01
>>423
WNDCLASSEXの方はcbSize,hIconSmメンバが追加されている。
cbSizeが追加されたことにより、
構造体の拡張も視野に入っているかもね。
>>196-198,200-204を参照
あと、hIconSmはスモールアイコンを指す。

メンバはWNDCLASS構造体に重複部分があるから、
RegisterClass関数は内部で、RegisterClassEx関数を呼んでいるかも。



427:デフォルトの名無しさん
07/03/03 20:05:30
GetWriteWatch って、SDK に
Windows NT/2000:対応していません
って書いてありますが、本当は使えるんですか?


428:デフォルトの名無しさん
07/03/03 20:25:23
>>427
1にああ書いてあるとおり、英語版を見てみろ。
URLリンク(msdn2.microsoft.com)
Requirements
Client Requires Windows Vista, Windows XP, Windows Me, or Windows 98. 
Server Requires Windows Server "Longhorn" or Windows Server 2003. 


429:デフォルトの名無しさん
07/03/03 20:44:21
情報ありがとう。そうか、対応していないんだね。残念だなー。

430:デフォルトの名無しさん
07/03/03 21:30:11
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄


431:デフォルトの名無しさん
07/03/03 22:15:42
>>422
WM_ENDSESSIONだとタイムアウトで強制的に打ち切られるから
保存しようとしているデータの性質によっては怖くて使えない

432:デフォルトの名無しさん
07/03/03 22:16:12
質問です。XP、VS2005 で Win32 アプリを作成しています。
ピクチャコントロールにスクロールバーをつけたのですが、うまく動作しません。

LONG_PTR style;
style = GetWindowLongPtr(hWnd, GWL_STYLE);
SetWindowLongPtr(hWnd, GWL_STYLE, style | WS_VSCROLL | WS_HSCROLL);

SCROLLINFO info;
info.cbSize = sizeof(LPSCROLLINFO);
info.fMask = SIF_RANGE | SIF_PAGE;
info.nMin = 0;
info.nMax = 9;
info.nPage = 3;
SetScrollInfo(hWnd, SB_HORZ, &info, TRUE);

hWnd はピクチャコントロールのハンドルです。
SetScrollInfo は正常に動作し、期待通りのスクロールバーが表示されるのですが、それだけで、
まるで無効になっているかのようにマウスでつかむこともできず、WM_VSCROLL も WM_HSCROLL も来ません。
(Spy++ でも確認しました。)

原因が全くつかめません、何か手がかりはないでしょうか…。


433:デフォルトの名無しさん
07/03/03 22:51:28
>>432
ピクチャコントロールの親でメッセージ受けようとしてないか?

434:デフォルトの名無しさん
07/03/03 22:54:12
>>432
誤:info.cbSize = sizeof(LPSCROLLINFO);
正:info.cbSize = sizeof(SCROLLINFO);
>SetScrollInfo は正常に動作
エラー返してないかい?


435:デフォルトの名無しさん
07/03/03 23:02:12
XPって C:\Documents and Settings\"ユーザ名"
のフォルダ選択して、
右クリック → 共有とセキュリティ → 共有(タブ)
で表示させたウインドウで、
□このフォルダをプライベートにする
のON/OFFができますよね?
このON/OFF操作で行われる処理をコマンドラインで
自動的にやる方法知りませんか?(例えばWIM32APIとか)
cacls.exe だとできないみたいだし、
いろいろ他の方法当たったけど、見つからんです。。


436:デフォルトの名無しさん
07/03/03 23:10:31
>>434
>LPSCROLLINFO
うわぁぁぁぁ

エラー返してましたorz ありがとうございます!

437:デフォルトの名無しさん
07/03/03 23:16:08
>>435
SetNamedSecurityInfo()


438:デフォルトの名無しさん
07/03/04 00:07:51
WindowsMobile向けの関数一覧って無いですかね。使えるのと使えないのとあってよくわからんです。

439:デフォルトの名無しさん
07/03/04 09:15:54
Windowsサービスを登録するAPIってないですか

440:デフォルトの名無しさん
07/03/04 09:20:17
CreateService


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch