Win32API質問箱 Build ..
[2ch|▼Menu]
159:デフォルトの名無しさん
08/04/24 20:17:08
>>156
まずはSpy++とかで確認しる。

ちなみに、CreateProcessしてすぐにFindWindowしてる、なんていうオチじゃないだろうな?

160:153
08/04/24 20:24:56
CreateProcessの次にFindWindowしてます・・・

161:153
08/04/24 20:28:12
検索してたら見つけたんだけど、この使い方解説お願いできます?

URL:URLリンク(homepage2.nifty.com)
BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
{
DWORD dwThreadId, dwProcessId;

dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
if (dwProcessId == (DWORD)lParam) {
PostMessage(hwnd, WM_CLOSE, 0, 0);
}

return TRUE;
}


// pi は CreateProcess() したときの PROCESS_INFORMATION
EnumWindows(EnumProc, (LPARAM)pi.dwProcessId);

****ここまで引用



162:デフォルトの名無しさん
08/04/24 20:33:30
CreateProcessの直後にFindWindowしたら駄目にきまってるだろう。
プロセスが起動した瞬間にウインドウができるわけじゃない。

163:デフォルトの名無しさん
08/04/24 20:36:07
>>161
CreateProcessで作成したプロセスが所有するウィンドウにWM_CLOSEをポストしてる
当然CreateWindowで作ったウィンドウを持ってないプログラムにゃ無効

164:デフォルトの名無しさん
08/04/24 20:38:47
つかコンソールにWM_CLOSE送るなら
terminateprocessでも使っとけば良いんじゃねえのか

165:153
08/04/24 20:50:22
ありがとうございます

>>164
上のURL先に
>緊急遮断に使用するものであり,終了するが正常な終了方法ではない
とありますが大丈夫ですか?

正常終了するにはどうすればいいですか?

166:デフォルトの名無しさん
08/04/24 20:53:29
コンソールにWM_CLOSE送ったってムリヤリ終了してるから気にするな

コンソールプログラムならプログラムが自発的に終了しない限り正常終了しない

167:デフォルトの名無しさん
08/04/24 20:55:24
>>165
外部から無理に止めるのが正常な方法であるわけがない。
メッセージを投げてターゲットプロセスが自分で終了するようにするのがまっとうな方法。

168:デフォルトの名無しさん
08/04/24 20:55:48
WM_CLOSEをポストする。
キャンセルできるから確実性はないけどな。

169:デフォルトの名無しさん
08/04/24 20:57:33
そういう場合はパイプで繋げてシグナルを送信するんだよ

170:153
08/04/24 20:59:45
ありがとうございます
望みどおりの動作してくれました



171:153
08/04/24 21:04:09
>>167
自力終了 == 正常終了
なんですね覚えておきます

>>169
パイプ・シグナルの事も頭に入れておきます

172:デフォルトの名無しさん
08/04/24 21:24:57
Googleの弊害だよな。
適当に検索して、それっぽいコードを継ぎ接ぎする、本質を理解しようとしない人間が量産されるのは。

173:167
08/04/24 21:25:00
>>171
外部から何かを受け取ることでエラー終了するように作られたものもありうる。
少なくともあるプロセスがどういう状況にあるのかを無視して終わらせるのが正常とは言えない、
ということだ。拡大解釈やめれ。

174:デフォルトの名無しさん
08/04/24 21:29:47
そもそも、CreateProcessして即座に終了させるって、無意味だろ。

なぜ外部から終了させる必要があるのか、まずは、そこから話してみ。

175:デフォルトの名無しさん
08/04/24 21:52:39
試してるだけじゃないのか

176:153
08/04/24 21:58:44
>>173
わかりました

>>174
CreateProcessしたプログラムで処理してる時に
別のプログラムの処理も必要になった時のために
メインのプログラムから起動するようにしました

どうせやるなら終了もメインのプログラムからした方が
使いやすい(手間がかからない)と思ったからです

177:デフォルトの名無しさん
08/04/24 22:08:04
>>153
FindWindowの第一引数はクラス名だぼけ

178:デフォルトの名無しさん
08/04/24 22:10:04
HWND FindWindow(
  LPCTSTR lpClassName, // クラス名
  LPCTSTR lpWindowName // ウィンドウ名
);

ここまで誰も気付かなかったな
すげぇw

179:デフォルトの名無しさん
08/04/24 22:12:44
LPCTSTR型のクラス?

180:デフォルトの名無しさん
08/04/24 22:13:19
ごめん
なんでもない

181:デフォルトの名無しさん
08/04/24 22:13:54
ウィンドウクラスというのはだな・・・(ry

182:デフォルトの名無しさん
08/04/24 22:14:10
>>176
> どうせやるなら終了もメインのプログラムからした方が
> 使いやすい(手間がかからない)と思ったからです

なるほど。

その子プロセスは、どういったものなの?

また、

その子プロセスの正規の終了条件もしくは終了手順は、
どういったものなの?

183:デフォルトの名無しさん
08/04/24 22:18:49
なんという盲点

184:153
08/04/24 22:22:46
>>182
1、ある時刻になったらBEEP鳴らして終了
2、文字列をある規則で別の文字列へ変換して待機(別ファイルを読み込む可能性があるため)
3、文字列から特定の文字を削除(同上)
etc
2と3はexit入力で終了です

185:デフォルトの名無しさん
08/04/24 22:49:39
>>184
えーと、対話的に入力を受付けてるわけね。
で、exitとタイプしてリターンキーを押すと終了、と。

ならば、
WaitForInputIdle()
で入力待ち状態になるまで待ち、
コンソールに"exit\n"を送るのが、
正規の終了手段だと思う。

186:153
08/04/24 23:18:25
>>185
sampleがSleep中でもWaitForInputIdle()の次の行へ進んでしまいました

>プロセスがコンソールアプリケーションである場合〜中略〜WaitForInputIdle 関数は即座に制御を返します。
とmsdnに書いてありました

187:デフォルトの名無しさん
08/04/24 23:25:47
あーごめん、じゃぁ、ちょっと面倒だな。

そのsampleも自分で作っていて変更可能なら、
入力待ちするところで、イベントオブジェクトの状態をチェックして、シグナル状態なら終了するようにして、
親プロセスが子プロセスに終了してほしいときに、イベントをシグナル状態にしたらどうよ。

188:デフォルトの名無しさん
08/04/25 00:08:10
WaitForInputIdleって対象プロセスが最初にGetMessageを呼ぶまで待機するとかそんな感じだったような

>>186
STARTUPINFO::hStdInput/hStdOutputあたりにMailslotのハンドルを渡せばできた気がする

189:デフォルトの名無しさん
08/04/25 09:48:31
質問です


190:デフォルトの名無しさん
08/04/25 09:49:53
なんすかwwwwwwwwww

191:デフォルトの名無しさん
08/04/25 11:39:07
FileMonで"FASTIO_QUERY_OPEN"ってなるやつって、具体的にはどうやってファイルオープンしてるんでしょうか
NtCreateProcess()とNtOpenProcess()とNtCreateSection()の3つに
フックをかけて監視してるんだけどどれにも引っかからない

192:デフォルトの名無しさん
08/04/25 12:06:41
またネイティブAPIか

193:デフォルトの名無しさん
08/04/25 12:31:15
xmlとかYAMLとかをhttpで送受信するのに便利な通信モジュールないかな。
WININETとMFCは試したけど、通信の待ち時間とかを有効に使おうとするととても書きづらい。

194:デフォルトの名無しさん
08/04/25 13:05:12
本当に必要なのは通信の待ち時間とかを有効に使うための知識か

195:デフォルトの名無しさん
08/04/25 14:00:56
通信の待ち時間を使って本を読んでます!

196:デフォルトの名無しさん
08/04/25 14:52:13
ワロタ

COMでもいいのかな

197:デフォルトの名無しさん
08/04/25 14:57:53
>>172
検索して見つかったコードを自分なりに書き換えるのもまたイイ

198:デフォルトの名無しさん
08/04/25 15:43:03
boost::asio

199:デフォルトの名無しさん
08/04/25 20:14:40
マルチスレッド化して、その内のあるスレッドで同期系のものによって通信するのも1つの手ではある。

200:デフォルトの名無しさん
08/04/25 21:05:53
TCP通信ってさ、勝手に同期とって転送してくれるんじゃないの?
俺、TCPで同期とか考えたことないんだけど。。考えが間違ってたらご指摘plz

201:デフォルトの名無しさん
08/04/25 21:16:26
じっと待ってられないせっかちさんと、途中でキャンセルしたくなる優柔不断さんのため

202:デフォルトの名無しさん
08/04/25 21:26:36
WinInetには非同期モードあるぞ、一応。

203:デフォルトの名無しさん
08/04/25 21:33:35
DLLでエクスポートされたデータ変数について、
ちょっとお聞きしたいことがあります。

例えば、変数をエクスポートする際
 __declspec(dllexport) int *dll_val;
と宣言すれば、メイン側からこの変数は
 __declspec(dllimport) int **_imp__dll_val = &dll_val;
と同じように扱われると、最近msdnで知りました。
なので、メイン側からのこの変数への参照が、アセンブラレベルでは
 DWORD PTR [_imp__dll_val]
のようになると予想していました。

VC2005のデバッグモードでは、確かにそうなっていました。
しかし、リリースモードでは、なぜかそうなっていませんでした。
これに対応する個所が
 offset _imp__dll_val
のように書き換えられていたのです。

これを行うためには、_imp__dll_valのアドレスが事前に決まってなければならないと思うのですが、
ベースアドレスが固定のwindows dllで、このようなことは可能なのでしょうか?

204:デフォルトの名無しさん
08/04/25 21:51:41
リロケート情報あるんじゃないのかな

205:デフォルトの名無しさん
08/04/25 22:01:45
ベースアドレス固定ってntdllとkernel32ぐらいじゃね?(Vistaは知らん)

206:デフォルトの名無しさん
08/04/25 22:46:14
>>191
おそらくは各ドライバ(ntfs.sysとかかな)のFastI/Oディスパッチルーチンの呼び出し

_FAST_IO_DISPATCH構造体でぐぐれば情報はでる あくまで推測だけど


207:デフォルトの名無しさん
08/04/25 23:10:38
>>204
dllでリロケートする場合って、必要な全アドレスを書き換えますよね。
この場合、間接ポインタではなく'offset _imp__dll_val'で変数を使うことは可能なのでしょうか?

>>205
すいません。ベースアドレス固定ではなく、
「dllごとにベースアドレス固定」が正しい表現でした。

208:デフォルトの名無しさん
08/04/25 23:26:48
ねぇ、もうWinFXみたいなのって作らないの?

209:デフォルトの名無しさん
08/04/25 23:29:19
WinFXって.NET3.0だろ

210:デフォルトの名無しさん
08/04/25 23:34:25
既に完成したものをまた作ってどうすんだろうね

211:デフォルトの名無しさん
08/04/26 00:06:16
>>200
それ同期違う。
ここでの同期は、転送が完了してから制御を返すこと。
逆に、転送が完了するのを確認せずに制御を返す関数が非同期。

212:デフォルトの名無しさん
08/04/26 01:12:23
入力されたパスのフォルダに入っているファイルを
リストコントロールに表示させているのですが、
この時のパスを格納するための配列は256バイトあれば大丈夫ですか?

213:デフォルトの名無しさん
08/04/26 01:13:54
せめてMAX_PATH。

214:デフォルトの名無しさん
08/04/26 01:16:08
成る程260バイトですか、ありがとうございます。

215:デフォルトの名無しさん
08/04/26 01:23:25
>>214
そのレスだと平気で
p = (LPTSTR)malloc(260);
とか書きそうな雰囲気だな

まあ俺には関係ないからどうでもいいが

216:デフォルトの名無しさん
08/04/26 07:40:27
>>215
そのように書く事によって何か問題が起こるとは予想がつかないのですが、
相応しくない書き方、という事ですね、
すみませんが、理由を知りたいです。

217:デフォルトの名無しさん
08/04/26 07:58:57
261あったらどうするの?

218:デフォルトの名無しさん
08/04/26 08:30:11
必要なだけ確保する
それが動的メモリ
逆に無駄な分は確保しない

219:デフォルトの名無しさん
08/04/26 08:35:13
ちょっとまて、お前ら答えを教えてやれよw
まあ、自分で探すのも大切ではあるが。

220:デフォルトの名無しさん
08/04/26 09:13:07
知らないならレスしないでください

221:デフォルトの名無しさん
08/04/26 09:52:51
>>216
ヒント

#ifdef _UNICODE
 typedef wchat_t * LPTSTR;
#else
 typedef char * LPTSTR;
#endif

222:デフォルトの名無しさん
08/04/26 10:14:36
>>212
んな事ぁ手前で好きに決めるもんだ。

223:デフォルトの名無しさん
08/04/26 10:35:43
MAX_PATH * sizeof(TCHAR)

224:デフォルトの名無しさん
08/04/26 11:10:27
知ってるならレスしないでください

225:デフォルトの名無しさん
08/04/26 11:15:52
↑話を理解してない馬鹿

226:デフォルトの名無しさん
08/04/26 11:17:17
↑自演馬鹿

227:デフォルトの名無しさん
08/04/26 11:20:41
↑正解

228:デフォルトの名無しさん
08/04/26 11:39:27
      _、_
    ヽ( ,_ノ`)ノ チッ、乗り遅れたか・・・
   へノ   /
┌→  ω  へ





229:デフォルトの名無しさん
08/04/26 12:15:23
まだ誰も言っていないが、260じゃなくてMAX_PATHって定数使えよ。

230:デフォルトの名無しさん
08/04/26 12:24:36
>>229
>>223

231:デフォルトの名無しさん
08/04/26 12:36:15
MAX_PATHはかなり前に出てる
質問者が勝手に260に変換しただけ

232:デフォルトの名無しさん
08/04/26 13:06:42
この中に、「MAX_PATH を超えるパス名など存在しない」と思ってる人が!

233:デフォルトの名無しさん
08/04/26 13:11:35
そんなのexplorerだっていい加減だから気にしなくていい

234:デフォルトの名無しさん
08/04/26 13:15:23
URLリンク(www.google.co.jp)

嘘書いてるのも多いしなあ(FAT32の話をしてるのかも知れんが)


235:デフォルトの名無しさん
08/04/26 13:20:11
↑話を理解してない馬鹿

236:デフォルトの名無しさん
08/04/26 14:26:07
double型の数値を表示するのに、

double dbl=1.23;
char res[32];
wsprintf(res,"%f",dbl)
SetWindowText(hWnd, res);

とするとfと表示されるだけです。
どこがおかしいでしょうか?

237:デフォルトの名無しさん
08/04/26 14:47:49
>>236
L"%f"

238:デフォルトの名無しさん
08/04/26 14:49:19
wsprintfは実数使えないよ

239:デフォルトの名無しさん
08/04/26 15:05:48
せめてMSDNでAPIの説明を読んでから質問しろよ

240:デフォルトの名無しさん
08/04/26 15:06:22
StringCchPrintf

241:デフォルトの名無しさん
08/04/26 19:45:36
>>237-240
超亀ですが、ありがとうございました。
もっとちゃんと勉強しなおします。。

242:デフォルトの名無しさん
08/04/26 23:13:13
>>191
URLリンク(web.archive.org)


243:デフォルトの名無しさん
08/04/27 02:14:39
wsprintf の 'w' って "Windows" のことだよね?
lstrcpy の 'l' はさっぱり分からん

244:デフォルトの名無しさん
08/04/27 02:19:29
同じように95時代のソースみてると _lopen とかつかってて _l ってなによって思う


245:デフォルトの名無しさん
08/04/27 02:38:55
LPSTRと同じようにlong pointerじゃないの?

246:デフォルトの名無しさん
08/04/27 02:39:42
指定の他のソフトにきているメッセージを調べる方法ってありませんか?

247:デフォルトの名無しさん
08/04/27 02:48:22
グローバルフック

248:デフォルトの名無しさん
08/04/27 02:58:24
lsprintfでも良かったのにwsprintfなのが謎
kernel32.dllじゃなくてuser32.dllにあるのも謎
しかもWin9x系だと実体はkernel32.dll内にあってuser32!w(v)sprintfは実体にjmpしてるだけだし

249:デフォルトの名無しさん
08/04/27 03:00:35
swprintf と wsprintf があるからややこしいんだよな。
しかもそれでいて wsprintf は %f がないという大きな仕様の差があるし。

250:デフォルトの名無しさん
08/04/27 03:07:23
CRT: sprintf, swprintf
Win32: wsprintf

CRT: vsprintf, vswprintf
Win32: wvsprintf

CRT: _snprintf, _snwprintf
Win32: wnsprintf

CRT: _vsnprintf, _vsnwprintf
Win32: wvnsprintf

>>249
それだけじゃないぞ。
wsnprintf じゃなくて wnsprintf とか、もうアホかと。

251:デフォルトの名無しさん
08/04/27 04:42:39
>>250
こういうの、1〜2回/年くらいしか趣味でWinアプリをつくらない
ハード屋のおいらにはつらい

252:デフォルトの名無しさん
08/04/27 05:07:35
シーケンシャルで読み捨てるんだったら
メモリマップトファイル使っても効率落ちるだけですかね?

253:デフォルトの名無しさん
08/04/27 06:03:19
読み捨てるのに明示的にマップする必要なんてあんのか

254:デフォルトの名無しさん
08/04/27 08:03:24

ReadDirectoryChangesW() を同期モードでワーカースレッドで使用した場合に,
メインスレッドから制御を変えさせる(中断させる)方法ってありますか?

255:デフォルトの名無しさん
08/04/27 11:04:31
multimedia timerとhigh-resolution timerの使い分けはどのようにすればいいのでしょうか?

256:デフォルトの名無しさん
08/04/27 11:09:24
気分しだい

257:デフォルトの名無しさん
08/04/27 11:17:27
同期用のディレクトリハンドルを閉じてみるとか

258:デフォルトの名無しさん
08/04/27 11:38:51
>>252
数MBくらいのファイルだが、
シーケンシャルな読み取りしかしないときにメモリマップしたら、
バッファリングありで普通に読み取るよりは速かった覚えがある。

259:デフォルトの名無しさん
08/04/27 11:41:45
バッファリングぐらい自前でしろよ

260:デフォルトの名無しさん
08/04/27 11:43:18
>>257
今やってみたけど制御帰らなかった…(´・ω・`)

261:デフォルトの名無しさん
08/04/27 17:36:16
1.clやgccでコンパイル・リンクして出来上がった*.exeファイルは、
 CPU(ペンティアム等)が直接理解できる形式のファイルなのでしょうか?
2.上記の答えが「直接理解できないファイル」の場合。
 CPUが直接理解できるファイルを、clやgccで作成することは出来ますか?
 
質問の意図。
出来るだけ速く動作させたいとか直接的な理由はありません、
知識として知っておきたいのが質問の意図です。

262:デフォルトの名無しさん
08/04/27 17:37:42
ほぼ直接理解できる形式になっている。
ほぼってのは、プログラムをメモリ上にロードする際に
OS が少し手を加えるから。

263:デフォルトの名無しさん
08/04/27 17:44:42
そもそもCPUは命令をデコードしてから実行してるからCPUが直接理解できるなんて有り得ない訳だが

264:デフォルトの名無しさん
08/04/27 17:51:20
デコーダも CPU 内にあるし

265:デフォルトの名無しさん
08/04/27 17:57:23
いや、IntelやAMDが配ってる命令リストに記述されてるもんであれば
直接解釈しているとみなして良いと思うが

266:デフォルトの名無しさん
08/04/27 18:15:32
>>261
exeやdllは必ずしもCPUネイティブなマシン語とは限らんぞ。
/clrでコンパイルしたらMSILになるからな。

267:デフォルトの名無しさん
08/04/27 18:17:04
そうか cl だとそれがあったか

268:デフォルトの名無しさん
08/04/27 20:11:29
マイクロプログラムってソフトウェアなのかハードウェアなのかよくわからんよな。

269:デフォルトの名無しさん
08/04/28 02:47:55
Win32APIで.NETのexeからリソースを取り出すのってどうすればいいの?
FindResourceじゃ取れないし

270:デフォルトの名無しさん
08/04/28 03:06:49
アンマネージホスト用のインタフェース・関数がmscoree.dllとかから出ているから、
それを使ってやればいいんじゃないかな?

CLRを読み込んで、アセンブリ (EXE)を読み込んだら、
あとはCOMインタフェースで.NET Frameworkクラスライブラリを使う。
実際できるかどうかわからないけど、100%ネイティブでやれるとしたらこんな感じのはず。

271:デフォルトの名無しさん
08/04/28 04:50:39
>>270
それネイティブじゃないだろw

272:デフォルトの名無しさん
08/04/28 15:36:29
GetGlyphOutline で TrueType font の情報を取ってきているんですが、
OUTLINETEXTMETRIC 構造体の otmsCapEmHeight って何の値が入っているか
知っている方いらっしゃいますか。

MSのヘルプ系には Not supported.ってしか書いてないんですよね

そのわりにはしっかり値入ってるし、どうもほしい値っぽいし・・・

273:デフォルトの名無しさん
08/04/28 15:46:02
Caption Embed Height
キャプションに配置した時の高さ


勘で言った。気にしないでくれ

274:デフォルトの名無しさん
08/04/28 15:46:22
32bitOS上で、32bitアプリは特別なことしないとユーザー2GB、
カーネル2GBですよね。

64bitOS上だと、この2GB&2GBは変わらないのでしょうか?
ちとスレ違いかも知れんけどWin32アプリの仕様に関してなので、
ここで質問してみました。

ググっても資料見つかんなかったです。検索下手ですね。すみません

275:デフォルトの名無しさん
08/04/28 16:03:00
>>274
これがそれっぽい?
URLリンク(msdn2.microsoft.com)(VS.85).aspx

>On the x64 processor, each 32-bit application receives 4 GB virtual address space in the WOW64 environment,
>if the application has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in the image header.
>If this flag is not set, the 32-bit application receives 2 GB virtual address space.

276:デフォルトの名無しさん
08/04/28 16:07:54
64bitOS上で、32bitアプリってこと?
リンカでスイッチ入れない場合は上限2GBでかわらない。
入れた場合は4GBまで使える。

277:デフォルトの名無しさん
08/04/28 16:15:25
>>276
一つ上のレスも見えんのか

278:デフォルトの名無しさん
08/04/28 16:42:04
>>277
お節介な話だが、>>276 氏は>>274 を見てレスを考えている最中に先に
>>275 が入って、ちぐはぐになったんじゃね。

279:デフォルトの名無しさん
08/04/28 16:46:20
ファイルパスが長い場合に途中を...に置き換えてくれる関数みたいに
指定された長さ以下になるまで8.3形式に縮めてくれる関数ないですか。

280:デフォルトの名無しさん
08/04/28 16:52:47
>>278
つまりこういう事か
ケコーンしる>>276>>277

>>279
> 指定された長さ以下になるまで8.3形式に縮めてくれる
何が言いたいのかさっぱり分からん

281:デフォルトの名無しさん
08/04/28 16:53:30
まつがえた
ケコーンしる>>275>>276

282:デフォルトの名無しさん
08/04/28 17:00:00
>>279
上のほうはPathCompactPath(Ex)

283:282
08/04/28 17:01:52
質問ちゃんと読んでなかった。忘れて

284:デフォルトの名無しさん
08/04/28 17:21:02
なんでお前らそんなに物知りなんだ……?

285:デフォルトの名無しさん
08/04/28 17:25:28
・指定された長さ以下になるまで縮める
 PathCompactPath、PathCompactPathEx、DrawTextEx

・8.3形式に縮める
 GetShortPathName

・指定された長さ以下になるまで8.3形式に縮める
 ???

286:デフォルトの名無しさん
08/04/28 18:01:35
>>275>>276
ありがとん
例の3GBスイッチ入れたら64bitOS上でユーザー4GBですね。
もうこれで十分だああああ。
64bitアプリを作るのはいつのことになるやら…

287:デフォルトの名無しさん
08/04/28 19:45:30
>>272
ぐぐっただけだが。
URLリンク(source.winehq.org)
には「potm->otmsCapEmHeight = pOS2->sCapHeight」と書いてある。

で、「sCapHeight」を調べたら
URLリンク(www.microsoft.com)
This metric specifies the distance between the baseline and the approximate
height of uppercase letters measured in FUnits. This value would normally be specified
by a type designer but in situations where that is not possible, for example when a
legacy font is being converted, the value may be set equal to the top of the unscaled
and unhinted glyph bounding box of the glyph encoded at U+0048 (LATIN CAPITAL
LETTER H). If no glyph is encoded in this position the field should be set to 0.

This metric, if specified, can be used in systems that specify type size by capital height
measured in millimeters. It can also be used as an alignment metric; the top of a drop
capital, for instance, can be aligned to the sCapHeight metric of the first line of text.

288:デフォルトの名無しさん
08/04/28 19:57:02
日本語でおk

289:デフォルトの名無しさん
08/04/28 20:08:53
wineのソースかよ

290:デフォルトの名無しさん
08/04/28 20:26:35
>286
例の3GBスイッチって何?

291:デフォルトの名無しさん
08/04/28 20:32:24
>>290
link.exe /LARGEADDRESSAWARE

292:デフォルトの名無しさん
08/04/28 20:34:42
どこらへんが3GBなの?

293:デフォルトの名無しさん
08/04/28 20:36:45
ヒントもらったんだから少しは調べて聞けよ・・

294:デフォルトの名無しさん
08/04/28 20:45:32
boot.iniに仕込むほうの/3GBと紛らわしくてイケナイし、
内実がしめしているものと意味合いが異なりすぎるのに
LARGEADDRESSAWAREを3GBスイッチとか言うのはなぜ?

295:デフォルトの名無しさん
08/04/28 20:56:53
↑話を理解してない馬鹿

296:デフォルトの名無しさん
08/04/28 21:16:48
>>252
実際にやったことある。
もう必要ないページが物理メモリに残って、また必要になるページが追い出されて、
ぐだぐだな状態になったよ。

ワーキングセットを自分でトリムすりゃいいんだろうけど、
そしたら自分に必要なページまで削られちまうかも。

297:デフォルトの名無しさん
08/04/28 22:34:59
>>294
大いに関係ある。
/LARGEADDRESSAWARE付けたEXEが実際に2GB超のメモリを使うには、
boot.iniで/3GBを入れていないといけない。
(あるいは上に話があったように64ビットWindowsにするか)


298:デフォルトの名無しさん
08/04/28 22:41:52
2000だとシステム空間は減るのにユーザのメモリ空間は変わらないんだよな、確か

299:デフォルトの名無しさん
08/04/28 23:43:14
煽り目的の人はシンデイイヨ

300:272
08/04/29 01:22:40
>>287
ありがとう
そのあたりも調べてみます。

301:デフォルトの名無しさん
08/04/29 01:54:18
すみません。質問させていただけますでしょうか。
今現在、SetTimerを用いてWM_TIMERを送ってもらっているのですが、
タイマーの精度が低いので、timeGetTime関数を使ってみようと思ったのですが
これがうまくいきません。
具体的なやり方のようなものをご存知の方がいらっしゃいましたら、ご教示くださいませ

302:デフォルトの名無しさん
08/04/29 01:59:20
マルチメディアタイマーつかっとけ

303:デフォルトの名無しさん
08/04/29 02:32:29
パフォーマンスカウンタで測りながらループが最強だと思う

304:デフォルトの名無しさん
08/04/29 02:33:56
ちゃんとループにSleep(0);を挟んでおけよ

305:デフォルトの名無しさん
08/04/29 02:44:29
system("cls");
みたいな動作する関数って何ですか?

306:デフォルトの名無しさん
08/04/29 02:47:23
VOID SystemCLS(VOID){

system("cls");

}

307:デフォルトの名無しさん
08/04/29 02:51:09
system("cls");
これを使わなくてもコンソール画面をクリアして
カーソルを一番左上に持っていく事はできますか?

308:デフォルトの名無しさん
08/04/29 02:51:36
>>306 それじゃWinAPI関係ねぇだろw

309:デフォルトの名無しさん
08/04/29 03:03:37
CreateProcessに変更すればおk

310:デフォルトの名無しさん
08/04/29 03:05:13
msvcrt.dllがKnownDLLsの一つだからCランタイム関数もWin32APIだろう
まあ"msvcrt.dll"にリンクできるコンパイラ(VC6,DDK,gccなど)を使ってればの話だが

311:デフォルトの名無しさん
08/04/29 03:18:02
>>307
できます。

312:デフォルトの名無しさん
08/04/29 03:19:54
どうやって?

313:デフォルトの名無しさん
08/04/29 03:21:34
非同期でwav再生してて、wavの再生位置が1分に来たら
このメッセージを表示

とかどうやったらできる?

314:デフォルトの名無しさん
08/04/29 04:10:40
sndPlaySound("c:\\test.wav", SND_ASYNC);
Sleep(60000);
MessageBox(NULL, "このメッセージを表示", NULL, 0);

315:デフォルトの名無しさん
08/04/29 04:40:57
>>301
マイクロソフトのサンプルはすべてチェックしたか?

>>303
パフォーマンスカウンターは正確とは限らない。
一部のCPUでは、CPUが省電力機能でクロックが低下すると、パフォーマンスカウンターまで遅くなる。
また、複数のコアを持つCPUでは、パフォーマンスカウンターの読み出しには結構なコストがかかる。
(かといってRDTSC命令(だったかな)を直に呼ぶのはダメだ。マルチプロセッサやマルチコアなど、
カウンタが複数ある場合、それらが同一にカウント開始するとは限らないからだ。)

316:デフォルトの名無しさん
08/04/29 04:40:58
GetAsyncKeyStateでキーの押下状態を取得したんですが、
3つ以上のキーを同時に押下するとき、いくつかの組み合わせでは最後に押したキーが押下されてない事になっています。
たとえばASDやSDFなどでは3つとも取得できていますが、
DFGやHJKをD→F→GやH→J→Kの順番で押していくとDFやHJの2つしか押下されてない事になっていて、
同様にD→G→FやH→K→Jの順番で押していくとDGやHKの2つしか押下されていない事になっています。
何か解決のヒントでもあれば教えてください。
ちなみにGetKeyStateやGetKeyboardStateを使っても同様の現象が発生していました。


317:デフォルトの名無しさん
08/04/29 04:44:20
>>307
MSDNライブラリで、
WriteConsole
のページを開いて目次を同期し、そこのあたりのAPIを一通り見れ。

318:デフォルトの名無しさん
08/04/29 04:45:14
>>314
Sleep(60000)が同期だろうが。

茶化した回答しかできんなら黙っとれ。

319:デフォルトの名無しさん
08/04/29 04:47:51
>>316
まずは、あなたの使っているキーボードが、Nキー・ロールオーバーを保証していることを確認せよ。
また、同時押下のキーに制限がないことを確認せよ。

そこいらのキーボードはコスト削減のために、
(シフト系の同時押下前提のキーを除いて)
複数のキーの同時押下を検出できない
または、誤検出するような設計になっている。

320:デフォルトの名無しさん
08/04/29 04:54:25
>>319
あー・・・なるほど。
1000円くらいの安物なので多分対応してないでしょうね・・・。
確認してみます。
ありがとうございます。


321:デフォルトの名無しさん
08/04/29 04:59:18
Nキー・ロールオーバーを謳ってるキーボードでも、
PS/2接続ならOKだが、
USB接続だと6キーまでという制限があったりするらしいぞ。

322:デフォルトの名無しさん
08/04/29 06:38:42
PS/2接続のRealforce使ってるから、GetKeyboardStateで試してみたら、
本当にいくらでも同時押し下げを認識するのな。
別に無制限の同時押し下げのために使ってるわけじゃないが。

323:デフォルトの名無しさん
08/04/29 07:42:55
>>318
sndPlaySound("c:\\test.wav", SND_ASYNC);
CloseHandle(CreateThread(..., ThreadFunc, ...));

DWORD WINAPI ThreadFunc(void* p)
{
 Sleep(60000);
 MessageBox(NULL, "このメッセージを表示", NULL, 0);
 return 0;
}

324:デフォルトの名無しさん
08/04/29 08:13:46
というか>>314のレス内容からこの程度の応用すら思い付かない奴は
プログラマに向いていないので転職をおすすめする

325:デフォルトの名無しさん
08/04/29 08:22:24
sndPlaySound使う時点でプログラマに向いてないと思うがw

326:デフォルトの名無しさん
08/04/29 08:25:16
非同期ってのは、そういう意味じゃないだろ。

327:デフォルトの名無しさん
08/04/29 08:27:09
>>314>>323は、
60秒後に
このメッセージを表示
することだよな。

それを求めていたら、そういう質問になるだろう。

328:デフォルトの名無しさん
08/04/29 08:30:04
>>313の質問は、

> 非同期でwav再生してて、wavの再生位置が1分に来たら
> このメッセージを表示

である。

言葉を補うと、

すでに非同期で再生しているwavが、
その再生位置が1分のところに来たら
このメッセージを表示

となるだろう。

どこまで再生しているのか不明な以上、
Sleepなんかじゃ話にならない。

329:デフォルトの名無しさん
08/04/29 08:31:42
wavの再生速度を変えないなら、再生位置が1分になるのは再生してから1分後だろう

330:デフォルトの名無しさん
08/04/29 08:33:04
音とびなどの特殊状況を考えなければね

331:デフォルトの名無しさん
08/04/29 08:34:08
今時wavの再生ごときで音とびなんてするかよ

332:デフォルトの名無しさん
08/04/29 08:35:46
>>331
こういう奴って、実際にやったことないんだろうなぁ

333:デフォルトの名無しさん
08/04/29 08:39:15
>>332
仮に音とびしても「再生位置1分」と実時間とのずれなんて誤差範囲だろ
お前のPCでは1分のwavを再生するのに2分かかるほど音とびするのか?

334:デフォルトの名無しさん
08/04/29 08:44:03
sndPlaySoundから制御が返った瞬間に、再生開始されてると、いったい誰が保証してくれるんだ?
保証されていないものに頼ることこそ、プログラマに向いてない。

メモリ上にwavを読みこんであったとしても、そいつが物理メモリ上になかったら?

ファイルから直に再生するときに、CD-ROMなどのアクセスに時間のかかるデバイス上にあったら?
しかも、同時に他のアクセスが発生して、当該ファイルの読込みが途切れたら?

>>329
ループ再生していたら、再生開始から1分後とは限らない。
それに、先頭から再生しているのかどうかも、わからんし、
途中で一時停止するかもしれん。

335:デフォルトの名無しさん
08/04/29 08:50:28
>>334
お前ムキになりすぎ

そもそもsndPlaySoundは一時停止なんてできないし、
そんな事を言い出したらDirectSoundのコールバックやらを使っても正確に1分かどうかなんて分からんぞ

336:デフォルトの名無しさん
08/04/29 09:04:22
目的によって手段を選べばいい

337:デフォルトの名無しさん
08/04/29 09:06:28
ノートPC動かすとHDDのヘッドがリトラクトして簡単に音飛びするよ。
それも3秒とかの単位で。
Sleepで時間あわせなんてナンセンス。
定期的に再生位置を読みにいくしかないんじゃね。

338:デフォルトの名無しさん
08/04/29 09:14:25
> ノートPC動かすとHDDのヘッドがリトラクトして
そんな使い方してたらHDD壊れるだろw

339:デフォルトの名無しさん
08/04/29 09:58:35
>>335
sndPlaySoundを使うことを前提にして話をするなよ。

340:デフォルトの名無しさん
08/04/29 10:05:13
>>338
壊れないんだな、これが。

何年も前から、ノートPCのHDDには加速度センサが付いていて、
動きはじめた時点でヘッドを安全領域に移動させはじめるのよ。
衝撃が加わるであろう頃には、かなりの衝撃に耐えられる状態になる。


341:デフォルトの名無しさん
08/04/29 10:11:51
お前ら雑談はそろそろ終わりにしろ

342:デフォルトの名無しさん
08/04/29 10:15:25
DirectSoundって廃止されるんじゃないの?
XAudioのせいで。

343:デフォルトの名無しさん
08/04/29 10:26:38
>>342
ソースどこだよヴォケ

344:デフォルトの名無しさん
08/04/29 10:29:30
VIPに帰れよおまえら

345:デフォルトの名無しさん
08/04/29 10:45:35
Win32APIの質問しにくい状況だよね。。
MFCやらDirectXやら雑談スレになってる

346:デフォルトの名無しさん
08/04/29 10:47:08
質問してくれくれ

347:デフォルトの名無しさん
08/04/29 10:47:35
次スレからはWin32API雑談箱でいいだろ

348:デフォルトの名無しさん
08/04/29 10:47:35
約一名、わざと変な回答をして荒らしている人がいるからなぁ。

349:デフォルトの名無しさん
08/04/29 11:11:19
スレリンク(tech板)l50
ここの芝君じゃね?

350:313
08/04/29 11:31:09
タイヘンな事になってしまったみたいでナンカゴメン・・・

>>337の>定期的に再生位置を読みにいくしかないんじゃね。
ってどうやればできる?

351:デフォルトの名無しさん
08/04/29 11:32:43
DirectSoundならわかるよ

352:デフォルトの名無しさん
08/04/29 11:33:21
早速の回答ありがと

ほんとごめんね

353:デフォルトの名無しさん
08/04/29 11:52:17
msdnしんでない?

354:デフォルトの名無しさん
08/04/29 12:01:13
生きてた

355:デフォルトの名無しさん
08/04/29 12:15:23
Content not found って表示されるorz

356:デフォルトの名無しさん
08/04/29 12:53:12
Sleep( DWORD ms)
このAPIが呼び出されてスレッドが休止された時点から少なくとも
msミリ秒はスレッドの再開が無い。
但しSleep内でスレッドが休止され再開されるまでブロック
(戻ってこない)ことが保証されているかどうか不明
(仮に現時点そうだとしても将来に渡る永続的な保証は無いと思うべき)
最も無難な解釈は、「このAPIが呼び出されてから次のスレッド休止期間
がmsミリ秒以上であることが保証される」
といった程度。
こういうのをドキュメントから読み取れないとな。
>>314の解答は、ある意味最適解だよ。APIの利用法で実績例が少ない
ものは安全性が低くなる。
殆どのAPIは他の目的で作られたもので汎用性を考えて作られていないし、
今更作り直すことすら出来ない。(その意味で仕様が安定してるという
理由だけで使われているとすら言える)
あくまでも使用者の自己責任という前提でエクスポート(渋々に使用許可)
されてるものに過ぎない。

357:デフォルトの名無しさん
08/04/29 12:58:18
>>355
移動したみたいよ


358:デフォルトの名無しさん
08/04/29 13:31:08
>>356
もうそういうつっこみはいんでない?
ネタをネタとして(ry

359:デフォルトの名無しさん
08/04/29 13:32:07
彼のGWを費やしてゴミレスをまきつづけるという決心は誰にもいさめられはしないのだ。

360:デフォルトの名無しさん
08/04/29 14:16:51
sndPlaySoundする前にCreateThreadで別スレッド作って、
別スレッドでSleep(60000)でその後にメッセージ出せば良いと思う。

361:デフォルトの名無しさん
08/04/29 14:20:54
WindowsVistaでサービスアプリケーションを作ってるんですが、
タスクトレイ(通知領域)にアイコンをだすにはどうすればいいですか?
XPではNotifyIconを使って動いていたのですが、
Vistaではセッションが分離されたようで動かなくなりました。
よろしくおねがいします。

362:デフォルトの名無しさん
08/04/29 14:21:02
公開WindowsAPIだけを用いてまともな(信頼出来る)
リアルタイムアプリ作るのは不可能だと思う
それが嫌ならWindows使わないほうがいいと思う

363:デフォルトの名無しさん
08/04/29 14:38:02
>>362
はぁ?

364:デフォルトの名無しさん
08/04/29 14:38:41
>>361
タスクトレイアプリを別exeで作って
そいつをCreateProcessAsUserだかなんだかでデスクトップに注入しろ
タスクトレイアプリとの通信方法は自分で考えろ

365:デフォルトの名無しさん
08/04/29 14:43:07
>>362
話を理解してない馬鹿

366:↑
08/04/29 14:45:54
話を理解してない馬鹿

367:デフォルトの名無しさん
08/04/29 14:52:22
↑話を理解してない馬鹿

368:デフォルトの名無しさん
08/04/29 14:53:42
春だねぇ

369:デフォルトの名無しさん
08/04/29 14:56:19
Windowsにまともなリアルタイム性が期待できないことぐらい誰でも知ってるし誰もそんな話はしていない
そうやって勝手な雑談ネタを持ち込もうとしたら叩かれて当然

370:デフォルトの名無しさん
08/04/29 14:56:34
同じ宛先の郵便物を別のポストに僅かな時間差で入れた場合
先に入れたほうが先に届くことが保証されるか?
常識と教育が必要な知識との微妙な境界領域だろうが
一般的には保証されてると信じたほうが悪いと判決される。

371:デフォルトの名無しさん
08/04/29 15:03:50
保証されると信じるわけのないことを喩えに出されても困るが。

372:デフォルトの名無しさん
08/04/29 15:04:54
質問者が質問する
    ↓
質問内容が飛躍してスレ住人が雑談
    ↓
エスカレートしすぎて当事者以外は手がつけられなくなる
    ↓
質問者が「ごめんなさい」レス


この流れの永久ループだな
謝るべきは雑談しているカス共だろ

373:デフォルトの名無しさん
08/04/29 15:34:50
みんな自己表現しすぎなのが問題かと・・・

374:デフォルトの名無しさん
08/04/29 15:35:32
「俺はこんな事まで考慮した上でレスしてんだぞ フフン」ってのがそこらじゅうのレスから感じられる
だから何?って感じなんだが


375:デフォルトの名無しさん
08/04/29 15:43:16
API仕様情報なんて所詮、うわさ話の域を出ない。
だから、話が脱線していくのは仕方がないでしょ
誰も本当の事知ってる訳じゃないし。
断片情報のよせ集めでしかないからね。

376:デフォルトの名無しさん
08/04/29 15:44:37
>>375
お前が雑談の元凶か

377:デフォルトの名無しさん
08/04/29 16:02:55
MSDNからDirectShowの日本語ドキュメントすべて削除されたみたい

378:デフォルトの名無しさん
08/04/29 16:38:35
XP、Vistaで時間が経過した場合にシステムがスクリーンセーバーを起動できるかを
取得したいのですが、良い方法がありましたらアドバイスお願いします。

・分かっていること
スクリーンセーバーの有効無効、SCRファイル名は SystemParametersInfo で取得
SCRファイルが存在するか否かは GetFileAttributes や FindFirstFile など

・詰まっていること
アクティブウィンドウが WM_SYSCOMMAND の SC_SCREENSAVE をどう処理するか

・試してみたこと/調べてみたこと
DefWindowProc の APIフック後、SC_SCREENSAVE を投げて届くか監視
  ダイアログアプリでは呼ばれず、GINA の WlxScreenSaverNotify での拒否も未考慮で×
GINAを実装し、SC_SCREENSAVE を投げて WlxScreenSaverNotify が呼ばれるか監視
  VistaではGINAが廃止され、ISensLogon::StartScreenSaver は代替にならず×
CreateDesktopW/A を APIフック後 SC_SCREENSAVE を投げて "Screen-saver" な
デスクトップ作成要求が発生するかを監視
  winlogon.exe に対しては APIフックが失敗してしまい×

・スキル不足で試せていないこと
NtUserCreateDesktop をカーネルAPIフック後 SC_SCREENSAVE を投げて、以下略

そもそも、ただスクリーンセーバーが起動出来るか確認したいだけなのに
APIフックまで持ち出さなければならないのか…。

379:デフォルトの名無しさん
08/04/29 16:42:46
上にもあるけど
非同期wav再生
→再生位置取得
→位置により別の文字(歌詞でも)表示
ってSleepが手っ取り早いんかな

歌詞表示はコンソールなんだけど・・・

380:デフォルトの名無しさん
08/04/29 16:47:29
>>378
そもそも何でもAPIフックで済まそうという思考が以下略

381:デフォルトの名無しさん
08/04/29 16:58:11
>>379
URLリンク(www13.plala.or.jp)

こんなんどう?使い方わからんけど
誰か頼むorz

382:デフォルトの名無しさん
08/04/29 17:02:55
例えば
/* 取得の前準備 */
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
/* 再生位置取得 */
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
/* 終了 */
見たいな感じで 最小コード誰かplz

383:デフォルトの名無しさん
08/04/29 17:08:38
いい加減うざい
URLリンク(www.google.com)

384:デフォルトの名無しさん
08/04/29 17:17:23
>>380
全くその通りなのですが、色々調べた結果APIフックにいってしまいました。
APIフックがしたいわけではないので、どなたかよい方法があれば…。

385:デフォルトの名無しさん
08/04/29 17:39:41
スクリーンセーバーの実行処理なんてのはシステムの管轄だから、アプリ側では
それを抑止する(WM_SYSCOMMAND/SC_SCREENSAVEに応答する)以上は触るなという事だろう

要するに
「スクリーンセーバーを起動できるかどうか」
ではなくて
「スクリーンセーバーが起動されようとしている時にどうするか」
だけを考えろ、と。

386:デフォルトの名無しさん
08/04/29 18:24:06
>>361>>378も無理
Vistaは糞

387:デフォルトの名無しさん
08/04/29 19:53:21
今更だがDirectSoundには結構前から死亡宣告が出てるよ
URLリンク(www.4gamer.net)

388:デフォルトの名無しさん
08/04/29 20:54:31
>>361
サービスが直にアイコンを出すのではなく、
ログオンしているユーザと対話するためのEXEを作り、
そのEXEがサービスと通信して適宜、アイコンを表示すべし。

389:デフォルトの名無しさん
08/04/29 20:56:56
>>374
いろいろと考慮して、行儀良くAPIを使うのは、基本中の基本。
たまたま動いているからOKという考え方だと痛い目にあう。

>>364
> そいつをCreateProcessAsUserだかなんだかでデスクトップに注入

スタートアップに登録でいいと思う。

390:デフォルトの名無しさん
08/04/29 21:15:14
>>387
2chステレオでただ音を出すだけなら、今後も、互換性あるんじゃない?

391:デフォルトの名無しさん
08/04/29 23:13:07
>>356
こういうことじゃないのか。
>0 を指定すると、スレッドは、実行の準備ができている同じ優先順位の
>ほかのスレッドに残りのタイムスライスを譲ります。

>>375 同意。本当の事はバージョン限定。

392:デフォルトの名無しさん
08/04/29 23:18:23
>>389
たまたま動いてるからOKだなんて言わなかったけど?(笑)

393:デフォルトの名無しさん
08/04/29 23:23:56
明示的には言ってないが、暗にそういう前提で話をしてたろ。


394:デフォルトの名無しさん
08/04/29 23:25:00
うるせぇよ雑談で荒らすな

395:デフォルトの名無しさん
08/04/29 23:30:31
>>393
してないよ?
それは単なる君の憶測。


396:デフォルトの名無しさん
08/04/30 00:49:06
>>387
その記事を書いた時点で記者はXAudio 2のことを全く知らなかったみたいだがな。

397:デフォルトの名無しさん
08/04/30 03:09:28
>>385
レスどうもです。一筋縄ではいかなそうですね。
NtUserCreateDesktop のフックを試してみて、無理そうだったら
アイディアがもう無いので諦めたいと思います。

398:デフォルトの名無しさん
08/04/30 03:20:33
なぜスクリーンセイバーが起動できるか取得したい動機を知りたい

399:デフォルトの名無しさん
08/04/30 05:56:50
NtUserCreateDesktop ってエクスポートすらされてないじゃん
スクリーンセイバー相手に超乙


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

4983日前に更新/131 KB
担当:undef