■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build17
251 名前:デフォルトの名無しさん :04/03/04 15:24
>>250
GetAsyncKeyState

252 名前:デフォルトの名無しさん :04/03/04 15:24
>>250
ちょっと面倒になるけど、KeyboardHookで

253 名前:デフォルトの名無しさん :04/03/04 15:34
>>251
thanxです。うまくいきまいた。

254 名前:デフォルトの名無しさん :04/03/04 15:38
>>247
0. GetTempFileNameで一時的ファイル名を取得
1. CreateFileでEXEファイルを新規作成
2. CreateFileMappingでメモリ化、解凍先バッファとする
3. CloseHandle後、CreateProcess
ではあかんかえ?

255 名前:デフォルトの名無しさん :04/03/04 16:56
ファイルからテキストを抽出するのにIFilterのAPIを呼び出して使いたいんですが、
使い方がよくわからないです。
取っ掛かりとしてサンプルコードないでしょうか。

Platform SDKの Indexing Service の項の英文眺めて悩んでます。


256 名前:デフォルトの名無しさん :04/03/04 17:06
>>255
CoCreateInstance

257 名前:255 :04/03/04 18:41
>>256
頭悪くてわかりません。(-_-;

258 名前:デフォルトの名無しさん :04/03/04 19:04
じゃあ、無理。

259 名前:デフォルトの名無しさん :04/03/04 19:23
Windowsのシステムコールとはどの関数をさすのでしょうか。
kernel32.dllとntoskernel.exeのエクスポート関数のこと?
WIN32APIはカーネル関数のフレームワークなのか?

260 名前:デフォルトの名無しさん :04/03/04 19:52
CreateWindow() 等でウィンドウを作成しようとした場合、
WM_CREATE の戻り値に -1 を指定すればウィンドウの作成を拒否することができますが、
CreateDialog() 等でダイアログを作成しようとした場合は、
WM_INITDIALOG ではダイアログの作成を拒否することができませんよね。
普通、コントロールの初期化は WM_INITDIALOG の中で行うと思うのですが、
コントロールの初期化に失敗した等の理由により、
ダイアログの作成を拒否したいケースもあると思うのです。
そのための方法を自分なりに考えてみたのですが、
グローバル変数に頼らざるをえなくなり、どうもスマートではありません。
スマートな方法があればぜひ教えていただきたいのですが…。よろしくお願いします。

261 名前:260 :04/03/04 19:55
うっ、sageてしまいました。長文ですみません。

262 名前:デフォルトの名無しさん :04/03/04 20:39
>>260
作成を拒否するのは面倒そうなので、WM_INITDIALOG の中で EndDialog を
呼び出して即閉じてしまうのが簡単だと思います。

263 名前:デフォルトの名無しさん :04/03/04 20:56
RaiseExceptionしとけ

264 名前:デフォルトの名無しさん :04/03/04 21:23
自アプリ上のエディットコントロールでIEからのリンクのドロップをテキストデータで受け取りたいのですが、
IDataObject::EnumFormatEtcで受け取り可能なフォーマットを列挙させるとCF_TEXTが含まれていないのに
IDataObject::GetDataでCF_TEXTを要求すると正常なデータが取得できてしまいます。
この場合、CF_TEXTでの要求のまま実装して問題無いものでしょうか?それともGetClipboardFormat("UniformResourceLocator")で受け取るべきでしょうか?

265 名前:デフォルトの名無しさん :04/03/04 22:31
保護モード上では直接ユーザーがI/Oポートを叩くことはできないから
カーネルやらデバイスドライバやらに外部とのやり取りを依頼する
でそのカーネルとかデバドラとのやりとりのためにインターフェイスが用意されてる
環境にもよるだろうけどそれのことをAPIとかシステムコールとか言っているのかな
多分int n命令を使ってそれらに処理をお願いすると思うのですが

具体的にいえばあるデバイスドライバとのインターフェイスを探しているのですが
そのためのライブラリがDLLという形でどこかに存在しているだろうときにどーやってそれを探し出せばいいのですか?
マニュアルかなぁ
誰か教えてください
ちなみにnational instrumentのデバイスです
疲れたポ

266 名前:デフォルトの名無しさん :04/03/04 22:42
NT系なら、ユーザーモードから直接I/Oを読み書きする
方法があります。
http://www.gijyutu.com/g-soft/automa/nt/automa_nt.html

267 名前:デフォルトの名無しさん :04/03/04 22:49
>266
よく読んでいないけどセキュリティホールではないのかな?

268 名前:デフォルトの名無しさん :04/03/04 23:01
なんかドライバ作れ、ドライバ、って感じの話題に見えるんだが。

269 名前:260 :04/03/04 23:19
>>262
なるほど。WM_INITDIALOG の中で EndDialog() や DestroyWindow() を実行するのは
少し抵抗があったのですが、実験してみると確かに意図した通りの動作になりますね。
>>263
今回は例外処理を使う方法は見送りますが、参考になりました。

どうもありがとうございました。

270 名前:デフォルトの名無しさん :04/03/04 23:59
>>267
ドライバのインストールを許してる状況なら
セキュリティもクソもないでしょ

271 名前:デフォルトの名無しさん :04/03/05 00:38
質問です。

ScrollWindow(hwnd,0,cyChar * (iVertPos - si.nPos),NULL,NULL);
UpdateWindow(hwnd);

このUpdateWindow()を使う意味が分かりません。なぜですか?
ScrollWindow()はWM_PAINTをプロシージャに送りますよね?
そのあとUpdateWindowでまた送ってもしょうがないんじゃないんでしょうか。

調べてみたところすぐに更新するにはUpdateWindow()を使えとのことなんですが、
どうも意味が分かりません。

272 名前:デフォルトの名無しさん :04/03/05 00:46
UpdateWindow

ウィンドウの更新領域が空でない場合、ウィンドウにWM_PAINT メッセージを送って、
そのクライアント領域を更新します。この関数は、アプリケーションキューを介さずに、
指定されたウィンドウのウィンドウプロシージャに直接 WM_PAINT メッセージを送ります。
更新領域が空のときには、メッセージは送りません。



273 名前:デフォルトの名無しさん :04/03/05 00:48
>>271
>ScrollWindow()はWM_PAINTをプロシージャに送りますよね?

MSDN見てみたけど、更新リージョンを設定する、としか書いてないような気がするんだけど。

274 名前:デフォルトの名無しさん :04/03/05 03:59
無効領域ができるとWM_PAINTメッセージがキューに入れられる
描画は時間がかかるので、WM_PAINTは優先順位が低く、
他のメッセージが先に処理され、その間にWM_PAINTが複数できると
1つにまとめられる。

UpdateWindowは、この後回しにされるキューにたまったWM_PAINTメッセージを
即送りつける機能がある。 別にWM_PAINTを直接送っているわけではない

275 名前:デフォルトの名無しさん :04/03/05 09:00
I/O叩くだけのドライバなら結構簡単に作れるから
WDMの勉強した方が早いと思う

276 名前:デフォルトの名無しさん :04/03/05 09:36
WNDCLASSEXの、
cbClsExtraと、
cbWndExtraの、
使い方を教えてくれませんか?

277 名前:デフォルトの名無しさん :04/03/05 10:15
>>276
用途を聞いてるのか用法を聞いてるのか分からんが一応

用途
cbWndExtraはMDIの子ウィンドウ管理に使える。
しかしそれに限定されているわけではないので(cbClsExtraも含め)好きに使え。
用法
GetWindowLong, GetClassLongあたりを見れ。


278 名前:デフォルトの名無しさん :04/03/05 11:23
Windows2000+VisualC++6.0でプログラムを書いています

Ctrl+Alt+Delで表示される「Windowsのセキュリティ」DialogBoxのタスクマネージャーボタンを
無効化したいのですが、方法がわかりません何かよい資料などありませんでしょうか?

FindWindow()でHandleを取得して、メッセージをHookすれば何とかなるかなと思ったんですが
上記のWindow名を調べる方法が判らず断念しました


279 名前:デフォルトの名無しさん :04/03/05 11:31
>>272>>273>>274
なるほど。
ScrollWindow()はWM_PAINTをプロシージャに送るんじゃなくて、
クライアント領域を無効化して間接的にメッセージキューにポストしてるんですね。
直接送るものと勘違いしてました・・・
どうもありがとうございました。


280 名前:デフォルトの名無しさん :04/03/05 14:10
開始と終了の時刻の差分で
経過時間の計算をしてるのですけど
途中でOSの時刻を修正されるとおかしなことになります。
OSの時刻に左右されずに経過時間を計るのにはどうしたらいいのでしょうか

281 名前:デフォルトの名無しさん :04/03/05 14:16
QueryPerformanceCounter() / QueryPerformanceFrequency()
GetTickCount()

TickCountは49.7日で巻き戻るし、PerformanceCounterは稀にサポートしていない環境が
あったりはするが。

282 名前:280 :04/03/05 14:17
以前はSetTimer(1,1000)とかやって毎秒、変数をインクリメントしてたのですが
24時間とかやるとなんか精度がよくなかったです。

283 名前:デフォルトの名無しさん :04/03/05 14:17
>>281
ありがとうございます!早速これらを使ってみたいと思います。

284 名前:デフォルトの名無しさん :04/03/05 14:24
>>278
FindoWindowよりはEnumWindowのほうが良いかもね。

タスクマネージャを立ち上げさせたくないだけなら、フックのWH_SHELLで
HSHELL_TASKMANってのがあるみたい。
ただ、これでできるか試したことないけど。






285 名前:デフォルトの名無しさん :04/03/05 14:33
280
QueryPerformanceCounterって動的にクロックが変動するCPUだとまずいらしいですね
GetTickCount()は49.7日で巻き戻るので使えないし(サーバなので1年とか稼動する可能性があるのです)・・うーん。

286 名前:デフォルトの名無しさん :04/03/05 14:33
Win鯖を窓から投げ捨てろ

287 名前:デフォルトの名無しさん :04/03/05 14:46
>285
時間差の大小を判断したら、49.7日目を跨いでも何ら問題ないと思うが。


288 名前:280 :04/03/05 14:47
GetTickCount()を使う場合は
レジストリの値を見て*49.7日足すしかないのでしょうか
うううそれだと49.7日たたないと動作確認ができない・・・

289 名前:デフォルトの名無しさん :04/03/05 14:49
>>287
それだと49.8日後に0.1日しか経過してないことになってしまいませんか?

290 名前:デフォルトの名無しさん :04/03/05 14:54
>>289
前回の値を保存しておいて前回の値より値が低ければカウンタがリセットされたとして処理すればいいだけかと

291 名前:デフォルトの名無しさん :04/03/05 14:55
外から時間取ってくれば?

292 名前:デフォルトの名無しさん :04/03/05 14:58
イソターネットに繋がってるサーバなら(s)ntpとかな。

293 名前:デフォルトの名無しさん :04/03/05 15:00
>>290
なんとかその方法でやってみます
>>291
NTPとかでですか?
NTPサーバ立てる余地とかなくて。

294 名前:デフォルトの名無しさん :04/03/05 15:05
というか単にunsignedで前回の値を引き算すればいいだけだろ

295 名前:デフォルトの名無しさん :04/03/05 15:06
>>278
そんな事が出来たら、あなたはスーパーハカーになれます。
すなおにCtrl+Alt+Delを無効化すれ。


296 名前:デフォルトの名無しさん :04/03/05 15:23
>294
どうれくらいの頻度で呼ばれるか分からないけど、
毎回差分を取るとGetTickCount()の誤差が累積されると思う。

しかしサーバーなら、そうそうOSの時刻を大きく修正されることも無いと思うんだがなぁ。
まあ対応しておくにこしたことはないが。

297 名前:296 :04/03/05 15:27
ああ、64bit整数とかでそのままの値で加算していくのなら誤差は累積されないか。

298 名前:280 :04/03/05 16:06
そういやunsignedでしたね
49.7日越えはレジストリに記録されるらしいので
そこを取ってきます。
みなさんありがとうございました。

299 名前:デフォルトの名無しさん :04/03/05 17:32
>>296
よーく考えるとわかりますが、GetTickCount そのものの精度はともかく、
「差分を積算すること」自体では誤差は蓄積されません。

300 名前:デフォルトの名無しさん :04/03/05 17:57
WM_TIMEハンドラを作って、__int64 でカウントはだめ?

301 名前:デフォルトの名無しさん :04/03/05 18:18
WM_TIMEは指定秒でメッセージ発生するけど、それを受け取るのは
また別の話だからかなり不正確だぞ。


302 名前:デフォルトの名無しさん :04/03/05 19:31
timeGetTime ないし、timeGetSystemTime 使えば?

303 名前:デフォルトの名無しさん :04/03/05 19:39
>>301
長期的に見た誤差の累積について考えて出てきた案なんだが、却下か?
瞬間的な精度が必要な場合はハードでやった方がいい場合が多いだろ。

304 名前:デフォルトの名無しさん :04/03/05 19:40
>>302
脳みそ足りないヤシは黙ってろよ。

305 名前:デフォルトの名無しさん :04/03/05 19:53
スレッドをひとつ作成し、Event と、WaitForSingleObject で待機しながら、
__int64 な整数に時間を加算していくというのはどうか

306 名前:デフォルトの名無しさん :04/03/05 20:17
MessageBoxを使用するとスクリーンの中央にダイアログが表示されてしまいます。
MFCを使うと親ウィンドウの中央に表示されるのですが。
これは何故でしょうか。そしてMFCの様にウィンドウの中央に表示させられないでしょうか。

307 名前:デフォルトの名無しさん :04/03/05 20:21
>>306
第4引数の定数を弄りなさい

308 名前:デフォルトの名無しさん :04/03/05 20:30
>>306
WM_INITDIALOGでMoveWindowは?

309 名前:デフォルトの名無しさん :04/03/05 20:39
ろくに長時間の計算すらできないのはWindowsの仕様かしら

310 名前:デフォルトの名無しさん :04/03/05 20:43
>>308
それはダイアログの場合でしょ。

311 名前:デフォルトの名無しさん :04/03/05 20:44
長時間起動に耐えないんだから仕方ないんじゃないの
>>293
サーバ立てなくてもNTPサーバにアクセスする環境があればいいよ
eric.nc.u-tokyo.ac.jpとか

312 名前:デフォルトの名無しさん :04/03/05 20:49
>>306
フックだよ。
MFCのソース嫁。
それが面倒だったら諦めれ。

313 名前:デフォルトの名無しさん :04/03/05 21:09
#include<windows.h>

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
  switch (msg) {
    case WM_LBUTTONUP:
      MessageBox(NULL , "", "", MB_OK);
      SendMessage(hwnd, WM_CLOSE, 0, 0);
      return 0;

    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hwnd , msg , wp , lp);
}

↑のプログラム(WinMainは省略, ウィンドウを1つ作成)を実行させ、
ウィンドウ内で左クリックすると、1つ目のダイアログが出ます。
OKボタンを押さなければ、ウィンドウプロシージャを抜けないので、
メッセージループにも制御が戻らないと思ったのですが、
その状態で再び左クリックすると、もう1つダイアログが表示されます。
この挙動がいまいち理解できません。
なぜ2つ目のダイアログは表示されるのでしょうか?

314 名前:デフォルトの名無しさん :04/03/05 21:14
>>313
抜けなくてもまた入ってくるけど。
メッセージボックスを移動させたりしたときにウィンドウを再描画するのは誰だい?

315 名前:デフォルトの名無しさん :04/03/05 21:16
>313
>MessageBox(NULL , "", "", MB_OK);
MessageBox(hwnd , "", "", MB_OK);

316 名前:デフォルトの名無しさん :04/03/05 21:25
も一つ
MessageBox(NULL , "", "", MB_OK | MB_TASKMODAL);
まあようするにMSDN嫁と

317 名前:デフォルトの名無しさん :04/03/05 21:38
>>315、316
質問の意図はそういうことじゃないでしょ。

>>313
MessageBox内でも独自のメッセージループが回ってるわけで
結局はそこのDispatchMessageでウィンドウプロシージャに飛ばされ
そこで処理されると言うわけ。

318 名前:デフォルトの名無しさん :04/03/05 21:42
>>312
MFCってずっとフックをインストールしっぱなしなんですか。
なんかフックって長い間インストールしてると固まったりする
原因になるイメージが有るのでちょっとびっくり。

319 名前:デフォルトの名無しさん :04/03/05 21:55
フック開始

ダイアログとか表示させる

コールバックでいじる

フック終了

位置を変えるだけなら、直前で仕掛けて直後に閉めればいいべさ。

320 名前:デフォルトの名無しさん :04/03/05 22:04
>>314-317
レスありがとうございました。
>MessageBox内でも独自のメッセージループが回ってる
この説明で納得できました。感謝します。

321 名前:デフォルトの名無しさん :04/03/05 22:09
>>319
あ、勿論そうするつもりです。
ただMFCの場合、何時何処でWin32APIのMessageBox呼び出しても
親ウィンドウの中央に表示される所を見るとインストールしっぱなしなんだろうなと。

322 名前:デフォルトの名無しさん :04/03/05 23:16
>>321
MFCのMessageBox呼んでるんじゃないか?それは。
WIN32APIのMessageBoxを直接呼んでそうなるとは思わないのだが。

323 名前:デフォルトの名無しさん :04/03/05 23:19
>>322
試してみれば分かりますがそうなります。

324 名前:デフォルトの名無しさん :04/03/05 23:24
オーナー指定したらオーナーの中央に表示されるよね。
フックもなんもないと思うのですが…。

325 名前:デフォルトの名無しさん :04/03/05 23:48
>>324
されないから問題ないわけで。

326 名前:324 :04/03/06 00:00
VC++スレと勘違いしておりますた…。ゴメン。
確かにSDKだとされないですね。むむむ。

327 名前:やよ :04/03/06 03:05
WMIをJavaで使うことはできますか?

328 名前:デフォルトの名無しさん :04/03/06 08:50
waveOutPauseを呼び出したあとwaveOutResetを経てwaveOutWriteを呼び出すと
PCMデータ再生の前に一瞬ノイズが発生するのですが、これの回避方法って知りませんか?
waveOutPauseとwaveOutResetの間で1[msec]でも時間が経過してると発生するようです。

[例]
 waveOutPause(hWaveOut);
 // この間に経過時間があるとノイズがはいる↓
 Sleep(1000);
 // この間に経過時間があるとノイズがはいる↑
 waveOutReset(hWaveOut);
 waveOutWrite(hWaveOut, &WaveHeader, sizeof(WAVEHDR)); // ここでノイズ発生

ちなみにのwaveOutWriteの替わりにwaveOutRestartでもノイズが発生しました。
waveOut関数でサウンドプレイヤーをと思ってましたが、一時停止→停止→再生という手順で
ノイズがでるので困ってます。

329 名前:デフォルトの名無しさん :04/03/06 11:24
>>328
プツッというノイズなら、サンプル値の不連続だろう。
停止の前後でフェードアウト・フェードインさせるとか、
補間用の中間値サンプルを捏造して挿入とか、
そういうのがいるんじゃないか?

330 名前:デフォルトの名無しさん :04/03/06 12:15
>328
多分デバイスの問題かと。
Resetしても一部のメモリが既に、
DirectSoundで言うところのプライマリサウンドバッファにコピーされてしまって、
キャンセルできない状態なんだと思う。

多分、その停止した状態で、別の音を鳴らすソフトを動かしてもノイズが出ると思うんだけど。

331 名前:デフォルトの名無しさん :04/03/06 12:27
こんにちは

ListView_(リスト関連API)の全リストが載ったサイトってありますか?
MSDN内を調べたのですが、見つかりませんでした。

332 名前:デフォルトの名無しさん :04/03/06 12:36
>>331
commctrl.h を読め

333 名前:デフォルトの名無しさん :04/03/06 12:48
>>331
SDKドキュメントブラウザで”ListView_”をキーワードに入力すれば大抵のはでてくるが。

334 名前:デフォルトの名無しさん :04/03/06 13:00
>>332
commctrlって、CE?

335 名前:デフォルトの名無しさん :04/03/06 13:03
>>334
( ゚д゚) <‥‥‥

336 名前:デフォルトの名無しさん :04/03/06 13:06
普通のwin32はcomctl32.hだと思ったが
気のせいだったか

337 名前:デフォルトの名無しさん :04/03/06 13:22
>>336
comctl32.lib
winmm.libとmmsystem.hとかもそうだよなぁ…

338 名前:デフォルトの名無しさん :04/03/06 13:56
>>278 遅レススマンがレジストリいじれば出来る。ポリシーでも出来たかも。 どのキーかは会社行かんとわからんので略。

339 名前:デフォルトの名無しさん :04/03/06 15:01
2つのスレッドが同じデータにアクセスする状況で
1つ目のスレッドは書き込みのみ、2つ目のスレッドは読み込みのみしか行わないのですが
「クリティカルセクション」とかを使わないとだめでしょうか。

340 名前:デフォルトの名無しさん :04/03/06 15:05
その読み書きがCPUにとってアトミックにできるなら、不要。
4バイト以下だったら大丈夫なはず。(64bit環境なら8バイト)
参考までに、Interlocked系のAPIを見てみてね。

341 名前:デフォルトの名無しさん :04/03/06 15:05
CriticalSectionを使うことをためらう理由は別にないだろう。

342 名前:デフォルトの名無しさん :04/03/06 15:05
>339
読み取りと書き込みをアトミックに行える状況でないなら、
変更中のものを読んでしまう場合があります。

OKな例
・普通のintやポインタの読み書き
・unix系のファイルシステムで、書き込み側がtmpファイルとrenameを使う場合読み込み側はロック不要
 (windows系はファイルエントリの扱いがアトミックかどうか明示してないので不明

343 名前:デフォルトの名無しさん :04/03/06 15:09
>>341
場合によってはあるだろ。

344 名前:デフォルトの名無しさん :04/03/06 15:22
みなさんレスどーもです。
CriticalSection使うことにします。ちょっと遅くなるとか聞いたんで。。
ありがとうございました。

345 名前:デフォルトの名無しさん :04/03/06 16:15
>>339
2CPU(HT含む)またはそれまで想定するときは、
それがたとえ1 DWORDであっても、クリティカルセクションを定義する必要があります。

また1CPUのときでも、たとえばDWORDがDWORD境界にないような場合は、
ひとつのインストラクションの途中でページフォルトが発生し得るので、
その例外処理が完了して中断していたインストラクションの実行を再開する準備が整ったとき、
プロセス内のどのスレッドが一番最初にCPUのスケジューリングを勝ち取るかは、
多分、そのときの運次第と思います。


346 名前:デフォルトの名無しさん :04/03/06 18:51
>>345
> 2CPU(HT含む)またはそれまで想定するときは、
> それがたとえ1 DWORDであっても、クリティカルセクションを定義する必要があります。

本当?


347 名前:デフォルトの名無しさん :04/03/06 19:01
>>345
1bitのフラグの場合はどう?だめ?

348 名前:デフォルトの名無しさん :04/03/06 19:21
>>345
前半は説明がないね。

後半、存在する側のページに
DWORDのたとえば半分だけが書き込まれることはないと思うけど・・・

しったか君かな?

349 名前:デフォルトの名無しさん :04/03/06 19:33
つーか、そんなDWORDを書き込むのはどこぞのCPUだけではないのかな?

350 名前:デフォルトの名無しさん :04/03/06 19:34
Win32では問題無いが
境界越えアクセスできないCPUと妙な実装のコンパイラのセットならありえるかも


351 名前:デフォルトの名無しさん :04/03/06 19:42
読み手が値を参照するだけならロック不要
値を参照してその値を更新するような書き手が複数いるんであれば要ロック


352 名前:デフォルトの名無しさん :04/03/06 19:43
ページフォールトの処理が完了する前にプロセス・スレッドを切り替えるようなOSは
あまり考えられないなー。そもそも Win32 API スレだしさ。

353 名前:デフォルトの名無しさん :04/03/06 20:24
>>351
マルチライトが危険でワンライト・マルチリードなら安全
という考えは一見、正解のようにも見えるが
リード中にライトされるとずっこける可能性があるよな

リード動作がどんな条件でアトミックかをつきとめ、
その条件がアプリ全体の前提環境と整合するかどうか
確認が必要だね


354 名前:デフォルトの名無しさん :04/03/06 20:33
>>353
そうだね。
多分だけど、実際には多分読み手(複数対応)のセマフォと書き手のセマフォを使う事になると思う。

355 名前:デフォルトの名無しさん :04/03/06 21:05
つか、APIレベルでリーダ・ライタロックが提供されてないのは微妙に不便だよな。
ACEあたりの使えばいいのかもしれんが。

356 名前:デフォルトの名無しさん :04/03/06 21:22
>>353
>リード中にライトされるとずっこける可能性があるよな
どういう可能性?

357 名前:デフォルトの名無しさん :04/03/06 21:48
アトミックじゃないとき。

358 名前:デフォルトの名無しさん :04/03/06 21:52
リード中にライト可能なメモリ持ったマシンって存在するの?
特にWin32が動くやつで。


359 名前:デフォルトの名無しさん :04/03/06 21:54
>>356
たとえば100KBのメモリを読み書きするとき

360 名前:デフォルトの名無しさん :04/03/06 21:54
>>357
それは、アトミックでないものをアトミックだと思って
使う奴が馬鹿なだけでは?コンパイラの実装とかも含めて。

361 名前:デフォルトの名無しさん :04/03/06 21:58
>>360
はぁ、そうだけど?

362 名前:デフォルトの名無しさん :04/03/06 22:01
DWORDとかポインタとかの話してるんじゃなかったのか?>>361
それじゃーーアトミックかどうかなんて考えるまでもないじゃん。

363 名前:デフォルトの名無しさん :04/03/06 22:05
>>362
そうだけど。
すまんがなんで一生懸命なのか、いまいちよくわかってないんだが。

364 名前:デフォルトの名無しさん :04/03/06 22:06
誰が一生懸命なの?

365 名前:346 :04/03/06 22:10
>>363
俺は少し一生懸命だったかも知れん。
もし345が本当だったら今から夜逃げしなくちゃいけないからな(w

366 名前:デフォルトの名無しさん :04/03/06 22:13
>>365
345は、さすがにネタだろうと思うよ。

367 名前:デフォルトの名無しさん :04/03/06 22:29
CreateProcessの第二引数はなんでconst付いてないの?
書き換わることあるの?
BOOL CreateProcess(
 LPCTSTR lpApplicationName,
 LPTSTR lpCommandLine,
  :(以下略)

368 名前:デフォルトの名無しさん :04/03/06 22:49
>>367
ソース嫁! ソース!


369 名前:デフォルトの名無しさん :04/03/06 23:11
確立が低いってのは通常ダメなんだよな
完全にゼロか、そうでなきゃリスク管理ができてないと

370 名前:デフォルトの名無しさん :04/03/06 23:18
で、ページ境界をまたがった書き込みはアトミックなの?
これに尽きると思うんだが誰も言わないねえ

371 名前:デフォルトの名無しさん :04/03/06 23:24
350、352じゃダメなの?>>370

372 名前:デフォルトの名無しさん :04/03/06 23:26
MMUはどこにいったんだ?

373 名前:デフォルトの名無しさん :04/03/06 23:29
ASMのコード吐き出して見りゃわかるべぇ。

374 名前:デフォルトの名無しさん :04/03/06 23:39
ページフォルトが起こるときはまだ命令の実行前でしょ。
だからメモリへの書き込み自体が行われていない。
当然、データの一部のみが書き込まれることなどあり得ない。

・・・はず。

375 名前:デフォルトの名無しさん :04/03/07 00:33
現在CD再生を行なうクラスを作成しています。

ボリュームをコントロールするのにオーディオミキサを使用し、
CDドライブ単位でコントロールをしたいと考えているのですが、
その方法が分かりません。

オーディオラインがどのドライブのモノなのか識別する方法は
無いのでしょうか?

376 名前:デフォルトの名無しさん :04/03/07 03:33
無い

377 名前:328 :04/03/07 04:04
>>328の経過
waveOutPause〜waveOutResetの間でSleep入れてましたが、
Sleepで間を置いてるからノイズが聞き取りやすかっただけで、
実際にはwaveOutPause→waveOutResetの手順をふむだけでノイズが発生してました。

このノイズ、どうやら直前まで再生していたPCMの音がほんの一瞬再生されるもののようです。

waveOutReset呼び出しの後、waveOutGetPositionで調べたら
再生位置はちゃんと0にリセットされてましたし何が原因なのかいまだに不明です。

ちなみに同じプログラムをふたつ実行させると、片方でPCMが再生されている間は
ノイズは発生しませんでした。

378 名前:デフォルトの名無しさん :04/03/07 04:23
Microsoft Win32 と Microsoft .NET Framework API との対応
ttp://www.microsoft.com/japan/msdn/net/general/win32map.asp

いつまでもWin32API使ってねぇで
.NET Frameworkに移行しろやゴルァ!ってこと?

379 名前:デフォルトの名無しさん :04/03/07 08:59
>>378
まだまだ、半分くらいは対応出来てませんスミマセンってこったろ。

380 名前:デフォルトの名無しさん :04/03/07 14:06
>>377
サウンドのデバイスドライバが原因かもしれん

381 名前:デフォルトの名無しさん :04/03/07 17:35
Microsoft .NET Framework API ってWinFXと同じなの?

382 名前:375 :04/03/07 22:25
>>376
可能ならばCDクラス内にボリュームメソッドを実装させたいと考えていたのですが、無いなら仕方ないですね。
ミキサクラスを作って実装させる事にします。
ありがとうございました。

383 名前:デフォルトの名無しさん :04/03/07 22:35
キャッシュ可能メモリへのアクセスで、バス幅、キャッシュ・ライン、ページ境界をまた
がっているものは、アトミック操作が保証されない。Pentium 4 プロセッサおよびP6 ファミリ・
プロセッサは、外部メモリ・サブシステムによってこのようなスプリット・アクセスをアト
ミック操作にできるようにするバス制御信号を備えているが、アライメントの合っていない
データ・アクセスを行うとプロセッサの処理能力に重大な影響を及ぼすため、使用を避けるべ
きである。

384 名前:デフォルトの名無しさん :04/03/07 22:50
>>383
ソースを明示しようね!

385 名前:デフォルトの名無しさん :04/03/07 23:19
「インテル・アーキテクチャ
ソフトウェア・ディベロッパーズ・
マニュアル
下巻:
システム・プログラミング・ガイド」の7-3

どこにリンクされているかは、ちょっと分からない。
ググればあるかも。

386 名前:デフォルトの名無しさん :04/03/07 23:25
普通にアライメントきっててそんな境界にまたがるもんなの?

387 名前:デフォルトの名無しさん :04/03/07 23:31
ありえるとしたら、メモリマップトファイルかなあ。
ファイルに格納するときって、アラインあんまり気にしないし・・・

388 名前:デフォルトの名無しさん :04/03/07 23:33
>>385
http://developer.intel.com/design/Pentium4/documentation.htm

389 名前:デフォルトの名無しさん :04/03/07 23:47
ttp://assist.net.fukushima-u.ac.jp/~taka/doc/IA32/IA32_Man3_system-programming-guide.pdf

日本語版。

390 名前:デフォルトの名無しさん :04/03/08 03:23
> The variable pointed to by the Addend parameter must be aligned on a
> 32-bit boundary; otherwise, this function will fail on multiprocessor x86
> systems and any non-x86 systems.
ユニプロセッサのx86なら問題なし

391 名前:デフォルトの名無しさん :04/03/08 06:13
>>390
でも、WinXPでの動作を前提にマルチスレッドで書くなら
まずいっしょ。

392 名前:278 :04/03/08 10:38
レスくれたみなさんありがとうございます。まだ解決はしていませんが
途中経過を報告します

>>284
当面、タスクマネージャーが立ち上がらなくなれば良いので試してみたのですが
WH_SHELLのHSHELL_TASKMANは、hookプロシージャーに送られて来ず駄目でした

>>295
アドバイスありがとうございます。NT系でのCtrl+Alt+Delの無効化って、msgina.dllを
置き換えるんですよね?
取り敢えず、最後の手段として他の方法を摸索してみます

>>338
レジストリをいじれば可能なんですか、ありがとうございます(ポリシーはちょっと
見てみたのですが出来ないようです)
ところで、設定に使われているレジストリキーの詳細な内容が解説されているサイトか
書籍があれば紹介して頂きたいのですがご存じないでしょうか?


393 名前:デフォルトの名無しさん :04/03/08 10:38
アライメントが合ってないなんて意識的に#pragma packするか
387の言うようにメモリマップドファイルの時くらいじゃないの?
だから、あまり気にならないな。

394 名前:デフォルトの名無しさん :04/03/08 10:59
質問です。
ダイアログ上に配置されたすべてのコントロールの大きさを
一定の比率で動的に変化させる便利な方法があれば教えてください。
例えば、ダイアログ自体が WM_SETFONT を受け付けてくれれば
よかったのですが、残念ながら動作してくれないようなので…。

395 名前:デフォルトの名無しさん :04/03/08 11:50
メモリマップトファイルは必ず64KB境界にマップされたような

396 名前:デフォルトの名無しさん :04/03/08 12:28
>>395
ファイルの中にあるDWORDデータとかのアライメントの話。

397 名前:デフォルトの名無しさん :04/03/08 12:33
質問です。
WinMain関数の中で、ウインドウクラスの登録とウインドウの作成の処理を
別関数にして行っているものがあります。
↓こんな感じ
int WinMain
{
  MyRegisterClass()←ここでウインドウクラスの登録
  InitInstance()←ここでウインドウの作成
  メッセージループ
}

上のMyRegisterClass関数の中で、たいていは
  WNDCLASSEX wc; ←関数内のローカル変数になっている。
  wc.member=hogehoge;
  RegisterClassEx(&wc);
なんて感じになってるんですが、
クラスを登録してしまった後は、このwcは破棄してしまってよいのでしょうか?
あとでウインドウを作成するときにクラスの名前は必要ですが、
この構造体自体は不要?
動くには動いていますが、ちょっと不安になった。

398 名前:278 :04/03/08 12:36
>>>284
>当面、タスクマネージャーが立ち上がらなくなれば良いので試してみたのですが
>WH_SHELLのHSHELL_TASKMANは、hookプロシージャーに送られて来ず駄目でした

の追記です。
上記の操作はAppDesktopWindowのHookで、Ctrl+Alt+Delで呼び出されるLoginDesktopWindowとは
スレッドが違う為にHookできないという風に理解したんですが、あってますか?

もしそうなら、LoginDesktopWindowやScreensaverDesktopWindowのハンドルを取得できればHook
出来そうな気がするんですが、方法は無いんでしょうか?




399 名前:デフォルトの名無しさん :04/03/08 13:35
>>397
wcの情報はWindows側にコピーされているから大丈夫

400 名前:デフォルトの名無しさん :04/03/08 14:06
質問失礼します。

現在マルチスレッドのプログラムを組んでいて、
メインループの一部で
EnterCriticalSection(&cs);
data.state = state;
LeaveCriticalSection(&cs);

スレッドのwhileループ内で
EnterCriticalSection(&cs);
State state = pData->state;
LeaveCriticalSection(&cs);

としているのですが、何故かメインループ内のstate(代入した方)の値の一部が異常になります。
上のどちらか一方をコメントアウトしてやると正常値を示すので
ここが原因ではないかと思うんですが、メインループのほうを
State s = state;
data.state = s;

のようにしても結果は同じでした。ほかの箇所が原因なんでしょうか?
もちろんpDataはdataへのポインタで、Stateは自作のクラスです。

プログラミング初心者でマルチスレッドは初めてなもので、
上のコードに問題があるのかどうか全く分かりません。
皆さんの考えをお聞かせください。

401 名前:デフォルトの名無しさん :04/03/08 14:16
>>400の説明意味わからないし、APIには関係ないし
プログラムのミスだと思うのでよく確かめてください


402 名前:デフォルトの名無しさん :04/03/08 14:40
ところで cs はどこで宣言してるの?

403 名前:デフォルトの名無しさん :04/03/08 15:44
>>394
よくわかんないけど、ダイアログベース単位とか使うのは?

404 名前:400 :04/03/08 16:42
>>401
さっきから確かめていますがまだ分からないです。
気長にチェックしてみることにします。

>>402
グローバル変数にして、WM_CREATEのところでInitializeしてます。

405 名前:デフォルトの名無しさん :04/03/08 16:50
>>404
マルチスレッド対応のランタイムライブラリを使用していないとか

406 名前:400 :04/03/08 16:52
なんでしょうかそれ?
してないかもしれません・・・。
どうやればいいんですか?

407 名前:デフォルトの名無しさん :04/03/08 17:03
VC++.NET2003なら
メニューの[プロジェクト]-[(プロジェクト名)プロパティ]からダイアログ表示して
[構成プロパティ]-[C++]-[コード生成]のページにランタイムライブラリの項目がある

408 名前:400 :04/03/08 17:09
>>407
レスどうもです。
シングルスレッドのままだったので修正しました。
でもまだ直りません。
プログラム上のミスとのことなので地道に調べてみます。

409 名前:デフォルトの名無しさん :04/03/08 17:19
>>408
volatileをつけてみれたら?

410 名前:デフォルトの名無しさん :04/03/08 17:22
あとは、CreateThread使ってるなら、_beginthreadex使うとか

411 名前:デフォルトの名無しさん :04/03/08 17:46
_beginthreadexは過去との互換性のために残されてるだけなので
スレッド内でCランタイム関数を使わない場合CreateThreadで動くはず

412 名前:デフォルトの名無しさん :04/03/08 18:09
Cランタイムを使う場合はどうするんですか

413 名前:デフォルトの名無しさん :04/03/08 19:34
_beginthreadex使うとか


414 名前:デフォルトの名無しさん :04/03/08 19:41
>>400
知恵が足りないときはデバッガで「なぜか変更される値」のアドレスにウォッチ仕掛けて、
いつ変更されるのか見てみれば?やり方はマニュアル読んで。
漏れも再現性高くてロジック追うの面倒なときはよくやるよ。

415 名前:デフォルトの名無しさん :04/03/08 19:59
>400
>EnterCriticalSection(&cs);
>data.state = state;
>LeaveCriticalSection(&cs);
このメイン側のstateはどこから来てるねん?


416 名前:デフォルトの名無しさん :04/03/08 21:56
>>400
> 値の一部が異常になります。
> Stateは自作のクラスです。

具体的にはどんな型のデータがおかしくなるん?
ちゃんと代入演算子のオーバーロードしてないとかは?

417 名前:デフォルトの名無しさん :04/03/08 23:00
DeviceIoControl()でIOCTL_STORAGE_GET_MEDIA_TYPESを
しようとすると内蔵FDD以外でERROR_INVALID_FUNCTION
になるんですがそういうものなんですか?

418 名前:デフォルトの名無しさん :04/03/08 23:05
CreateProcess の仕様について、ご存知の方がいらっしゃいましたら、確認させてください。

・NTから存在するコマンドライン文字列の長さ制限は、
 UNICODE_STRINGのLengthがUSHORTになっていることに由来するもので、
 呼び出し側の工夫で回避することは不可能。
・引数(実行ファイル部を除く)部分のクォート処理は、
 OS自体に仕様はなく、C言語スタートアップの実装に依存する。

以上のような理解で問題ないでしょうか?

419 名前:394 :04/03/08 23:24
>>403
レスをどうもありがとうございます。
質問の意味が分かりにくかったかもしれません。

複数の子ウィンドウの位置とサイズを動的に変更したい場合、
DeferWindowPos() 系が使えますが、汎用的なコーディングをしようとすると、
まず EnumChildWindows() 等で全ての子ウィンドウを列挙する必要があり、結構面倒です。
もしかすると対象がダイアログ上のコントロールの場合には
もっと楽な方法があるんじゃないのかな、と思ったものですから…。

420 名前:デフォルトの名無しさん :04/03/08 23:32
> ・NTから存在するコマンドライン文字列の長さ制限は、
> UNICODE_STRINGのLengthがUSHORTになっていることに由来するもので、
> 呼び出し側の工夫で回避することは不可能。
それはCreateProcessじゃなくて、BSTRの話。
M$製の多くの開発ツールは"@ファイル名"を実装することによって回避している。

> ・引数(実行ファイル部を除く)部分のクォート処理は、
> OS自体に仕様はなく、C言語スタートアップの実装に依存する。
御意。

421 名前:デフォルトの名無しさん :04/03/08 23:44
>>418
CreateProcessって時点でOSはWindowsに限定だろ
OS自体に仕様はなくって発想には正誤とは無関係に問題があるぞ
link.exeのオプションあたり調べてみなって

422 名前:デフォルトの名無しさん :04/03/09 01:17
>>420
BSTRとUNICODE_STRINGは別物だが…
Win32 APIのレベルではLPCSTRでもネイティブAPIまで降りてくると
UNICODE_STRINGで管理されてるから無理って話でしょ

423 名前:デフォルトの名無しさん :04/03/09 02:43
質問です。文字がユニコードだとMSゴシックは駄目なんですか?
いろいろやっても明朝っぽいんですけど

424 名前:400 :04/03/09 06:03
原因がわかりました。単純なミスでした。

おかしくなる値はint型だったのですが、
その計算の過程でStateのメンバーのポインタ変数を
代入処理後も初期化無しで参照していました。

全然APIと関係なかったですが、おかげさまで解決しました。
いろいろアドバイスをくれた皆様、どうもありがとうございました。

425 名前:デフォルトの名無しさん :04/03/09 06:06
オーナードローボタンを作ったら、
ダブルクリックに判定されたクリックの時に、
WM_DRAWITEMが送られないんだけどなんとかする方法ありますか?

426 名前:デフォルトの名無しさん :04/03/09 10:56
すみません、GINAの仕様を日本語で読みたいのですが、
どこかよいサイトをご存じないでしょうか?
Web上に無ければ、5K円位までなら書籍でもかまいません。
識者の方よろしくお願いします。

427 名前:デフォルトの名無しさん :04/03/09 12:25
>>398
だからそんな事が出来たらスー(ry

マジレスするとLoginDesktopWindowやScreensaverDesktopWindowとは
デスクトップ自体が違うので、どうがんばっても取得できないんですよ。


428 名前:デフォルトの名無しさん :04/03/09 12:30
>>426
これじゃダメ?
ttp://www.cisnet.or.jp/home/tsuneoka/win32tech/6.html


429 名前:デフォルトの名無しさん :04/03/09 13:12
>>398
じゃあ、WH_CBTのHCBT_CREATEWNDは?
これもできるか知らんけど。

430 名前:みー :04/03/09 14:47
プリンタステータスの監視をするプログラミングを書くにはどのようなAPIを使えばいいでしょうか?


431 名前:デフォルトの名無しさん :04/03/09 14:51
>>429
もういいから藻前はMSDNのWindowStationとDesktopの項を
100回読み終えるまで帰ってくるな

432 名前:デフォルトの名無しさん :04/03/09 14:56
>>430
GetPrinter(), GetPrinterData(), OpenPrinter() あたりじゃないか?


433 名前:デフォルトの名無しさん :04/03/09 15:02
ステータスがインク残量とかそういうレベルであれば、WIN32APIだけで
どーこー出来る話ではないな。

434 名前:みー :04/03/09 15:13
電源の状態とか印刷中とかアイドル中とか、そういうことを取得したいと思っています。


435 名前:デフォルトの名無しさん :04/03/09 15:36
>>434
EnumJobs()かな?
電源はしらない


436 名前:デルファイの名無しさん :04/03/09 16:50
こんにちわ。

PCに存在するCOMMポート、およびその名前の列挙方法を教えてください。

とあるCOMMポートをつないで操作するプログラムを組みたいんですが、
USB−COM変換ケーブルを使おうと思います。
そこで、その変換ケーブルの名称から、COMMポート番号を割出すことが
出来たらなあ、とおもっております。

よろしくおねがいします。


437 名前:デフォルトの名無しさん :04/03/09 17:02
間に仮想COMドライバが入って普通のCOMと同様に
扱われるはず

デバイス名COM**でCreateFileして使えるか使えないか
調べるのは駄目ですか?
特殊なことをしない限りCOM1〜9を探せばOKだと思うし

438 名前:デフォルトの名無しさん :04/03/09 17:12
>>436
COMポートの列挙は>>437の言うとおり、
COMxを片っ端からCreateFileしていくか

レジストリの
「HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm」
に格納されてる。

デバイスの名前はGetCommPropertiesで取得できる・・・と思う

439 名前:デフォルトの名無しさん :04/03/09 17:51
IMEの扱い方がわかりません。
いいページありますか?

440 名前:デフォルトの名無しさん :04/03/09 19:33
>>431
ここは、あなたのような煽る事しかできない優秀な方の来るところではありません
有益な情報を提供できる人の来るところです

441 名前:デフォルトの名無しさん :04/03/09 19:35
>>431
言葉が足りなかったか?
元々の目的がタスクマネージャの起動阻止だったから、>>429の方法で
タスクマネージャのウィンドウを破棄すれば実現できないかと思ったんだが…

とりあえず、>>429の方法で全ウィンドウ破棄するよう組んで試したところ
起動阻止はできた。
だが、問題はタスクマネージャのウィンドウを特定することかもしれん。

クラスで判断しようにも共通ダイアログクラスだし、キャプションもフックの時点
では、まだ設定されていないみたいだし。

442 名前:デルファイの名無しさん :04/03/09 19:43
>>437,>>438

ありがとうございます。

それをキーにしてさがしてきます。

ではでは



443 名前:397 :04/03/09 19:52
>>399
ありがとう。遅レススマンコ。
これで安心して、MyRegisterClassから抜けられます。

444 名前:デフォルトの名無しさん :04/03/09 21:27
GetWindowThreadProcessId
OpenProcess
EnumProcessModules
GetModuleFileNameEx
taskmgr.exeと文字列を比較

445 名前:デフォルトの名無しさん :04/03/09 22:52
猫サイトで、
HWND hDlg
をいきなりゼロじゃないかを見てるんですけど、
確かにデバッグしてみると、宣言直後は必ずゼロ
になっています。
HWNDクラスって、コンストラクタで値を初期化してるのでしょうか?


446 名前:デフォルトの名無しさん :04/03/09 22:53
>>445
static 変数や、外部変数でなくてか?

447 名前:445 :04/03/09 22:58
>>446
外部変数です。
外部変数は0で初期化されるのですか?

448 名前:デフォルトの名無しさん :04/03/09 23:02
>>447
メモリ・イメージとしてゼロクリアされる
まがWindows環境ならNULLと考えても
おそらく差し支えはなかろうが
俺はそういうの嫌いだから

HWND hDlg = NULL;

と書くようにしてる

449 名前:デフォルトの名無しさん :04/03/09 23:04
> メモリ・イメージとしてゼロクリアされる

ちがうよ。 =0 と同じになるんだよ。

450 名前:デフォルトの名無しさん :04/03/09 23:07
>>448-449
どうもです。
納得できました。
あやふやのまま進めなかったもんで・・・

451 名前:デフォルトの名無しさん :04/03/09 23:10
>>449
釣りか?

452 名前:デフォルトの名無しさん :04/03/09 23:42
>>448
不要な初期化でもさぼらない心がけはよいが、
根拠がまちがっている。
ttp://www.catnet.ne.jp/kouno/c_faq/c1.html#30

453 名前:デフォルトの名無しさん :04/03/10 04:12
AnimateWindowで非表示にしてもタスクバーのボタンが消えないのは何で?


454 名前:デフォルトの名無しさん :04/03/10 11:41
HWNDクラスには誰も突っ込まんのかw

455 名前:デフォルトの名無しさん :04/03/10 11:44
MFCを使わないでExcelを操作するサンプルありませんか?

456 名前:デフォルトの名無しさん :04/03/10 11:49
操作は出来ます
サンプルはしりません('A`)

457 名前:デフォルトの名無しさん :04/03/10 12:07
そりゃ、できるでしょうけど

458 名前:デフォルトの名無しさん :04/03/10 12:13
OLEVariantはMFC?

459 名前:デフォルトの名無しさん :04/03/10 12:35
CoCreateInstance()とか

460 名前:デフォルトの名無しさん :04/03/10 12:57
system("excel.exe");


461 名前:デフォルトの名無しさん :04/03/10 14:28
>>455
ググれば山のように出てくる。
ttp://www.google.co.jp/search?num=30&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&q=Excel+vc&lr=lang_ja


462 名前:デフォルトの名無しさん :04/03/10 21:05
Win32 API のファイルI/Oにテキストモードという概念は無いのでしょうか?


463 名前:デフォルトの名無しさん :04/03/10 21:09
>>462
大人しくfopenつかっとれ

464 名前:デフォルトの名無しさん :04/03/10 21:12
>>463
みなさん大人しくfopen使ってるんすかねー?


465 名前:デフォルトの名無しさん :04/03/10 21:22
改行コード変換するだけならどうにでもなるような

466 名前:デフォルトの名無しさん :04/03/10 21:30
>>464
使ってる。ローカルファイルの一般的な展開にわざわざWin32APIを使うのは稀。
MFCのCFile系統も必要なし。
将来の別プラットホームや別プロジェクトへの移植も考えると、C標準でほぼ十分。

467 名前:デフォルトの名無しさん :04/03/10 21:31
>>464
俺はテキストモード使わないな。必要なら自分で変換する。
勝手に変換されるのが気持ち悪いんでね。

468 名前:デフォルトの名無しさん :04/03/10 21:37
>>464
もちろん。
エンドユーザレベルからアナログ回路まで
抽象度の高い順に選んで使う。

469 名前:462 :04/03/10 21:42
fopen() じゃ GetLastError() は使えないですよね

470 名前:デフォルトの名無しさん :04/03/10 21:43
どなたかご存知の方がいらしたらご教授お願いします。
エクスプローラ→フォルダオプション→表示→詳細設定にある項目について
レジストリの該当部分を直接変更した後、現在開いているウィンドウに対しても即座に
変更を反映させたいと考えています。(すなわち[適用]ボタンを押すのと同じことをプログラム
で実現したいと考えています)
・SHChangeNotify(SHCNE_ALLEVENTS, 0, NULL, NULL); 引数色々変えても駄目
・SHGetSetSettings win9xで使えない。即座に反映しない。
・SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); 駄目
・explorer.exe再起動 ウィンドウが閉じてしまう。不安定になる。
と色々試しましたがことごとく駄目でした。
どなたか同様のことを実現された方はいらっしゃらないでしょうか?

471 名前:デフォルトの名無しさん :04/03/10 21:57
>>469
Cランタイム関数のエラーコードはerrnoを見れ。

472 名前:470 :04/03/10 22:01
補足です:
F5では即座に反映されないようです。
同様にIShellView Refreshも駄目のようです。

473 名前:デフォルトの名無しさん :04/03/10 22:15
ES_MULTILINE, WS_HSCROLL, WS_EX_CLIENTEDGEで作成したエディットは
複数行で水平スクロールバーがあって端がへこんでいるような見かけですが、
エディットの中にちょうどフォントが10個ぶん縦に並ぶような高さは
どうすれば求められるのでしょうか?

edit_h = font_h * 10 + GetSystemMetrics(SM_CYEDGE) * 2
            + GetSystemMetrics(SM_CYHSCROLL)

このedit_hでCreateWindowEx()したのですが
なんだかおかしいようなのです


474 名前:デフォルトの名無しさん :04/03/10 22:47
>>470
>・SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); 駄目

Windows2000以降は、HWND_BROADCASTは使えないよ。
EnumWindows()などを使って個別にメッセージ送信してみたら?
解決する保証はしないけどね。

475 名前:デフォルトの名無しさん :04/03/10 22:59
他のプログラムへのパケットを見るAPIってあります?

476 名前:デフォルトの名無しさん :04/03/10 23:16
>>475
なんてことを聞く香具師はパケットを覗いても意味わからんと思う。

477 名前:デフォルトの名無しさん :04/03/10 23:29
勉強したいんで教えてください。fook?hookとかかなと思って
ググってますけどそれらしきのでてこなかったです。


478 名前:デフォルトの名無しさん :04/03/10 23:34
ドライバを使わないパケットダンプ
で検索しる

479 名前:デフォルトの名無しさん :04/03/10 23:40
ttp://homepage2.nifty.com/spw/tips/PacketDump.html
にたどり着きました!!ありがとうございます。


480 名前:470 :04/03/11 01:29
EnumWindows()で個別に送っても駄目でした。
SendMessage(HWND, WM_SETTINGCHANGE, 0, 0);
自体に効果がないようです。

ユーティリティ系のソフト作成において結構需要のあることだと考えていましたが、
これだけ探して見つからないということはそうでもないようですね(泣)

481 名前:デフォルトの名無しさん :04/03/11 02:22
マウスボタンが押されていない状態で現在のマウスポインタの位置の最前面の可視の
ウィンドウを取得したいのですが、何を使えばいいんでしょうか。


482 名前:デフォルトの名無しさん :04/03/11 02:32
>>481
GetCursorPos()
WindowFromPoint()
ChildWindowFromPointEx()

483 名前:481 :04/03/11 03:15
ありがとうございます。できました。

484 名前:328 :04/03/11 17:42
>>328>>377のその後
waveOutPause→waveOutReset→waveOutWriteという流れで関数を呼び出した時に
ノイズ(waveOutPauseで一時停止する寸前の音と思われる)が出る現象は
読み込んでいたドライバが悪いのではという方向に収束しています。
ちなみに自分の環境はWindows2000 ,K7S5A(Sis 7012)

とりあえず次のように変更してみました。
一時停止状態にするには、始めにボリュームを保存し無音状態に設定、Sleepで時間待ちをしたあとwaveOutPauseの呼び出しをする。
そのまま停止状態に移行するにはwaveOutResetのあとボリュームを元に戻し、
反対に一時停止を解除するにはボリュームを元に戻したあとwaveOutRestartを呼び出すと
自分の環境下でもノイズが発生することなく再生されました。

[一時停止]
DWORD Volume;
waveOutGetVolume(hWaveOut, &Volume);   // ボリュームの保存
waveOutSetVolume(hWaveOut, 0x00000000); // ボリュームを無音に設定
Sleep(30);                       // 時間待ち
waveOutPause(hWaveOut);            // 再生一時停止

[停止]
waveOutReset(hWaveOut);           // PCMの再生停止
waveOutSetVolume(hWaveOut, Volume);  // ボリュームの復帰

[一時停止解除]
waveOutSetVolume(hWaveOut, Volume);  // デバイスのボリューム復帰
waveOutRestart(hWaveOut);         // PCM一時停止の解除

485 名前:デフォルトの名無しさん :04/03/11 19:07
ファイルからアイコンを抽出しようとしています。
exeやdllはLoadLibraryEx→EnumResourceNamesで列挙に成功したのですが、
iclだとLoadLibraryExのところで失敗します。
何か別な方法を使わないといけないのでしょうか?

486 名前:デフォルトの名無しさん :04/03/11 19:37
おとなしくResourceHackerを使えば

487 名前:485 :04/03/11 19:58
アイコンそのものが目的ではなく、アイコンを抽出する手段が目的なので。

488 名前:デフォルトの名無しさん :04/03/11 20:40
>>485
LOAD_LIBRARY_AS_DATAFILEは指定してるの?

489 名前:デフォルトの名無しさん :04/03/11 20:45
>>485 .DLLにリネームしたら出来る?

490 名前:485 :04/03/11 21:09
>>488
指定してますがダメみたいです。
こんな感じですよね?
hModule=LoadLibraryEx(lpFileName,NULL,LOAD_LIBRARY_AS_DATAFILE);

>>489
変更してみましたがダメでした。


491 名前:デフォルトの名無しさん :04/03/11 21:11
実はiclという拡張子なだけの、わけわかんないファイルだとか。

492 名前:デフォルトの名無しさん :04/03/11 22:07
>484
それだと一時停止のPause呼び出しの後に、ボリュームを戻した方が良いんでないの?

個人的にはデバイスボリュームをユーザーの指示以外で操作するのは、
他の音を鳴らすプログラムにも影響を与えるから、あまり好ましくないと思う。

493 名前:デフォルトの名無しさん :04/03/12 09:29
というか、 waveOutPause や waveOutResetは使った事がないや。
音切れしない小さなブロックに別けて、コールバック毎にwaveOutWriteで小さく送ってる。

494 名前:デフォルトの名無しさん :04/03/12 23:03
しょうもないことを教えてほしいのですが、最新のPlatform SDKはどうやったら入手できるのでしょうか?

495 名前:デフォルトの名無しさん :04/03/12 23:16
バッファが小さいと処理負荷に対する耐久力が気になる。
SetThreadPriority()でTHREAD_PRIORITY_TIME_CRITICALにすれば良いのか?

確かに自前ミキシングとか考えた場合なんかも、
できる限りバッファを小さくするべきなんだろうけど。


>494
ここか?
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
ちょっとググったらすぐ見つかったぞ。

496 名前:デフォルトの名無しさん :04/03/12 23:16
http://www.google.co.jp/search?q=platform+sdk+download&ie=UTF-8&oe=UTF-8&hl=ja&lr=

497 名前:デフォルトの名無しさん :04/03/12 23:20
>>494
せめて>>1に書いてあることくらいやれよ

498 名前:デフォルトの名無しさん :04/03/12 23:48
>>497
Super Thanks!!

499 名前:デフォルトの名無しさん :04/03/12 23:57
Longhornになると新しいWin32APIって追加されるのでしょうか?
それとも.NETのライブラリが増えるだけ?

500 名前:デフォルトの名無しさん :04/03/13 00:07
>>499
されない。WinFXに移行する。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.