5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API 質問箱 Build9

1 :デフォルトの名無しさん:03/02/11 11:06
スレ立てるまでもない、
   Win32 Application *Programmer* Interface
についての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、質問する前に検索ぐらいしる!!

2 :デフォルトの名無しさん:03/02/11 11:06
過去スレ
Win32API 質問箱 Build8
http://pc2.2ch.net/test/read.cgi/tech/1040964626/
Win32API 質問箱 Build7
http://pc3.2ch.net/test/read.cgi/tech/1036654893/
Win32API 質問箱 Build6
http://pc3.2ch.net/test/read.cgi/tech/1032548635/
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html


3 :デフォルトの名無しさん:03/02/11 11:28
>>1
乙。

4 :デフォルトの名無しさん:03/02/11 11:32
>>1
カレー

5 :デフォルトの名無しさん:03/02/11 14:04
>>1
Programmingだろ

6 :デフォルトの名無しさん:03/02/11 14:08
過去スレ7の894-参照

7 :デフォルトの名無しさん:03/02/11 14:10
ネタスレかw

8 :デフォルトの名無しさん:03/02/11 15:13
>>6
Programmerになるべき根拠がぜんぜん見出せなかったんだが。
>>7の言うとおりネタスレなのか?

9 :デフォルトの名無しさん:03/02/11 15:15
そんなことどうでもええがな。
Win32 Aplicationプログラミング
http://pc2.2ch.net/test/read.cgi/tech/1044267746/
だってネタスレなのに次スレとして使おうとしたくらいなんだから。

10 :デフォルトの名無しさん:03/02/11 15:42
だったらそっち使えばいいのに。

11 :デフォルトの名無しさん:03/02/11 15:47
次スレ無いと思った奴がここ立てちゃったんだろ。

12 :デフォルトの名無しさん:03/02/11 17:26
で、どこが本家なの?

13 :デフォルトの名無しさん:03/02/11 17:34
>>12
Win32 Aplicationプログラミング
http://pc2.2ch.net/test/read.cgi/tech/1044267746/

14 :1:03/02/11 18:40
私はまじめにスレたてたつもりです。
何がどうなっているとネタスレなんですか?
誰か特定の人物がやっていることで
IP抜いて別人と判明したらネタスレなんですか?
だったら、今すぐ削除依頼出してきます。

15 :デフォルトの名無しさん:03/02/11 18:48
>>14
ネタですか?

16 :デフォルトの名無しさん:03/02/11 18:48
すでに次スレとして機能していた>>13のスレがあるのにどうしてわざわざ立てるんですか?

17 :1:03/02/11 19:25
>>16
わかりました>>13に対して重複スレだったんですね。
削除依頼を出す場合の理由として取り上げることにします。

ですが、今しばらく他の方のご意見を拝聴します。

18 :デフォルトの名無しさん:03/02/11 19:49
ここはそんなに圧縮厳しくないんだから削除依頼までしなくても
次スレとして再利用すれば?
もちろんわざわざ保守まですることはない。>>13を使い終わった
ときに落ちてたら立て直せばすむこと。

19 :デフォルトの名無しさん:03/02/11 20:02
わざわざ削除依頼するほどでもないだろ。
ほっとけ。

20 :デフォルトの名無しさん:03/02/11 20:03
猫でもわかるプログラミングって役に立つの?
なんだか作者のオナーニみたいに見えるんだけどさ。

21 :デフォルトの名無しさん:03/02/11 21:47
>>20
何も知らない人の手がかりにはなるから、初心者を誘導して説明を省くのに使える。
何か不満があるのなら自分で書いてみたらどうだ?

22 :デフォルトの名無しさん:03/02/11 22:59
猫でもわかるの本は他の入門書と比べてあまり価値はないけどな

23 :デフォルトの名無しさん:03/02/12 00:05
漏れはWinプログラミングは猫(+APIブック)で覚えました。
コピペでビルド・実行できるのでめんどくさがりの漏れには役に立ったよ。

24 :デフォルトの名無しさん:03/02/12 00:13
俺も猫だな。
本買うのは面倒だし、(やたら高いしw)
bccでコピペだけでは動かないから、
いい勉強にもなった。

25 :デフォルトの名無しさん:03/02/12 01:48
Win32API で、使用可能なフォント一覧を取得するには
どのようにすればよいのでしょうか。
先達のお知恵を拝借したく。

26 :デフォルトの名無しさん:03/02/12 02:38
>>25
EnumFontsとかEnumFontFamiliesEx。

27 :デフォルトの名無しさん:03/02/12 17:13
nt系と 95系を判別する関数があったら教えてください。

28 :デフォルトの名無しさん:03/02/12 17:18
Win32APIでFtpFindFirstFileってありますよね。
これを使用してやるみたいに、httpのフォルダ内のファイルを列挙する方法
ってあるんでしょうか?
どなたか教えてください。
このスレが見つけられず、別のスレにも同じ質問をしていますが、
ご勘弁を。

29 :27:03/02/12 17:32
GetVersionEx で解決。失礼しました。

>>28
不可能ではないか?

30 :デフォルトの名無しさん:03/02/12 17:32
>>28
一般的な方法は無い。サーバの設定でそのdirectoryのlistingが
許されている場合は、単純にGETして返された中身をパースする
ことはできるだろう。


31 :デフォルトの名無しさん:03/02/12 18:03
WebDAV使う、とか。

32 :デフォルトの名無しさん:03/02/12 18:27
>>28
APIでは用意されていない。
自力で何とかするしかない。

33 :デフォルトの名無しさん:03/02/12 19:27
API以前の話で、自力で何とかなるような物でも無いわけだが。

34 :デフォルトの名無しさん:03/02/12 19:44
そりゃそうだ
サーバが対応してなきゃな。

35 :名無しさん:03/02/12 20:38
シリアル経由でデバイスが読み取った結果を<LF>************<CR>(*は任意の半角英数字文字列)を送ってくるプログラムを組みたいんですけど、どうしたらいいのでしょう?
今回はじめてWin32API触るので、よくわからないんです・・・(泣

36 :デフォルトの名無しさん:03/02/12 20:48
>>35
APIで触らなくても、それぞれの言語にあるファイル入出力でやればいいと思うよ
APIでやってもそう変らないけど

37 :名無しさん:03/02/12 21:30
スレッド立ててそれなりに組んだつもりなんですけど、どうも何回か読みに行くと止まってしまって・・・。
ちなみに、OSはWindows2000、VC6.0です。

38 :デフォルトの名無しさん:03/02/12 23:02
排他処理してないとか

39 :デフォルトの名無しさん:03/02/12 23:34
ダイアログボックスのタイトルバーを消すにはどうしたらいいですか?

40 :デフォルトの名無しさん:03/02/12 23:38
>>39
SetWindowText

41 :名無しさん:03/02/12 23:39
>> 38
排他処理…ですか。具体的に言うとどんなかんじでしょう?

42 :デフォルトの名無しさん:03/02/12 23:55
>>40
タイトルバーの文字ではなく、タイトルバーそのものを消したいのですが。

43 :デフォルトの名無しさん:03/02/13 00:00
>>39 WS_CAPTIONをとればいい。


44 :デフォルトの名無しさん:03/02/13 00:00
>>36
そりゃねーだろ
一般にファイル入出力、例えばstdio.hは
通信パラメータを抽象化してないぜ

>>35
SetCommStateあたり調べてみな

45 :デフォルトの名無しさん:03/02/13 00:01
>>42
SetWindowLong

46 :名無しさん:03/02/13 00:09
>>44
一応こんな感じでやってたんですが・・・何かマズいところってあります?

DCB dcb;

GetCommState(comHandle, &dcb);
dcb.BaudRate = 1200;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.fBinary = TRUE;
dcb.fTXContinueOnXoff = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
SetCommState(comHandle, &dcb);

COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 100;
timeouts.WriteTotalTimeoutConstant = 100;
SetCommTimeouts(comHandle, &timeouts);

47 :デフォルトの名無しさん:03/02/13 00:27
まず、マシンに聞いてみれ

48 :デフォルトの名無しさん:03/02/13 00:33
エクスプローラのように、ファイル名とそのファイルに
対応したアイコンを表示させたいと思っているのですが、
アイコンはどうやって取得すればいいのでしょうか?

49 :デフォルトの名無しさん:03/02/13 01:00
>>48
http://www.google.com/search?q=%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3+%E5%8F%96%E5%BE%97

50 :デフォルトの名無しさん:03/02/13 01:02
>>48
SHGetFileInfo

51 :デフォルトの名無しさん:03/02/13 03:56
何処に書いたか分からなくなってしまったのでもう一度質問させてくさい。
mallocとGlobalAllocの違いはなんですか?

52 :デフォルトの名無しさん:03/02/13 04:25
メモリを管理する場所が違うのでは。
mallocはライブラリが管理、GlobalAllocはWindowsが管理。
違ったっけ。

53 :デフォルトの名無しさん:03/02/13 04:33
GlobalAllocよりHeapAllocを使えってSDKに書いてあったよな。
なんかGlobalAllocはちょっと遅いとか拡張性が低いとかで・・

54 :デフォルトの名無しさん:03/02/13 04:51
>>51
レイヤが違う。GlobalAllocの方が低レベルで、mallocはその上に成り立っている
(かもしれない)ってこった。

55 :デフォルトの名無しさん:03/02/13 05:13
>53
よく耳にする話だね。
GlobalAllocは移動可能だからじゃないかな。

56 :51:03/02/13 05:45
どんな風に使い分けていますか?


57 :デフォルトの名無しさん:03/02/13 05:47
既に別スレにも書いてしまったのですが、こちらが本スレ(?)だったそうで(汗

今 TrackPopupMenu[Ex] を使ってショートカットメニューを表示しているのですが
画面中央付近に少し長めのメニューを表示すると一部が画面から飛び出してしまいます。
こういった時にメニューが画面におさまるよう移動してやるにはどうすればよいのでしょうか。
あるいはメニューを表示する前にメニューの描画サイズを得る方法はあるのでしょうか。
ご存じの方いらっしゃいましたらよろしくお願いします。

58 :デフォルトの名無しさん:03/02/13 05:53
普段はmalloc
HGLOBALを要求するAPIを使う時だけGlobalAlloc


59 :デフォルトの名無しさん:03/02/13 06:19
長いメニューがそもそも問題のような……
ブレーク設定しないのかな

60 :51:03/02/13 06:46
なるほど。回答下さった皆さんどえうも有り難うございました。

61 :デフォルトの名無しさん:03/02/13 10:14
エクスプローラで表示している「ファイルの種類」を
取得するにはどうすればいいのでしょうか?
宜しくお願いします。

62 :名無し@沢村:03/02/13 13:04
>>61
SHGetFileInfo()

63 :デフォルトの名無しさん:03/02/13 13:22
お願いします

VBにて、他アプリケーションをコントロールするプログラムを作っていますが
コンボボックスから任意のアイテムを選択するところで、つまづいています

任意のアイテムを選択表示することは、センドメッセージでできました。
 SendMessage(ByVal Handle_No, ByVal CB_SETCURSEL, ByVal Item_No, ByVal 0)

ただ、アイテムが変更された時にに、動くべきプログラムの処理がされません。
恐らく、アイテムが変更されたという別のメッセージを発行しなければいけないと、
思うのですが。。

どうすれば良いのか、教えてください。
よろしくお願いします

64 :デフォルトの名無しさん:03/02/13 14:40
CBN_* のどれかでできないかな?

65 :デフォルトの名無しさん:03/02/13 16:06
>>62
ありがとうございます!

66 :48:03/02/13 16:30
>>49-50 うまくいきそうです。ありがとうございました。

67 :63:03/02/13 17:53
CBN_SELCHANGE というコードでやってみましたが、
うまくいきませんでした

WM_COMMAND でのメッセージの送信方法が間違っているのか
CBN_SELCHANGE コードでは無理なのか調査してます

何か、情報がありましたらお願いします

68 :デフォルトの名無しさん:03/02/13 18:53
あ、すみません。
SHGetFileInfoでネットワークのアイコンと名前って取得できるのでしょうか?
取得できる場合は引数になにを与えればいいのでしょうか?
よろしくお願いします。

69 :デフォルトの名無しさん:03/02/13 19:01
SHGetFileInfoでは未確認ですが
ネットワークコンピュータ
::{208D2C60-3AEA-1069-A2D7-08002B30309D}


70 :デフォルトの名無しさん:03/02/13 19:14
>>68
キーワード
http://www.google.com/search?q=CSIDL+%83t%83H%83%8B%83_

71 :デフォルトの名無しさん:03/02/13 20:30
コンボボックスについて質問させてください♪

ドロップダウンリストにしているのですが、
▼を押したときにきれいに表示されません。
すごく細かったりします。
キーボードの上下キーで選ぶことはできるので、
表示の設定がまずいのだと思いますが、
どこをいじればいいのやらわからないです。

初歩的で申し訳ないですが、よろしくお願いします。
VC++のリソースエディタ使ってます。

72 :デフォルトの名無しさん:03/02/13 20:45
>>71
デザイン時に▼部分を押すとドロップダウンの長さが変えられる。

73 :71:03/02/13 20:55
ありがとうございました〜!
できました。

74 :デフォルトの名無しさん:03/02/14 00:15
テキストボックスについてです。

テキストボックスに直接int型の変数を表示させたいのですが、どうしたらいいのでしょうか?
SetDlgItemTextだとchar型しか受け付けてくれなくて・・・(泣

お願いします。

75 :デフォルトの名無しさん:03/02/14 00:17
SetDlgItemInt

76 :デフォルトの名無しさん:03/02/14 00:17
あと、スレッドについてもお願いします。

スレッドで同期をとるにはどうしたらいいでしょう?for文やwhile文を使うとCPUを占拠しちゃって・・・

お願いします。

77 :デフォルトの名無しさん:03/02/14 00:20
せまふぉ、みゅーてっくすについて小一時間調べろ。

78 :デフォルトの名無しさん:03/02/14 00:47
( ´∀`)<せまぽ


79 :デフォルトの名無しさん:03/02/14 00:54
  ∧_∧
 ( ´∀`)< ぬるぽ

80 :デフォルトの名無しさん:03/02/14 01:03
  ∧_∧
 ( ´∀`)< お○んぽ

81 :デフォルトの名無しさん:03/02/14 01:05
>>74
表示する前に何でも sprintf を使って 文字列に変換した方がよくないかな。
これならどんなデータでも表示できる。

82 :デフォルトの名無しさん:03/02/14 01:22
ファイルに書き込むときに改行のみ書き込みたいときってどうしたらいいのでしょう?

83 :gn355my0:03/02/14 01:33
>>82
fputs("改行", fp);

84 :デフォルトの名無しさん:03/02/14 01:53
>>83
スミマセン、APIでやってます。
あと、時間の書き込み方法もお願いします。

85 :デフォルトの名無しさん:03/02/14 02:02
なんとか解決できました。
ありがとうございます!

86 :デフォルトの名無しさん:03/02/14 02:20
ダブルクリックした場所がテキスト入力可能な場所
(メモ帳とかIEのアドレスバーなど)か判断するAPIって
ありますか?

87 :デフォルトの名無しさん:03/02/14 02:48
IEのツールバーを作りたいと思っているのですが、
参考になるドキュメントなどを教えてください。
なにかキーワードでも構いません。Googleりますから。

88 :デフォルトの名無しさん:03/02/14 02:55
>>87 IDeskBand

89 :デフォルトの名無しさん:03/02/14 03:17
>>88

有難う御座います。
いろいろとリソースが見つかりました。

90 :デフォルトの名無しさん:03/02/14 09:26
>>80
'さ'?

>>86
多分、ない。
ウインドウクラスから判断するとかどうだろう?
どんな用途に使いたいの?

91 :デフォルトの名無しさん:03/02/14 10:05
DNSから任意のサーバのMXフィールドを取得するAPIとかって存在しますか?

92 :デフォルトの名無しさん:03/02/14 10:32
SHGetSpecialFolderPath(Handle,szPath,CSIDL_NETWORK,FALSE);
これでネットワークのパスを取得するとszPathにNULLが帰ってくるのですが
何か制限があるのでしょうか?
環境はWin98SEです

93 :デフォルトの名無しさん:03/02/14 10:47
Explorerで、アイコンをマウスドラッグで選択するときにでてくる選択枠とか、
ウインドウリサイズのときに出てくる枠というのは、専用のAPIがあるのですか?
rectangle()でやってたりするんでしょうか?


94 :デフォルトの名無しさん:03/02/14 10:56
>>93
専用のAPIがありますが、むしろrectangle()がいったいなんなのかすげぇ気になるんだが。

95 :デフォルトの名無しさん:03/02/14 11:18
>>94
矩形だろう。

96 :デフォルトの名無しさん:03/02/14 11:35
>>94
そのAPIを教えて下さい

97 :デフォルトの名無しさん:03/02/14 12:34
>>92
CSIDL_NETWORK はnamespace hierarchyにだけ存在して目に見えるファイルシステム
ではないためSHGetSpecialFolderPathのような物理的なファイルパスを求め
るようなものではエラーになる。デスクトップ上のパス(ショートカット)を求めるのなら
CSIDL_NETHOOD でしょう。ITEMIDLISTを求めるAPIではエラーにはならないよ。

98 :デフォルトの名無しさん:03/02/14 12:45
>>92
>>69


99 :デフォルトの名無しさん:03/02/14 13:04
>>91
調べてないけど DnsQuery とかでできないかな?

100 :デフォルトの名無しさん:03/02/14 13:32
100ゲト

101 :デフォルトの名無しさん:03/02/14 13:51
質問です
1:windowsプログラムはなぜ2つの関数に分けられているのか?
2:メッセージを用いたプログラムとOSのやりとりを採用しているのはなぜか?
3:WinMain関数においてWNDCLASS構造体をwindowsへ
  登録する処理が含まれるが、なぜそのような処理が必要なのか?

この三つがよくわからんので 教えてください

102 :デフォルトの名無しさん:03/02/14 13:55
>>101
1.んな?初期化とそのウインドウ用のイベントハンドラ群(御幣あり)
2.そうしたかった。としか。
3.クラスとインスタンスの関係だと思われ。

103 :デフォルトの名無しさん:03/02/14 13:58
Microsoftにたずねろ。

104 :デフォルトの名無しさん:03/02/14 14:02
>>101
1.EntryとWndProcを同じ関数にすることは不可能ではない
2.当時(今も?)、GUIと相性がよいと考えられていた
3.クラス登録は必須ではない


105 :このレスの1/3くらいはネタでできています:03/02/14 14:03
>>96
FocusRectとかFrameRect(FrameRgn)とかSetPixelとか

106 :デフォルトの名無しさん:03/02/14 15:05
GetClientRectでは、ツールバーやステータスバーの領域も含まれるようですが、
これらを除いた描画領域の大きさを取得するにはどうしたら良いのでしょうか?

107 :デフォルトの名無しさん:03/02/14 16:07
このスレにいる人間はいかほど?

108 :デフォルトの名無しさん:03/02/14 16:22
>>106
普通に差分を取ったらまずい?

109 :デフォルトの名無しさん:03/02/14 16:51
つーか、含まれるか?
どんなウィンドウだ? それ。

110 :デフォルトの名無しさん:03/02/14 20:21
自分で考えろよ、馬鹿。
俺はお前の相談屋じゃねーんだぞ。

111 :デフォルトの名無しさん:03/02/14 20:37
110先生 スレの存在意義を問う!

112 :デフォルトの名無しさん:03/02/14 20:37
>>51
出遅れたがひとことふたこと書かせてもらうぞ。
あんたがどこに書いたか知ってるような気がするな。
忘れたというんじゃそっちをフォローすることもできまいが少しは
申し訳ないと思ってるんだろうな?

本題はこれから。
プログラムを作る上でめちゃくちゃ重要なことだからよっく読めよ。
その「何処に書いたか分からなくなってしまう」ような作業習慣を改めろ!
やったことは全部メモしておけ!
目の前にコンピュータとテキストエディタがあるだろうが!
以上だ。

113 :デフォルトの名無しさん:03/02/14 20:40
そりゃ無駄だ。
奴らはそのメモしたものがどこにあるかすら思い出せないんだから。

114 :デフォルトの名無しさん:03/02/14 21:21
>>101
いい質問だ

反問ですまんが
1:なぜ関数は1つでなければならないのか?
2:アプリとOSがやりとりする手段は他に何があるか?
3:標準入出力にどんな特性が必要かを、誰が決めるべきか?
これらに対する、おまえさん自身の答えが
ヒントを豊富に含んでいるであろうと予言する

115 :デフォルトの名無しさん:03/02/14 21:27
>>106
そのツールバー 《とやら》 をSpy++でつぶさに観察せよ
因みにGetSystemMetrics()ではなくGetRgnBox()を使う性格の問題であろう
というのが漏れの感想だ

116 :デフォルトの名無しさん:03/02/14 21:29
>>93
MFCのCRectTracker::TrackRubberBand()あたりではないか?
あの関数は中でPatBlt()等を使った力業をやっているだけだったような...
このスレで答えられるのはここまでだ

117 :106:03/02/14 23:45
>>108
まずくないです。ただ、問題があるとすれば、ちょっと面倒かもしれません。
>>109
SPY++を見たところ、どのWindowのクライアント領域にもやはり、ツールバー
などが含まれてるようですが・・・

118 :デフォルトの名無しさん:03/02/15 00:04
>>117
(クライアント領域) - (ツールバーのGetWindowRect)
とかしか方法はないですよ。

119 :デフォルトの名無しさん:03/02/15 05:59
質問があるのですが、ウィンドウプロシージャをクラス内に隠蔽した場合、
サブクラス化を行う際に必要となるウィンドウプロシージャのアドレスを得るためには
クラスの(テンポラリーではない)インスタンスを生成する必要があるというのは
あまりにも当たり前のことなのでしょうか。プロシージャの差し替えだけのために
インスタンスを生成することに違和感を感じるのですが・・・。

//////////////////////////////////
class subclass {
static LRESULT WndProcMap(...); // プロシージャを選択的に実行
virtual LRESULT WndProc(...) = 0; // 実際のプロシージャは継承先で定義
void change(subclass* sc); // プロシージャをscのものに差し換える
};

class window : public subclass; // 基本となるプロシージャを含むクラス
class proc0 : public subclass; // 差し換えたいプロシージャその0を含むクラス
class proc1 : public subclass; // 差し換えたいプロシージャその1を含むクラス

window wnd;

/* Case 1 */
wnd.change(&proc0()); // こうできれば気持ちいいけど一時オブジェクトproc0()のアドレスを渡すのでもちろんエラー

/* Case 2 */
proc proc0;
wnd.change(&proc0()); // インスタンスを作ればOK
//////////////////////////////////


120 : :03/02/15 08:24
class A_base
{
   static A_base* _a;
public:
   virtual void aa() = 0;
   static void out(){ if( A_base::_a ) A_base::_a->aa(); }
   void change( A_base* p ){ A_base::_a = p; }
};
A_base* A_base::_a= 0;

class A : public A_base{ public: A(){ change( this ); } virtual void aa(){ std::cout << "A" << std::endl; } };
class B : public A_base{ public: B(){ change( this ); } virtual void aa(){ std::cout << "B" << std::endl; } };

extern "C" int _tmain( int argc, TCHAR* argv[] )
{
   A a;
   a.change( ( A_base* )&B() ); a.out();
   a.change( ( A_base* )&A() ); a.out();
   return 0;
}

こんな感じか? 参考にならない? だったら無視してくれ。

121 :120:03/02/15 08:30
上の class A は A a1, a2; って書いても同じ物をさしそうだな。
とりあえず役には立たなそうだ。

122 :デフォルトの名無しさん:03/02/15 11:50
初心者です、教えてください。
INPOCOMANCONTROLSEX構造体っていうのが本に載ってたのですが、
ヘルプで検索しても出てきません。
どんな構造体なんでしょう?


123 :デフォルトの名無しさん:03/02/15 12:11
インポコーマンコントロールセックス?

124 :デフォルトの名無しさん:03/02/15 13:07
>>122
ネタですか?















INITCOMMONCONTROLSEXの間違いだろうか、と心の中で思ってみる

125 :デフォルトの名無しさん:03/02/15 14:03
項目が多すぎて表示しきれないMENUの
スクロール方法を変えるにはどうすればよいのでしょうか?


126 :デフォルトの名無しさん:03/02/15 14:26
>>125
メニュー構造見直した方が良いかと。

127 :デフォルトの名無しさん:03/02/15 17:31
起動したexeの絶対パスを取得するようなAPIはありますか?
カレントディレクトリ = 起動したexeの絶対パス とは限らないですよね?

128 :名無し@沢村:03/02/15 17:38
>>127
GetModuleFileName()

129 :デフォルトの名無しさん:03/02/15 17:40
>>127
ガイシュツだと思うけどGetModuleFileName

130 :デフォルトの名無しさん:03/02/15 20:31
コンソールプログラムで、終了時にきちんと終了処理を行いたいのですが、
コマンドプロンプトの×ボタンで終了させられた場合、try{}cathc(...){}でも__try{}__finally{}でも
ひっかからないので、正常に終了処理が行えません。

終了イベントをトラップするにはどうしたらよいのでしょうか?

131 :デフォルトの名無しさん:03/02/15 20:36
>>130
SetConsoleCtrlHandlerはどうでしょう



132 :デフォルトの名無しさん:03/02/16 00:17
>>131
SetConsoleHandlerは別スレッドでハンドラがよばれるんでハンドラからthrowしても
メインルーチンのほうではcatchできないんですよ。

133 :119:03/02/16 02:13
>>120
どうもです。つまりプロシージャを指すメンバ変数をstaticにすることで
インスタンスなしに直接アクセスできるということですね。
それだとインスタンスごとにプロシージャを差し換えることができなくなりそうですが・・・。
なんだかプロシージャをクラスでラップすることの意義がわからなくなってきました。


134 :デフォルトの名無しさん:03/02/16 04:08
巨大なファイルをストリーミング処理するプログラムを書いています。(〜数GB)
読み込みにはReadFileExを利用し、読み込みバッファは5MByte程度です。
処理開始から暫く経つとスワップが行われるのか、他アプリへの切り替えにHDDアクセスが必要になります。

windowsのディスクキャッシュのアルゴリズムの問題と聞いたのですが、回避する方法はありませんでしょうか。
基本的に一度読み込んだデータにアクセスし直すことは無いので、
HDDへのキャッシュされないアクセス法があればいいのですが。

135 :デフォルトの名無しさん:03/02/16 04:13
データを保存しないのなら HDD は関係ないとかいう説は

136 :デフォルトの名無しさん:03/02/16 04:17
FILE_FLAG_NO_BUFFERING


137 :134:03/02/16 04:29
素早い御教授ありがとうございました。早速試してみます。

138 :デフォルトの名無しさん:03/02/16 16:39
レスは試した後でするもんだ

139 :デフォルトの名無しさん:03/02/16 16:55
質問です。
Windows98以降でのDirectShowで、Indeo5のCodecの有無の判定は、
HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum\{33D9A760-90C8-11D0-BD43-00A0C911CE86}\iv55
が開けるかどうかで行うことでよいですか?


140 :139:03/02/16 17:31
あ、レジストリキーの最後が変でした。 iv55じゃなくてiv50です

141 :デフォルトの名無しさん:03/02/16 18:32
>>139
スレ違い

142 :デフォルトの名無しさん:03/02/16 19:57
この質問このスレでいいのかな?

WINDOWS KEYなど一部のKEYを手前で止めたいのですが
DLLで普通にフックかけても素通りされてしまいます
NT系OSならばSetWindowsHookEx と WH_KEYBOARD_LL で
捕まえて止めることができましたが

98系OSで同じことをやるAPIはないですか? 無理?
調べたところSystemParametersInfoでスクリンセーバ中にして強引に止めるという
ものしか発見できませんでした

143 :デフォルトの名無しさん:03/02/16 22:01
CallNextHookEx() を呼ばずにリターンしてみる

144 :デフォルトの名無しさん:03/02/17 00:26
リッチテキストコントロールに表示される文字の文字間隔と行間隔を変更する方法をご存じの方いらっしゃいませんか?

145 :デフォルトの名無しさん:03/02/17 00:52
>>144
オーナードローとか言ったらど突き倒されるんだろうなと少し思った。

146 :デフォルトの名無しさん:03/02/17 00:54
windowsに標準で付いているサウンドレコーダーのように
マイクから音声を取り込んでる最中にその音量を表示したいのですが、
どのようにしたらいいか分かりません。
waveIn系のAPIを使って調べるしかないのでしょうか?
それとも他に使えるAPIなどあるのでしょうか?
どなたか分かる方よろしくお願いします。
言語はC/C++かVBです。

147 :デフォルトの名無しさん:03/02/17 02:29
表示前にツールチップのサイズを得るにはどうすればよいんですか?


148 :デフォルトの名無しさん:03/02/17 02:40
>>146
方向性はそれで良い。検索でソースとか見つければいいかと。
あとはDirectSoundとか・・

149 :142:03/02/17 06:35
>>143
レスありがとうございます
ダメみたいです

150 :デフォルトの名無しさん:03/02/17 10:21
>>144
EM_SETPARAFORMATとか言ったら押し倒されるんだろうなと少し思った。

151 :デフォルトの名無しさん:03/02/17 11:02
特別なフォルダを取得するAPIを教えて下さい

152 :デフォルトの名無しさん:03/02/17 11:21
>>151
SHGetSpecialFolderPath
SHGetSpecialFolderLocation
この辺のことか?

153 :デフォルトの名無しさん:03/02/17 11:45
>>152
ああ、それです、SpecialFolderって部分はわかってたのですが
フルスペルがわからなかったもので。
ありがとうございます!

154 :デフォルトの名無しさん:03/02/17 11:48
マウスの移動方向をAPIで取得する方法無いんでしょうか?
(DirectInput使う方法なら見つけたけど…)

前回座標との差分だと、画面端からさらにそっちに動かしたのが判らないし(汗

155 :デフォルトの名無しさん:03/02/17 12:03
画面端まで来たら反対側にワープ。
計算どうやるの?とかいうなよ。

156 :デフォルトの名無しさん:03/02/17 13:01
>>155
画面の一番右端にいるときにマウスを右に移動したのをどうやって判断するの?って
ことだろ。なにわけのわからんこといってんのよ?

157 :デフォルトの名無しさん:03/02/17 13:05
spy++使ってデスクトップで試してみたけど、
特別なメッセージは流れてなかったなぁ…

158 :デフォルトの名無しさん:03/02/17 13:21
メッセージレベルでは何も流れないだろうね。

159 :デフォルトの名無しさん:03/02/17 13:29
諦めて、画面端の場合はその方向にマウスを動かし続けていると見なす、とか。

160 :デフォルトの名無しさん:03/02/17 14:06
マウスドライバレベルで座標の変化を記録するしかないんじゃないの?

161 :デフォルトの名無しさん:03/02/17 14:42
教えてください
コンボボックスの表示スピード(下に伸びてくるスピード)を早くしたいのですが可能でしょうか?
可能でしたら、どういうメッセージを送ればよいのでしょうか?

よろしくお願いします


162 :デフォルトの名無しさん:03/02/17 15:43
LineToやTextOutで画面上に色々書いたのをけしたいのですが
現在は他のウィンドウを重ねて動かすという方法なのですが
何か良い消し方ないでしょうか?
描画させる?方法を教えて頂けませんか?

163 :デフォルトの名無しさん:03/02/17 15:56
>>162
それがわかればおそらくいい会社に就職できるでしょう.

164 :デフォルトの名無しさん:03/02/17 16:00
>>163
うぬぬ
もったいぶらずにお願いします

165 :デフォルトの名無しさん:03/02/17 16:04
>>164
一旦ウィンドウを閉じる

166 :デフォルトの名無しさん:03/02/17 16:06
デスクトップで最新の情報に更新するみたいな処理だと思うんですが
まったくわからずじまいでして、、、
お願いしますー

167 :デフォルトの名無しさん:03/02/17 16:06
>>162
おっきな四角を作ってそれで塗りつぶす。

168 :デフォルトの名無しさん:03/02/17 16:07
>>162
InvalidateRect, InvalidateRgn ?

>>163
???

169 :デフォルトの名無しさん:03/02/17 16:08
>>167
そのおっきな四角を消すのはどうするのでしょう?

170 :デフォルトの名無しさん:03/02/17 16:11
>>169
もっとおっきな四角で塗りつぶす。

171 :168:03/02/17 16:11
>>169
もっと大きな四角を(略

172 :168:03/02/17 16:11
省略しながら遅かった・・・(・ω・)ショボーン

173 :デフォルトの名無しさん:03/02/17 16:20
なんかだめぽ。。。
素直に最新の情報に更新をしてます。。、

174 :デフォルトの名無しさん:03/02/17 22:35
他アプリにメッセージ送信の仕方教えてください。

Alt + F4メッセージを送りたいのです。
API名だけでのいいんでよろしくです。

175 :デフォルトの名無しさん:03/02/17 23:02
>>162
XORで描いた四角の真上にもう一度XORで描くと元に戻るってやつかな?
SetROP2を調べてみたまい。

>174
PostMessage
メッセージはWM_SYSCOMMANDだったっけ?
「送信」とか「送る」とかいうとSendMessageと間違うな。

176 :gn355my0:03/02/17 23:27
>>175
微妙に違うと思う。GetClientRect()してFillRect()でいいんちゃうの?

177 :デフォルトの名無しさん:03/02/17 23:47
>>162
SendMessage(hwnd, WM_ERASEBKGND

178 :gn355my0:03/02/17 23:58
>>177
でもそれはちゃんと背景ブラシ設定してるかどうか。。。
ってウインドウを重ねて動かして消えるということは設定できてるってことですね。

179 :デフォルトの名無しさん:03/02/18 00:01
>>174
SendMessage

180 :デフォルトの名無しさん:03/02/18 01:49
多分この場合は、PostMessageの方が適切だね。
SendMessageだと、相手が応答不能な場合にこちらまで応答不能になるから。

181 :デフォルトの名無しさん:03/02/18 06:15
消した後で何か描画させるつもりならSendじゃないと不安が残るね
それからPostではあぼ〜んされてしまうメッセージもときどきある

182 :デフォルトの名無しさん:03/02/18 07:21
>>177>>179>>180
どーもでした。
SendMessage or PostMessageで普通に送れるんですか。
あとは、ウインドウクラス、ウインドウタイトル、実行ファイル名から
アプリ特定してHWND取得でいけるかなとおもた。

ちなみに偽メッセンジャー起動時にウインドウ開くの邪魔だったから

183 :デフォルトの名無しさん:03/02/18 07:33
>>162
SelectObject(hdc,GetstockObject(WHITE_BRASH));
Rectangle(hdc,-1,-1,9999,9999);

184 :154:03/02/18 07:33
>155-160
thx。
駄目ですか…。

>159
現状はカーソルが端に来たらちょっと戻すような処理?でごまかしてます。
当然カーソルの動きがぶれます(汗

>160
いや、ハード的にはマウスは座標の概念持ってなくて相対的な動きしか検出出来ないんです。
本来取れるはずの値が取れないのが不自然に思ったもので。

185 :デフォルトの名無しさん:03/02/18 11:01
ウィンドウハンドルからGetModuleFileNameを使って
起動パスを取得したいのですがGetModuleFileNameの第一引数には
どのAPIで取得したハンドルを渡せばいいのでしょうか?

因みに知りたいのは自分の自信のパスではなくてEnumWindowsで
列挙したハンドルのパスです。
よろしくお願いします。

186 :デフォルトの名無しさん:03/02/18 11:49
>>185
GetWindowLong ?

187 :デフォルトの名無しさん:03/02/18 11:50
>>184
まず、ClipCursor()でスクリーンより大きい矩形を指定してカーソルが外に
出られるようにする。しかしこうしても、カーソルがスクリーンの外にあるときは
メッセージが来ないから、タイマなりでGetCursorInfo()/GetCursorPosを呼んだらどうよ。

>>185
http://216.239.33.100/search?q=cache:TwFOROT3lsoC:www.microsoft.com/japan/support/kb/articles/J041/6/32.htm+JP175030&hl=ja&ie=UTF-8&inlang=ja

188 :デフォルトの名無しさん:03/02/18 12:30
>>185
GetModuleFileNameは自プロセス内のモジュールにしか使えない。
PSAPI(NT)かToolhelp32(9x)使え

189 :デフォルトの名無しさん:03/02/18 12:33
>>187
何でキャッシュなの?
http://support.microsoft.com/default.aspx?scid=kb;ja;175030

190 :デフォルトの名無しさん:03/02/18 12:41
>>182
(´-`).。oO( 偽メッセンジャーはメインウィンドウ非表示で起動できるじゃん・・・ )

191 :デフォルトの名無しさん:03/02/18 13:13
他のアプリのツリービューの背景色(文字色も)を変更することはできますか?
SendMessageあたりでいろいろ調べてるんですけど、まだ決め手となるものが
ありません。


192 :デフォルトの名無しさん:03/02/18 13:17
>>191
てめーのダサいデザインセンスを勝手に適用すんな。
画面のプロパティで設定するからいらん。

193 :デフォルトの名無しさん:03/02/18 13:33
>>192
禿同。

194 :162:03/02/18 13:55
あれからまた色々やったのですがだめでしたので、またご助言を、、
http://uniety.hp.infoseek.co.jp/mo.exe
を実行するとマウスの周りに色がぐちゃぐちゃっとなるのを消したいのです。
自分も相手もDelphiというのを使っておりまして、どうにかしたいのですが
そんなに詳しいわけでもなく知り合いに聞くとAPIとだけ言い残しただけ、、

どなたか助けて下さい。 それともDelphiのスレで聞くのがいいでしょうか

195 :191:03/02/18 13:56
古い人間なので、エディタでもなんでも、背景色は黒でないとダメなのですが、
Windows全体をその設定にしてしまうと、いろいろと不具合が出ます。
Windowsは、黒背景で使うようにはできていません。
ある特定のアプリの一部を変更したいだけです。


196 :デフォルトの名無しさん:03/02/18 13:59
背景が黒だと文字が見えないとか言ったりして。プププ

197 :デフォルトの名無しさん:03/02/18 14:16
> Windowsは、黒背景で使うようにはできていません。
Windowsはできてるよ
できてないのはその糞アプリ

198 :デフォルトの名無しさん:03/02/18 15:16
>>190
できました。
毎回毎回閉じてたのがばかみたい。
うざったいの消えていい感じ

199 :デフォルトの名無しさん:03/02/18 15:21
>>188
ありがとう。
ウィンドウハンドルで識別するためにGetWindowThreadProcessIdでProcessIdを取得して
Process32First等で取得したth32ProcessIDと比較してIDが一致したらって
やったのですが、一致するIDがあなませんですた。比較する対象が違うのでしょうか?

200 :デフォルトの名無しさん:03/02/18 15:24
お前のプログラムが違う
つーか>>187>>189がせっかくリンク張ってやってるんだから読めよ

201 :デフォルトの名無しさん:03/02/18 15:28
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS
を実行した瞬間に存在するプロセスのみが列挙されるはずですが
その辺のタイミングは大丈夫ですか?

202 :デフォルトの名無しさん:03/02/18 15:44
それを言い出したらウィンドウだって
列挙した瞬間のものしか取り出せないわけだが

203 :191:03/02/18 16:03
>197
一度黒背景設定でやってみてください。もちろん、文字色は明るい色で。
他社のアプリではなく、Windowsそのものの各所で、
見えなくなるところがでてきます。

ていうか、単にAPI調べてるだけなんですけど…。


204 :デフォルトの名無しさん:03/02/18 16:20
この板でWindows自体といったらAPIレベルの話しだべ

205 :デフォルトの名無しさん:03/02/18 16:21
>>203
Windowsの画面設定にはデフォで背景黒があったはずだが、
それもおかしくなるか?

206 :デフォルトの名無しさん:03/02/18 16:24
>>203
ちゃんと隅々まで設定しろよ。めんどくさけりゃ「ハイコントラスト 黒」とかにしたら?

207 :デフォルトの名無しさん:03/02/18 16:45
WNetOpenEnumでグループ名はゲットできたんですが、
そこから各コンピューター名はどうやってゲットすればいいのでしょうか?

208 :デフォルトの名無しさん:03/02/18 16:46
ォィォィ
>>194落としたらすごい事になったぞ
タスクバーの汚れきえねーよ

209 :名無し@沢村:03/02/19 00:27
>>199
ヌヒよ、GetWindowModuleFileName()では駄目なのか?

210 :デフォルトの名無しさん:03/02/19 00:43
駄目

211 :デフォルトの名無しさん:03/02/19 00:57
>>210
Why

212 :デフォルトの名無しさん:03/02/19 01:18
MDIアプリケーション(Photoshopみたいなもの)作ってるんですけど
パレットウィンドウやブラシウィンドウのように一つしか無いウィンドウ
のハンドルはグローバル変数にしてしまうのが一番スマートな方法なのでしょうか?

画像は複数個読み込むことが出来て、画像ごとにウィンドウを作成します。
そしてアクティブな画像ウィンドウは、パレットウィンドウやブラシウィンドウと
SendMessage()で必要な情報をやり取りする、という形なのですが…

213 :デフォルトの名無しさん:03/02/19 08:26
>>187
thx。
でも画面内にカーソルを置いたまま移動量がほしいので…
移動量だけ欲しいときはいいアイデアだと思いました。

>>194
すごいなこれ…
とりあえず最前面に画面と同じ大きさの窓を開いてすぐ閉じれば消えるかと。

214 :デフォルトの名無しさん:03/02/19 09:30
>>212
ハンドル解放後にハンドルに対する処理したら悲惨。


215 :デフォルトの名無しさん:03/02/19 11:13
>>211
NTではGetWindowModuleFileNameでも
他プロセスのモジュールのファイル名は取れないぽ

216 :デフォルトの名無しさん:03/02/19 21:38
>>212

モードレス ダイアログのハンドルは
オーナー ウインドウとメッセージ ループの両方で要るからなあ。

オーナー ウインドウにハンドルを預けておいて
メッセージ ループではSendMessageの戻りでがんがるって手もあるけど、
アプリケーション ユニークなオブジェクトなら
グローバルの方がかえってきれいじゃないか?

といってもHWND変数をextern宣言するのはいやだから
ちゃんと関数で隠蔽して。

217 :デフォルトの名無しさん:03/02/19 22:03
MAPISendMailについて教えてください。
これの4つ目の引数のflFlagsのフラグの意味がよくわかりません。
MAPI_DIALOG 、MAPI_LOGON_UI 、MAPI_NEW_SESSION
の使い分けってどういう風に行うのでしょうか?
ご存知の方がいたらご教授お願いします。

218 :デフォルトの名無しさん:03/02/19 22:29
>>217
http://msdn.microsoft.com/library/en-us/mapi/html/_mapi1book_c_mapisendmail.asp

219 :デフォルトの名無しさん:03/02/19 22:41
質問があります

WindowsXP上で赤外線通信を行うソフトを作ろうと
思ったのですが、どうやったら良いのでしょうか?
WinCEではIrSockを使うらしいことまでは分かったんですが・・・
XPでも同じで良いんでしょうか?

それと、WindowsXP標準の赤外線通信ソフトを無効にすることは
出来るのでしょうか?


Socket関係はあまり使ったことがなく、困っております
先達のお知恵を・・・


220 :86:03/02/19 22:51
以前>86で質問した者です。
>90
ネットが使えなかったので返事ができませんでした、すいません。
マウスをグローバルフックするDLLを作っり、ダブルクリックした場所が
テキスト入力可能な場所ならソフトウェアキーボードを立ち上げるような
プログラムを作ろうとしています。
テキスト入力可能か判断する方法が知りたいのですが。
メモ帳などのエディタだけでなくIEのアドレスバーなどでも判断できるようにしたいので
ウインドウクラスから判断するのは難しいと思うのですが。

221 :デフォルトの名無しさん:03/02/19 22:52
>>220
事実上不可能な気もします。

222 :デフォルトの名無しさん:03/02/19 23:14
>>220
IMEでも作るんですか?

223 :217:03/02/19 23:18
>>218
すいません。もちろんMSDNはちゃんと見ていますが、あの説明だけではとても理解できませんでした。
もしわかるのなら教えてもらえないでしょうか?


224 :220:03/02/19 23:20
>>222
IMEなんて代物は作れませんが、ダブルクリックで立ち上がるソフトウェアキーボードを作る感じです。

フックDLLは既に作ってますが、フォーカスイベントなどを処理すればなんとかなるのかなぁ・・・。

225 :デフォルトの名無しさん:03/02/19 23:30
そっか、IMEにしちゃえばいいのか。

226 :デフォルトの名無しさん:03/02/19 23:33
>>220
GetCaretPos()を実行して座標が0,0なら入力不可と仮定。
完璧じゃないけど。


227 :デフォルトの名無しさん:03/02/19 23:40
>>226
うん、Windowsのエディット関係使ってないやつとか。


228 :220:03/02/19 23:45
いろいろなレスありがとうございます。

IMEで調べるとImmSetOpenStatus関数が使えそうな気がしました。
IMEを開こうとして関数の戻り値が0以外ならテキスト入力可能だと判断できるような気もします。
この場合、無駄にIMEが開いてしまうという副作用もありそうですが・・・。


229 :デフォルトの名無しさん:03/02/19 23:51
>>228
だからあなたがIMEを作るんですよ。

230 :220:03/02/20 00:00
>>229
ああ、そういうことなんですね、やっと意味がわかりました(汗

IME作るのか、めんどくさそうな予感・・・。サンプルとか落ちてないのかな。

231 :デフォルトの名無しさん:03/02/20 01:44
lstrcpyとかは、引数にNULLを指定しても
エラーダイアログとかワトソン博士とか出て来ないのですが
戻り値でエラーが返るだけなんでしょうか?

232 :デフォルトの名無しさん:03/02/20 01:50
>>231
うん

233 :デフォルトの名無しさん:03/02/20 06:15
既出だとは思いますが、

FillMemory(lpDest, lpSrc, var)の
varがBYTE型なのですが、
32ビット固定小数点型をセットできる関数をはないですか?

ループでやれば出来るんですが遅いんです…

234 :デフォルトの名無しさん:03/02/20 06:42
既出だと思うなら探せよ

235 :デフォルトの名無しさん:03/02/20 07:30
>>233
結局どのデータ型も突き詰めればバイトストリームだってことさ。

236 :デフォルトの名無しさん:03/02/20 07:42
REP STOS (合ってる?

237 :デフォルトの名無しさん:03/02/20 07:48
メモリを32ビット値で埋める?
CopyMemoryしたほうがいいんでない?

238 :デフォルトの名無しさん:03/02/20 14:29
質問です。
HBITMAP CreateDIBSection(
HDC hdc, // handle to DC
CONST BITMAPINFO *pbmi, // bitmap data
UINT iUsage, // data type indicator
VOID **ppvBits, // bit values
HANDLE hSection, // handle to file mapping object
DWORD dwOffset // offset to bitmap bit values
);

これで*ppvBitsには確保されたメモリーのアドレスが格納されると思うのですが、
これって使い終わったら自分で解放しなきゃいけないんでしょうか?
もし解放しなきゃいけないならfreeですか?それともdelete?

239 :デフォルトの名無しさん:03/02/20 14:33
メモリの値を16進数で取り出すにはどうしたらいいんでしょうか?

240 :デフォルトの名無しさん:03/02/20 14:39
hSectionがNULLの場合は、 オペレーティング システムが
デバイスに依存しないビットマップのメモリを割り当てます。
後でDeleteObject関数を呼び出してデバイスに依存しない
ビットマップを削除すると、 オペレーティング システムが
そのメモリのハンドルをクローズします。

と書いてある

241 :デフォルトの名無しさん:03/02/20 14:52
>>239
値そのものは10進だとか16進だとか関係ありません。

取ってきた値を16進で表示したいならprintfでもつかえば?

242 :デフォルトの名無しさん:03/02/20 14:59
>>240
サンクス
今度から下の方までよく読みます

243 :239:03/02/20 15:19
>>241
ごめんなさい、よく分からないで質問してました。
WINAPI WinMain でprintfを使うにはどうしたらいいか分かりません。
stdio.hをインクルードすればmain()がないとエラーが返されてしまいます。
どのようにしたらよろしいのでしょうか?

244 :デフォルトの名無しさん:03/02/20 15:28
>>243
コンソールアプリケーションにすればいいよ。

245 :239:03/02/20 15:41
>>244
ウインドウとコンソールは一緒に出来ないんですね・・・
ありがとうございました

246 :デフォルトの名無しさん:03/02/20 15:56
引数に何も指定しなかったらウインドウで
指定したらコンソールって作れますか?
ちらっと変なウインドウとか出さずに。

247 :デフォルトの名無しさん:03/02/20 16:10
XPならAttachConsoleでできるかも

248 :デフォルトの名無しさん:03/02/20 16:10
>>245
できるよ

249 :デフォルトの名無しさん:03/02/20 16:13
>>245
AllocConsole すれば コンソールが出るし
窓とコンソールの両方を出す事も出来る


250 :239:03/02/20 16:45
やってみます、ありがとうございました

251 :デフォルトの名無しさん:03/02/20 16:45
AllocConsoleなんかしなくても
/subsystem:consoleのアプリから余裕でウィンドウを開けますが

252 :239:03/02/20 16:52
取り合えず、AllocConsoleでやってみたのですが、scanfを使っても勝手にDOS窓が閉じてしまいます。
解決法はないでしょうか?

253 :デフォルトの名無しさん:03/02/20 17:05
>>252
 コンソールアプリじゃないと、scanfとかは CRTが違うから初期化されてないわけで
 後から使う為には自前で初期化しないと・・・・ それは環境依存だね。

DelphiのWriteとかは直接出力可能なんだけどね。


254 :デフォルトの名無しさん:03/02/20 17:36
NT系ならstdoutやstdinを関連づけるだけで出来る

255 :239:03/02/20 18:06
自分でも調べてみたんですけど、WIN98とかなんで多分無理そうです。
ほかの方法考えます。
ありがとうございました。また聞きに来るかもしんないです

256 :デフォルトの名無しさん:03/02/20 20:38
>239
って当初の目的はメモリ内容の16進表示なわけだから、
コンソールにせずwsprintfとTextOutで表示すればいいと思われ。

257 :デフォルトの名無しさん:03/02/20 21:06
freopen("CONOUT$", "wt", stdout);

258 :デフォルトの名無しさん:03/02/20 22:09
WC_LISTVIEW や REBARCLASSNAME を
CreateWindowEx するとエラーになってしまいます
同じコードで "BUTTON" "EDIT" "LISTBOX" などは作ることができます。
インクルードやリンクのミスは無い筈です。
なにか思い当たる事が御座いましたら、教えてください。

InitCommonControlsEx には
   sizeof( INITCOMMONCONTROLSEX )
   0x3FFF
を入れてます。

#include <commctrl.h>
#pragma comment( lib, "comctl32.lib" )


259 :デフォルトの名無しさん:03/02/20 22:43
119さんの質問に便乗なのですが、コールバック関数をサブクラス化する場合、
ユーザーデータを渡せないコールバック関数(AbortProcやDrawStateProc)は
どのようにしてサブクラス化したら良いのでしょうか?

幸いAbortProc、DrawStateProc共にHDCが渡されるので
リスト構造で親クラスを作成し、以下のようにポインタをたどってHDCを探していけば解決できそうなのですが


BOOL CALLBACK AbortProc(HDC hdc, int iError)
{
   for(CBase *p = m_lpTop;p->m_lpNext;p = p->m_lpNext)
       if(p->m_hDC == hDC) p->OnAbortProc(iError); // サブクラス側の関数の呼び出し
}

ウィンドウプロシージャのように大量に生成されると予測できるものはこれでもよさそうですが、
滅多に使わないプリンタ関係のクラスにここまで大げさなモノはあまり作りたくありません。


どなたか、もっと簡単に実現できる方法をご存知でしたらぜひとも教えてください!
お願いします。


260 :デフォルトの名無しさん:03/02/20 22:55
>>256
これ知ってるとだいぶ違うから覚えておくといいよね

261 :名無し@沢村:03/02/20 22:59
>>239
OutputDebugString()

262 :tantei:03/02/20 23:00
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 24時間受付  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  hentaimtt@k9.dion.ne.jp
   グローバル探偵事務局 



263 :デフォルトの名無しさん:03/02/21 01:05
char aaa[] = "a,b,c,d,e";
char *ooo;

ooo = &aaa;

ってした時に、a[1]の値だけを*oooかoooを使って取り出すにはどうしたらよろしいのでしょうか?
よろしくお願いします。

264 :デフォルトの名無しさん:03/02/21 01:10
へー、これがWin32APIの質問ねー、ふーん

265 :デフォルトの名無しさん:03/02/21 01:14
ちんこが大きくなるにはどうしたらいいか教えてください!

266 :デフォルトの名無しさん:03/02/21 01:20
>>265
皮はむけ。

267 :デフォルトの名無しさん:03/02/21 01:24
SetFilePointerExがXPで使えない理由を知ってる人手を挙げて

268 :デフォルトの名無しさん:03/02/21 01:26
>>263
win32APIとどう関係があるのか?

269 :デフォルトの名無しさん:03/02/21 01:26
>>263 いちお、a[1]の ',' は
ooo = aaa;
ooo[1] 
で取り出せる。 と、釣られてみた。

270 :デフォルトの名無しさん:03/02/21 01:27
>>263
','でも取り出せるよ

271 :267:03/02/21 01:32
さっきの取り消し。

272 :デフォルトの名無しさん:03/02/21 02:42
>263 釣られてみるが
aaa[1]は取り出せるけどa[1] は知らん

273 :デフォルトの名無しさん:03/02/21 06:43
リストビューの現在選択されているインデックス番号の取得の仕方が分かりません
 ListView_GetItemPositionとかで出来ますか?

274 :デフォルトの名無しさん:03/02/21 06:49
>>273
ListView_GetNextItem

275 :デフォルトの名無しさん:03/02/21 06:53
>>273 LVM_GETNEXTITEM

276 :デフォルトの名無しさん:03/02/21 07:11
>>274
>>275
LVNI_ALL | LVNI_SELECTED と共に使用して出来きました。
感謝。

277 :デフォルトの名無しさん:03/02/21 07:52
>>263
誤>char *ooo;
正>char(*ooo)[10];
それから、このスレで聞くならTCHARくらい使え

278 :デフォルトの名無しさん:03/02/21 08:32
>>277
(゚Д゚)ハァ???

279 :デフォルトの名無しさん:03/02/21 10:44
>>278
本気で言ってるのか?
詳細を書いてないところがマジっぽい
釣り師ならいい腕だ

280 :デフォルトの名無しさん:03/02/21 10:46
>>277
すみません、_TCHARはダメですか?

281 :デフォルトの名無しさん:03/02/21 11:03
>>280
_TCHARはVC++固有(たいていのWin32処理系には互換のため
存在するけど)だからスレ違い

282 :デフォルトの名無しさん:03/02/21 13:22
>>278はTCHARではなく(*ooo)[10]にハァ?なのかと…

283 :デフォルトの名無しさん:03/02/21 13:57
配列へのポインタが分かっとらんということ?
やはり釣りじゃ…

284 :デフォルトの名無しさん:03/02/21 14:21
(*ooo)[10]の 10 はどこから出てきたのか教えて( ゚д゚)ホスィ・・・・

285 :デフォルトの名無しさん:03/02/21 14:22
そっか。"a,b,c,d,e" + '\0' で 10文字って事か。なーんだ。

286 :デフォルトの名無しさん:03/02/21 15:19
waveIn系のAPIなのですが、ステレオ入力の場合バッファに入力される値はWAVEファイルと同じで左右左右左・・・となるのでしょうか?

287 :デフォルトの名無しさん:03/02/21 15:25
Waveファイルと同じです


288 :デフォルトの名無しさん:03/02/21 15:48
特定のクライアント領域の大きさのウインドウを作るにはどうしたらよいのでしょうか。
CreateWindowで指定するのはクライアント領域ではなくウインドウの大きさですし、
GetClientRectはあってもSetClientRectはないです・・・

289 :デフォルトの名無しさん:03/02/21 16:05
一応AdjustWindowRect(Ex)つーのがある。あんまり役に立たんが。

290 :デフォルトの名無しさん:03/02/21 16:14
>>289

複数行のメニューとか作らなければ、それで十分だったんじゃ。


291 :デフォルトの名無しさん:03/02/21 16:24
>>290
複数行メニューを作ろうとしなくても、メニューのフォントサイズをユーザーが大きい物に
してるとメニューが複数行になっちゃったりする。
そして複数行になるかどうかは判断できない。

だから役に立たない。

292 :デフォルトの名無しさん:03/02/21 16:54
関連付けられたファイルを開くAPIですが、
WindowsMeで動くAPIを教えてください。
APIやらVB組み込み関数やら4つ試しましたがいずれも
2000では動きましたがMeでは動きませんでした。

293 :デフォルトの名無しさん:03/02/21 17:28
>>292
どのAPIでどんなコードがダメだったの?

ShellExecuteでいけてるみたいだけど

294 :デフォルトの名無しさん:03/02/21 17:44
>293

' ShellExecute 0, "open", "http://xxx.xxx..net/picture.asp?FileN=" & Index & ".jpg", vbNullString, App.Path, 1
ごめんなさい。ファイルの起動ではなくてブラウザの起動です。
ちなみに手元の本「VisualBasicTips1000+では、この関数Meは対応してないとかいてある。
あとWebでShellExecuteEXなるものを見つけて、いまためしてるところです。

ファイルは開くのですか・・・。

295 :デフォルトの名無しさん:03/02/21 17:47
openはつけない方がよい

296 :tantei:03/02/21 17:48
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 直通  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  hentaimtt@k9.dion.ne.jp
   グローバル探偵事務局 



297 :292:03/02/21 17:56
EXで動きました。











しかし原因が判明
Meで動作テストさせてるやつが、どうもこちらが最新のプログラムを渡してるのに、
そのプログラムを使わないで勘違いで古いやつをつかって動かないといっているだけだった。
スマソ

298 :デフォルトの名無しさん:03/02/21 19:29
>>297
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←Meで動作テストしてる香具師

299 :デフォルトの名無しさん:03/02/21 19:40
C++のwindows.hの宣言て

#inlcude <windows>
using namespace std;

ていう風にはできないの?

300 :デフォルトの名無しさん:03/02/21 19:42
>>299
無理です。windows.hはstd名前空間に包まれていません。

301 :bloom:03/02/21 19:49
http://www.agemasukudasai.com/bloom/

302 :仕様書無しさん:03/02/22 09:53
>>299
以下の内容のテキストファイル "windows" を、インクルードフォルダに作成しろ。

#ifndef _INC_STD_WINDOWS
#define _INC_STD_WINDOWS
namespace std {
#include <windows.h>
}
#endif

303 :デフォルトの名無しさん:03/02/22 10:27
なんでわざわざ std にするんだ? ms とかにしたほうがいいとおもうが。

304 :デフォルトの名無しさん:03/02/22 14:05
で、それでなんかいいことあるの?

305 :デフォルトの名無しさん:03/02/22 15:17
using namespace std; をつけないと、Win32のAPI関数の全てに
std::を付けなければならなくなる、それだけ。

306 :デフォルトの名無しさん:03/02/22 15:23
>>305
いやお前、ネームスペースのこと理解してるか?


307 :デフォルトの名無しさん:03/02/22 16:02
>>306
ん?言いたい事がよくわからんが。ただ、Win32 API関数名を
わざわざstd名前空間内に放り込んで何のメリットがあるのかと。

308 :デフォルトの名無しさん:03/02/22 16:43
>>307
そんな事は 299 に訊いてくれ。

309 :デフォルトの名無しさん:03/02/23 01:27
関数をDLL化して、その関数の中でコールバックは使えますか?

310 :デフォルトの名無しさん:03/02/23 01:57
どのコールバックか知らんけど
そのDLLがアンロードされないように気をつければいいんでないの

311 :デフォルトの名無しさん:03/02/23 03:35
ウィンドウアプリからコマンドプロンプトに値を送って表示させるにはどうすればいいでしょうか?
変数の確認用に使おうかと思いまして。


312 :デフォルトの名無しさん:03/02/23 06:18
ダイアログのハンドルからフォント情報を得るにはどうればよいのでしょう。
> STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
> CAPTION "ダイアログ"
> FONT 9, "MS Pゴシック"
たとえば↑のような場合に "MS Pゴシック", 9 といった情報を知りたいのです。

313 :デフォルトの名無しさん:03/02/23 06:24
WM_GETFONT

314 :デフォルトの名無しさん:03/02/23 12:10
Win32で文字列扱う時はどの型を使うのが一般的なんですか?
文字列型使いたかったらやはりMFCのCStringしかない?

315 :デフォルトの名無しさん:03/02/23 12:12
>>311
AllocConsole()、FreeConsole()

316 :デフォルトの名無しさん:03/02/23 12:15
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/tochigi/

317 :デフォルトの名無しさん:03/02/23 12:33
>>314
LPTSTR
というのは冗談で、アプリ側で好き好きに文字列型を決めていいと思う。
APIを呼び出す部分でwrapすればいいわけで。

318 :デフォルトの名無しさん:03/02/23 12:36
VC6SDK でWM_TIMERが急に動作しなくなったのですが
どうしてですか?

319 :デフォルトの名無しさん:03/02/23 12:41
>>318
settimer()を消した。

320 :デフォルトの名無しさん:03/02/23 12:43
漏れが良くやるのは WM_TIMER から OnTimer() のような関数を
呼び出してるつもりで、実は呼び出し忘れてたとか。

321 :デフォルトの名無しさん:03/02/23 13:02
Windows2000だかXPだかでそんな感じのWindowsUpdateがあったわけだが。

322 :デフォルトの名無しさん:03/02/23 13:06
void Testhoge(void){
char s[5];
int iRet;
//ローカルタイムを取得

GetLocalTime(&sm);
if(sm.wMonth=2) {
strcpy(s,"2月です。");
}else{
strcpy(s,"2月以外");
}
iRet = MessageBox(NULL,s,"アドバイス",MB_OK);

}

こういう関数をメッセージから呼び出すと必ずメッセージボックスのあと
エラーになるのですがなぜですか?

323 :デフォルトの名無しさん:03/02/23 13:18
char s[5];

で、

strcpy(s,"2月です。");


どういう神経してんだと。

324 :デフォルトの名無しさん:03/02/23 13:19
>>322
メッセージボックスを表示しないようにしてもエラーになると思う。

325 :デフォルトの名無しさん:03/02/23 14:10
(・∀・)チンポ!!

326 :デフォルトの名無しさん:03/02/23 14:45
全角文字は2バイトです。と書いておくか

327 :デフォルトの名無しさん:03/02/23 15:25
次は
char s[10];
でエラー出すと予想

328 :デフォルトの名無しさん:03/02/23 15:47
VisualBasicでいうForm1.Visible Hide
にあたるAPIはありますか?

329 :デフォルトの名無しさん:03/02/23 15:47
>>327 なぜ?

330 :デフォルトの名無しさん:03/02/23 15:49
>>329
char s[11]; としないといけないから。

331 :デフォルトの名無しさん:03/02/23 15:53
で、次に2月の2は半角ですよ、とくるわけか。

332 :デフォルトの名無しさん:03/02/23 15:54
>>331
2が半角なら問題ないわけだが。

333 :デフォルトの名無しさん:03/02/23 15:57
問題ないから>>327じゃエラー出ないだろと。

つーかこういうのつまんねーし、そもそもWin32APIじゃないからやめようや。

はい次↓

334 :デフォルトの名無しさん:03/02/23 16:04
↓ ↑
 →

335 :デフォルトの名無しさん:03/02/23 16:05
ガオガイガー 15話,,40,0,,1


336 :デフォルトの名無しさん:03/02/23 16:12
VisualBasicでいうForm1.Visible Hide
にあたるAPIはありますか?


337 :デフォルトの名無しさん:03/02/23 16:15
>>336
ShowWindow

338 :デフォルトの名無しさん:03/02/23 16:24
>>337
どうもです。
ついでに表示しない状態で起動するにはどうしたらよいのでしょう?
WM_CREATEに書いたらだめでした。

339 :デフォルトの名無しさん:03/02/23 16:41
WM_CREATE は CreateWindow の処理中に送信されるからな。
ここで消しても CreateWindow() の後で ShowWindow()を
呼び出してたらまた表示される。

340 :名無し@沢村:03/02/23 17:55
>>338
ヌヒよ、CreateWindow()に渡すウィンドウスタイルからWS_VISIBLEを外せ。

341 :デフォルトの名無しさん:03/02/23 18:08
底なし沼にいる気分だ・・・
プログラミング始めたばかりの頃の気分と
似てるな、右も左もわからず、おれには
無理と諦めていたあの頃・・・

342 :341:03/02/23 18:14
すみません。マ板と間違えますた。

343 :デフォルトの名無しさん:03/02/23 18:30
>>341
結局その泥沼から自分で這い出せた奴のみがプログラマになれるわけで。


344 :312:03/02/23 22:09
> 313
> WM_GETFONT
すみません、質問の仕方が悪かったです。
ウィンドウ(今回はダイアログ)に指定されているフォントに対応する LOGFONT を得るにはどうしたらよいでしょうか。
以下のメンバさえ分かれば他はかまいません。
どうかよろしくお願いします。

typedef struct tagLOGFONT {
LONG lfHeight;
LONG lfWeight;
BYTE lfItalic;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;

345 :デフォルトの名無しさん:03/02/23 22:23
>344
GetObject

346 :デフォルトの名無しさん:03/02/24 00:23
>>318
もしかして、これと関係ある?
http://pc2.2ch.net/test/read.cgi/tech/1018239290/727

347 :デフォルトの名無しさん:03/02/24 00:30
>>318
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/security/bulletin/ms02-071.asp
ここの 2003/02/08 追記のことかい?

348 :デフォルトの名無しさん:03/02/24 01:02
シェルエクステンション詳しい人いらっしゃいますか?
海外のサンプルを試行錯誤しながらいじくり回して
やっと少しずつ理解(?)できてきました。
でも、C、VC系って仕事でもほとんどやったことないから
難しい〜〜〜〜。
まだ、わからないところもあやふやなのでまとまったら
質問しまつ。そのときはよろしくです。

349 :デフォルトの名無しさん:03/02/24 01:53
>>348
もっと沢村風に書け

350 :ヌッヒー沢村 ◆4DRE6TAt5Q :03/02/24 01:54
呼んだ?

351 :309:03/02/24 18:19
>>310
レス遅くなってすみません。
DLLがアンロードされないようにって言うのは具体的にどのようにすればよろしいのでしょうか?
と言うか、どう言うことかよく分かりません。呼び出したDLLから抜け出さなければよいって事でしょうか?

352 :デフォルトの名無しさん:03/02/24 18:32
具体的にって・・・
まずどのコールバックか書くのが先じゃないか?

353 :309:03/02/24 20:33
>>352
すいません。WndProcってやつです

354 :デフォルトの名無しさん:03/02/24 22:14
WINDOWINFO 構造体や、GetWindowInfo 関数を使うと
『定義されていない識別子です』となり、コンパイルが通りません。
windows.h をインクルードするだけでは使えないのでしょうか?

355 :デフォルトの名無しさん:03/02/24 22:16
>>354
windowsx.hをインクルードしろ。

356 :デフォルトの名無しさん:03/02/24 22:18
>>354
そんな関数や構造体がないのでは?

357 :354:03/02/24 22:28
>>355
すみません、やってみましたが無理でした…

>>356
一応MSDNには載ってたんですけど、どうなっているんでしょう。

358 :デフォルトの名無しさん:03/02/24 22:30
>>357
SDKが古いのだよ。

359 :デフォルトの名無しさん:03/02/24 22:31
>>357
> Windows NT/2000/XP: Included in Windows NT 4.0 SP3 and later.
> Windows 95/98/Me: Included in Windows 98 and later.

と書いてあるのであれだ、_WIN_VER とか何かそういう
バージョン指定の #define をしなけりゃ使えないはず。

360 :354:03/02/24 22:42
>>358-359
今までそんなこと全然気にせずにやってきたので
何がなんだか分かりませんでした。
ええと、VCにサービスパックか何かを当てる必要があるのでしょうか?
それとも、#defineするだけで良いのですか?VCは6.0なのですが…

361 :デフォルトの名無しさん:03/02/24 23:09
>>360
#defineの値が重要だよー。
いくつにするかはヘッダファイルにgrepすればわかるでしょ…。

362 :デフォルトの名無しさん:03/02/24 23:24
>>360
今となってはVC++6は「新しい」とは云いかねるものであって、
事実VC++6のSDKヘッダは最新の物よりかなり古い。
もしVC++6のSDKヘッダに含まれていない新しい機能を使いたいのであれば、
MicrosoftのPlatform SDKダウンロードページから、新しいのを落とす必要が或る。
MicrosoftはVC++6のSPに新しいSDKを入れる気はないようだね。
バージョン絡みのマクロだが、大きくは
1) OSのバージョン(WIN_VER)
2) IE(shell)のバージョン(_WIN32_IE)
があるんで注意。勿論、普通はコンパイラに対して-Dオプションで
渡すだけでよい。SDKのinclude/にあるWin32.makあたりも参考にしる。


363 :デフォルトの名無しさん:03/02/24 23:42
waveIn系のAPIで音声をマイクから録音するとき、録音している最中に録音している音がスピーカーから出ないようにする方法は無いでしょうか?

364 :354:03/02/24 23:44
いろいろとアドバイスありがとうございます。

とりあえず、ヘッダファイルの中に
#define WINVER 0x0500
というのを見つけたので、よく分からないけど
プログラムの先頭の部分で#define WINVER 0x0500としたらコンパイルは通りました。

今までこういう勉強をしてこなかったのでわけ分からないですが
いろいろ調べて理解できるようになりたいです。

365 :354:03/02/24 23:58
ええと、WINDOWINFOみたいな
#define WINVER 0x0500
で使えるようになったものを使うと

> Windows NT/2000/XP: Included in Windows NT 4.0 SP3 and later.
> Windows 95/98/Me: Included in Windows 98 and later.

にあるように、NTのSP3より古いのでは実行できなくなる、って解釈でOKですか?

366 :デフォルトの名無しさん:03/02/25 02:34
WINAPIでウィンドウを作らずにプログラムを実行するってことは出来るのでしょうか?

367 :デフォルトの名無しさん:03/02/25 02:47
できる

368 :デフォルトの名無しさん:03/02/25 03:00
じゃあ、DLL化したときにウィンドウを作るってのはできますか?

369 :デフォルトの名無しさん:03/02/25 03:19
apiの定数とか全て網羅したファイルは何処のありますか?
フリーのapiビュアー付属の物にはは、SS_NOTIFYなどが
載ってないみたいでした。

370 :デフォルトの名無しさん:03/02/25 03:56
>>369
Include

371 :デフォルトの名無しさん:03/02/25 06:07
>>368
できるけどそのウィンドウはDLLじゃなくてexeが所有する

372 :デフォルトの名無しさん:03/02/25 07:04
リストボックスは WM_CTLCOLORLISTBOXで文字色を変えれたけど、
リストビューコントロールの場合はどのようにするか教えてください。

373 :デフォルトの名無しさん:03/02/25 07:37
自己レス
SendMessage( hWndLView, LVM_SETTEXTCOLOR, 0, RGB(255,255,250) );
で出来ました。

374 :368:03/02/25 09:15
>>371
int __declspec(dllexport) __stdcall WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style= CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc= WndProc;
winc.cbClsExtra= winc.cbWndExtra= 0;
winc.hInstance= hInstance;
winc.hIcon= LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor= LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName= NULL;
winc.lpszClassName= TEXT("ahohhh");

if (!RegisterClass(&winc)) return -1;

いきなりこれで-1が返って来てしまうんですが、どうしてかわかりません。
EXEの時には作れてたと思うんですが・・・

375 :デフォルトの名無しさん:03/02/25 09:35
そのWinMainはどうやって呼び出してる?

376 :368:03/02/25 09:44
ごめんなさい、呼び出す時に変な変数はいってました。
助言ありがとうございました。

377 :368:03/02/25 11:39
またまた、すみません。
WinMainを呼び出す時に値を渡したいときはどうしたらよろしいのでしょうか?
もしくは、値を渡さず呼び出すにはどうしたらいいでしょうか?
(HINSTANCE hInstance などに値が入らないようにしたいのです )

378 :デフォルトの名無しさん:03/02/25 11:45
>>377
>値を渡さず呼び出すには
無茶いわないの。

379 :368:03/02/25 11:52
ごめんなさい、ここらへんのことあまりよく分かってなくて・・・
ほかの関数からWinMainを呼び出して、HINSTANCE hInstanceの値を使う時ってどうすればいいのですか?


380 :デフォルトの名無しさん:03/02/25 11:58
>>379
何がやりたU co82だよ・・・

381 :380:03/02/25 11:59
何か化けた・・・

「何がやりたいんだよ」と書いたんだが

382 :デフォルトの名無しさん:03/02/25 12:30
WinMain関数をそのままdllに移してるって事?
で、先のWinMainはプログラムエントリではない、と。

383 :デフォルトの名無しさん:03/02/25 13:10
>__stdcall WINAPI
これって2度同じこと書いてることにならない?

384 :368:03/02/25 14:07
>>382
もう全部書いちゃいますと、VBからCとAPIで作ったDLLを呼び出して、
そのDLLでウィンドウを作る。
作ったウィンドウの中で作業し(コールバック等も使用)値をまたVBに戻す
ってことをしたいと思ってます。
ですので、呼び出す関数はWinMainじゃなくてもいいので、ウィンドウを作成して
hInstance等の値さえ取れればどう言う方法でもかまいません。

>>383
すいません、そこら辺はコピペでやってたのでよく分かりませんでした・・・


385 :デフォルトの名無しさん:03/02/25 14:08
スレ違いかもしれませんが他によさげなスレがないのでここで質問します。

Shell Namespaceでごみ箱やマイコンピュータのような仮想フォルダ(アイコン)を
デスクトップ上に作成しました。
この時、このアイコンに他のファイルをD&Dし
そのファイルに対して何かしらの処理を行いと思います。
Shell ExtensionのようにレジストリにDropHandlerを定義し
DLLにIPersistFileとIDropTargetをインプリメントすれば可能かと思いましたが
アイコン上にドラッグしても何も反応しませんでした。
このイベントを取得するにはどのようにすればいいのでしょうか。
Shell Extensionでは上手くいっているのですが。


386 :デフォルトの名無しさん:03/02/25 14:17
>>384
DllMain使ってる……よね?

387 :368:03/02/25 14:37
すみません、ほんと初心者なもので・・・
DllMainってただの宣言か何かだと思ってました・・・
で、DLLが他のプログラムから呼び出されるとまず最初にDllMainが実行されて、
それから呼び出した関数が実行されるって感じでよろしいのでしょうか?
それで、hinstDLLがhInstanceに当たる物って事でよろしいでしょうか?

388 :デフォルトの名無しさん:03/02/25 14:46
HINSTANCEの値が欲しいだけ?
だったら、GetModuleHandle(NULL)がヨロシ

389 :デフォルトの名無しさん:03/02/25 15:14
DLLでウィンドウ作るときってDLLとexeのどっちの
hInstance渡すの?

390 :368:03/02/25 15:27
>>389-389
DLLです。
ってことはGetModuleHandle(NULL)をDLL内で指定すればどこでもDLLのhInstanceが得られるってことですね?

391 :デフォルトの名無しさん:03/02/25 15:32
あれ?DLLでGetModuleHandle(NULL)すると呼び出したEXEのハンドルが返らなかったっけ?
あやふや、スマン。

392 :デフォルトの名無しさん:03/02/25 15:34
GetModuleHandle(NULL)の返り値は呼び出し側プロセスの作成に使われたファイルのハンドル。

DLLのHINSTANCEが欲しいならDllMainの引数保存しとけ。


393 :368:03/02/25 16:33
ありがとうございます。
その方向で行かせてもらいます。

394 :デフォルトの名無しさん:03/02/25 17:24
ウィンドウを作らない時のコールバックはどのようにしたらよいのでしょうか?
WinMainに返すってことは出来るのでしょうか?


395 :デフォルトの名無しさん:03/02/25 17:44
コールバックが何を指してるのか意味不明

396 :デフォルトの名無しさん:03/02/25 18:15
関数が返す値を整数で2つ以上にすることは出来るでしょうか?

397 :デフォルトの名無しさん:03/02/25 18:18
>>396
構造体に入れてそれを返せばできる。

398 :デフォルトの名無しさん:03/02/25 18:19
>>397
ありがとうございます。

399 :デフォルトの名無しさん:03/02/25 19:20
>>396
std::pairもしくはboost::tupleを使え。

400 :デフォルトの名無しさん:03/02/25 19:36
余裕でキリ番ゲット

401 :デフォルトの名無しさん:03/02/25 20:07
もうぜんぜんAPIの質問じゃないな

402 :デフォルトの名無しさん:03/02/25 22:40
ものすごく初歩的な質問ですみません。
C、C++をフリーのコンパイラを使って勉強してるんですが
Win32APIはVBかVC++環境でしか使えないんでしょうか?
Win32API関連の書籍の冒頭部分を読むと大抵の本はそのふたつの環境の
ことを前提に書いてあるようなので…。
全部読めばわかったのかもしれないんですけど
2時間ほど本屋でいろいろ読んでたら店じまいになってしまったので
ネットで検索したんですが、どこみてもVC++前提なんで…
C、C++とフリーコンパイラ環境では無理なんでしょうか?
Windowsプログラムつくりたいんですけど
フリー環境では無理があるでしょうか?

403 :デフォルトの名無しさん:03/02/25 22:54
そのコンパイラ環境とやら次第だな。

404 :402:03/02/25 22:59
LSI C-86 Ver.3.30試食版っていう
Cの入門書についてたやつをそのまま使っています。

なにやらgccやbccのほうが人気があるようですが…

405 :デフォルトの名無しさん:03/02/25 23:01
>>404
LSI-Cの試食版ではWindows GUIのプログラムは作れないよ。
せめて Borland-C++ 5.5.1 にしとけ。
windows.h をインクルードすれば、Win32API関数は使える。

406 :402:03/02/25 23:09
>>403,405
返答ありがとうございます。
助かりました。
Cの入門書をひととおり終えて
今更ながら
「Cってwindows専用の言語でもなんでもないからwindowやwindowsの
オブジェクトを扱う関数なんてどにも載ってなくて当たり前か…」

などと絶望に打ちひしがれていた馬鹿者です。
Borland-C++ 落としてwindos.hを#includeすれば
使えるのなら、Win32API関連の本を買っても無駄な出費には
ならないようですね。
結構高い上にやたら分厚いものなので買うかどうか悩んでました。

407 :385:03/02/26 00:10
何のレスも無い状態で流れてしまったのでもう一度だけ。

Shell Namespaceでごみ箱やマイコンピュータのような仮想フォルダ(アイコン)を
デスクトップ上に作成しました。
この時、このアイコンに他のファイルをD&Dし
そのファイルに対して何かしらの処理を行いと思います。
Shell ExtensionのようにレジストリにDropHandlerを定義し
DLLにIPersistFileとIDropTargetをインプリメントすれば可能かと思いましたが
アイコン上にドラッグしても何も反応しませんでした。
このイベントを取得するにはどのようにすればいいのでしょうか。
Shell Extensionでは上手くいっているのですが。

408 :デフォルトの名無しさん:03/02/26 00:32
>>407
適当に答えるけど、SHChangeNotifyRegisterで監視するってのはどうよ。

409 :デフォルトの名無しさん:03/02/26 02:02
>>406
今あなたと同じようにBorland-C++でWin32API学んでます。
もしまだインストール等何もしていないのなら、
以下のホームページが参考になります。

ttp://www.neco.nu/gohodoji/index.html
ttp://homepage1.nifty.com/tyuuki/old/cc/bcc_install.html

それとインストール後は>>1
「猫でもわかるプログラミング」という
ホームページが参考になります。

410 :385:03/02/26 02:57
>>408
すみません、MSDNにも載ってなかったので調べるのに時間がかかりました。
しかしこればWindows2000以降でしか使えないようですね。
それにウィンドウにメッセージが送られるみたいですが
Shellなのでウィンドウなど持っていませんし
仮にダミーを作っておく事も出来ますがあまりにスマートでないです。
何かレジストリに登録して何かをインプリメントすればShellから呼ばれるはずです。
レジストリの何処に何を登録して、DLLに何をインプリメントするのか、それが判るといいのですが。

411 :デフォルトの名無しさん:03/02/26 03:05
低レベルサウンドAPIを使っているのですが、バッファ再生終了までの期間
mainの処理を待たせたいのですが、この場合どういう方法がありますか?
Sleepのような関数があれば良いのですが、ざっと見た所ない様子だったので
スレッドを使ってメインルーチンとの同期を取るべきなのでしょうか。
それともWaitSingleObject何とかオブジェクトを使って同期をとるのが
良いのでしょうか?


412 :デフォルトの名無しさん:03/02/26 03:50
コールバック関数使用してWOM_DONEとか

413 :402:03/02/26 05:21
>>409
ありがとうございます。
本当に助かります。

ようやく何を勉強すればいいのかが
わかりました。

414 :デフォルトの名無しさん:03/02/26 06:35
NICのインタフェース名一覧を取得するにはどうしたらよいですか?
※「ローカル エリア接続」みたいなやつ。

415 :デフォルトの名無しさん:03/02/26 06:46
Win32APIと.NETの関係を教えてください。

416 :デフォルトの名無しさん:03/02/26 06:51
>>415
あかの他人

417 :デフォルトの名無しさん:03/02/26 06:52
>>415
低レベル関数ライブラリと高レベルクラスライブラリ

418 :デフォルトの名無しさん:03/02/26 06:52
これからWin64APIも出るの??

419 :デフォルトの名無しさん:03/02/26 07:13
いや、これからじゃないし。

420 :デフォルトの名無しさん:03/02/26 07:51
>407
Shell Commandオブジェクト
ってゆうのは?
使ったこと無いけど。

421 :デフォルトの名無しさん:03/02/26 09:56
あの分厚いリファレンス本買う金があるなら、
同じくらいの金額でC++Builder Personal買った方が便利な気もするが

422 :デフォルトの名無しさん:03/02/26 13:27
while(GetMessage(&msg , hwnd , 0 , 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DLL内で、このループとコールバックを使って制御しようと思ってるのですが
ウィンドウの×ボタンを押すと
case WM_DESTROY:
PostQuitMessage(0);
return 0;
となりループが終わり閉じるようにしています
しかし、これをやるとDLLを呼び出す側の親ウィンドウも閉じてしまいます
解決法はないでしょうか?

423 :デフォルトの名無しさん:03/02/26 13:37
>>421
なんの本?

424 :デフォルトの名無しさん:03/02/26 13:52
ウィンドウを破棄する関数ってありますか?

425 :デフォルトの名無しさん:03/02/26 13:53
>>422
WM_CLOSEを処理してみれば

426 :デフォルトの名無しさん:03/02/26 13:55
>>424
DestroyWindow()

427 :デフォルトの名無しさん:03/02/26 14:20
>>422
PostQuitMessageとGetMessageの仕組みを良く理解してみよう

428 :422:03/02/26 14:37
>>427
どう言うことかさっぱりわかりません・・・
PostQuitMessageから受け取ったメッセージをGetMessageはさらにどこかに送ってるとかのことですか?


429 :デフォルトの名無しさん:03/02/26 15:41
コンパイラそのものというよりリソースエディタと
デバッガがないととてもやってらん・・・

430 :デフォルトの名無しさん:03/02/26 15:44
>>429
低脳(w

431 :385:03/02/26 15:50
>>420
有難うございます。
調べてみましたがそれはダブルクリックをした際の動作の設定みたいです。
いわば関連付けと同じ物のようです。
D&D時の呼び出し方法なのでこれとは残念ながら違いました。

432 :デフォルトの名無しさん:03/02/26 16:07
>>428
アプリケーションはWM_QUITで終了するように作られてるわけだよね?
GetMessageはWM_QUITを受け取ると0を返すから、
whileを抜けるようになっているわけだ。

PostQuitMessageを削除すれば望みの動作になるんじゃないかな?

433 :デフォルトの名無しさん:03/02/26 16:14
>431
Command=REG_EXPAND_SZ:"rundll32 ..."
の部分を
Command=REG_EXPAND_SZ:"Hoge.exe %1 ..."
のようにすれば、もしかしたらドロップした時に%1には
パス名がついて起動されるのかな、と思ったのだけど。

434 :422:03/02/26 16:47
ごめんなさい、すっごく私の書き方が悪かったです。
EXEで一度ウィンドウを開いて、DLLを呼び出してさらにそのDLL内で別のウィンドウをもう一つ開こうとしています。
だから、結局、親ウィンドウと子ウィンドウの2つが開かれるわけです。
で、DLLで開かれた子ウィンドウのほうを閉じると親ウィンドウも閉じてしまうのを直したかったのですが・・・

それと、もう一つ不具合が・・・(T_T)
DLL側の子ウィンドウですが、DLLにせずEXEにすると起動して計算しすぐに閉じるようなプログラムにしてあります。
それをそっくりそのままDLLにしたら起動して計算後ウィンドウが消えずに残ってしまっています。
DestroyWindow()を使ってもいいのですが、ウィンドウが残ってるってことは、まだDLL内のプログラムは動いてる(ループしてる?)ってことなんですよね?
しかも、調べてみたらreturnの値が返って来てる・・・
どうしたらいいか全然わかりません。
どなたか助言お願いします。


435 :258:03/02/26 17:18
どなたか助けてください。
>>258


WC_LISTVIEW を
TEXT( "SysListView32" ) と TEXT( "SysListView" ) に変えてみたところ、
前者はエラー、後者は通ります

#define _WIN32
#define WINVER 0x0400
#define _WIN32_IE 0x0400
#define _WIN32_WINNT 0x0400

comctl32.lib のバージョンは 5.80 です

436 :デフォルトの名無しさん:03/02/26 17:19
訂正:
comctl32.dll のバージョンは 5.80 です


437 :385:03/02/26 17:53
>>433
それだと例え出来たとしても普通のexeにドラッグするのと同じようになるかと。
引数制限も出るだろうしシェルの意味が無くなってしまいます。

438 :デフォルトの名無しさん:03/02/26 17:55
>>434
良く分かんないけど、dllとexe(子と親)それぞれメッセージループを持ってるってこと?
マルチスレッドならともかく、シングルスレッドでそれをやるのはヘン

439 :422:03/02/26 18:12
>>438
うぁ、もしかして分けわかんないことしてますか?
ほんと初心者で・・・APIとか最近知ったばかりで・・・
私の最終的にやりたいことはDLLの関数を呼び出すと今マイクから入ってきている音量を返すって
ことをやりたいだけなのですが、調べてるうちにどんどんわからなくなってしまいました・・・
もしかして、コールバックとかウィンドウ作ったりしなくても出来ちゃったりします?

440 :デフォルトの名無しさん:03/02/26 21:43
>>439
いい加減自分で調べろ

441 :414:03/02/26 23:55
放置かよ!

442 :デフォルトの名無しさん:03/02/27 00:26
雑談スレから流れてきました
DLLについて聞きたいのですが…
/* begin */
int x = 3;

BOOL WINAPI
DllEntryPoint(HINSTANCE hinst, DWORD whyCalled, void* rsv)
{
  return(TRUE);
}

/* 以下にxを使うような関数が並ぶ */
/* end */
こういうファイルからDLLを作ったとします。
このDLLが、なんらかの実行ファイルから
LoadLibrary()されたとします。

外部変数のxは、メモリのどこらへんに
あるのでしょうか?
メモリにロードされたDLLの中ですか?
だとしたら、複数の実行ファイルが
1つのDLLをロードしたら、xについて
競合がおきるのでしょうか?

あと、3で初期化するように書いてますが
いつ初期化されるのでしょう?

また、constで修飾していませんが、
DLL内の関数で、自由にread/writeしたら
呼んだ実行プロセスの方に影響しますか?

443 :デフォルトの名無しさん:03/02/27 01:30
> メモリにロードされたDLLの中ですか?
はい。
> だとしたら、複数の実行ファイルが
> 1つのDLLをロードしたら、xについて
> 競合がおきるのでしょうか?
起きません。デフォルトでプロセスごとに別々の
物理メモリが割り当てられます(共有させることも可能)
> あと、3で初期化するように書いてますが
> いつ初期化されるのでしょう?
DLLがプロセスのアドレス空間にマップされた瞬間です。
DLLのイメージに初期値がすでに含まれています。
> また、constで修飾していませんが、
> DLL内の関数で、自由にread/writeしたら
> 呼んだ実行プロセスの方に影響しますか?
意味がわかりません。

444 :デフォルトの名無しさん:03/02/27 04:22
コンソールアプリでメッセージを受ける部分があります

while(メッセージ判定){
}

でウィンドウに送られてくるようなメッセージ待ちをしているのですが、待ちの
間CPU消費が大きいです。よい方法はありますか?

445 :名無し@沢村:03/02/27 04:44
>>444
WaitMessage()

446 :444:03/02/27 06:24
ありがとうヌッヒー沢村。きみわ正義の味方だね。でもあまり役に立たなかった
けれど。
僕はWaitForSingleObjectを使えるように努力しようと思うよ。ヌッヒー。

447 :デフォルトの名無しさん:03/02/27 07:19
>>444
ごく普通にGetMessageではいかんのか?

448 :デフォルトの名無しさん:03/02/27 07:33
>429
lccwin32は?
リソースエディタだけ使いまわす手もある。

449 :デフォルトの名無しさん:03/02/27 09:46
lcc-win32でOLELoadPicture()が使えないんですが
なんかヘッダがおかしい様で
誰か回避した猛者はいませんか


450 :422:03/02/27 10:04
すみませんでした、もうちょっと自分で勉強してみます。

451 :デフォルトの名無しさん:03/02/27 12:07
WM_CREATE見たいな自分で作ったメッセージをコールバックのメッセージキューに入れることはできますか?

452 :デフォルトの名無しさん:03/02/27 12:22
できます

453 :デフォルトの名無しさん:03/02/27 14:22
どこに書こうか迷ったけど、XP用APIが追加されるってことで一応ここに。

Microsoft、Windowsに依存するP2Pアプリの開発促進
http://www.zdnet.co.jp/news/0302/27/ne00_p2p.html

> 同社は2月26日、「Windows XP Peer-to-Peer Software Development Kit」の
> ベータ版をリリース。このソフト開発キットの狙いは、ソフトプロバイダーや企業の
> 開発者がWindows XP対応のP2Pアプリケーションを容易に構築できるように
> することにある。


454 :名無し@沢村:03/02/27 17:02
>>446
MsgWaitForMultipleObjects()

455 :デフォルトの名無しさん:03/02/27 17:12
CALLBACK_FUNCTIONやCALLBACK_THREADはCALLBACK_WINDOWでのウィンドウハンドルに当たるところに
何を指定すればいいのでしょうか?

456 :422:03/02/27 18:39
プログラム板の皆さんありがとうございました。
おかげで目的のものが作れる目処が立ちました。
ほんと、ありがとうございました。

457 :442:03/02/27 22:05
>>443
>>起きません。デフォルトでプロセスごとに別々の
>>物理メモリが割り当てられます(共有させることも可能)

この「デフォルトで」というのは
どういうことでしょうか?
別々にさせるか、共有させるか、
指定できるということですか?

458 :442:03/02/27 22:06
>>443
指定できるならば、どうやって?
変数を宣言するときに、なんらかの
修飾をするのでしょうか。
例えば、ちょっと違うけど、
registerとかvolatileのように、
_shareとか?

あるいはコンパイラ(リンカ)で
大域変数を共有させる…みたいな
オプションをつけるのでしょうか?

それともロードするときに大域変数を
共有させるか否かを指定するのでしょうか?
LoadLibrary()には特にオプションを
指定できないようなので、他に
LoadLibraryShare()のような
APIがあるのでしょうか?

459 :442:03/02/27 22:09
>>457,458
質問ばかりでなんだかキツイ口調に
なったみたいでごめんなさい

460 :デフォルトの名無しさん:03/02/27 22:39
>>442
悪いことはいわんからAdvanced Windowsでも読んで体系的な知識を身に付けろ。
それを理解するのに必要な知識自体がかけてるから。

461 :デフォルトの名無しさん:03/02/27 22:40
>>458
VC++なら共有したい変数は #pragma data_seg("hoge") 〜 #pragma data_seg()
で挟め。hogeは8文字以内の任意のデータセグメント名。

462 :デフォルトの名無しさん:03/02/27 22:42
ちと訂正。「データセグメント名」ではなくて「セクション名」。

463 :デフォルトの名無しさん:03/02/28 02:15
9x系OSで一度に大量のファイルをコピーするとWindowsが異常に重くなってしまいます。
SHFileOperationで一気にコピーする方法とfopen, fread, fwrite で一つづつ複製する方法を試したのですが、どちらも駄目でした。
このような症状を避けるにはどうすればよいのでしょうか。
どうかよろしくお願いします。

464 :デフォルトの名無しさん:03/02/28 03:04
>>463
>>136では駄目かな?


465 :デフォルトの名無しさん:03/02/28 07:59
>>414,441
通信技術板住人のほうが詳しいかも。

>463
DOS時代には10〜20ファイルくらい一度にまとめてオープンしてから読み込んだり
書き込んだりしてたツールがいくつかあった。
openとread/writeを交互に行うとディスクのヘッドが管理領域とデーター領域を
往復するので遅い(SHFile〜も同じ仕組み?)
464が言うようにキャッシュの関係もあるかも。

466 :デフォルトの名無しさん:03/02/28 08:02
>>463
9x系だけじゃなくNT系でもなるよ。

467 :デフォルトの名無しさん:03/02/28 08:13
趣味でサンプルムービーのサイト作りました
http://homepage3.nifty.com/digikei/sample/sample.html

468 :デフォルトの名無しさん:03/02/28 08:33
>414
GetInterfaceInfo

469 :デフォルトの名無しさん:03/02/28 13:52
VC++6.0でMDIアプリケーションを作っているのですが
Debugビルドをした時は正常に動作するのにReleaseビルドをした時に
一部の動作が期待したものと違ってしまいます。

具体的にはCreateWindow()で作成したスクロールバーやオートチェックボックスの動作が
違います。自作のclassの動きが違っている可能性もあるのですが、ビルドの設定の違いで
プログラムの動作が違ってくる原因は何が考えられるでしょうか?

470 :デフォルトの名無しさん:03/02/28 14:02
>>469
初期化していない領域を参照したとかデバッグモードのマクロが効いているとか依存するライブラリが違うとかそんなあたり

471 :デフォルトの名無しさん:03/02/28 14:46
>>469
Debugライブラリのバグ。

472 :469:03/02/28 15:19
レスありがとうございます。

初期化していない領域の参照というのが気になりましたので
検索したところ、それらしき情報を見つけることが出来ました。

www.bekkoame.ne.jp/ha/yoshi_s/tips/vcpp.html#debug_release
↑にあるように、変数を初期化するのとしないのとではデバックとリリースで
結果が変わるということが確認できました。というわけで、私のプログラミング作法が
ヘタレだった、という説が有力となりました。(戦場では通用しないコードだったようです)

これから、変数まわりを一つ一つチェックしてみます(;´д`)

473 :デフォルトの名無しさん:03/02/28 15:55
MessageBoxAPIについて教えてください。
MessageBoxを最前面に表示するためにMB_TOPMOSTフラグを立てていました。
しかし、とあるお客様のPCでこのフラグを立てても最背面に表示されてしまいます。
OSはWindows2000Pro+SP3 開発はVC++5.0(Non MFC)です。
自分のPCでは再現できずお客様のところへは簡単には行けません。
そこでMB_SYSTEMMODALフラグに変更したところ最前面へは表示される
ようになったのですが、そのメッセージボックスはアクティブな状態で
表示されないようです。
なにかヒントなどあれば教えてください。

474 :デフォルトの名無しさん:03/02/28 16:38
>>473
TOPMOSTなウィンドウが他にもあったら、MB_TOPMOST指定しても、
必ずしも最前面にはならない罠。
MB_SYSTEMMODAL + MB_SETFOREGROUND はどう?

>そのメッセージボックスはアクティブな状態で表示されないようです
MB_SETFOREGROUND指定しても、自分がフォアグラウンドになるための条件(MSDNに載っ
てるはず)があるので、必ずしも望みどうりにはならない。(要裏技)

475 :デフォルトの名無しさん:03/02/28 16:55
>>474
ありがとうございます。
MB_TOPMOST+MB_SETFOREGROUNDは試してもらったのですが
だめでした。
そもそもMB_SYSTEMMODALってあまり指定しないほうがよいのかなーと
ヘルプを読んでいて思いこんでしまって。
今度、MB_SYSTEMMODAL + MB_SETFOREGROUNDを試してもらおうと
思います。


476 :デフォルトの名無しさん:03/02/28 17:44
Spy++ とかで見てもらえば原因が分かるんじゃないすか?

だめすか?

そうすか。

477 :デフォルトの名無しさん:03/02/28 23:29
WM_CREATE時に
SetWindowLong関数でWS_EX_TOOLWINDOWを指定すると
タイトルバーとクライアント領域の間に隙間が出来てしまうのですが
解決する方法はありますか?

隙間の幅は数ピクセルで通常のタイトルバーとの差分ほどです。
その部分はクライアント領域ではないらしく、描画ができません。

478 :477:03/02/28 23:56
自力解決しました。

SetWindowPos関数にSWP_DRAWFRAMEフラグでいけました。
ウィンドウスタイル変更だけでは不完全なんですね…

479 :デフォルトの名無しさん:03/03/01 02:44
SetClipboardDataでクリップボードへ設定したメモリ領域は
以後クリップボードが制御するので、アプリケーションが
解放してはいけないとか、CloseClipboardの後ならGlobalFreeで
解放して良いとか解説であるのですが、どっちが正しいのでしょう?

480 :デフォルトの名無しさん:03/03/01 03:14
   ______________  
 /:\.____\
 |: ̄\(∩´∀`) \  < >>479!こんなのがありました!
 |:   |: ̄ ̄ U ̄:|

SetClipboardDataの MSDN の記述が、
The application can read the data,
but must not free the handle or leave it locked.

The application can read the data,
but must not free the handle or leave it locked
until the CloseClipboard function is called.
と改訂されているようだ。  

481 :デフォルトの名無しさん:03/03/01 05:43
>>479
前々スレの425-437あたりも。
前々スレ : http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html

482 :デフォルトの名無しさん:03/03/01 06:38
>>480 >>481 サンクス。 
両方正しいそうですね。でも自分は
あえて辞めておくことにします。CloseClipboardの
後なら解放してイイよ、とは書いてないし・・・

483 :デフォルトの名無しさん:03/03/01 08:58
CloseClipboard()した後で他のアプリで同じデータを貼り付けられるためには
CloseClipboard()後もGlobalFree()は実行してはならないし、
EmptyClipboard()が中でGlobalFree()してるんだよなきっと。
Windowsのソース持ってないからあくまで想像だけど、
そうじゃないと辻褄が合わない。

484 :デフォルトの名無しさん:03/03/01 10:56
俺はGlobalFreeしてるけど動いてるなあ…。
SetClipboardDataって、確保した領域からクリップボードの内部バッファに
転送する命令だとばかり思ってたし。

でも確かに転送するだけならGMEM_SHAREフラグは要らんわな。
使用中のGMEM_SHAREメモリを開放したら実際の開放は使用が終わるまで
遅延されるとかの安全装置が入ってると見た。

485 :デフォルトの名無しさん:03/03/01 11:16
動作中の他アプリのフルパスを得たいのですが、Process32First/Nextではファイル名のみしか帰ってきません。
フルパスをなんとかして得る方法は無いものでしょうか‥‥全ディレクトリ検索以外で∧||∧



486 :デフォルトの名無しさん:03/03/01 11:17
>>484
ただ単に偶然WindowsのGCが延期されているという考え方も。


487 :デフォルトの名無しさん:03/03/01 11:24
GlobalFreeの問題はWin16の頃の名残だっつーの
Win32では解放して問題ない。

488 :デフォルトの名無しさん:03/03/01 11:29
GetModuleFilenameExとか>485

489 :485:03/03/01 12:26
>>488
そっちでできないとか思ってましたが、EnumProcessModulesの引数間違えてました‥鬱だ氏脳‥‥

な訳で下のコードで動きました

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
EnumProcessModules(hProcess, &hModule, sizeof(hModule), &out);
GetModuleFileNameEx(hProcess, hModule, filename, MAX_PATH);
printf("%s\n", filename);
CloseHandle(hProcess);

エラー処理は省略

490 :デフォルトの名無しさん:03/03/01 12:46
>>487
実際にCloseClipboard後にGlobalFreeするとさ
自分とこでGlobalAllocしたオブジェクトは使えなくなり
他のアプリでGlobalAllocしたオブジェクトは次も使えるよな

貼り付けを行うところのコードを
そのオブジェクトがどこでアロケートされたのかに対しては
透過的に書けるのが「問題ない」ってことだと思うぜ

つまりCloseClipboard後のGlobalFreeには問題があると言いたい

491 :デフォルトの名無しさん:03/03/01 12:57
前にウィンドウのキャプションをクリップボードにコピーするアプリ作ったけど
1度目のコピーの時は問題ないけど2度目コピーしようとすると
SetClipboardDataが失敗するって現象が起きて困った事があった。

そう、原因はGlobalFreeをしていたからで、それを止めたら問題なくなった。

そのアプリからの流用だがためしに以下の関数を2度続けて実行してみるとわかる。
BOOL CTestDlg::CopyToClipboard(LPCTSTR lpString)
{
 HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, strlen(lpString) + 1);
 if (!hMem)
  return FALSE;
 if (::lstrcpy((char*)::GlobalLock(hMem), lpString) && OpenClipboard())
 {
  ::GlobalUnlock(hMem);
  if (::EmptyClipboard())
  {
   if (::SetClipboardData(CF_TEXT, hMem))
   {
    ::CloseClipboard();
    ::GlobalFree(hMem); // コメントアウトすれば正常になる
    return TRUE;
   }
  }
  ::CloseClipboard();
 }
 ::GlobalFree(hMem);
 return FALSE;
}

492 :デフォルトの名無しさん:03/03/01 13:00
CloseClipboardの後に再ロックして領域を上書きしてもクリップボードは元データのまま。
クリップボードは渡したデータのコピーを管理していると見た。

493 :デフォルトの名無しさん:03/03/01 13:36
>>491
> 2度続けて実行
> SetClipboardDataが失敗する
って具体的にどうやるとどうなる?
for 文で10回ループさせてみたが何の問題もない
(TRUE を返しテキストも設定されている)ようだが。
ちなみに WinMe で実験。
夜にNT系で再テストしてみるよ。

494 :デフォルトの名無しさん:03/03/01 15:15
>>490
OSが内部でコピーを持ってるから問題ないよ
つか、自分とこでGlobalFreeしたデータを読もうとするのは問題外。
再度クリップボードから正常に動く

495 :デフォルトの名無しさん:03/03/01 17:45
>>494
どういう場合にコピーを作るんだ?
少なくとも490が示したデータの中には
コピーを作らない場合があるようだ

コピーがあればGlobalFreeしても構わないと言うなら
コピーがあるか否かはどうやってチェックするんだ?
磔が2回目かどうかはどうやってチェックするんだ?

透過的な操作という観点からは
CloseClipboard後のGlobalFreeは
問題だらけだよな

496 :495:03/03/01 17:48
追伸
どういう場合にコピーを作ると《保証されている》んだ?
492や493にも同じことを問いたい

497 :デフォルトの名無しさん:03/03/01 17:59
ウィンドウハンドルから、
そのウィンドウを作成したインスタンスの
ハンドルを取得する関数ってないですか?

HINSTANCE GetInstHandle(HWND hWnd)
なんてやつ。


498 :デフォルトの名無しさん:03/03/01 17:59
>>496
Win32 で稼動する場合に。

499 :デフォルトの名無しさん:03/03/01 18:01
>>498
その文書が《保証している》ケースで
コピーが作られない場合を490は示している

500 :デフォルトの名無しさん:03/03/01 18:02
>>497
GetWindowLongのGWL_HINSTANCE

501 :デフォルトの名無しさん:03/03/01 18:03
>>497
GetWindowLong(GWL_HINSTANCE)
ただし他プロセスのウィンドウには無効

GetWindowModuleFileName() なんてのもあったが使える環境に制限があったような

502 :デフォルトの名無しさん:03/03/01 18:04
>>499
そんなに言うんじゃコード出せ

503 :497:03/03/01 18:08
>>500 >>501
さんくす!

504 :デフォルトの名無しさん:03/03/01 18:10
>>499
示している? 何を?

505 :デフォルトの名無しさん:03/03/01 18:11
>>502頼む相手をまちがって内科医?

506 :デフォルトの名無しさん:03/03/01 18:45
>>505
つまり、499 の発言はまったくの無根拠という事か?

507 :デフォルトの名無しさん:03/03/01 18:45
単純に文字列をクリップボードにコピーする関数をループで呼び出すと
GlobalFreeする場合は2回じゃないけど、数万回回してると不正落ちするけど、
GlobalFreeせずに無限ループさせても割り当てメモリ量変わらないし、
解放しないのが正しいっぽい。

508 :507:03/03/01 18:47
あー、だけど、データがコピーされないことは無かった。
クリップボードにデータをセットした後、
ハンドルをロックして解放前に0でfillしてたけど、
確実に毎回クリップボードにデータは反映されていた。

509 :デフォルトの名無しさん:03/03/01 18:48
>>506
おまえヴァカ?

499が何の話をしているのか
読めてねーじゃねーか
>490は示している

510 :デフォルトの名無しさん:03/03/01 19:00
SHFileOperationの戻り値を全部知りたいんですけど・・
わからなくて困ってます。
おしえてくさい。

511 :デフォルトの名無しさん:03/03/01 19:03
>>509
書き捨てコードを95OSR2/98SE/Me/2kでテストしたら、
まあ、結局>>490の先頭三行は事実無根だったわけだが。
クリップボードに他アプリの(以前の)データなんて残らなかった

512 :デフォルトの名無しさん:03/03/01 19:27
>>510
おまえヴァカ?
499 が 490 を支持する根拠は何も無いんだろと言ったのに。
根拠があるなら 490 じゃなくても回答可能だろうが。

513 :490:03/03/01 19:28
テスト環境はMe

case WM_LBUTTONDOWN:
{
HANDLE h = LocalAlloc(LMEM_MOVEABLE, 6); // GlobalAlloc(GMEM_MOVEABLE, 6);
char* p = (char *)GlobalLock(h);
lstrcpy(p, "Hello");
GlobalUnlock(h);

OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_TEXT, h);
CloseClipboard();
}
break;

case WM_RBUTTONDOWN:
{
OpenClipboard(hWnd);
HANDLE h = GetClipboardData(CF_TEXT);
CloseClipboard();

char* p = (char *)GlobalLock(h);
MessageBox(hWnd, p, "WM_RBUTTONDOWN", MB_OK);
GlobalUnlock(h);

GlobalFree(h);
}
break;


514 :490:03/03/01 19:28
訂正: 失礼、テスト環境はXP

515 :512:03/03/01 19:29
すまん >>510
>>509 宛てですた

でもさ、「戻り値を全部」 なんて知る必要があるのか?

516 :509:03/03/01 19:30
支持?
評価していただけだが

517 :デフォルトの名無しさん:03/03/01 19:31
>>513
> HANDLE h = LocalAlloc(LMEM_MOVEABLE, 6); // GlobalAlloc(GMEM_MOVEABLE, 6);

何で?

518 :517:03/03/01 19:32
>>487の一言が気になってわざとやってみた

519 :デフォルトの名無しさん:03/03/01 19:32
>>516
「評価」 なんてどうとでも取れる言葉を使うな。
あんたの主論は一体何なんだ?

520 :518:03/03/01 19:33
ありゃしまった
漏れは517ではない、513だ
悪りぃ悪りぃ

521 :509:03/03/01 19:36
>>519
490の言うことに賛成でも反対でもない
ただ490が出した情報が事実ならどうだと言ったまで

妙なバイアスを持つのを止めはしないが
つまらんよ

522 :デフォルトの名無しさん:03/03/01 19:38
>>518
HLOCAL と HGLOBAL を同一とみなす根拠には足らないと思うけど・・・。

523 :デフォルトの名無しさん:03/03/01 19:41
とりあえず490以降のageてて半角カナの人達はsageましょう。
同一人物だろうけど。

524 :518:03/03/01 19:42
悪りぃ、そっちは漏れが古いせいだろう(藁

525 :デフォルトの名無しさん:03/03/01 20:27
繰り返しの呼び出しではないが、1 回の呼び出しにおける状況を観察した。


1.GlobalAlloc() でハンドルを得る。これを A とする。

2. SetClipboardData(CF_TEXT, A) 後、ただちに GetClipboardData(CF_TEXT)
  すると A が返ってくる。

3. その後 A には、GlobalLock() を使っていくらでも変更ができる。

4. CloseClipboard() の前でも後でも、GlobalFree(A) するしないにかかわらず、
  次に GetClipboardData(CF_TEXT) で得られるハンドルは A とは異なる。
  これを B とする。

5. B の内容も、 2. で SetClipboardData(CF_TEXT, A) した時点のもので、
  A とは異なる。
  つまり、3. における変更は全て無視されている。


つまり、SetClipboardData(CF_TEXT, A) の時点でどこかにコピーが確保される
のは間違いない。
つーか、CloseClipboard() の前で GlobalFree(A) しても動いてしまう。
ちなみに、GlobalAlloc() の代わりに LocalAlloc() を使っても同様だった。

526 :491:03/03/01 20:35
>>493
あー、環境はWin2kでVC++6.0の場合です。
んでボタン押すごとに1度呼び出すようにしてみると分かりやすい。
1度目は成功するが2度目失敗する。
でも3度目はリセットされるのか成功し、4回目はまた失敗する。
その繰り返し。

527 :デフォルトの名無しさん:03/03/01 20:48
>>526
ウィンドウアプリだと何かポカする可能性が高いから、コンソールで
試してみてくれ。
そんな症状どうにも再現せん。

528 :デフォルトの名無しさん:03/03/01 21:37
>>495
> どういう場合にコピーを作るんだ?
いちいち場合分けする必要なんてないだろ。
つ ね に じゃないの?
大雑把に疑似コードで説明すれば、こういうこと。

HANDLE g_hMem; クリップボードが持っている
SetClipboardData(hMem)
{
 g_hMem = GlobalAlloc(GlobalSize(hMem));
 memcpy( GlobalLock(g_hMem) , GlobalLock(hMem) );
 GlobalUnlock(hMem); GlobalUnlock(g_hMem);
}

529 :デフォルトの名無しさん:03/03/01 21:46
>>513
> case WM_RBUTTONDOWN:
> {
> OpenClipboard(hWnd);
> HANDLE h = GetClipboardData(CF_TEXT);
> CloseClipboard();
>
> char* p = (char *)GlobalLock(h);
> MessageBox(hWnd, p, "WM_RBUTTONDOWN", MB_OK);
> GlobalUnlock(h);
>
> GlobalFree(h);
> }

このコード間違ってるよな。
GlobalLock() は CloseClipboard() の前に行う必要があるはず。

530 :491:03/03/01 22:36
>>527
#include <windows.h>
BOOL CopyToClipboard(LPCTSTR lpString)
{
  HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, strlen(lpString) + 1);
  if (!hMem)
    return FALSE;
  if (::lstrcpy((char*)::GlobalLock(hMem), lpString) && OpenClipboard(::GetDesktopWindow()))
  {
    ::GlobalUnlock(hMem);
    if (::EmptyClipboard())
    {
      if (::SetClipboardData(CF_TEXT, hMem))
      {
        ::CloseClipboard();
        ::GlobalFree(hMem); // コメントアウトすれば正常になる
        return TRUE;
      }
    }
    ::CloseClipboard();
  }
  ::GlobalFree(hMem);
  return FALSE;
}
int main()
{
if (!CopyToClipboard("test")) { ::MessageBox(NULL, "1回目失敗", NULL, MB_OK) };
if (!CopyToClipboard("test")) { ::MessageBox(NULL, "2回目失敗", NULL, MB_OK) };
return 0;
}

これでも2回目失敗と出る。

531 :デフォルトの名無しさん:03/03/01 22:58
http://216.239.33.100/search?q=cache:VPZCMnIF73QC:msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/clipboardoperations.asp+CloseClipboard+globalfree&hl=ja&ie=UTF-8&inlang=ja
↑ここの Memory and the Clipboard という所を読むと、
SetClipboardData()した時点で確保したメモリの所有権は
システムに移って、空にするときにシステムによってその
メモリが解放されるみたいだから自分で解放したらまずいんじゃない?

532 :デフォルトの名無しさん:03/03/01 23:04
実験した人は実験した環境もお願い。

533 :デフォルトの名無しさん:03/03/02 00:56
>>530
何故かはわからないが、SetClipboardData() が成功したところで、
  ::CloseClipboard();
  ::OpenClipboard(NULL);
  ::CloseClipboard();
とやると失敗しないようになった。
ただ、その場合は直後の GlobalFree() が失敗するので、GlobalFree() を
呼ばないのが正解なのかも知れない。

534 :デフォルトの名無しさん:03/03/02 01:08
OpenClipboard(::GetDesktopWindow())

OpenClipboard(NULL)
にしたらどちらも成功した。

535 :デフォルトの名無しさん:03/03/02 01:41
終了前に
「クリップボードのデータを他のアプリケーションでも使えるようにしますか?」
って聞いてくるアプリケーションがあるけど
あれは『はい』を選ぶとどういう処理をするんだろう。

536 :デフォルトの名無しさん:03/03/02 01:48
>>535
普通に何もしなけりゃよいと思うが……
逆に『いいえ』で空にするんでない?

537 :デフォルトの名無しさん:03/03/02 01:56
>>535-536
あれは、遅延レンダリングをやってるアプリの場合。
そのアプリを終了したら、データ渡す中の人がいなくなるだろ。

538 :デフォルトの名無しさん:03/03/02 10:07
SDK で CString だけを使いたいのですが、
どうすればいいですか?

539 :デフォルトの名無しさん:03/03/02 10:09
ATL使えばいいんちゃう?

540 :デフォルトの名無しさん:03/03/02 10:11
たのしかった
http://homepage3.nifty.com/digikei/ten.html

541 :デフォルトの名無しさん:03/03/02 10:18
ATL 嫌いな人

542 :デフォルトの名無しさん:03/03/02 10:56
>>535
>終了前に
>「クリップボードのデータを他のアプリケーションでも使えるようにしますか?」
>って聞いてくるアプリケーションがあるけど
>あれは『はい』を選ぶとどういう処理をするんだろう。

内部の特殊なデータ形式を汎用的なデータ形式(画像ならDIBとか)に
するんじゃない?


543 :デフォルトの名無しさん:03/03/02 11:27
>539
VC++ 6.0 なんです。

544 :デフォルトの名無しさん:03/03/02 11:57
>>538
VC++よく知らないがMFCのヘッダ入れればいいだけじゃ?

#include <vcl.h>
#include <stdio.h>

void main()
{
AnsiString str;
str = "ぬるぽ";
printf("( ´∀`) %s\n", str.c_str());
}

>bcc32 ansistr.cpp vcl.lib rtl.lib
>ansistr
( ´∀`) ぬるぽ

↑BCBの場合はこんなんでAnsiString使えるが

545 :デフォルトの名無しさん:03/03/02 12:40
>>538
std::basic_string<TCHAR> を使う

546 :デフォルトの名無しさん:03/03/02 13:04
結局、CloseClipboard()後のGlobalFree()はやってはいけないって事かな。
俺も>530をやってみたらエラーになった。(Win2,VC++6.0,sp5)
上手くいく場合は偶々運が良く通ってるだけのような気がする。
Meの場合メモリ管理がいい加減だから何とかなってるのかもね。

547 :デフォルトの名無しさん:03/03/02 14:17
Atok15で日本語入力をONにしたときに表示される
「ひらがなで入力します」というツールチップを
エディットボックス以外でも表示させたいのですが
どうすればよいのでしょうか?

日本語入力がONになるタイミングは
IMN_SETOPENSTATUSでわかるんですが、
その後どうしたらよいのかが全然わかりません。

548 :無言:03/03/02 15:41
SDKで矢印キーが
押された時のメッセージはどうなりますか?
WM_KEYDOWNまではわかったんですが
上下右左の区別がつきません


549 :デフォルトの名無しさん:03/03/02 15:50
>>548
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp?frame=true

550 :547:03/03/02 16:54
ShowCaretで解決しました。

551 :無言:03/03/02 16:54
区別はついたんですが
なぜか「○○が押された」っていうMessageBoxを
出した後OKするとでエラーがでます。
あとはbreakしてreturn(0L)で
プロシージャ―終了なんですけど・・・
なんでですか?

552 :デフォルトの名無しさん:03/03/02 17:04
>>551
>出した後OKするとでエラーがでます。

どうして「どんな」エラーが出たのかを書かないのかねぇ。

553 :無言:03/03/02 18:44
window4(アプリ名)が原因で<不明>にエラーが・・・
っていうエラーです
ちなみにMeをつかってます
すいません 大事なところ書きませんでした

554 :デフォルトの名無しさん:03/03/02 18:48
>>553
で、エラーメッセージを省略。どこまで喧嘩を売れば気が済むのか。

555 :無言:03/03/02 19:00
window4 が原因で<不明>にエラーが発生しまし
た。window4 は終了します。 閉じる(C)

問題が解決しない場合は、コンピューターを再起動して
ください。

というダイアログが二回
<不明>の部分がKERNEL32.DLLにかわって1回です。
これで大丈夫ですか

556 :デフォルトの名無しさん:03/03/02 19:09
>>548
左矢印を押すと、(char)wParam に VK_LEFT が入るらしい。

557 :デフォルトの名無しさん:03/03/02 19:11
↓↓↓↓↓★ピンクエンジェル★↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp/linkvp.html

558 :デフォルトの名無しさん:03/03/02 19:11
>>555

それ、WM_KEYDOWNとかいう以前の問題な気もするんだが。
WM_KEYDOWNの処理部分の流れは追ってみた?


559 :無言:03/03/02 19:31
いろいろ教えてもらって申し訳ないんですが
エラーの原因は配列のメモリが少なすぎたからでした
たかがこんなミスに・・・
すいませんでした
全くもってWM_KEYDOWNは関係なかったです
これからメモリをケチらないようにします
かまってくれてありがとうございました


560 :デフォルトの名無しさん:03/03/02 19:42
そういえば、Rebarの配色が変わらないという問題は解決したのか?

561 :デフォルトの名無しさん:03/03/02 20:07
ファイルにあるBMPを縮小拡大して、またファイルに保存したいんですが、
方法がわからなくて困ってます。

StretchBlt だか StretchDibits だか使えばいいことはわかったんですが、
あれを使ったあと、どうやってDCからデータを取り出せばいいのかわかりません。

最終的にはBMPを縮小拡大して保存したいだけなので、
なにかいい方法があったら教えてください。


562 :デフォルトの名無しさん:03/03/02 20:10
>561
表示しないなら、DCを使う必要は無いんじゃないか?

563 :デフォルトの名無しさん:03/03/02 20:14
>>561
メモリDCを作ってカキコせよ

564 :デフォルトの名無しさん:03/03/02 20:16
>562
おお、やっぱりあるんですか!?
見つけたAPIがDC使うもんしかなかったもんで。
あるならDC使わないやつ使いたいです


565 :561:03/03/02 20:21
>563
メモリDCから、
どうやればビットマップデータを
取り出すのかわからないのです。
GetObjectかな?あれは違うっぽいし。


566 :デフォルトの名無しさん:03/03/02 20:23
>>565
GetDIBitsとかでどこかに書き出してBITMAPFILEHEADER込みでセーブ。

567 :561:03/03/02 20:29
GetDIBitsって縮小拡大もできるんですか?
増色・減色のやつかと思ったけど。

とりあえず、縮小拡大のほかに
減色もやるため、GetDIBits使ってやってますが、
あれで縮小拡大もできるならありがたやです。


568 :デフォルトの名無しさん:03/03/02 20:31
>>567
先にStretchBltでもすれば?

569 :デフォルトの名無しさん:03/03/02 20:42
DIBSectionにStretchDIBits()すれば、直接ピクセル列を取得できる
けど、画面モードによっては画質が劣化する。


570 :デフォルトの名無しさん:03/03/02 21:52
MenuHelp() の第7引数
lpwIDs
 Pointer to an array of values that contains pairs of string resource identifiers and menu handles.
について質問です。
MenuHelp() の説明では
The function searches the array for the handle to the selected menu and,
if found, uses the corresponding resource identifier to load the appropriate Help string.
って言っているんですが、番兵もいない配列のポインタだけしか渡していないのに
配列のサイズが分からないはずの MenuHelp() は、どうして配列中に該当する ID がないって分かるんですか?

571 :561:03/03/02 22:24
>569

デキター!!!
CreateDIBSection と StretchBlt 使ったらできたよ。
こんなものがあったとは、
とりあえず、参考にしたところを貼っと期末。
http://black.sakura.ne.jp/~third/win121.html

ありがとう、毎朝あなたの事を拝むよ。


572 :デフォルトの名無しさん:03/03/02 22:25
}

bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes);
ReadFile(hFile , bmpInfo , bmpFileHeader.bfOffBits - dwBytes , &dwBytes , NULL);
hBitmap = CreateDIBSection(
NULL , bmpInfo , DIB_RGB_COLORS , &bPixelBits , NULL , 0
);
ReadFile(hFile ,bPixelBits ,
bmpFileHeader.bfSize - bmpFileHeader.bfOffBits , &dwBytes , NULL);
CloseHandle(hFile);

*(lpCmdLine + lstrlen(lpCmdLine) - 4) = 0;
wsprintf(strFileName , TEXT("%s_not.bmp") , lpCmdLine);

winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc= WndProc;
winc.cbClsExtra= winc.cbWndExtra= 0;
winc.hInstance= hInstance;
winc.hIcon= LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor= LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName= NULL;


573 :デフォルトの名無しさん:03/03/02 23:01
指定した時間になったら自動的にデフラグを
行いたいのですがそういうAPIないでしょうか?

574 :ねこま:03/03/02 23:16
それはタスクスケジューラの仕事でしょう

575 :デフォルトの名無しさん:03/03/02 23:45
アプリケーションが起動してるかどうか検知するAPIありますか?

576 :デフォルトの名無しさん:03/03/02 23:57
>>575
ウインドウが出てるならそのウインドウハンドルとか。

577 :デフォルトの名無しさん:03/03/03 04:48
ドラッグ&ドロップでファイルパスを取得するみたいに
IEなどからURLがドラッグ&ドロップされたのを取得するには
どうすれば良いでしょうか?

578 :デフォルトの名無しさん:03/03/03 08:24
>>577
ファイル名の変わりにURL飛んできたりしないの?もしくはDDEとかか。

579 :デフォルトの名無しさん:03/03/03 09:19
DragQueryFileでは無理っぽ?

580 :デフォルトの名無しさん:03/03/03 09:22
IDropTarget実装してRegisterDragDrop


581 :デフォルトの名無しさん:03/03/03 09:37
ダイアログボックスだけのプログラムで、ボタンをクリックすると
「ファイルを開く」のコモンダイアログが開くようにしたいのですが、
クリックするとなぜかプログラムが終了してしまいます。
原因はどこにあるのでしょうか。

582 :デフォルトの名無しさん:03/03/03 09:47
>575
プロセスとウィンドウを列挙して目的のアプリを検索する。
Spy++のソースが参考になると思われ。


583 :デフォルトの名無しさん:03/03/03 10:08
>>581
原因はあなたにあると思われます。


情報少なすぎ。

584 :デフォルトの名無しさん:03/03/03 10:13
>>580
ありがとうございます。ちょっと複雑そうですがやってみます。

585 :デフォルトの名無しさん:03/03/03 10:15
>>581
case でbreakがないとか・・

586 :581:03/03/03 11:19
GetOpenFileNameのときのOPENFILENAME構造体のhwndOwnerは
hDlg(ダイアログベースなのでこれが唯一のウィンドウハンドル)
でいいんですよね?
caseの中のここの部分をMessageboxにすると正常にメッセージボックスが
出ますので、case文の間違いではないと思います。

587 :デフォルトの名無しさん:03/03/03 11:22
>>585
WM_NOTIFYだかの後にbreak忘れててたまたま動作してたんだけど
XPでビジュアルスタイル有効にしたら動きがおかしくなったことがあった

588 :581:03/03/03 11:37
ちなみに今作っているのは、スケルトンみたいなものなので、
GetOpenFileNameをコールした後、なにもせず return TRUE しています。

589 :デフォルトの名無しさん:03/03/03 12:27
>なにもせず return TRUE しています。
疑問はないのか

590 :581:03/03/03 13:58
ZeroMemoryをコールしたらうまくいきました。
これって必須なんですね。コールしなくても問題ないと思ってました。
おさわがせしました。

591 :デフォルトの名無しさん:03/03/03 17:08
質問です。
他のアプリケーションソフトのボタンを
SendMessage の BM_CLICK で擬似クリックすると、
コールした方のプログラムは、ボタンが押された方のプログラム処理が終了するまで
待機してしまいますが、これを避ける方法ってないでしょうか?

マウスの座標を指定して擬似クリックをすれば回避できるのはわかっているのですが、
直接ボタンへのメッセージする処理で実現できる方法があれば、教えていただきたいのですが。

よろしくお願いします。

592 :デフォルトの名無しさん:03/03/03 17:10
>>591
PostMessage使えない状況?

593 :デフォルトの名無しさん:03/03/03 17:14
裏http:://morphism.tripod.co.jp

594 :591:03/03/03 17:31
>>592
ありがとうございました!
できました


595 :デフォルトの名無しさん:03/03/03 17:39
>>591
SendMessageなんか使うから・・・
反応を待たずにF&FならPostMessageだろ

596 :595:03/03/03 17:49
スマン、レス遅杉で誤爆と同等になった
一滴益

597 :デフォルトの名無しさん:03/03/03 18:53
SDKでクライアント領域にBMPを表示する時
BMPの一部を透明にして表示できますか?
また、できる時はどうするんですか?

598 :デフォルトの名無しさん:03/03/03 18:56
>>597
ググれ
http://www.google.com/search?q=%E3%83%93%E3%83%83%E3%83%88%E3%83%9E%E3%83%83%E3%83%97+%E9%80%8F%E6%98%8E&sourceid=opera&num=0&ie=utf-8&oe=utf-8

599 :デフォルトの名無しさん:03/03/03 19:02
>597
BMPを透明にするってどういう事?
そのBMPを描画しなきゃいいんじゃないの?
さもなきゃ、裏のデスクトップのDC持ってきて、矩形をコピーすりゃ
「透明に見える」んじゃない?

600 :デフォルトの名無しさん:03/03/03 19:06
>>599
いや「一部」
よく読もう

601 :597:03/03/03 19:16
わがまま言ってすまないと
思うんですができるだけ高速なのを教えてください
元のBMPとそのモノクロ使う方法以外にありませんか?

602 :デフォルトの名無しさん:03/03/03 19:23
さっきから「SDKで」って言うのがひっかるのは自分だけ?
おれが勘違いしてんのかな・・・

603 :デフォルトの名無しさん:03/03/03 19:32
最前面に出ているとは限らない他のアプリに、
Ctrl+Sなどのメッセージを送ることを可能でしょうか?

以前流れてしまって・・・よろしければご教授下さい。

604 :597:03/03/03 19:34
単にWinGLとかを使わない方法を
教えて欲しかっただけです。
なにか「SDKで」は誤解を招くような
意味を持っているんですか

605 :デフォルトの名無しさん:03/03/03 19:42
>>604
>>598

606 :デフォルトの名無しさん:03/03/03 19:44
SDKで、という言い方した場合は、MFCのようなクラスライブラリなんかを
介せず、直接自分でAPIを叩くことを言うな、普通。

んで多分597が言いたいのはGDIのみで処理するということだろうが、
OpenGLだろうがDirectXだろうがSDKはSDKだ。

607 :デフォルトの名無しさん:03/03/03 19:45
>>604
602氏じゃないけど、SDKって言っても色々あるからね。WinG SDKとか。
と、姑息に切っておく。後、WinGLってなんじゃらほ。

608 :デフォルトの名無しさん:03/03/03 19:47
>>604
まぁ、SDKで通じないことはないけど
DirectX9 SDKを使いましょうとか言われるかもよ。

とりあえずリージョンやレイヤードウインドウでググれ。

609 :597:03/03/03 19:56
いいアドバイスありがとうございます。
しかし本命のBMPの一部を透明にして表示
は教えてくれないんですか
一つのBMPのみでは一部を透明化し表示できないんですか

610 :597:03/03/03 20:04
あとで気づいたんではなれましたが「SDKで」に関しては
606の方がいったとおりクラスライブラリを
使わないということです。
あとWinGLとは画像の処理を高速でできるライブラリです。
しかしシュアウェアなので使いたくありません。

611 :デフォルトの名無しさん:03/03/03 20:11
>>609
そもそも質問の意味が曖昧なんだよなぁ。

透明って事は当然そのBMPの後ろが透けて見えるはずだけど
「後ろ」は一体どこなのか?
デスクトップ?それともクライアント領域?

前者なら既に答えはでてるし、
後者ならOS限定でよければAlphaBlendという手がある。

ところで、WinGLってなんか古〜いイメージがあるけど
今でも使えるレベルのものなの?

612 :597:03/03/03 20:26
>>611
後ろはクライアント領域です。
また概に他のBMPが貼り付け先の下にあるものと考えほしいです。
OS限定というのは具体的に何のOSのことですか
あまりに古いのでは使えないくらいなら大丈夫(Win98からなら)です。
WinGLについてですがMeで使えましたよ。
でももっと速いのはあるとおもいますが


613 :603:03/03/03 20:59
うう、またか、また流れていくのかぁ(´Д⊂

どうか>>603にお慈悲を…、要するにShift、Alt、Ctrl付きの
メッセージを送れれば御の字なのです。

>>612
AlphaBlend使わないなら、たぶん楽な方法は無いですよ。
自前で描画用のメモリに、抜き色除いて直接転送するか、
元画像から動的にマスクデータを作るとか。

614 :デフォルトの名無しさん:03/03/03 21:01
>>612
透明=何も書かない
SetPixel使って1pixelずつ描け。
んで、透明にしたいところは描くな


615 :603:03/03/03 21:02
>>612
あとあれだ、最初はアイコンから初めてみるとか。
あれは簡単に抜き色設定出来たはず。

616 :597:03/03/03 21:15
今回の603さんの流れは多分僕の責です。
SetPixelはきついですが
AlphaBlendについて調べてみます。
ダメならアイコンでやります。
いろいろなレスありがとうございました。

617 :デフォルトの名無しさん:03/03/03 21:22
そういやDCにリージョンを適用するとどうなるんだっけ?
597の目的のことができるかな。

618 :デフォルトの名無しさん:03/03/03 22:09
SetPixelじゃ遅すぎだろ。

619 :デフォルトの名無しさん:03/03/03 22:15
>>613
一般的じゃない事だと全然レスが付かないんだよなぁ。

俺も試したことが無いんで想像でしか言えないが、

1、対象アプリのウインドウのVIQに接続
2、keybd_eventでCtrlとかを押す
3、対象アプリのウインドウにWM_KEYDOWNメッセージ送信

というのはどうだろう?
試してみたら結果を教えて。

620 :デフォルトの名無しさん:03/03/03 22:27
画像処理でやるなら、GetDIBits()でDCのピクセル列をDIBピクセル列
として取得しそこにBMPのピクセル列を自分で描画、そして結果をDC
に描画、という感じかな。


621 :デフォルトの名無しさん:03/03/03 22:42
>>620
でもその場合、複数の色の深度に対応した処理を書かなくちゃいけないよな?
8bit、16bit、24bitとか。
この3つで大丈夫かな?

622 :デフォルトの名無しさん:03/03/03 23:52
みんな、SDKの時は言語はC使ってる?
それともC++?

623 :tantei:03/03/03 23:53
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 直通  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  hentaimtt@k9.dion.ne.jp
   グローバル探偵事務局 



624 :デフォルトの名無しさん:03/03/04 00:08
>>622
DirectX SDKの時はC++

625 :デフォルトの名無しさん:03/03/04 00:44
>>619
遅くなりましてすいません。まずVIQからつまづいてました(笑
virtualized input queueって言うんですねぇ…無知無知…。

AttachThreadInputでくっつけた後、keybd_eventと
SetKeyboardStateの2つを試してみました。が…どうも上手く行きませんで(´Д⊂

しかしMSDN見る限りこれで出来そうですし、
619さんの仮説は間違ってないと思います。後は私のやり方が…。

いずれにせよ強力な手がかりを示唆いただき、本当にありがとうございました。感謝です。

>>616
とんでもない、こちらの質問が特殊なせいですので…。

626 :デフォルトの名無しさん:03/03/04 00:53
>>621
んなこたない。
どんな色深度でも32bitで取得するのが一番楽。

627 :デフォルトの名無しさん:03/03/04 01:04
CreatePopupMenu() を使って複数のサブメニューを持つ階層メニューを動的に作っています。
この階層メニューを破棄する場合、再帰的に全てのサブメニューを DestroyMenu() する必要があるのでしょうか。
それとも、サブメニューの解放は Windows が行ってくれるのでしょうか?
よろしくお願いします。


628 : :03/03/04 01:32
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_createpopupmenu.htm
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_destroymenu.htm

上のサイトになんて書いてあるか、読んできてくれたら、
解決方法を教えてあげよう。

629 :デフォルトの名無しさん:03/03/04 07:18
>597
CreateDIBSectionは?

630 :デフォルトの名無しさん:03/03/04 10:14
>625

Ctrl+Sとかなら、なんかのショートカットなわけで、それなら
SPY++あたりでID調べて、WM_COMMAND直接送るのでは
いかんかね?

631 :デフォルトの名無しさん:03/03/04 12:19
>>622
STL使いたいから最近はC++

632 :デフォルトの名無しさん:03/03/04 15:17
>>625
AttachThreadInput( targetTID, myTID, TRUE );
SetFocus( targetHwnd );  //重要

keybd_event( VK_CONTROL, 0, 0, 0 );
keybd_event( 'S', 0, 0, 0 );
keybd_event( 'S', 0, KEYEVENTF_KEYUP, 0 );
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 );

とりあえず、これでできましたよ。

633 :デフォルトの名無しさん:03/03/04 23:04
>>630
なるほどーその手がありましたね!
今回はちょっと汎用性を持たせなければなので(送り先が不定なんです)アレなのですが、
次回はその方法で行ってみようと思います。スマートで良いですね。

>>632
ぃやった!見事に送れました。
ふーむ、AttachThreadInputでくっつけるだけじゃダメなんですねぇ…。
後はうまくフォーカスを戻せれば…苦節数週間、おかげでようやく解決できそうです。

こんな質問にお答え頂き申し訳ないです。
お二方とも本当にありがとうございました。

634 :デフォルトの名無しさん:03/03/05 00:10
あるプロセスからCreateThread()で複数スレッドを呼び出して処理をさせているのですが、同時に呼べるスレッド数の上限は決まっているのでしょうか?
大量のスレッド(1000〜10000個)を呼んでも、平気なのですか。


635 :デフォルトの名無しさん:03/03/05 00:21
>>634
普通に考えて65536個ぐらいに限界があると思われ。

636 :デフォルトの名無しさん:03/03/05 00:38
>>634-635

どっちにしろそれだけスレッド作ったら流石に重い。


637 :デフォルトの名無しさん:03/03/05 00:50
>>633
AttachThreadInputはいらんだろ。
keybd_eventはフォーカスウィンドウにいくから。

638 :デフォルトの名無しさん:03/03/05 00:51
>>634
生成できるスレッド数の最大値…ってのが、
レジストリのどっかにあったと思ったが。


639 :デフォルトの名無しさん:03/03/05 01:01
>>637
AttachThreadInputしておかないとフォーカスの設定が出来ない

640 :デフォルトの名無しさん:03/03/05 08:55
>>634
デフォルトでスタックは1MB
ユーザーが利用可能なアドレス空間は2GB
さあ計算してみよう。
もちろんスタックだけではなくヒープやモジュールにも
使われるから実際にはそれより少なくなる

641 :デフォルトの名無しさん:03/03/05 09:09
>>597
激しく遅レスで、もういないと思うが、
Win32APIで簡単にというなら、
SetLayeredWindowAttributesで良いと思う。

642 :デフォルトの名無しさん:03/03/05 09:22
>>641
>>597はクライアント領域にカラーキーかマスク付き転送したかったのでは?
リージョンを組み合わせるとかTransparentBltとか



643 :デフォルトの名無しさん:03/03/05 11:26
マウスカーソルが重なった際に表示されるヒントを
ツールバーではなく、プッシュボタンに実装する手段はありますか?

ヒントというのは例えばブラウザの閉じるボタンにカーソルを合わせたときに
出る「閉じる」のポップアップウィンドウのことです。

644 :デフォルトの名無しさん:03/03/05 11:52
>>643
MFCかWTLのCToolTipCtrlクラスを使う。

Win32APIだけでやりたいなら
CToolTipCtrlのソースやMSDNの「ToolTip Controls」を見て勉強する。

645 :643:03/03/05 12:43
>644

ありがとうございます。ソース見て勉強します。

646 :641:03/03/05 16:54
>>642
すまそ、文盲ですた。
荒縄で首吊って逝ってk(ry

647 :デフォルトの名無しさん:03/03/05 17:00
晩御飯までには帰ってくるのよ。

648 :デフォルトの名無しさん:03/03/05 17:29
   ||/
   /||
 /∧||∧
  ( / ⌒ヽ 
   | |   | 
   ∪ / ノ
    | ||
    ∪∪
         ∧ ∧,〜
        ( (⌒ ̄ `ヽ    _
          \  \ `ー'"´, -'⌒ヽ
         /∠_,ノ    _/_
         /( ノ ヽ、_/´  \
       、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
      /`   \____>\___ノ
     /       /__〉     `、__>


649 :デフォルトの名無しさん:03/03/05 17:30
>>646
荒縄ハァハァ

650 :デフォルトの名無しさん:03/03/05 19:15
>>648仕事が手緩い

   ||/    
   /||    
 /∧||∧     ∧ ∧,〜
  ( / ⌒ヽ   ( (⌒ ̄ `ヽ    _
   | |   |    \  \ `ー'"´, -'⌒ヽ
   ∪ / ノ    /∠_,ノ    _/_ 
    | ||    /( ノ ヽ、_/´  \ 
    ∪∪   、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
        /`   \____>\___ノ
       /       /__〉     `、__>



651 :デフォルトの名無しさん:03/03/05 19:27
ならばいっそ

     ||    
     ||    
   ∧||∧   
  ( / ⌒ヽ/  ∧ ∧,〜
   | | /   ( (⌒ ̄ `ヽ    _
    /  |  \  \ `ー'"´, -'⌒ヽ
  / ∪ / ノ  /∠_,ノ    _/_ 
     | ||  /( ノ ヽ、_/´  \ 
     ∪∪  、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
        /`   \____>\___ノ
       /       /__〉     `、__>


652 :デフォルトの名無しさん:03/03/05 19:32
>>651仕事が手緩い
    ||
    ||
  ∧||∧     ∧ ∧,〜
  ( / ⌒ヽ//  ( (⌒ ̄ `ヽ    _
   | |  // |    \  \ `ー'"´, -'⌒ヽ
   ∪ /// ノ    /∠_,ノ    _/_
    | //||    /( ノ ヽ、_/´  \
    //∪∪   、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
        /`   \____>\___ノ
       /       /__〉     `、__>

653 :デフォルトの名無しさん:03/03/05 20:08
>>651-652
ワロタ

654 :デフォルトの名無しさん:03/03/05 21:45
アプリケーションでマウスホイールの処理をしたいので
WM_MOUSEWHEELメッセージを受け取ろうと激しく希望しているのですが
spy++で見る限りでは送られて来ないみたいです。
親ウィンドウには送られてきているみたいですが、それをウィンドウプロージャで
キャッチすることは出来ません。
GetMessage()では取得できないのでしょうか?

655 :デフォルトの名無しさん:03/03/05 22:07
>>654
まずOSと〜環境を〜
spy++から察するに、とりあえずこんなの加えてプロシージャでキャッチしてみるよろし

#define WM_MOUSEWHEEL 0x020A

656 :654:03/03/05 22:15
>>655
レスありがとうございます。
環境はVC++6.0(sp5)でWin2kでやってます。
windows.hのインクルードの前に
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
としています
#define WM_MOUSEWHEEL 0x020A
もやってみたのですが駄目でした。

子ウィンドウのスクロールバーはマウスホイールで操作可能なことから
メッセージを横取りされているように感じたのですが気のせいでしょうか…

657 :デフォルトの名無しさん:03/03/05 23:03
>>656
失礼、なるほど子ウィンドウですか。

今、全く同じ環境で、適当にMDIアプリ作ってみましたが、
一応子ウィンドウ側のプロシージャで問題なくホイールメッセージを受け取れるようです。
うーん、何がまずいんでしょうねぇ…。

658 :654:03/03/05 23:59
>>657
アプリ作っての確認までしていただき本当にありがとうございます。

今、別のPCで試してみたところ、正常にWM_MOUSEWHEELを受け取れました。
マウスが悪かったのか、メインPCで動作している何らかのアプリが邪魔をしているのかは分からないのですが
今度新しいマウスを買うとか、OSを入れなおしてみるとかしてみます。

検索するとWM_MOUSEWHEEL関係の悩みが結構引っかかるのですが
マウスホイールを主力として使うアプリケーションの開発は難しいのでしょうか…

659 :デフォルトの名無しさん:03/03/06 01:11
>>658
何か、マウス関係のユーティリティが動いてないか?

いずれにせよ、ホイール無しのポインティングデバイスなんて山ほどある
んだから、頼りきるのはマズイな。
全ての操作をキーボードでもできるようにすればベストだ。

660 :654:03/03/06 01:55
>>659
今、マウス購入時に付いてきたユーティリティーを削除したら
正常にWM_MOUSEWHEELを受け取ることが出来るようになりました。
的確なアドバイスをありがとうございました。

環境によって思うように動かないことがある、というのを痛感しました。
キーボードでの操作の実装もしっかりするように心がけなくてはいけませんね。

661 :デフォルトの名無しさん:03/03/06 08:56
>>654
もしWin95まで考慮に入れているならzmouse.hもチェック
意外とWin95も生存しているようだし



662 :デフォルトの名無しさん:03/03/06 09:38
>651

>652

笑いまくった
いってる言葉と行動がともなってねー

663 :デフォルトの名無しさん:03/03/06 10:00
>>660
マウスのドライバやユーティリティによってはいきなりWM_VSCROLLだったり・・・
ホイールが二つ以上あったりホイールじゃない何かだったりと・・・

664 :デフォルトの名無しさん:03/03/06 19:23
QueryPerformanceCounterをサポートしていない環境というのはあるんでしょうか?

665 :デフォルトの名無しさん:03/03/06 20:05
ハードウェアによってはあるかもね。
返り値で判定できるでしょ。

666 :デフォルトの名無しさん:03/03/06 20:13
>>665
知らねーなら答えるなよボケ

667 :デフォルトの名無しさん:03/03/06 20:15
サポートしていない環境がないなら返り値による判定なんて必要ないだろうな

668 :デフォルトの名無しさん:03/03/06 20:19
>>666
お前が氏ね

669 :デフォルトの名無しさん:03/03/06 20:21
どうしてそこで「氏ね」という単語が出てくるのか。
668は日本語が不自由と見た。

670 :デフォルトの名無しさん:03/03/06 20:27
    ||
    ||
  ∧||∧
  ( / ⌒ヽ 
   | |   | 
   ∪ / ノ
    | ||
    ∪∪   俺が変わりに死ぬよ

671 :デフォルトの名無しさん:03/03/06 20:27
   ||/
   /||
 /∧||∧
  ( / ⌒ヽ 
   | |   | 
   ∪ / ノ
    | ||
    ∪∪
         ∧ ∧,〜
        ( (⌒ ̄ `ヽ    _
          \  \ `ー'"´, -'⌒ヽ
         /∠_,ノ    _/_
         /( ノ ヽ、_/´  \
       、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
      /`   \____>\___ノ
     /       /__〉     `、__>

672 :デフォルトの名無しさん:03/03/06 20:34
>>664-671
デキレースだな…

673 :デフォルトの名無しさん:03/03/06 21:06
今更関係ないけど、DirectX8のある機能を使っていると
QueryPerformanceCounterが正常動作しないというバグがあったな


674 :デフォルトの名無しさん:03/03/06 22:51
>>673

> QueryPerformanceCounter

COMの参照カウンタのことでしょうか?
(ネタじゃないので、マジレスきぼんぬ)

675 :デフォルトの名無しさん:03/03/06 22:58
>>674
絶対違うと思います。

676 :デフォルトの名無しさん:03/03/07 00:59
それはともかく QueryPerformanceCounterをサポートしてない環境って何?
486では使えないけどPentium以降はサポートしてるんじゃないの?

677 :デフォルトの名無しさん:03/03/07 02:05
くるーそー

678 :デフォルトの名無しさん:03/03/07 10:33
WinChipやCylixのCPUでもサポートしてんの?

679 :デフォルトの名無しさん:03/03/07 12:06
QueryPerformanceCounterは、rdtscが動かなくても、動いたりする

680 :デフォルトの名無しさん:03/03/07 12:10
rdtscに依存していたらSpeedStep等で困りそうだ


681 : ◆8/MtyDeTiY :03/03/07 13:40
あるスレッドが WaitForSingleObject() とかで待機中かどうかを
調べる方法ってありますか?

682 :デフォルトの名無しさん:03/03/07 13:53
>>681
WaitFotSingleObjectで待機している場合にシグナル状態になるイベントオブジェクトを
WaitForSingleObjectで待ってみてはどうだろうか(藁

683 :デフォルトの名無しさん:03/03/07 20:48
調べたって調べた次の瞬間には待機に入ってるかもしれないし
待機を脱してるかもしれない。無意味。
そういうこと聞く人は同期について根本的に理解してなさそうだから
マルチスレッドのアプリケーション書かないでくれ

684 :デフォルトの名無しさん:03/03/07 20:53
>>683
はい、さようなら。

685 :デフォルトの名無しさん:03/03/07 21:43
>>681
同期オブジェクトって、利用方法についてある程度パターンがあるのよ。
それに沿って使ううちは問題ないけど、そこから外れるととたんに苦しくなる。
時間を無駄にしたくないなら、設計をそれに合わせたほうがいいよ。

>>684
さようなら。

686 :デフォルトの名無しさん:03/03/07 21:51
>>685
で、具体的な方法は提示できないと。口だけって奴だな。

687 :デフォルトの名無しさん:03/03/07 23:42
685ではないが、>>681の質問から「具体的な方法」が提示できたら
そいつはエスパーか占い師だ(w
で、>>681が単に待ちを中断する方法が欲しいのなら、
WaitForMultipleObjectsを使えばいいだけだよな。
何かを待つときはスレッド間通信用の口を残しておくのがベター。
Win32だと待機リソースに応じて様々な手段が用いられ、汎用の方法は
無いんで状況に応じて色々工夫は必要だろう。


688 :686:03/03/07 23:44
>>687
すまん。俺もそう思う。ついつい暑くなってしまった。申し訳ない。

689 :デフォルトの名無しさん:03/03/08 01:03
イヤな方法だが、WaitForSingleObject() の前後でフラグを操作すれば
判別できないでもない。

690 :デフォルトの名無しさん:03/03/08 01:16
>>689
(同期がらみの解決方法として)安易にフラグを持ち出すと

>同期について根本的に理解してなさそうだから

って言われちゃうよん。

つか、イヤどころの話じゃないと思う。

691 :デフォルトの名無しさん:03/03/08 01:32
まあ端的に云ってしまえばフラグ操作とwait状態への侵入またはそこからの
復帰をatomicに実現できないから駄目。
というか「そういうことをしたくなる」こと自体が設計上の
問題を如実に示している。
という訳で元に戻る。


692 :デフォルトの名無しさん:03/03/08 03:43
単に調べるだけなら、WaitForSingleObjectをクリティカルセクションで囲って、
他のスレッドからはTryEnterCriticalSectionで調べるってのは駄目?

…いやまあ、俺も用途が思いつかないのには同意だ。

693 :デフォルトの名無しさん:03/03/08 05:04
 あのー、>>681氏はひょっとして
「任意の外部のプロセス/スレッドが待ち状態に陥ってるかどうかを知りたい」
んじゃないのかと思うんですが。

 VisualC++のデバッガ上で動かしてるプログラムがブレークに3秒間
応答しないと、デバッガが「デッドロックしている可能性があります」云々
とメッセージを出しますが、それを「可能性」じゃなくて確定する
方法があると確かに便利かもしれませんよね。
デバッグ系のAPIでなんとかならないかな?

694 :デフォルトの名無しさん:03/03/08 09:00
> TryEnterCriticalSection

Win98系で使えないのでご注意...なんで使えねえんだよ...
まあMutexのほうが便利だが

> それを「可能性」じゃなくて確定する

SuspendThread→GetThreadContext→ResumeThread
して、プログラムカウンタの値が変化してないことを確かめる?
うーん、うそ臭い

695 :デフォルトの名無しさん:03/03/08 09:42
EnumProcessModulesについての質問ですが、
対象プロセスの本体(exeファイル)がhModule[0]以外に入る事はあるのでしょうか?

696 :デフォルトの名無しさん:03/03/08 12:30
>694
Sleep....

>691
SignalObjectAndWaitわ〜

697 :デフォルトの名無しさん:03/03/08 12:53
>SignalObjectAndWait
>Windows 95/98:サポートされていません。

698 :681:03/03/08 13:17
ども。おはようです。

681が、スレッドの状態を知りたかったのは、

while( WaitForSingleObject( event, INFINITE ), true ) {
// なんか処理
}
とかでイベントを待ってるスレッドに
PulseEvent() で、イベントを伝えたかったからです。

[1] スレッドの状態が解れば、最悪Busyループを組むことでとにかくイベントは伝えられますよね。
[2] "スレッドが待機中になるまで待つ"システムコールなんかがあると最良かな。


で、
[1]のための方法が"クリティカルセッションで囲んで、TryEnterCr..."で、
[2]のための方法が、SingleObjectAndWait() な訳ですね。
そんで、[1]も[2]も、Win9xではサポートされない、と。

Win2000とかのときだけ、これらの方法を採って、
Win98とかのときは"WaitForSingleObject()の前後でフラグ or Mutex"でお茶を濁す、
って云うのが現実的かなぁ。

699 :681:03/03/08 13:20
つか、PulseEventでイベントを伝えようとすること自体が阿呆なのかな。


700 :デフォルトの名無しさん:03/03/08 13:49
なんでスレッドの状態を知りたいの?
その必要がないように思えるんだけど・・・

> PulseEventでイベントを伝えようとすること自体が阿呆なのかな

Win32にはWindowMessageキューという大変便利なキューがありますよ。

701 :デフォルトの名無しさん:03/03/08 16:07
>>692
つーかタイムアウト0のWaitForSingleObjectでOK。
>>694
OPTEX_TryEnterをどうぞ
http://www.microsoft.com/msj/archive/s202b.htm
NT 4.0でしか使えないと書いてるがそれはこの記事が1996年9月の
ものだからで、Win98以降ならInterlockedCompareExchangeが
サポートされてるから使えるはず。
CMPXCHGでInterlockedCompareExchangeを自作すれば
Win95でも使えるかも。
>>698
[1]はPulseEventする時点ではもう待機を脱しているかも
しれないから駄目。
> というか「そういうことをしたくなる」こと自体が設計上の
> 問題を如実に示している。
に尽きる。
[2]はPulseできないが、それでいいんならなんでSetEvent
では駄目なの?

702 :デフォルトの名無しさん:03/03/08 16:28
そもそもSignalObectAndWaitは
「スレッドが待機中になるまで待つ」APIじゃないし。
そんなAPIがない理由は、戻ってきた次の瞬間には
もう相手のスレッドも待機を脱してるかもしれないから。
そんなことをしたくなること自体が(ry
ついでにスペルくらいちゃんと読め。SingleObectAndWaitではない。
やっぱりお前はマルチスレッドのアプリを書くべきじゃないと思うんだが。

703 :デフォルトの名無しさん:03/03/08 16:29
ついでにPulseEventの解説より引用。
> Note This function is unreliable and should not be used.
> It exists mainly for backward compatibility. For more
> information, see Remarks.

704 :702:03/03/08 16:31
とか偉そうに書いてたら俺までスペル間違えた∧||∧
SignalObjectAndWait

705 :デフォルトの名無しさん:03/03/08 17:03
こーゆー話をするスレあったんだよな。
寂れてるけど。

マルチスレッドプログラミング相談室 その2
http://pc2.2ch.net/test/read.cgi/tech/1037636153/l50

706 :デフォルトの名無しさん:03/03/08 19:26
APIの話である限りはここでもいいんじゃないの?
PulseEventがだめぽな場合の具体例。
http://www.microsoft.com/msj/0997/win320997.htm
デバッグAPIはKernelAPCを使って実現されてる。

707 :デフォルトの名無しさん:03/03/08 20:07
ExitWindowsExecをrundllを使わずに呼ぶ方法ない?

708 :デフォルトの名無しさん:03/03/08 20:07
>>707
普通にloadLibraryすれば?

709 :デフォルトの名無しさん:03/03/08 20:44
>>708
32ビットアプリから、という趣旨では?
「Win32」 API質問箱だし。
2000やXPではログオフするだけなのにいまさらそんな方法
追求してどうするねん、という気もするが

710 :デフォルトの名無しさん:03/03/08 20:50
>>709
>32ビットアプリから、という趣旨では?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp

だからそう言う趣旨で答えてる。

711 :デフォルトの名無しさん:03/03/08 21:08
>>710
ExitWindowsExecは16bitのUSRE.EXEにあるから
サンクを使う必要があるのでは?



712 :デフォルトの名無しさん:03/03/08 21:16
USREって…妙なタイプミスをしてしまった

ExitWindowsExecならQT_Thunkでどうにかなるかも


713 :デフォルトの名無しさん:03/03/08 21:27
サンク 32 16 DLL API
検索キーワードはこのあたりでよい?

714 :デフォルトの名無しさん:03/03/08 21:28
>>713
同意。

715 :デフォルトの名無しさん:03/03/08 21:36
http://www.geocities.co.jp/Hollywood/4205/doc/mscdex2.html
QT_Thunkでぐぐったらこんなのが

716 :デフォルトの名無しさん:03/03/08 21:37
>>706
あんまりよくない。
マルチスレッドとか同期とかの話は長引いたり荒れたりするから隔離しないと。

717 :デフォルトの名無しさん:03/03/08 21:38
でも漏れ実はサンクなんて使ったことねーよ・・・

718 :デフォルトの名無しさん:03/03/08 22:20
いずれにせよ「そういう趣旨で」答えてなんで普通にLoadLibrary
って回答になるねん。
確かにWin16側の関数もLoadLibraryって名前だけどサンク経由で
呼ぶのは「普通」じゃないと思う

719 :デフォルトの名無しさん:03/03/08 22:49
おとなしくrundll使ったほうが楽なんだだろうが呼び出しに失敗する事が多い…

720 :デフォルトの名無しさん:03/03/08 23:44
Win16コンパイラならOpenWatcomに入ってるが
ヘッダがないな…
まあExitWindowsExecを呼び出す程度なら
自分で書き下せばいいけど

721 :デフォルトの名無しさん:03/03/09 00:55
ShellNotifyIconでタスクトレイにアイコンを登録する時に
Windows2000だと、256色のアイコンが16色になってしまうのですが、
これってなぜですか?
XPの写真を見ると256色以上のアイコンが綺麗に描かれているのは、
OSの違いのせいでしょうか?
それともプログラミングの問題ですか?

722 :デフォルトの名無しさん:03/03/09 01:00
>>721
詳しくはわからなが、漏れの XP ではこんなコードで 256 色になってるので試してみてくれ。
NotifyIconData.hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_SHARED);

723 :デフォルトの名無しさん:03/03/09 01:07
>>721
2000以前のWindowsの仕様でタスクトレイのアイコンは16色にしか
できません。Me以降なら256色にできます。
2000以前で256色にする裏技もあるらしいけどやり方は不明。すまん。

724 :デフォルトの名無しさん:03/03/09 01:07
>>722
試してみましたが、私の方では駄目でした。
XP、もしくは正常なプログラミング方法では、やはりそういうコードで
256色になるのですね。

725 :721=724:03/03/09 01:08
>>723
そうでしたか。
どうもありがとうございます。

726 :デフォルトの名無しさん:03/03/09 02:24
CPU使用率をはかるAPIありますか?


727 :デフォルトの名無しさん:03/03/09 02:35
>>726
http://pc2.2ch.net/test/read.cgi/tech/1018239290/681

728 :デフォルトの名無しさん:03/03/09 05:03
APIでツールバーにヒントを加える方法はありますか?
検索したのですが、MFCでのやり方しか見つからないです。

729 :デフォルトの名無しさん:03/03/09 05:35
ヒントってツールチップ?
それなら、TBSTYLE_TOOLTIPSを指定して、WM_NOTFYのTTN_NEEDTEXTに反応してやる。

730 :728:03/03/09 06:04
>>729
出来ました。ツールチップって言うんですね。
ありがとうございました。

731 :デフォルトの名無しさん:03/03/09 11:57
//DLL.h
#define EXPORT extern "C" __declspec(dllexport)
EXPORT void CALLBACK ITEMWEAPON(void);
をインクルードしたソースファイルを
Borland C++ CompilerでDLLにするときに
「DLL.h 2:宣言が正しく終了していない」がでます。
またソース部の
EXPORT void CALLBACK ITEMWEAPON()
{ //いろいろかいてある
}
でもEXPORT void CALLBACK ITEMWEAPON()の
部分で「宣言が正しく終了していない」が
なんでなんですが

732 :デフォルトの名無しさん:03/03/09 13:15
>>727
おお。レジストリを使うのか。
サンクス。


733 :731:03/03/09 13:36
なんか自分で解決しました・・
cではできなくc++でできました。
意味ねぇー

734 :デフォルトの名無しさん:03/03/09 13:38
extern "C" ってC++用じゃなかったか

735 :デフォルトの名無しさん:03/03/09 18:20
だれかborland c++ compilerで
リソースのDLLを作る時の
コマンドラインオプションと
コンパイラを教えてくれませんか
調べてもわからないので
どうしようもないです。教えてください

736 :デフォルトの名無しさん:03/03/09 18:22
brc32
じゃなかったっけか?

737 :デフォルトの名無しさん:03/03/09 18:27
ttp://www.google.com/search?num=50&hl=ja&q=borland%20リソース%20DLL
つーかどこ調べたんだよ。

738 :デフォルトの名無しさん:03/03/09 18:50
>>737
調べてないと思われると叩かれるから
おまじないのように書いてるだけで
実際に調べてるわけないじゃん

739 :735:03/03/09 20:50
いや、ちゃんと調べましたよ
ヘルプファイルとMSNサーチで
ただヘルプファイルのbrc32の
コマンドラインオプションには
DLLを作る場合使うというものは書いてなく
MSNではBorlandQ&Aがまともなほうで
他のページはBorland c++ compiler 5.5は
無料でいいですよーーーというページばかりで
300近くのサイトに入りまくるのもバカらしくなり
ここに書き込みました
BorlandQ&Aについては前にリソースの
コンパイルで調べようとしたら
BCC32の簡単なコマンドラインオプション以外は
ヘルプファイルを見ろって感じだったんで
はじめからアテにしてませんでした。
ちなみにISDNの3時間/月なんで
時間かけれるわけなんです



740 :デフォルトの名無しさん:03/03/09 20:56
縦に読めない

741 :デフォルトの名無しさん:03/03/09 20:58
いや、ちゃんと調べましたよヘルプファイルとMSNサーチでただヘルプファイルのbrc32のコマンドラインオプションには
DLLを作る場合使うというものは書いてなくMSNではBorlandQ&Aがまともなほうで他のページはBorland c++ compiler 5.5は
無料でいいですよーーーというページばかりで300近くのサイトに入りまくるのもバカらしくなりここに書き込みました
BorlandQ&Aについては前にリソースのコンパイルで調べようとしたらBCC32の簡単なコマンドラインオプション以外は
ヘルプファイルを見ろって感じだったんではじめからアテにしてませんでした。ちなみにISDNの3時間/月なんで
時間かけれるわけなんです


すげぇ、展開すると日本語の文章として崩壊する。

742 :735:03/03/09 21:20
。つけてないからですね。←これ!!
で最後は「ないんです」です。意味違ってます。
Borland c++ でリソースのDLLの話は解決しました。
ヘルプファイルには.EXEと書いてあるくせに
.DLLでも全く問題ありませんでした。
でもさすがに一切のコードなしの
Cソースをコンパイルしたのはびっくりしました。
コードなしのCソースをコンパイルしDLL作成→
rcをコンパイル&リンク でバッチリでした。
brc32じゃ と書いた736さんありがとうございました。
けどボーランドもテキトウだなぁぁ。
(。を意識しました)


743 :デフォルトの名無しさん:03/03/09 21:23
プログラミングする前に国語勉(ry

744 :デフォルトの名無しさん:03/03/09 21:26
>>けどボーランドもテキトウだなぁぁ。
おまえの「ちゃんと調べた」の方がよっぽどテキ(ry

745 :735:03/03/09 21:44
国・社は点悪いです(特に社)。
英はまあまあ。
理・数は完璧?
な純理系ですから。
よく使う言葉は「多分・・」です。
(WINAPI関係ないですね。けど日本人として○○○?って感じです)

746 :デフォルトの名無しさん:03/03/09 21:48
いいからすっこめ コミュニケーション能力に問題あり

747 :デフォルトの名無しさん:03/03/09 21:49
>>745
無職ですよね。

748 :735and745:03/03/09 22:04
学生です。
高校受験終わったんで
ゆっくりとプログラミング
やってまーーす。
中3です(マジ)
田舎だし、他のやつ受験終わってないし、
家で遊んでます(明後日公立試験)。

749 :デフォルトの名無しさん:03/03/09 22:05
>>748
読点を覚えなさい。多分堕ちてます。

750 :デフォルトの名無しさん:03/03/09 22:05
>>748
プログラミングは

 理系より文系


751 :デフォルトの名無しさん:03/03/09 22:07
やはり年齢的に、スレに全く関係ない自己紹介を
始めても恥ずかしくない年頃なんですね。

752 :デフォルトの名無しさん:03/03/09 22:10
>>750
748じゃないが、
Σ(´Д`ズガーン

753 :デフォルトの名無しさん:03/03/09 22:11
>>748
はあ、受験終わったんですか?
俺も中3だけど受験は3年前におわった。

754 :デフォルトの名無しさん:03/03/09 22:11
理系ですが現代文得意で数学苦手です。

755 :デフォルトの名無しさん:03/03/09 22:12
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/hiroyuki/

756 :デフォルトの名無しさん:03/03/09 22:13
両系です

757 :デフォルトの名無しさん:03/03/09 22:23
両刀使いです

758 :735and745:03/03/09 22:24
>>753
ということは一貫教育?
いいですね。
こっちは試験一週間前、
家でA.M.3時まで勉強。
幸い社会の試験が無い学校で、
英語ばっかやって受かりました。
ちなみに3年前は受験なし。
田舎だからみんな同じ 市立学校。
WINAPI関係ないのに・・・もうやめます。

759 :デフォルトの名無しさん:03/03/09 22:26
>>758
もう帰ってこなくていいよ。

760 :デフォルトの名無しさん:03/03/09 22:33
>>758
雑談は、他でやってくれ。

761 :735and745:03/03/09 22:39
>>759-760
低学歴さん必死ですね。

762 :名無し@沢村:03/03/09 22:41
>>761
ヌヒよ、偽物は消えろ

763 :デフォルトの名無しさん:03/03/09 22:42
駄目だ。ネタスレと化してる。

764 :デフォルトの名無しさん:03/03/09 22:59
どうしてこうなるの!

765 :デフォルトの名無しさん:03/03/09 23:02
タスクバーのハンドルをFindWindowで取得して
MoveWindowでリサイズしようとしても出来ませんでした。

タスクバーのスタートボタンなどはMoveWindowsでウィンドウサイズを
変更できるんです。
なぜタスクバーだけうまくいかないんでしょうか・・・。

どなたかご教授いただけないでしょうか。

HWND hTaskbar = FindWindowEx(NULL, NULL, "Shell_TrayWnd", "");
MoveWindow(hTaskbar, x, y, cx, cy, TRUE);


766 :デフォルトの名無しさん:03/03/09 23:04
>>765
WM_MOVEに対してデフォルトでない処理をしていることは容易に想像できる。

767 :デフォルトの名無しさん:03/03/10 00:32
拡張子を指定しないファイルを開くと出る
「アプリケーションを指定して開く?」ダイアログに出てくる
アプリケーションの一覧を取得するにはどうすればいいですか??

要は、インストールされているアプリを列挙しないのです。
ただし、アプリの追加と削除一覧ではありません。
(↑サービスパックとかも出てきちゃうので)

APIは無いのかな〜。
レジストリかな〜。

768 :デフォルトの名無しさん:03/03/10 00:34
あれって関連付けされてるEXE一覧じゃね?

769 :sage:03/03/10 00:38
>>768

そうなんですけど、
どこを見ればいいんですかね??

レジストリの拡張子を全部見ていったりしたんですけど、
どうも表示されるものが違うんですよね。

770 :デフォルトの名無しさん:03/03/10 01:56
>>769
Windowsってアプリケーションを探すのに
拡張子 → ファイルタイプ → アプリケーション
ってなってるから拡張子から直接はムリ。

……という話をどこかで読んだ。
ガゼネタかもしれないけれど。

771 :デフォルトの名無しさん:03/03/10 08:40
>>770
実際そうだぞ。

900個の拡張子に同じ設定が900個ってのはアホらしいわけで。

772 :デフォルトの名無しさん:03/03/10 10:21
あれって関連付けされてる EXE じゃなくて、スタートメニュー内のショートカット
にある EXE と最近 「アプリケーションを指定して開く」 で指定された EXE
が出てこないか?

773 :デフォルトの名無しさん:03/03/10 12:36
スタートメニューに登録してあるOpenJaneが出てきたことはないわけだが

774 :デフォルトの名無しさん:03/03/10 12:49
>>767
HKEY_CLASSES_ROOT\Applications
以下だと思ったけど。
NoOpenWithって書いてあったり、実体のEXEなどが存在しなかったら表示されない。

かなーりうろ覚え。

775 :デフォルトの名無しさん:03/03/10 15:06
メニューの横にアイコンを表示したいのですが、
どうやれば出来ますか?

776 :デフォルトの名無しさん:03/03/10 15:35
オーナードロー

777 :デフォルトの名無しさん:03/03/10 15:49
>>776
それはめんどくさすぎ。
チェックマークのビットマップ変えるとかでは駄目か?

778 :デフォルトの名無しさん:03/03/10 15:55
http://pc2.2ch.net/software
から pc2.2ch.net、/software というふうにサーバ名などを抜き出すAPIはあるでしょうか?

779 :デフォルトの名無しさん:03/03/10 15:58
>>778
InternetCrackUrl

780 :デフォルトの名無しさん:03/03/10 16:01
>>779
ありがとう

781 :775:03/03/10 19:28
>>776
オーナードローでできるみたいですね。ありがとうございます。
>>777
アイコンをビットマップに変換するのってどうやるんですか?

782 :デフォルトの名無しさん:03/03/10 19:31
>>781
メニュー項目ごとにビットマップを変えたりはできないから
あまり実用的じゃないと思うぞ

783 :デフォルトの名無しさん:03/03/10 23:41
SetMenuItemInfoででけへんの?

784 :デフォルトの名無しさん:03/03/11 01:36
コントロールの破棄時にWM_PARENTNOTIFYが送られてきません。
SPY++で見てもメッセージが流れていないようです。
どういう条件の時にWM_PARENTNOTIFYが流れますか?
開発はダイアログベースです。


785 :デフォルトの名無しさん:03/03/11 12:49
>>784
The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or
destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child
window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx
function that creates the window returns. When the child window is being destroyed, the system sends the message
before any processing to destroy the window takes place.


786 :デフォルトの名無しさん:03/03/11 13:02
>>785
そのはずなんですが、実際にはそのようになっていないので
何か特別な指定が必要なのかなぁと思って質問しました。


787 :デフォルトの名無しさん:03/03/11 16:11
>>786
All child windows, except those that have the WS_EX_NOPARENTNOTIFY extended window style,
send this message to their parent windows. By default, child windows in a dialog box have the
WS_EX_NOPARENTNOTIFY style, unless the CreateWindowEx function is called to create the child
window without this style.


788 :デフォルトの名無しさん:03/03/11 21:08
Windowsの起動時にプログラムを実行したい場合、レジストリ

  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run

に実行したいプログラムのファイル名を書きますが、

同様に、終了時にプログラムを実行する方法はないですか。


789 :デフォルトの名無しさん:03/03/11 22:52
>>788
起動時にコソーリ立ち上げておいて、
WM_QUERYENDSESSIONをワクワクしながら待つ。

790 :デフォルトの名無しさん:03/03/11 23:28
>>789
ワロタw

791 :デフォルトの名無しさん:03/03/12 03:01
mmioOpenを使ってるのですが、
リソース内のファイルを使うにはどうすればいいのでしょうか?
ビットマップは、LoadBitmapやMAKEINTRESOURCEを使って表示できるのですが。

初歩的で申し訳ないです。VC++使ってます。

792 :デフォルトの名無しさん:03/03/12 03:02
age忘れ。

793 :デフォルトの名無しさん:03/03/12 06:37
>>787
結局のところ、ダイアログベースでコントロールにWM_PARENTNOTIFYを送信させるにはどうすればよいのでしょう。
WM_PARENTNOTIFYを送信させたい全コントロールに対してSetWindowLongするしかないのでしょうか?
この方法だとWM_CREATEを送信して欲しい場合に対応できませんが。

794 :デフォルトの名無しさん:03/03/12 11:42
>>793
横からですが、>>787の通りですよ。

WS_EX_NOPARENTNOTIFYを指定せずに作ったコントロールからは、
きちんとWM_PARENTNOTIFYが送信されますよん。

795 :デフォルトの名無しさん:03/03/12 13:33
これだめぽ
10秒間操作不能になります
case WM_LBUTTONDOWN
time_t t;
t=time(NULL);

while(time(NULL) < t+10)
{
//繰り返したい処理
}
return 0;

どうすればよいでしょうか

796 :デフォルトの名無しさん:03/03/12 13:47
while(time(NULL) < t+10)
{
//繰り返したい処理
他のお仕事もしてきてね
}

797 :デフォルトの名無しさん:03/03/12 13:53
PeekMessageを調べれば幸せになれるかも。

798 :795:03/03/12 14:19
キーワードどうも。 PeekMessage ループ で検索したら
いろいろと出てきて ラッキー♪
 
while(time(NULL) < t+10)
{
MSG msg;
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

//処理

}
これで動きました。 感謝!

799 :デフォルトの名無しさん:03/03/12 14:29
ふふふ、そのままじゃあ
そのループ中にプログラムが終了したらあぽーんじゃねえ?

800 :デフォルトの名無しさん:03/03/12 14:32
WM_LBUTTONDOWNが複数発生しときも気になるナ

801 :デフォルトの名無しさん:03/03/12 14:46
PM_REMOVEなら
if(msg.message == WM_QUIT){
 PostQuitMessage(0);
 return 0;
}
これをTranslateMessageの前に入れないと
GetMessageがFALSE返さない悪感

802 :デフォルトの名無しさん:03/03/12 16:03
よくある手としてはループに入る前にダイアログを出して
親ウィンドウへの操作を禁止する

803 :デフォルトの名無しさん:03/03/12 16:47
>>794
え〜と、ですから
> By default, child windows in a dialog box have the WS_EX_NOPARENTNOTIFY style
ダイアログのコントロールはデフォルトでWS_EX_NOPARENTNOTIFYが指定されているんですよね?
「WS_EX_NOPARENTNOTIFYを指定せずに作ったコントロールからはWM_PARENTNOTIFYが送信される。
 しかし、ダイアログのコントロールはデフォルトでWS_EX_NOPARENTNOTIFYが指定されているのでWM_PARENTNOTIFYが送信されない。
 では、ダイアログのコントロールにWM_PARENTNOTIFYを送信させる
 (WS_EX_NOPARENTNOTIFYが指定されていないコントロールを作る)
 にはどうすればよいのだろう」
というのが困っている点です。
英語が苦手なので、もし間違っていたら訂正お願いします。

804 :デフォルトの名無しさん:03/03/12 16:59
だからダイアログの子ウインドウを巡回して、
SetWindowLing(GWL_EXSTYLEを使って
WS_EX_NOPARENTNOTIFYを解除して回ったらよろしかろう。

805 :既出?:03/03/12 18:13
APIを学ぶのに最適な書籍ってあるでしょうか?
リファレンス的に使えるものがいいのですが・・・・
皆さんは何を使ってますか?

806 :デフォルトの名無しさん:03/03/12 18:14
>>805
MSDN(English)

最近日本語版がgoogleに引っかからなくて鬱。
でも、よく考えたら昔英語版のリファレンス使ってたじゃんとか思って読んだら読めてウマー

807 :デフォルトの名無しさん:03/03/12 20:02
>>805
PlatformSDK Documentation

808 :CreateFileで(・ω・` )ショボーン:03/03/12 21:26
HDDに高速に、巨大なファイルをシーケンシャルに書込みを行うプログラムを
作っているのですが、どうも書込みが遅くて困っています。

書込み対象のHDDは、RAID0(ストライピング)で構成されています。
HDBENCHなどのベンチマークソフトでは軽く80MB/s位はたたきだすのですが、
自分のプログラムでは30MB/sがいいとこです。
(※40MB/sくらいまでは帯域あげたいのですが。)

CreateFile のオプションもいろいろと試してみたのですが、
大きな変化はないようでした。CreateFileは以下のようになっています。

m_hFile = CreateFile( szFileName, GENERIC_WRITE | GENERIC_READ, // 書き込みモード
FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_NO_BUFFERING, NULL );

以後
WriteFile(m_hFile, foo, size, &m_dwWrite, NULL);
で307200バイトずつ書き込んでいます。

何かいい方法はありませんでしょうか?

809 :デフォルトの名無しさん:03/03/12 21:41
> FILE_FLAG_WRITE_THROUGH

ん? 速さを求めてるんだったよな

810 :CreateFileで(・ω・` )ショボーン:03/03/12 22:10
>>809
FILE_FLAG_WRITE_THROUGH はあってもなくても
結果はそれほど変わりませんでした。
(30MB/sくらいで推移。ちなみにパフォーマンスモニタで計測してます。)

なんでだろ〜?


811 :デフォルトの名無しさん:03/03/12 22:23
もっと小さいサイズで書いてみたら?1024bytesとまではいかんが

812 :デフォルトの名無しさん:03/03/12 22:39
GENERIC_READを外してみる

813 :デフォルトの名無しさん:03/03/12 22:40
HDBENCHでHDDWrite36427の時システムモニタ見たら、
ピーク時で書き込み18.3MB/sだったけど。


814 :デフォルトの名無しさん:03/03/12 23:41
あるマシンにTELNETで接続し、プロセスを起動させようとして
CreateProcessをするexeをリモート側において実験してみたのですが、
起動はすれど、画面に表示されませんでした。
(タスクマネージャ上には存在する)

その後STARTUPINFO構造体のパラメータをいじってnotepad等をリモート
側で起動させることに成功したのですが、TELNETセッションを切ると
当然起動したnotepadは終了してしまいます。

そこで質問ですが、このようなときにリモートで起動したプロセスが残ったままに
なるような仕組みってのはどうやればいいのかわかりません。

ご回答おねがいします。


815 :デフォルトの名無しさん:03/03/12 23:48
COM

816 :CreateFileで(・ω・` )ショボーン:03/03/13 00:17
>>811
>>812
>>813
ありがとうございます。
GENERIC_READを外すのは試してみましたが、
ほとんど変わりありませんでした。
んで、書き込んだ後すぐ読み出すのでGENERIC_READも渡してます。

やはり、書込みサイズですかね。
試してみます。


817 :デフォルトの名無しさん:03/03/13 00:18
>>814
スケジューラサービスに起動してもらう。


818 :デフォルトの名無しさん:03/03/13 01:30
windowsでmacアドレスを取得したいのですがなんか関数ありますか?
pcap使わないと無理なのでしょうか?
ioctlに似たioctlsoketは大した事できないし・・・

819 :デフォルトの名無しさん:03/03/13 02:18
>>818
GetIfTable

820 :デフォルトの名無しさん:03/03/13 14:57
MessageBox APIの表示スタイルで「MB_YESNO」と「MB_ICONQUESTION」を
同時に使うことはできませんか?
できるならやり方を教えてください。お願いします。

821 :デフォルトの名無しさん:03/03/13 15:03
>>820
ORで繋ぐか足し算するか
コンパイラによって処置方法は変わるができる

822 :デフォルトの名無しさん:03/03/13 15:08
>>821
ありがとうございます。あなたのヒントのおかげでできました。
結局「MB_YESNO + MB_ICONQUESTION」としたらうまくいきました。
ありがとうございました。

823 :デフォルトの名無しさん:03/03/13 15:56
>>822
ORってビットORのことでしょ(^_^;)
MB_YESNO | MB_ICONQUESTIONでしょ(^_^;)

824 :823:03/03/13 15:58
あ、足し算でもいいか。スマソ

825 :デフォルトの名無しさん:03/03/13 16:16
(可能な環境なら)ビット演算の方がいいと思うなぁ...

826 :デフォルトの名無しさん:03/03/13 16:29
>>825
キャリーの起こるような値を連結しろとは言われないだろうけれど。

827 :デフォルトの名無しさん:03/03/13 16:31
MB_YESNO + MB_ICONQUESTION + MB_ICONQUESTION

828 :デフォルトの名無しさん:03/03/13 16:32
気分の問題だな。
OR演算子が記号じゃない言語の場合は
+で区切ったほうが視覚的に区切りが見やすいとか

829 :デフォルトの名無しさん:03/03/13 17:00
VBならいきなし加算後の数字でブチ込むのも可能だしな

830 :デフォルトの名無しさん:03/03/13 17:20
>>829
>VBならいきなし加算後の数字でブチ込むのも可能だしな

C言語はリテラルが書けません。そう言いたい。

831 :デフォルトの名無しさん:03/03/13 18:25
ShellExecute(0,NULL,"c:\\poge\\hoge.exe","test",NULL,0);
という風に指定して、"test"はhoge.exeのどこに格納されてるのでしょう?
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
これのlpCmdLineでいいのでしょうか?

832 :デフォルトの名無しさん:03/03/13 18:36
exeには格納されてないと思う

833 :デフォルトの名無しさん:03/03/13 18:38
>>831
まずやってみれ

834 :132:03/03/13 18:42
If lpFile specifies an executable file, lpParameters is a pointer to a null-terminated string that specifies parameters to be passed to the application.
If lpFile specifies a document file, lpParameters should be NULL.

835 :デフォルトの名無しさん:03/03/13 20:18
WinMain以外の場所で見たくなったらGetCommandLine();

836 :デフォルトの名無しさん:03/03/13 22:31
>>830
意味わかんない。
「加算後の数字でブチ込む」 のは API が呼べる言語ならどれでも可能だと思うが。

837 :デフォルトの名無しさん:03/03/13 22:35
>>836
それ以前に定数の替わりにリテラルが使えない言語なんてあるのか?

838 :831:03/03/13 22:46
やってみましたが"test"という文字列を取得できません。。

839 :デフォルトの名無しさん:03/03/13 22:59
lpCmdLineの中身を見てから言ったのだろうか

840 :デフォルトの名無しさん:03/03/13 23:00
>>838
だめだこりゃ

841 :デフォルトの名無しさん:03/03/13 23:05
argv みたいに分解されている文字列をお望みなのか?

842 :デフォルトの名無しさん:03/03/14 00:01
testとなにか空白データとか?
if(lpCmdLine=="test"){
iTemp=MessageBox(NULL,"","",MB_OK);
}
とやるとメッセージボックスがでません。

843 :デフォルトの名無しさん:03/03/14 00:06
レスするべきなのか…。

844 :デフォルトの名無しさん:03/03/14 00:12
>>842
C または C++ を 1 から勉強し直してこい。
あんたが C/C++ でアプリケーションを書くのはまだ無理だ。

845 :デフォルトの名無しさん:03/03/14 00:13
ていうか

>if(lpCmdLine=="test"){

許容されるのね・・・


846 :デフォルトの名無しさん:03/03/14 00:14
どうやら真性のようだ

847 :デフォルトの名無しさん:03/03/14 00:19
>>845
許容だけはされるよ。
おそらく真にはならないというだけで。

848 :デフォルトの名無しさん:03/03/14 00:31
>>845
文法上は正しいw

たとえば下のようにすればメッセージボックスが表示される。
(VC++6.0SP5 @ Win2000 では表示された。)
コンパイラによってちがうかもしれんけど。

char *pTest = "test";
if( pTest == "test" )
{
    ::AfxMessageBox("キタ━━━━━━\(゚∀゚)/━━━━━━ !!!!!");
}

849 :デフォルトの名無しさん:03/03/14 00:32
ポインタ同士を比較した結果は、2つのうち少なくとも片方がNULLの時だけ定義される。
そうじゃない場合の結果は定義されない。(要するにその結果は処理系依存)
だからコンパイルエラーにはならない。


850 :sage:03/03/14 00:34
タスクマネージャー(タスクバー)に表示されているアプリを列挙したいのですが、
どのように実現すれば良いのでしょうか?
要は、自作タスクバーみたいのを作りたいのであります。

EnumWindowだの何だのやっても、
エクスプローラーはプロセスが1つでもWindowが沢山あったり、
ExcelはMDIでもちょっと不思議な動きだったり・・・
VisualStudioはHWNDが2つあったり・・・

何かコツでもあるのでしょうか?

851 :デフォルトの名無しさん:03/03/14 00:37
>>849
状況はJavaの==の両辺がオブジェクトの時と一緒な訳か。なるほど。



852 :デフォルトの名無しさん:03/03/14 00:37
>>844
せめてどのへんかを・・・。
lpCmdLineのlpはロングポインタとか??

853 :デフォルトの名無しさん:03/03/14 00:39
>>848
ワラタ

854 :デフォルトの名無しさん:03/03/14 00:39
こういうポインタ定義されないの?
for (T* p = listtop; p != NULL; p = p->next) {
 if (p == p_found) { return p; }
    ~~~
}

855 :デフォルトの名無しさん:03/03/14 00:40
>>849
ん?じゃあ↓の結果は処理系依存?

int *p;
if(p==p) printf("同じ\n");

856 :デフォルトの名無しさん:03/03/14 00:40
>>848
確か文字列定数はFlyWeightっぽくなるんだよね。

857 :from msdn:03/03/14 00:41
関係演算子によるポインタの比較
同じ型のオブジェクトを指す 2 つのポインタを比較すると、その結果は、それぞれのポインタが指しているオブジェクトが
プログラムのアドレス空間内に占める位置で決まります。ポインタは、0 に評価される定数式や、void * 型のポインタと
も比較できます。void * 型のポインタと比較されるポインタは、比較される前に暗黙的に void * 型に変換されます。

型の異なる 2 つのポインタを比較できるのは、以下の場合に限られます。

一方が他方から派生したクラス型の場合。


少なくとも一方のポインタが void * 型に明示的に変換 (キャスト) されている場合。他方のポインタは暗黙的に void * 型
に変換されて比較されます。
同じオブジェクトを指す同じ型の 2 つのポインタを比較すると、必ず、等しいと評価されます。オブジェクトの非静的メンバ
を指す 2 つのポインタを比較するときは、以下の規則に従います。

クラス型が共用体ではなく、2 つのメンバが access-specifier (public、protected、private) によって分離されていないとき、
後方で宣言されているメンバを指すポインタは、先に宣言されているメンバを指すポインタより大きいと評価されます。access-specifier
については、「アクセス指定子」の「構文」を参照してください。


2 つのメンバが access-specifier によって分離されているときの結果は未定義です。


クラス型が共用体のときは、この共用体の異なるデータ メンバへのポインタは等しいと評価されます。
2 つのポインタが、同じ配列内の要素、または配列の最後の要素の 1 つ先の要素を指しているときは、大きい方の添字
を持つオブジェクトを指しているポインタが大きいと評価されます。ポインタ間の比較が有効になるのは、ポインタが同じ配
列内のオブジェクト、または配列の最後の要素の 1 つ先の位置を参照しているときに限られます。

858 :854:03/03/14 00:41
>ポインタ定義されないの?
ポインタの比較は定義されないの?

859 :デフォルトの名無しさん:03/03/14 00:45
まぁ、C++なら
std::string cmdline(lpCmdLine);
if (cmdline == "test")
{
  MessageBox(NULL, "キタ━━━━━━\(゚∀゚)/━━━━━━ !!!!!", "", MB_OK);
}
というようなことはできるわけだが。


860 :デフォルトの名無しさん:03/03/14 00:47
>>859
演算子オーバーロード様々だな。

861 :デフォルトの名無しさん:03/03/14 01:08
つーか、ここは C/C++ のスレか?

862 :デフォルトの名無しさん:03/03/14 01:08
をぃをぃ、Cの場合とC++の場合をごっちゃに考えちゃだめだろ。 >ポインタ同士の比較


863 :デフォルトの名無しさん:03/03/14 01:17
CとC++ってポインタのもつ意味合いが違うんだ?

864 :デフォルトの名無しさん:03/03/14 01:33
>>863
比較の話だろ

865 :デフォルトの名無しさん:03/03/14 01:55
あまり気にしたことはなかったけど、C と C++ のポインタの比較では
具体的にはどんな点で違いますか?

866 :デフォルトの名無しさん:03/03/14 01:59
>>865
>>861

867 :デフォルトの名無しさん:03/03/14 02:00
ピタパン?

868 :865:03/03/14 02:00
これは失礼しました、、、

869 :867:03/03/14 02:01
誤爆だ許せ。

870 :デフォルトの名無しさん:03/03/14 07:54
793 名前:デフォルトの名無しさん 投稿日:2003/03/14(金) 00:05
>>791
APIはC言語から使うことを前提に設計されている。

871 :デフォルトの名無しさん:03/03/14 10:37
>>849
両方のポインタが同じ配列の要素を指してる限りはNULLじゃなくても
定義される。
でもここはAPIスレだから正解は>>857かも

872 :ちと早いが、まとめたので貼ってみる:03/03/14 17:16
  Win32API 質問箱  過去ログ
01  http://pc.2ch.net/tech/kako/991/991576947.html
02  http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
03  http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
04  http://pc.2ch.net/tech/kako/1023/10233/1023361418.html
05  http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
06  http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
07  http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
08  http://pc2.2ch.net/tech/kako/1040/10409/1040964626.html
09  http://pc2.2ch.net/tech/kako/1044/10449/1044929160.html


873 :仕様書無しさん:03/03/14 17:19
>>872
これも追加。

NullPointerExceptionを「ぬるぽ」と呼ぶスレ3
http://pc.2ch.net/test/read.cgi/prog/1045323654/l50

874 : :03/03/14 17:55
04  http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
4はこちらの方が良いようですね。

>>873
スレ違いです

875 :デフォルトの名無しさん:03/03/14 19:20
ぬるぽにスレ違い無し。

876 :デフォルトの名無しさん:03/03/14 19:35
>>875
しくじるとヌッ殺される罠

877 :デフォルトの名無しさん:03/03/14 19:37
ぬるぽには板違いもサイト違いも無いので平気だ。

878 :デフォルトの名無しさん:03/03/14 19:46
ただ、気違いではあるかも知れない。

879 :デフォルトの名無しさん:03/03/15 05:52
CoInitialize の呼び出しはアプリケーションの起動時と "CoInitialize してください" と説明されている関数を使う直前とどちらのタイミングで行う方が良いのでしょうか?
また CoUninitialize を呼び出さないとどのような不具合が出るのでしょうか?

880 :デフォルトの名無しさん:03/03/15 06:01
>>879
本読んでください

881 :デフォルトの名無しさん:03/03/15 06:07
>>879
俺も知らないけど、その辺はCOMっていう、一大システムが背後にあるので、
簡単には答えられないんじゃないかな。

882 : :03/03/15 08:00
COM で QI して得たポインタが サスペンド/ハイバネーションを行なうと、無効になる
ことがあります。色々調べたら 6分通信がされなかったらポインタを無効にする仕様だ
そうですが、うまい回避策(workaround)を知っていたら教えて下さい。

ちなみに QI したポインタを全部覚えておいて、レジュームメッセージを受けとって、
Release() -> QI しても、先にポインタを使われることがあって、だめみたい。
(´・ω・`)

883 :デフォルトの名無しさん:03/03/15 08:56
COMの世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/

884 : :03/03/15 10:19
>>883
ごめん、スレ違いだったみたいね。
そっちで聞いてみます。

885 :デフォルトの名無しさん:03/03/15 12:51
>>848
コンパイラ以前に、最適化オプションで変わったりするよ。

>>849
えらそーに、間違ったこと書くなよ。

886 :↑典型例(´∀`):03/03/15 12:53
 

887 :デフォルトの名無しさん:03/03/15 16:01
>>885
849も痛いが、それを突っ込める香具師の少なさにも驚きだな

888 :デフォルトの名無しさん:03/03/15 16:16
オマエモナー

889 :デフォルトの名無しさん:03/03/15 16:38
error 849: 日本語の文法エラーです。

890 :デフォルトの名無しさん:03/03/15 18:47
>>888=>>889
結局お前等は何もわかってないわけだ。

891 :デフォルトの名無しさん:03/03/15 19:11
vc でプログラミングしているのですが、
OSが何語のモデルかを検出するAPIはありますか?

892 :デフォルトの名無しさん:03/03/15 19:39
>>891
uname

893 :デフォルトの名無しさん:03/03/15 19:53
>>891
GetThreadLocale
GetSystemDefaultLCID
GetUserDefaultLCID
このへんから辿ってみてちょ

894 :デフォルトの名無しさん:03/03/15 21:29
うーむ。難しいですね。英語とかひとまとまりになって取得できないものでしょうか?

895 :デフォルトの名無しさん:03/03/15 21:32
Athlon2200XP・GFTi4200・win2000でやるとFPS60ぐらいで快適に動くゲームを作ったのですが、
ノートPC(Celeron1Ghz・240MBラム・S3 16MB twister)でやるとFPSが1ぐらいになります。
使っているライブラリはwinmm.libとDirectX9系統なんですが。
これは純粋に性能の差ですか?それともXPで使うと重くなるAPIがあるのでしょうか?

896 :デフォルトの名無しさん:03/03/15 21:36
3D のハードウェアアクセラレーションの有無じゃないの?
つーか、DirectX スレとかに行った方がよろしかろ。

897 :デフォルトの名無しさん:03/03/15 21:53
>>890
871で述べられ済みなわけだが
過去ログすら読めませんか

898 :デフォルトの名無しさん:03/03/15 21:55
>>894
意味不明。お前さんのWindowsが英語版かどうか
何を持って「ひとまとまり」に判定しろと?

899 :デフォルトの名無しさん:03/03/15 21:56
>>896
スマソ
D3Dのサンプル実行してみたら同じく1FPSだったからやっぱアクセラレーションだった。

900 :デフォルトの名無しさん:03/03/15 22:09
>>898
900!
ブラウザなどでは、日本語を ja と表現したりするでしょ?

901 :デフォルトの名無しさん:03/03/15 22:12
CPUの種類とクロック数を取得するにはどうすればいいんでしょうか?
Win98,Win2000,XPとOSが変わっても対応したいのですが。

902 :デフォルトの名無しさん:03/03/15 22:14
jaではなく、japと表現してたら、どうなったんだろう。

903 :デフォルトの名無しさん:03/03/15 22:18
ふぁっきんじゃっぷくらい言えばかやろぅ
ってなったかも知れない。

904 :デフォルトの名無しさん:03/03/15 22:19
>>901
ここから適当なソース取ってきて見るのが早い。
http://www.nifty.com/download/win/hardware/cpu/

905 :デフォルトの名無しさん:03/03/15 22:24
CPUって何があったっけ?
クルーソーとかマイナーなやつは良く分からん。

906 :デフォルトの名無しさん:03/03/15 22:37
>>905
Z80とか?

907 :デフォルトの名無しさん:03/03/15 22:42
>>904
上位10ぐらいを落としてみましたが全部ソース非公開でした。
いい加減な紹介してくれてあるがとよ、ゴルァ

908 :デフォルトの名無しさん:03/03/15 22:54
>>897
ぷっ、>>871 が正しいと思ってるんだ。
関係演算子と等値演算子の区別がついてないんだな。

909 :デフォルトの名無しさん:03/03/15 22:56
>907
下の方を良く見ろうんこ

910 :デフォルトの名無しさん:03/03/15 22:56
俺は第三者だが、だったら、最初から下の方だと言えよ。
意地悪すぎだぞ。

911 :デフォルトの名無しさん:03/03/15 23:07
ttp://www.vector.co.jp/pack/win95/hardware/cpu/cpuinfo.lzh
CPUの情報(MMX命令,SIMD命令,Family,Model,Step)を取得するツール VC++6用ソース付

912 :デフォルトの名無しさん:03/03/15 23:08
>>909
http://www.vector.co.jp/soft/win95/hardware/se115094.html
これね。
やっぱりアセンブラを使わないと取得できないのかぁ・・・。

無駄骨おったけどサンクス。

913 :デフォルトの名無しさん:03/03/15 23:23
つーか検索しろよ
CPUの種類 クロック数 取得
の検索キーでトップに出てきたぞ
http://www.google.co.jp/search?q=CPU%82%CC%8E%ED%97%DE+%83N%83%8D%83b%83N%90%94+%8E%E6%93%BE&ie=Shift_JIS&hl=ja&lr=

914 :デフォルトの名無しさん:03/03/15 23:28
>>913
なんなんですか?今更

915 :デフォルトの名無しさん:03/03/15 23:28
クロックは出てこないな

916 :デフォルトの名無しさん:03/03/15 23:29
CPU FSB 取得 API
とかで検索してました。
細かい検索用語の違いは難しいれす。

917 :デフォルトの名無しさん:03/03/15 23:30
ツールバー作っててつまづいてしまってので、助けてください
文字だけのボタンをつけようとすると、

┌─────┬─────┬───
│       .│       .│
│字字字字字│字字字字字│
└─────┴─────┴───

こんな感じで空白が出来てしまうのです。
何かスタイルが足りない、とか教えてください。

918 :デフォルトの名無しさん:03/03/15 23:33
最近のキーボードに付いているマルチメディアキーってあるじゃないですか。
MSのキーボードについてくるユーティリティの様にそれらのキーの機能をカスタマイズ
するツールを書こうとしています。

上のようなツールを入れなくてもWindows2000ではデフォルトでホームに戻る/ボリュームなど
の機能が有効になっています。

そこで質問なのですが、マルチメディアキーを押したときWindowsがデフォルトで行う処理
を抑止する方法って何か無いでしょうか?

WH_KEYBOARD及びWH_GETMESSAGEでグローバルフックを仕掛け、CallNexthookを
呼ばないと言う方法ではデフォルト処理が入ってしまいました(aなど普通のキーはちゃ
んと入力されなくなりました。)




919 :デフォルトの名無しさん:03/03/15 23:35
余談だけどクロックはこうやって分かるらしい。
http://fukunm12.nucl.kyushu-u.ac.jp/~akasaka/memo/delphi/cpuclock.html


920 :デフォルトの名無しさん:03/03/15 23:41
その計測方法ってあまり賢くなさそうなんだよなぁ
BIOSで出てくる結果を得たい場合ってどうするんだろ

603.81MHzじゃなくて、600MHz
1396.04MHzじゃなくて、1400MHzと。

921 :デフォルトの名無しさん:03/03/15 23:45
四捨五入もできないバカですか?

922 :デフォルトの名無しさん:03/03/15 23:47
>>920はヴァカだが低倍率でFSBを1MHz単位で変えられたら困るんじゃない?

923 :デフォルトの名無しさん:03/03/15 23:49
>>921
どこで四捨五入するのかちょっと考えてみるだけで問題点が分かるよ。

924 :デフォルトの名無しさん:03/03/15 23:52
>>921をサラ仕上げ

925 :デフォルトの名無しさん:03/03/15 23:54
んー、自分で紹介してなんだけど、
>>919の関数をPentium3-M 1.13GHzで試したら
1128MHz 2秒ループ
1057MHz 1秒
270MHz 5秒
とばらばらになった。なんや2秒がいいのかな。よくわからん。
最後の270MHzはひどいな。

926 :925:03/03/15 23:56
おっと、嘘が。
>>919でなくそこで紹介されている
http://www.dinop.com/vc/getcpufreq.html
のソースです。
SpeedStep対応のCPUとかだと安定しないのかも。


927 :デフォルトの名無しさん:03/03/16 00:38
>>908
> 関係演算子と等値演算子の区別がついてないんだな。
ハァ? >>849のどこに等値演算子と書いてるんだ
そもそもポインタが比較できるかどうかが問題なのに
そんな些細な揚げ足取りしかできないんだね
ちなみに等値演算子の場合
> 等値演算子では、同じ型のメンバへのポインタを比較できます。
> このような比較では、「メンバへのポインタの変換」で解説した
> メンバへのポインタの変換が行われますメンバへのポインタは、
> 0 に評価される定数式とも比較できます。

928 :デフォルトの名無しさん:03/03/16 00:44
プログラムは自分で自分をデリートできますか?
APIありますか?

929 :デフォルトの名無しさん:03/03/16 01:00
できない。

930 :デフォルトの名無しさん:03/03/16 01:01
>>927
> ハァ? >>849のどこに等値演算子と書いてるんだ

別に書いてないけど、>>849 は「等値演算子」だろうが「比較演算子」だろうが、間違ってることには変わりない。

で、>>871 の方は、「ポインタに対する比較演算」について言っているなら、内容はおかしくない。
でも、>>842 からの流れで「ポインタの比較」と言うなら、「等値演算子」について言ってると考えるのが普通。
それを いきなり「比較演算」について語ってるから、おかしいと指摘しただけ。

931 :デフォルトの名無しさん:03/03/16 01:06
>>928
DelayedDeleteLockedFile

932 :929:03/03/16 01:08
931 (゚д゚)ウマ-

933 :デフォルトの名無しさん:03/03/16 01:20
>> 930
>>842 からの流れで「ポインタの比較」と言うなら、「等値演算子」について言ってると考えるのが普通。
……ぜんぜん普通じゃないと思うが。
普通「ポインタの比較」と言えば「比較演算」のこと。
しかも、わざわざ御丁寧に「関係演算子によるポインタの比較」とまで書かれている。
「等値演算子」に限った話はされていないよ。


934 :デフォルトの名無しさん:03/03/16 01:24
>>931
googleかけても引っかかりません??




935 :デフォルトの名無しさん:03/03/16 01:28
FILE_FLAG_DELETE_ON_CLOSE使え

936 :デフォルトの名無しさん:03/03/16 01:45
>>931
MSDNの検索でも出てこない
>>935
残念ながら自分の削除には使えない。
NT4あたりではできたらしいが9xや2000ではだめ。

937 :デフォルトの名無しさん:03/03/16 01:53
エクスプローラなどからファイルをドラッグ&ドロップされたとき、
左ボタンでD&Dされたのか、それとも右ボタンだったのかを
知りたいのですが、どうすればいいのでしょうか?

938 :デフォルトの名無しさん:03/03/16 01:59
>>933
必死になってるのは、わかるけど >>842 からのプログラム中に一回でも比較演算子が出てきてねーだろ。

まあ、「「等値演算子」に限った話はされていないよ。 」という主張に沿って、>>857, >>871 は正しいと認めるのは吝かじゃねーけど、>>849 が間違ってるのは明白だろ。

939 :デフォルトの名無しさん:03/03/16 02:17
>>937
WM_DROPFILESではできない。
OLE D&Dならできる。

940 :931:03/03/16 02:32
>>934 >>936
えっ? 無いですか? とりあえずMSDNから一部コピペ
BOOL DelayedDeleteLockedFile (
LPCTSTR lpFileName // ファイル名
);

対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

941 :933:03/03/16 02:36
>> 938
>>857, >>871 は正しいと認めるのは吝かじゃねーけど、>>849 が間違ってるのは明白だろ。
はぁ? 何を今更。最初からそういう話をしてるんでしょうが。
849 が間違っているから、849 に対して 857, 871 のポストがある。
そして、それが分かっていないようだから 897 で
> 871で述べられ済みなわけだが
> 過去ログすら読めませんか
となるわけだよ。


>>842 からのプログラム中に一回でも比較演算子が出てきてねーだろ。
投稿の大部分は自然言語だ、プログラミング言語ばかりでなく自然言語も読め。
「比較」とか「ポインタの比較」と言っている投稿は多数あるが
逆に「等値」は 908 になるまで一度も出てこないよ。

942 :デフォルトの名無しさん:03/03/16 02:46
ごめん、、、ウチのMSDNにはないや
良ければurl出してもらえませんか?
もしくは戻り値の解説も張って頂けると嬉しいのですが。

943 :デフォルトの名無しさん:03/03/16 03:05
941 (゚д゚)ウマ-

944 :889:03/03/16 03:13
>>890
判ってるよ、おまえ自体が人間社会において未定義って事だ!

945 :デフォルトの名無しさん:03/03/16 03:20
未定義キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

946 :デフォルトの名無しさん:03/03/16 03:21
タブコントロールでダブルクリックでも通知メッセージWM_NOTIFYが親に
送られるようにするにはどうすれば良いでしょうか?普通のクリックでは
ちゃんと送られて来ています。

947 :931:03/03/16 03:25
>>942
ネットには見つからなかったのでMSDNのアドレスをどうぞ。
インストール先(C:\MSDNは)環境に合わせて変更する必要がありそう。
mk:@MSITStore:C:\MSDN\MSDN\jpwinpf.chm::/html/_win32_delayeddeletelockedfile.htm

戻り値
関数が成功すると、0 以外の値が返ります。

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

948 :944:03/03/16 03:50
>>945 ども。

949 :937:03/03/16 04:28
>>939 ありがとうございます。OLEを調べてみます。

950 :デフォルトの名無しさん:03/03/16 06:44
>>946
そのプロシージャーをサブクラス化。

951 :デフォルトの名無しさん:03/03/16 12:55
エディットコントロール使ってメモ帳みたいのを
作ってるんですが、32KB制限の対策法って
どういうのがあるんですか?

952 :デフォルトの名無しさん:03/03/16 12:55
究極の借金返済方法みつけちゃった♪
私は220万円の借金をわずか3ヶ月で完済しちゃいました〜!
借金のある人、今の生活よりグレードアップさせたい人、
パートに出られない主婦の人、失業中で今すぐ収入の欲しい人などに
かなりおすすめです!
他の人と同じじゃ稼げません。大金を簡単に稼ぐ方法教えちゃいます!!
http://chu3.k-server.org

953 :デフォルトの名無しさん:03/03/16 12:57
>>951 EM_LIMITTEXT だったかで制限変えられなかったかな。

954 :デフォルトの名無しさん:03/03/16 13:11
EM_SETLIMITTEXT だった。ってそういうことじゃなくて
32KBを超えたら EN_MAXTEXT を捕捉してエラーメッセージを
表示するとかそういう話なんかな。

955 :951:03/03/16 13:18
>>954
もっと巨大なテキストを扱えるように
したいんで、EM_LIMITTEXTをさっそく
試してみます。

956 :デフォルトの名無しさん:03/03/16 14:08
昨夜黙殺されたんですが誰か分からないでしょうか?


最近のキーボードに付いているマルチメディアキーってあるじゃないですか。
MSのキーボードについてくるユーティリティの様にそれらのキーの機能をカスタマイズ
するツールを書こうとしています。

上のようなツールを入れなくてもWindows2000ではデフォルトでホームに戻る/ボリュームなど
の機能が有効になっています。

そこで質問なのですが、マルチメディアキーを押したときWindowsがデフォルトで行う処理
を抑止する方法って何か無いでしょうか?

WH_KEYBOARD及びWH_GETMESSAGEでグローバルフックを仕掛け、CallNexthookを
呼ばないと言う方法ではデフォルト処理が入ってしまいました(aなど普通のキーはちゃ
んと入力されなくなりました。)


957 :デフォルトの名無しさん:03/03/16 14:27
>>956
WM_APPCOMMAND



958 :デフォルトの名無しさん:03/03/16 14:29
>>957
それはshellなフックで拾えるみたいなので今から試してみます。

ところで、HSHELL_APPCOMMANDって何番か分かりますか?

Delphi6のSDKは古くてまだ定義されてないみたいです。


959 :デフォルトの名無しさん:03/03/16 14:55
>>958
#define HSHELL_APPCOMMAND 12

960 :デフォルトの名無しさん:03/03/16 14:56
12番

961 :デフォルトの名無しさん:03/03/16 15:15
>>959-960

助かりました。開発を再開します。

962 :デフォルトの名無しさん:03/03/16 15:18
エデットコントロールのUNDOを2回以上させたい、無理だろうか?

963 :デフォルトの名無しさん:03/03/16 15:27
>>962
仕様です。自分でがんがって無限UNDOでも実装させてください。

964 :917:03/03/16 16:23
>>917
どうかよろしくお願いします。

965 :デフォルトの名無しさん:03/03/16 16:49
>>902
三文字ならjpnだろうな。

966 :デフォルトの名無しさん:03/03/16 16:56
俺もUNCOを二回以上させたい。無理でしょうか?

で、新スレどうする?
誰か立てる?
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
を使う?

967 :1 ◆3a4vmAmkAc :03/03/16 16:57
そろそろ次スレ立てとくか

968 :デフォルトの名無しさん:03/03/16 17:48
>>902
外務省の役人(だったっけな? うろ覚え)が、国名の3文字コードが
JAPになるのを嫌ってJPNにしたという逸話を聞いた覚えがある。

# スレ違いスマソ

969 :デフォルトの名無しさん:03/03/16 18:00
>>968
Yellow MonKey

YMKとか言うのはどうだろう?

970 :デフォルトの名無しさん:03/03/16 18:47
本格的なエディタ作るとなると
やはり自分でウィンドウ作るしか
ないんかな。

971 :デフォルトの名無しさん:03/03/16 18:48
>>970 リッチエディットじゃ物足りなくなったん?

972 :デフォルトの名無しさん:03/03/16 18:50
>>971
全然足りんでしょう。

973 :971:03/03/16 18:52
>>972
俺はエディタ作者じゃないのだけども、たとえばどんな所で
物足りなさを感じますか?

974 :デフォルトの名無しさん:03/03/16 19:12
>>966
> 俺もUNCOを二回以上させたい。無理でしょうか?
浣腸したらいかがでしょうか?

975 :デフォルトの名無しさん:03/03/16 19:13
>>973
ルーラを表示したい場合、検索文字列を点滅させたい場合、etcetc。
いちいちサブクラス化して無理する位なら全部書いた方が最終的には綺麗に仕上がる。

976 :デフォルトの名無しさん:03/03/16 19:54
>>941
> 投稿の大部分は自然言語だ、プログラミング言語ばかりでなく自然言語も読め。

お前は、

char *p;
char *q;
...
if(p == q){ // p と q を比較する。

と書いてあったら、大小比較じゃんとか思うのか ? (藁

ごねるのは、いいけどみっともないぞ。
> 「比較」とか「ポインタの比較」と言っている投稿は多数あるが
> 逆に「等値」は 908 になるまで一度も出てこないよ。


977 :941:03/03/16 21:00
>>976
だからさあ、
>if(p == q){ // p と q を比較する。
>と書いてあったら、大小比較じゃんとか思うのか ? (藁
「書いてあったら」なんて仮定の話をしてもしょうがないだろう。
「そんなことはどこにも書かれていない」んだからな(笑
自分の脳内でなく過去ログを読め。

ところで話の流れは読めているか?
>>845- でしているのは「ポインタの比較」についての文法的な話であって
「if(p == q)」についての話なんてしていないぞ。
「==」はあくまで比較演算子の一つにすぎない。
それを理解してから過去ログを読み直せ。
897, 927 にも同じこと言われてるだろうが。

978 :デフォルトの名無しさん:03/03/16 21:09
オマエラメールでやりとりしろよ

979 :デフォルトの名無しさん:03/03/16 21:14
とっくにその話は終わってるよ。


980 :デフォルトの名無しさん:03/03/16 21:16
>>977
ププッ、「比較演算子」だってさ。
こんなこと書いてるから、混乱しちゃってるんだろうね。

981 :980:03/03/16 21:23
こういった類いの自作自演荒らしって厄介だよな。

982 :1 ◆3a4vmAmkAc :03/03/16 21:26
966の案でいくか?

983 :980 は俺だよ。:03/03/16 21:26
>>981
それは、お前だろ。他人を騙るな。

984 :デフォルトの名無しさん:03/03/16 21:30
>978-981
オマエガナー

985 :デフォルトの名無しさん:03/03/16 21:33
>>980
君は「比較演算子」と言われて何に混乱してるんだい?

比較演算子 := 不等号演算子 | 等非等演算子
等非等演算子 := 等価演算子 | 非等価演算子


986 :デフォルトの名無しさん:03/03/16 21:38
>>982
なんでBuild9まで来て新参すれに吸収されるのか、と小一時間(略
新スレ立てて来るよ。しばしお待ちを。


987 :1 ◆3a4vmAmkAc :03/03/16 21:39
みんな質問箱シリーズの統廃合を願っているなら抵抗はしない。
質問箱の継続に向けて積極的な表明がなければ私は新スレは立てない。
1001まであと僅かなので、おそらく私は新スレを立てることにはならない。
現実を私情をすてて見つめている。

988 :デフォルトの名無しさん:03/03/16 21:41
もうすぐ1000なので新スレたてます。

Win32API 質問箱 Build10


989 :1 ◆3a4vmAmkAc :03/03/16 21:43
>>988
よろしくお願いします

990 :986:03/03/16 21:45
>>988
んにゃ。
かぶったね。新スレはそっちにまかせた。立ててくんろ。

991 :あぼーん:あぼーん
あぼーん

992 :デフォルトの名無しさん:03/03/16 21:58
>>985
等非等演算子 ?
Google でググって一件しか見つからないような用語で話されても困るんだけど。
2ch と言えど、自分の脳内じゃないんだからさ。

993 :デフォルトの名無しさん:03/03/16 22:00
>>992
おまえらコテハンでやってくれ。
NGワード設定するから。

994 :デフォルトの名無しさん:03/03/16 22:02
フックについて質問です。

フックしたメッセージのパラメータを変更して目的地に渡すにはどのような手段があるでしょうか?

WH_CALLWNDPROCでフックを仕掛けて、


x = (CWPStruct *)(lparam);

if(x->message == WM_MOVE)
{
x->lParam = 15;
}
Result = CallNextHookEx(hook,code,wparam,lparam);

return Result;

ではメッセージは書き換わりませんでした。

995 :986:03/03/16 22:04
次スレ立てました。移動よろ。
Win32API 質問箱 Build10
http://pc2.2ch.net/test/read.cgi/tech/1047819779/l50

>>988もういなくなったのか・・・。
重複するかと思って待ちぼうけだったよ。


996 :1 ◆3a4vmAmkAc :03/03/16 22:12
乙カレー

997 :デフォルトの名無しさん:03/03/16 22:13
オツカレチャーソ

998 :デフォルトの名無しさん:03/03/16 22:23
M$厨がんばれ(藁

999 :デフォルトの名無しさん:03/03/16 22:24
1000

1000 :デフォルトの名無しさん:03/03/16 22:25
10000




1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

230 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)