Win32API質問箱 Build ..
[2ch|▼Menu]
116:デフォルトの名無しさん
07/02/20 10:15:36
>>111
いまいち、何を言いたいのか見えてこないが

たぶん、GetWindowLongでGWL_ID

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

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

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

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

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

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

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

AnimateWindow
SetLayeredWindowAttributes

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

美しいと思わないかね?

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

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

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

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

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

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

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

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

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

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

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

URLリンク(sa-wiki.com)

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

しかし糞スレだな

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

OutputDebugString(szTextBuff);
}

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

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

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

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

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

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

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

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

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

ちなみにソースはMFCです


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

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

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

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

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

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

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

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

>>180
誰あてのレス?

>>181
そう、その通り

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


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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

ちょwwww
志村!
志村!

char Name[8];

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

>>221
WMIにあるかもね

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

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

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

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

つ ─━─

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




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

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

らしい

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

A0000とかなっちゃいます

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

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

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

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



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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

という話です

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

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

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

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

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


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

4987日前に更新/228 KB
担当:undef