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


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

Win32API 質問箱
251 名前:248 :01/09/23 00:47
>>250
残念でした。それは実は間違ってるんだよ。

ウソだと思ったら↓のサンプルをよぉ〜く見てみれ。
(探すの、苦労したんだからぁ...)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmgmt/html/msdn_hooks32.asp

このサンプル中の hooksdll.c は共有セクションを作ってるが、
その中にフックハンドルなんて含まれてないだろ?

ってことはつまり、
フックプロシージャが CallNextHookEx を呼び出すときは、
フックハンドルはいつも NULL ってことだ。

だから、グローバルフックでは CallNextHookEx に NULL を渡すのが正解。

…ってゆーか、フック「ハンドル」ではあっても、フック「ID」ではないので、
フックハンドルは他のプロセスでは無効なんだよ。


これ以外にも、Dr.GUI が同じことを書いてた。
でもこちらは URL は見つけられなかった。(スマソ)

252 名前:デフォルトの名無しさん :01/09/23 01:40
>251
ということは
http://hp.vector.co.jp/authors/VA016117/hook.html

http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
みたいにフックハンドルを共有領域に入れてるのは間違いってことですか?
よく見かけるんですが。

253 名前:デフォルトの名無しさん :01/09/23 01:52
>>251
ほんとだ。スパイのソース見たらちゃんと書いてあったよ。
// Note that CallNextHookEx ignores the first parameter (hhook) so
// it is acceptable (barely) to pass in a NULL.
だって。

いまから自作ツールを直そうっと。

254 名前:   :01/09/23 03:30
別アプリのWindowの子ウインドウとして登録したいのですが、
CreateWindowのhwndParentに設定するだけでは駄目なのでしょうか?
ヒントだけでもお願いします。

255 名前:デフォルトの名無しさん :01/09/23 03:35
>>252
共有領域で共有してもバグにはならない。
ただしいつも定数(NULL/0)なので共有する意味がない。

256 名前:デフォルトの名無しさん :01/09/23 03:57
StretchDIBitsがjpegに対応してるらしいのですが、
全然うまくいきません。
そもそもlpBitsのところに渡すバッファが何かわかりません。
ファイルのデータそのもの?

http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpgdipf/_win32_stretchdibits.htm

257 名前:デフォルトの名無しさん :01/09/23 04:46
外部からRebarにバンドを追加するのは無理なのかな?
RB_INSERTBANDしても必ず-1が返ってくるのだけど・・・。

258 名前:デフォルトの名無しさん :01/09/23 05:18
>…ってゆーか、フック「ハンドル」ではあっても、フック「ID」ではないので、
>フックハンドルは他のプロセスでは無効なんだよ。

それは嘘。フックはUSERオブジェクトだからウィンドウハンドル
なんかと同じでプロセス間でグローバル。

>>255
共有領域に値を入れてたらいつでもNULLにはならないと思うが。

259 名前:デフォルトの名無しさん :01/09/23 05:32
>>256
BITMAPINFOHEADER::biCompression

>>257
フックすれ。同じプロセス内に潜り込まないとダメ。

260 名前:デフォルトの名無しさん :01/09/23 05:39
>>259
すみません。力不足でよくわかりません。
BI_JPEGを設定しろということでしょうか。

261 名前:デフォルトの名無しさん :01/09/23 05:52
>>260
ていうかそもそもJPEG画像をどうやって用意してるんだ。
lpBitsに渡すのはDIBSECTIONで作られたものに他ならない。

262 名前:デフォルトの名無しさん :01/09/23 12:48
>>261
そのJPEGのDIBSECTIONというのがよくわかりません。
普通のDIBは表示できています。
JPEGのイメージ部分だけをもってこいということでしょうか。
ヘッダごと渡す必要があると思っているのですが。

263 名前:デフォルトの名無しさん :01/09/23 21:26
>>262
だーかーらー、MSDN読んでもわからなかったら首吊って誌ね。

264 名前:デフォルトの名無しさん :01/09/24 04:03
唐突な質問なのですが、
自分自身のプログラムを終了させて、再起動(自分自身を)させる
方法はありますか?
(さきに自分をもう1つ起動させてから終了するというのはなしです(笑)

どうかおしえてください

265 名前:デフォルトの名無しさん :01/09/24 04:06
256じゃないけど詳しい人教えてくれ >>259 >>261

・StretchDIBitsなどでJPEG、PNGが扱えるのは
 出力先のDCがプリンタDCの時だけでは無いのか?

・BI_JPEG、BI_PNGで指定できるのは普通のJPEG、PNGファイルなのか
 それとも圧縮方法が違うBMPファイルの一種なのか?

266 名前:デフォルトの名無しさん :01/09/24 10:21
>>264
なんかDelギコのところで話してるバッチファイル経由ってのはどう?

267 名前:デフォルトの名無しさん :01/09/24 12:13
>>264
fork する。

268 名前:264 :01/09/24 16:29
>>266
なんとなく想像はつくのですが、MS-DOSプロンプトが一瞬立ち上がる
わけですよね?それとWindows2000ってMS-DOSプロンプト使えましたっけ?

>>267
fork、なんですか?それは

269 名前:デフォルトの名無しさん :01/09/24 17:07
>>268
コマンドプロンプトはありますよ。cmd.exe, command.com 両方。fork() は UNIX の
話だから無視して良いでしょう。(しかも要件満たしてないし)

ところで、なんでプログラムを「終了」してから「再実行」させたいのですか? 目的
を書いた方が、適切な手段についてアドバイスを受けられる可能性が高いかと。

270 名前:デフォルトの名無しさん :01/09/24 17:26
起動プログラムを実行
自分終了
起動プログラムから自分再始動
ではいかんのか?

271 名前:264、268 :01/09/24 23:38
>>269

プログラムの起動時に読み込むインターフェイス設定(ルックス)を、途中で
切り替えた際に適切に入れ換える(いったん現在のボタンインターフェイスなどを
破棄、生成)のが大変なので、いっそのことプログラムを再起動させようと
思ったわけです。(手抜きです(^_^)

>>270
シンプルで、意外と結構いいかもしれませんね

272 名前:デフォルトの名無しさん :01/09/25 02:47
>>271
それは根本的にプログラムの設計が間違っていると思われ

>>270
それだったら、自分自身がランチャになっても良いじゃん

273 名前:デフォルトの名無しさん :01/09/25 07:26
スレッドハンドルからスレッドがSleep状態かどうか、調べる方法ありませんか?

274 名前:デフォルトの名無しさん :01/09/25 07:27
あ、Sleepじゃなくて、Suspendです

275 名前:デフォルトの名無しさん :01/09/25 08:02
>>273-274
一度 SuspendThread して返値を見てから
ResumeThread して戻しておくとか。

276 名前:デフォルトの名無しさん :01/09/25 16:43
プログラムを実行するときに他のファイルをドロップする物がありますが、
そのファイル名を取得するにはどうしたらいいでしょうか?

277 名前:デフォルトの名無しさん :01/09/25 17:02
>>276
実行するときならコマンドラインを嫁

278 名前:デフォルトの名無しさん :01/09/25 17:57
起動後なら
 DragAcceptFiles

起動前ならコマンドラインで普通はいいけど
 大量のファイルの場合は渡せるファイル数に制限があるから
 シェルエクステンションを使う方がいいかもね

279 名前:デフォルトの名無しさん :01/09/26 17:07
質問です。CreateWindowで作成したボタンのキャプションの文字のフォント
を変更するのってどうやって実現するのでしょうか?

280 名前:デフォルトの名無しさん :01/09/26 17:09
今だ!280番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

281 名前:デフォルトの名無しさん :01/09/26 17:22
今だ!281番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
   
∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

282 名前:281 :01/09/26 17:22
ずれた。スマソ。

283 名前:デフォルトの名無しさん :01/09/26 18:51
いや、スマソじゃなくて質問か答えを書こうぜ…(w

284 名前:デフォルトの名無しさん :01/09/26 22:29
>279
CreateWindowだから、ウィンドウのハンドルは取れるでしょ。
それにWM_SETFONTを送る。

マクロならSetWindowFont()

285 名前:デフォルトの名無しさん :01/09/27 08:50
GetPrivateProfileStructで、INIファイルの
指定のキーから複数の値・文字列を取得したいのですが、
struct hogege {
  int a;
  char b[20];  // ファイル名
  BOOL c;
}
のような構造体(INIのキーに記述した順に宣言)を作って
そのオブジェクトをsthogegeと宣言して、
GetPrivateProfileStruct("section", "key", &sthogege, sizeof(hogege), "フルパス名");
と書いたのですが、取得できませんでした。
MSDN見ると英語だけで、読んではみたのですが英語苦手なので勘違いしてる
部分があるかもしれません。
あと、この場合INIファイルに書くときの書式は
[section]
key=1,abcdef.abc,0
とかでいいんでしょうか。
どこが間違ってるのかわからないので上手く説明できないのですが、
どなたか思い当たったら教えてください。よろしくお願いします

286 名前:1 :01/09/27 09:15
それならココ
http://www.f2.dion.ne.jp/~impact14/

287 名前:279 :01/09/27 10:03
284>>解決しました。ありがとう
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

288 名前:デフォルトの名無しさん :01/09/27 10:14
>>285
その場合なら
  [section]
  key=010000006162636465662E6162630000000000000000000000000000AA
こんな書式になりマス。

APIには構造体のアドレスとサイズしか渡してないんだから、
メンバ毎に区切って処理するなんて芸当を期待するのは無茶っす。

289 名前:285 :01/09/27 16:26
なるほど!!
助かりました〜、ありがとうございます!

290 名前:デフォルトの名無しさん :01/09/27 19:25
GetExitCodeThread()で質問です。
lpExitCodeに戻ってくる値ですが、
スレッド関数が0x103L(STILL_ACTIVE)と同じ数値を返した場合、
どうやって判定するのでしょうか?
WaitForSingleObject()を使って判定>終了コード取得
と、2段で行うのが正しい方法でしょうか?

291 名前:sage :01/09/27 20:52
>>290
二段で行うのが正しい方法だ

292 名前:デフォルトの名無しさん :01/09/27 21:04
お薦め本ってある?

293 名前:デフォルトの名無しさん :01/09/27 21:08
MSDN斜め読み

294 名前:デフォルトの名無しさん :01/09/27 21:30
無理>293

295 名前:デフォルトの名無しさん :01/09/27 21:31
無能>294

296 名前:デフォルトの名無しさん :01/09/27 21:37
>>292
Petzold 本。

297 名前:フォントの名無しさん :01/09/28 11:00
質問です。
CreateWindowで作成したボタンにアイコンを貼り付けるのは
どうやって実現するのでしょうか?
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

298 名前:デフォルトの名無しさん :01/09/28 11:04
>297
OwnerDrawでがんばれ。

299 名前:デフォルトの名無しさん :01/09/28 11:18
>297
ビットマップボタン

300 名前:300000 :01/09/28 14:14
"*.url"のファイルに関連付けされたプログラムを調べる
パーフェクトなやり方ありますか?

301 名前:デフォルトの名無しさん :01/09/29 00:39
>>300
試しに実行してみる。

302 名前:デフォルトの名無しさん :01/09/29 09:08
>>300
パーフェクトかどうかは知らんが、
レジストリHKEY_CLASSROOT以下にアクセス

303 名前:デフォルトの名無しさん :01/09/29 10:05
>>300
HKEY_CLASSES_ROOT\.url の (標準) の値を調べて、その名前を仮に "InternetShortcut" とすると、HKEY_CLASSES_ROOT\InternetShortcut\shell\command\open を見れば書いてある。

304 名前:30000 :01/09/29 10:14
関連付けされたファイルを探すために
最初は、FindExecutable()を使って調べようと思ったんです。
そしたらこの関数、実在するファイルを指定してやらなきゃいけないんです。
気の利かない関数ですよね!

そこでまぁ、ファイルを作って呼び出してやったんです、
そしたらなんか、取得できた実行可能ファイルは"shdocvw.dll"とか
かいてあるんです。
もうね、、、アホかと。馬鹿かと。
もそこで、もう一度ヘルプを読み直してみたんです。
そしたらちゃんと実行可能 (.EXE) ファイルの名前を取得します、
とか書いてあるんですよ。
そこでまたブチギレですよ!

305 名前:Ruby! :01/09/29 10:19
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!

306 名前:デフォルトの名無しさん :01/09/29 10:20
ネタかいてるヒマあったら>>302-303に礼でもしたらどうだ

307 名前:300 :01/09/29 10:22
結局、Rubyでやることにしました。

308 名前:3000 :01/09/29 10:53
うっ、スンマセン。
レジストリ見てみました、
バッチリ出来そうです。ありがとーございました!

309 名前:デフォルトの名無しさん :01/09/29 16:02
とりあえずMSを小一時間問い詰めてみれ

310 名前:デフォルトの名無しさん :01/09/29 17:58
Win32APIとRubyって全く関係無いのに

311 名前:デフォルトの名無しさん :01/09/29 22:57
>304 >309
激しくワラタ

312 名前:デフォルトの名無しさん :01/10/01 12:04
>>309
3万払っても、仕様ですという回答をもらうだけではないかと思われ・・・

313 名前:デフォルトの名無しさん :01/10/01 12:09
自分自身を再起動するにはどんな方法が一番スマート?

314 名前:デフォルトの名無しさん :01/10/01 13:25
>>313
首吊って生まれ変われ

315 名前:>314 :01/10/01 13:53
12点

316 名前:デフォルトの名無しさん :01/10/03 23:04
FILETIMEの値の比較ってどうやればよいのでしょうか?
APIというか構造体ですが、、、

317 名前:デフォルトの名無しさん :01/10/03 23:36
>>316 MSDNの FILETIME の説明を読めよ。
Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
Use normal 64-bit arithmetic on the ULARGE_INTEGER value.

318 名前:316 :01/10/03 23:44
いや、読んだんですけど、64ビットの変数とか使ったことないもんで・・・

319 名前:316 :01/10/03 23:52
ULARGE_INTEGER構造体にmemcpyかまして
QuadPart同士比較でいけました。失礼しました。

320 名前:デフォルトの名無しさん :01/10/04 00:18
とりあえずunionつかっとくと、コピーの手間が省けるぞ

321 名前:デフォルトの名無しさん :01/10/04 09:59
>>310 最近のスクリプトはシステムの API を呼び出すことができる。

322 名前:デフォルトの名無しさん :01/10/04 19:43
やっぱり手っ取り早くここしかないのが残念です。
よろしくお願いでこんばんわ。

えーっと、SendMessage(hEdit,EM_GETMODIFY,..)
でバッファの変更をうけとることなんですが、
なぜか、これ、「変更あり」に対して、-1を返すことが判明しました。
ゆえに、TRUEでは条件一致できません。

みなさんも、こうですか?まぁ、if(SendMessage(..)){}とすれば
すんなり行くんですけど、ぼくは、EM_GETMODIFYに自信がありません。
なんか気持ちが悪いです。素直に1かえしゃーいいじゃんか!

以上ですよろしくお願いします。

323 名前:デフォルトの名無しさん :01/10/04 19:54
>>322
なにがしたいのかワカランが。
EM_GETMODIRYの動作が納得いかないなら、
フックでも掛けてカスタマイズすれば?

324 名前:デフォルトの名無しさん :01/10/04 19:55
ひょっとしたらと思って、バッファの内容に
文字追加、削除の両方で試してみましたが、
やぱりどっちもー1です。(報告)

325 名前:デフォルトの名無しさん :01/10/04 19:57
やりたいことはできました。
要はテキストバッファに変更が
加えられたか、変化なしかを調べたいのです。
でしからif(SendMessage()==TRUE)としました。
けど、これだとダメだったのです。SendMessageの
返り値を調べるとなんとー1でした。
↑納得いきません。よろしくおねがいします。

326 名前:sage :01/10/04 21:59
試してないけど、
真偽値を返すAPIは if(xx() == TRUE) せずに
xx() だけにしとこうよ。

==TRUEや ==trueが身に染みついてるなら
今すぐその癖をやめるべきだと思う。

ふつうのCプログラマなら一生気付かないかもね、そのバグ。

327 名前:デフォルトの名無しさん :01/10/04 22:32
戻り値がboolであれば==trueでも問題は無かろう
APIでは存在しないが

328 名前:デフォルトの名無しさん :01/10/04 22:49
ありがとうございました。>>326

329 名前:デフォルトの名無しさん :01/10/04 22:59
読み込みと書き込みとフォントのみのエディタができました。
が、

もはや僕のパソはヤバイかもしれません。

1)まずプログラムで指定した大きさ以上のテキストを読み込む。
2)ケツが切れるが許容以上のテキストが読み込めてします。
3)そのまま強引に名前を付けてセーブ
4)どうなってるかと思うから、もう一回開く。
5)真っ白(やっぱだめかと思う)
6)それをメモ帳で開く
7)な、なにぃ!

8)白紙のはずのテキスト(セーブ時にはうんこ.txtと名づけました。
、メモ帳で開くとそっくりオリジナルと同じだ!しかもよくプロパーティ
みてみると、バイト数も全く一緒だ!

9)で、もう一回自作エディタで開く。→やぱり白紙だ。
・・・でもプロパーティは0でないバイト数を示している。
(さらに僕のエディタは一応バイト数表示できるけど、0でない
値を示している。

→→ぼくのCディレクトリはやばいですか?

330 名前:デフォルトの名無しさん :01/10/04 23:09
追伸です。

さらになぜかメモ帳で開けてしまったそれを、
どうせなのでメモ帳から上書きしました。

それを自作エディタで開きました。

オリジナルのものの、最初の文字(N)が抜けてましたが
開けました。

のち、1)からまたやってみました。

コンドはコンドームでセーブも読み込みも
出来るようになってるんですけど・・・

うんこ.txtやばいっす、ファイル的に。

・・・・・解説してください。。

331 名前:解説 :01/10/04 23:23
現象:
・プロパティを見るとサイズは0じゃない。
・メモ帳でも普通に表示出来る。
・キミの自作エディタでは読みこんでも表示されない。

結論:
その自作エディタがバグってます。

332 名前:デフォルトの名無しさん :01/10/04 23:25
ちなみに半角英数は一文字1バイトでカウント
されていることをしりました。

333 名前:デフォルトの名無しさん :01/10/04 23:28
許容バイトを超えると読み込みを中止するルーチンを
わざわざ取ってから実験してみた僕の生き様に答えてくださいYO

334 名前:デフォルトの名無しさん :01/10/04 23:28
>>329 見事なREAL厨房っぷりでワラタ

335 名前:デフォルトの名無しさん :01/10/04 23:30
ちなみに読み込みも書き込みもReadFileとかCreateFile(API)
を利用しています。初歩です。

336 名前:デフォルトの名無しさん :01/10/04 23:37
俺はまじめダ!!

337 名前:デフォルトの名無しさん :01/10/04 23:47
お前は本当に解説が欲しいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、うんこ.txtって言いたいだけちゃうんかと。

338 名前:デフォルトの名無しさん :01/10/05 00:37
>>316

単純にFILETIMEの大小比較ならCompareFileTime()って関数が便利だぞ。

339 名前:フォントの名無しさん :01/10/05 09:48
質問ですが、ボタンをクリックしたときの処理はかけるんですが、
ボタンを押し続けたときのメッセージはどのように取ればいいのでしょうか。
たとえばあるボタンを押したままでいると、表示される数値が増加する、
というようなものを実現したいのですが。

340 名前:デフォルトの名無しさん :01/10/05 09:51
>>339 ボタンを押されたときにタイマーをセットすれば?
SetTimer と WM_TIMER を参照。

341 名前:デフォルトの名無しさん :01/10/05 19:04
うんこ.txtのことは忘れることにしました。
素直に許容以上のファイルを受け入れないルーチンをつけて続行中です。

エディットボックスに右栗のポップアップをつけます。

WM_NOTIFYを捕まえるか、フックをかけるか
考えています。メモリ的、処理的にどっちがいいか、
よい意見があればお聞かせください。

最近調子に乗っていたので、今日は謙虚に耳を傾けた
いです。よろしくお願いします。

342 名前:デフォルトの名無しさん :01/10/05 19:09
LPかRP_BOTTONDOWNを捕まえて、
そこでタイマを発行し、・・BOTTONUPで、
タイマを取得すればいいと思います>>339

343 名前:デフォルトの名無しさん :01/10/05 19:22
・・・・とりあえずWM_NOTIFYの方向でいくので
よろしく・・・・・・

344 名前:316 :01/10/05 19:33
>>338
ありがとうございます。こういうのを求めてました。

余談
手元にFILETIMEが載っているヘルプが3つあるんですが、
良く読んでみると1つだけがCompareFileTimeへリンクしていました。
全部同じ内容かと思って甘く見ていた・・・・

345 名前:素人 :01/10/06 02:34
WinAPIを使用してRS232Cを制御したいのですがどうしていいかわかりません。
具体的なプログラムのサンプルが載っている本、HPございましたら教えてください!
よろしくお願いします!!

346 名前:デフォルトの名無しさん :01/10/06 02:50
素人には無理です
さようなら

347 名前:デフォルトの名無しさん :01/10/06 07:27
>>345
CreateFile、ReadFile、WriteFile、DeviceIoCtrl

348 名前:デフォルトの名無しさん :01/10/06 09:13
>345
日本語のWin32APIヘルプがお手持ちの開発ツールCDROMに入っていませんか?
みつけて"通信の概要"を検索し熟読をお勧めします

CreateFileで COM1 を開いて
BCDの設定を
BuildCommDCB("baud=9600 parity=N data=8 stop=1", &DCB);
のようにして
ReadFile/WriteFileするだけです

349 名前:デフォルトの名無しさん :01/10/06 16:02
ふと思ったのだが、たのむから素人がバグって言うな。
もっと丁寧に考えろ。
そえはお前のミスだということを知れ。

ちなみにオレは日本ボAPIヘルプなんか持ってない。
LCCから頂戴した英語版ダ>>348

350 名前:デフォルトの名無しさん :01/10/06 17:40
よろしくお願いします!
ありがとうございます。

エディタ作りでドラッグ&ドロップをWM_NOTIFYを捕まえる(横取り)かフック、
っていうかサブクラスるか考え、WM_NOTIFYの
方向にしました。とても難しかたです。横取りの方法では
ENDROPFILES構造体を使わねばならず、ほとんど
資料はありませんでした。この構造体はENDROPFILES
cp:Character position at which the dropped files would be inserted.
ていうメンバがあって要はエディット部の、どの位置にファイルが
D&Dされるかの位置指示子です。エディットに何も書かずにD&D
するとこの値が不正らしく、カーネルやらシェルエラーがぴよぴよ出て、悩まされましたが、
とりあえず適当にナンか書いてカーソルを適当な位置に置いておくと
成功です!万歳!
漏れは天才です
ありがとうございmす!
でも多分これからサブクラス化します。

351 名前:デフォルトの名無しさん :01/10/07 02:00
CInternetSession
のOpenURLでウェブページ(HTTP)にアクセスする際に、
URLが不正だったり、指定のURLのサービスが利用できない際に
それを知る方法はありますか?
インターネットそのものにアクセスできない場合は、例外をcatch
することでわかるようなのですが。
どうか教えてください

352 名前:デフォルトの名無しさん :01/10/07 02:24
フリーのCコンパイラでWindowsアプリを作りたいんですが、
結構色々あってどれにしようか迷ってます。
とりあえずmingw、bcc,lccが候補に上がっています。
(C++機能は使いません。)
お勧めのコンパイラを教えてください。

所で、WATCOM Cはオープン化して公開されたんでしょうか?

353 名前:デフォルトの名無しさん :01/10/07 02:44
>352
bccを使ってるけどリソースエディタ(ダイアログなんかを簡単に作る機能)がないのは辛い。
APIの勉強ならいいが、実用なら生産性は悪いぞ。

354 名前:デフォルトの名無しさん :01/10/07 02:58
>352
今のはわからんのでもしかしたら今は使えるようになってるのかもしれないが
lccはリソースコンパイラが日本語を通してくれなかった
昔lcc使ってるときはリソースコンパイラだけrc.exe使ってた(苦笑)
それ除けばコンパクトなコードを吐く良いコンパイラだと思う

355 名前:デフォルトの名無しさん :01/10/07 03:01
>>353
ありがとうございます。
bccにはbrc32というリソースコンパイラがあるみたいですが、
やっぱり手書きで作るのはしんどいですね。
(普段は仕事でVisualC++6使ってます。)
bccをちょっと使ってみた所、最適化はそれほど
してくれてないみたいです。(option -p -O2)
(既存のベンチプログラムをビルドした結果、2割程差が出る。)
商用のVisualC++と比べてる時点で酷ですが。

356 名前:デフォルトの名無しさん :01/10/07 03:28
>>355
いや、VCは鬼

>商用のVisualC++と比べてる時点で酷ですが。
BCBのコンパイラ部分をBCC として配ってるんじゃなかったけ?

357 名前:デフォルトの名無しさん :01/10/07 03:30
元々、WinNT4で環境変数(レジストリ)を書き換えた後、下記のコードで
反映させていたんですが、

DWORD dwReturnValue;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);

Win2k+SP2でこいつが効かなくなりました。
何が問題であるのかご教授願います。

358 名前:デフォルトの名無しさん :01/10/07 08:45
>>352
Watcom C/C++ 11.0c が一応誰でも落とせる状態で公開された。
本格的にオープンになるのはもーちょいみたいだけど。

359 名前:デフォルトの名無しさん :01/10/07 09:08
>>358
URL出して

360 名前:358じゃないけど :01/10/07 11:48
これか?検索したら出てきた。
http://www.openwatcom.org/
http://www.openwatcom.org/download.html

361 名前:デフォルトの名無しさん :01/10/07 17:53
age

362 名前:デフォルトの名無しさん :01/10/08 22:04
こんな関数を作ったのですがWin2000だときちんと値を返すのですがWin98だと0
しか返してくれません。このAPIはWin2000専用なのでしょうか?Rasに関する資料
があまりなく困っています。どなたか詳しい方いらっしゃらないでしょうか?

DWORD GetDialiUpEntryNum(void)
{
//エントリの件数
DWORD dwEntry = 0;
// 構造体の宣言と初期化
RASENTRYNAME name;
memset( &name, 0, sizeof(RASENTRYNAME) );
DWORD dwSize = name.dwSize = sizeof(RASENTRYNAME);
// 取得
RasEnumEntries( NULL, NULL, &name, &dwSize, &dwEntry );

return dwEntry;
}

363 名前:デフォルトの名無しさん :01/10/08 22:10
>>362
そんな糞言語は捨ててDelphi使いな。
頭悪そうだよ君。

364 名前:デフォルトの名無しさん :01/10/08 22:13
Del厨房はすっこんでろアホ!

365 名前:デフォルトの名無しさん :01/10/08 22:14
>>362
If the function succeeds, the return value is zero.
なんだが、何か他に質問でも?

366 名前:sage :01/10/08 22:15
>>362
GetLastError()してから出直してこい

367 名前:デフォルトの名無しさん :01/10/08 22:53
Openwatcomは商用ソフト開発ok?

368 名前:デフォルトの名無しさん :01/10/09 10:47
VBスレッドで回答いただけなかったので、こちらで質問させてください。
環境は、VB6.0SP5、WINNTor2000です。
質問です。イベントログを取得しようとし、以下のような方法で、コードを記述したのですが、
イベントログには、ソース (○○○○) 内のイベント ID (9999) に関する説明が見つかりません。
次の挿入文字列が含まれています。と記述されています。
これを避けるためにはどのようにしたらよいのか、どなたか詳しい方、ご教授願えないでしょうか。。。
Appオブジェクトを使う方法ではなく、APIを使用する方法を希望します。

Option Explicit
Declare Function RegisterEventSource Lib "advapi32.dll" Alias _
"RegisterEventSourceA" ( ByVal lpUNCServerName As String, _
ByVal lpSourceName As String) As Long
Declare Function DeregisterEventSource Lib "advapi32.dll" ( _
ByVal hEventLog As Long) As Long
Declare Function ReportEvent Lib "advapi32.dll" Alias "ReportEventA" ( _
ByVal hEventLog As Long, ByVal wType As Integer, _
ByVal wCategory As Integer, ByVal dwEventID As Long, _
ByVal lpUserSid As Any, ByVal wNumStrings As Integer, _
ByVal dwDataSize As Long, plpStrings As Long, lpRawData As Any) As Boolean
Declare Function GetLastError Lib "kernel32" () As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
hpvDest As Any,hpvSource As Any, ByVal cbCopy As Long)
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Declare Function GlobalFree Lib "kernel32" ( ByVal hMem As Long) As Long

Public Const EVENTLOG_SUCCESS = 0
Public Const EVENTLOG_ERROR_TYPE = 1
Public Const EVENTLOG_WARNING_TYPE = 2
Public Const EVENTLOG_INFORMATION_TYPE = 4
Public Const EVENTLOG_AUDIT_SUCCESS = 8
Public Const EVENTLOG_AUDIT_FAILURE = 10

Public Sub LogNTEvent(sString As String, iLogType As Integer, _
iEventID As Long)
Dim bRC As Boolean
Dim iNumStrings As Integer
Dim hEventLog As Long
Dim hMsgs As Long
Dim cbStringSize As Long
hEventLog = RegisterEventSource("", App.Title)
cbStringSize = Len(sString) + 1
hMsgs = GlobalAlloc(&H40, cbStringSize)
CopyMemory ByVal hMsgs, ByVal sString, cbStringSize
iNumStrings = 1
If ReportEvent(hEventLog, iLogType, 0, iEventID, 0&, iNumStrings, cbStringSize, hMsgs,hMsgs) = 0 Then
MsgBox GetLastError()
End If
Call GlobalFree(hMsgs)
DeregisterEventSource (hEventLog)
End Sub

Sub Main()
Call LogNTEvent("Information from " & App.EXEName, EVENTLOG_INFORMATION_TYPE, 1001)
Call LogNTEvent("Warning from " & App.EXEName, EVENTLOG_WARNING_TYPE, 1002)
Call LogNTEvent("Error from " & App.EXEName, EVENTLOG_ERROR_TYPE, 1003)
End Sub

369 名前:デフォルトの名無しさん :01/10/09 11:13
>>368
>次の挿入文字列が含まれています。と記述されています。

どこに記述されているのですか?
エラーはどの行で起きていますか?
「挿入文字列」は何でしたか?

370 名前:368 :01/10/09 11:37
>>369
ソース (●●●●) 内のイベント ID (1001) に関する説明が見つかりません。
次の挿入文字列が含まれています:Information from sub・・・・・.

と、イベントログに出力されています。
挿入文字列は、作成したプログラムのエラートラップより取得したものです。
例:On Error Goto aaa:
とかのエラートラップです。

私がおだししたプログラムの場合ですと、
Call LogNTEvent("Information from " & App.EXEName, EVENTLOG_INFORMATION_TYPE, 1001)
の"Information from " & App.EXEName
が挿入文字列となると思います。

371 名前:デフォルトの名無しさん :01/10/09 11:41
おだしした?

372 名前:デフォルトの名無しさん :01/10/09 11:42
という事で API 関係ないよ VBのコードが間違いだよと 解釈して下さい >>.370
VBスレで 親切な人がいれば教えて下さるでしょう

373 名前:デフォルトの名無しさん :01/10/09 15:44
>>362
RASENTRYNAMEのサイズが変わってるんじゃネーノ?
ソースの先頭に
#define WINVER 0x400
と書くかコンパイルオプションに
-DWINVER=0x400
と追加しとけ。

374 名前:デフォルトの名無しさん :01/10/09 22:02
そこでおいらも少しだけつまづいたことある。

一言言わせてクレ。

ちょっとむかつくとき
   =お気に入りクリックして2ch来ようとしたが、
     変なタイミングでお気に入りポップが下にずれて
      バナーを押してしまったとき。

375 名前:デフォルトの名無しさん :01/10/09 22:11
質問してもいいですか?

僕は、マルチバイトとワイドバイトのどちらでコンパイル
してるかわかりません。シングルバイトってことはないと
思います ティー茶ーつかってもいいですか?

376 名前:デフォルトの名無しさん :01/10/09 22:14
ちなみにsiziofチャーで4が変えるので
マルチバイトだと思います。

377 名前:デフォルトの名無しさん :01/10/09 22:15
374だけど>>373ね。

378 名前:デフォルトの名無しさん :01/10/09 22:59
>>374
> 変なタイミングでお気に入りポップが下にずれて
> バナーを押してしまったとき。
あぁ、時々やるよこれ (涙)。

>>376
sizeof( char ) はどっちでコンパイルしても変化しません。
っつーか、Win32が動く範囲で、sizeof(char)==4 になる環境は無いと思うが。

379 名前:デフォルトの名無しさん :01/10/10 00:00
加藤チャー?

380 名前:デフォルトの名無しさん :01/10/10 01:47
>267にあるように、forkしてwaitpidしてexecじゃいかんのか?

381 名前:デフォルトの名無しさん :01/10/10 02:24
Win9x系ではAutoexec.bat内のPATH=の行に値を
WinNT系では環境変数のPATHに値を書き込めるAPIってあるのでしょうか?
うまく説明できてるかわかりませんが、コマンドプロンプト(MS DOSプロンプト)で
path[Enter]としたときに表示される値をOSによらず
すっぱりと制御できたらうれしいんですが・・・・

382 名前:デフォルトの名無しさん :01/10/10 02:57
>>381
fopen
fread
fwrite
close

383 名前:デフォルトの名無しさん :01/10/10 07:10
oioi

384 名前:デフォルトの名無しさん :01/10/10 11:41
SetEnvironmentValue();

385 名前:デフォルトの名無しさん :01/10/10 13:35
Win2000 や WinNT などの net send で送られてきたメッセージを受けとるにはどう
すればよいでしょうか?
net send は NetBios というプロトコルを使っているということまでは判っています。
どこかの port を見張って待ち構えるというようにするのでしょうか。

送る方は NetMessageBufferSend を使ってできました。

386 名前:ええろ :01/10/10 13:37
http://www.himawari.sakura.ne.jp/%7Eloveseat/Adu/index.html

387 名前:デフォルトの名無しさん :01/10/10 16:50
モデムを使って電話できるプログラムがあるが音声モデムの制御の仕方をおしえろ!

388 名前:デフォルトの名無しさん :01/10/10 16:59
また株価が1万円割れましたね

ところで、テキストファイルを保存するとき、
ゴミがついてしまうのは、SetEndOfFile(hFile);
で解決したのですが、こんどは、読み込むとき、ゴミが読み込めません。
ノートパッドだと読み込めるので、どうにか読み込めるようにしたいです。

hFile = CreateFile(szFName, GENERIC_READ, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(hFile, 0, 0, FILE_BEGIN)
ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL);
szStr[dwAccBytes] = '\0';
Edit_SetText(hEdit, szStr);

こんな手順です。
ひょっとしたら、CerateFileやReadFileはなにか勝手なこと
をしてるかもしれないので、いっそのことfopenとかreadを
使おうかとも思いましたが、API命令の方が速いという話も
あるし、よくわかりません。
アドバイスお願いします。

389 名前:デフォルトの名無しさん :01/10/10 17:06
CreateFile と ReadFile の返り値くらいはチェックすべき。

390 名前:デフォルトの名無しさん :01/10/10 17:19
>>388 共有モード dwShareMode 間違えてない?

391 名前:デフォルトの名無しさん :01/10/10 17:24
if (hFile == INVALID_HANDLE_VALUE){
MessageBox(NULL, "ファイルハンドル取得失敗!", "Error", MB_OK);
CloseHandle(hFile);
dwSize = 0L;
return;
CreateFileの返り値は上のように以前からしてありました。

if(!ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL))
MessageBox(hWnd,"読み込みが不正に終りました:ReadFile();","Error",MB_OK);//!!
↑今回このようにしてみましたが、ゴミ付きファイルは、ゴミが
読み込めません。(説明が悪かもしれませんが、読み込みはできる
のですが、ゴミが読み込めないのです。ノードパットにはきちんと
ゴミが読めています。)
(388)
}

392 名前:デフォルトの名無しさん :01/10/10 17:29
390読み込んでバッファに移したらすぐ、
CloseHandleを行っています。多分問題
ないと思いますがだめでしょうか>390

393 名前:デフォルトの名無しさん :01/10/10 17:31
すごい偶然だとおもうのですが
VC++スレの者ではありません。

394 名前:デフォルトの名無しさん :01/10/10 17:36
ゴミまでは何バイトですか? 念のため dwAccBytes もチェックしておきましょう。
char mybuf[256];
wsprintf(mybuf, "読みこみ:0x%lx", dwAccBytes);
MessageBox(NULL, "読みこみ", mybuf, MB_OK);

395 名前:デフォルトの名無しさん :01/10/10 18:01
ファイルは結構大きいので、メッセージボックスでは無理ですが、

CreateFile成功確認後の、
dwSize = GetFileSize(hFile, NULL);
は、(int)(dwSize)が31701バイトを示し,

ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL)
lplen=lstrlen(szStr);←int
は、31690を示します。

ウィンドウズのプロパーティはやはり31701を示しています。

396 名前:デフォルトの名無しさん :01/10/10 18:10
>>395
そりゃ lstrlen したら '\0' までの長さしか得られるわけないっしょ。
読み込む分には読み込めてるから、読んだ文字列を
Editコントロールに設定する時のコードを何とか工夫しろ。

397 名前:デフォルトの名無しさん :01/10/10 18:31
>>395
>ファイルは結構大きいので、メッセージボックスでは無理ですが、

>>394
>wsprintf(mybuf, "読みこみ:0x%lx", dwAccBytes);
>MessageBox(NULL, "読みこみ", mybuf, MB_OK);
これ、読みこんだバイト数を表示するんだよ。
デバッグ使えたら、ブレークポイントとウォッチ式を置いて、直接 dwAccBytes を調べてね。

398 名前:デフォルトの名無しさん :01/10/10 18:49
やはりReadFileは使えないのでしょうか?
ReadFileは引数が、ReadFile(hFile,szStr,1024*64,&dwAccBytes,Flag)
なので、\0の検出を勝手にやってしまっているらしいです。

でもなんとなくわかりました。
ファイルが、ハードディスク内部で、

始まりの記号honararaparanononofoiu\0gomigomi\0\0\0\0\0\0\0\0......
と展開され、API定義のReadFileでは長さを設定できないので、
勝手にきられてしまうんですね

399 名前:デフォルトの名無しさん :01/10/10 18:51
元手ただでやっております。フリーのターボデバッガも
あるのですが、これでもdwAccBytesを追えるでしょうか?

400 名前:デフォルトの名無しさん :01/10/10 18:58
デバッグ版としてコンパイルすれば、[Data/Inspect] メニューからできるはず。

401 名前:デフォルトの名無しさん :01/10/10 19:03
ありがとうございます。

402 名前:デフォルトの名無しさん :01/10/10 19:12
・・・・・・RUNするとData/Inspect選べません・・・・・

403 名前:デフォルトの名無しさん :01/10/10 19:14
>>402
ブレイクポイント設定していないだろ?

http://user3.allnet.ne.jp/tadnakam/bcc32/td32.htm

404 名前:デフォルトの名無しさん :01/10/10 19:17
>>398

ハァ?
ReadFileはバイナリアクセスだから'\0'の検出なんかしないぞ?
もう一度勉強しなおせ

405 名前:396 :01/10/10 19:42
>>398
> ReadFile(hFile,szStr,1024*64,&dwAccBytes,Flag)
1024*64って長さ設定出来とるじゃないか。
だからそのコードで全部最後までちゃんと読み込めてるっての。

# それに、freadだって最終的にはReadFileを呼んでいる。

406 名前:デフォルトの名無しさん :01/10/10 19:45
でもそうすると、
dwSize =GetFileSize(hFile,NULL)

と、ReadFile(hFile,szStr,1064*64,&dwAccBytes,NULL)の

lpLen =lstrlen(szStr)
がゴミ分だけ違うことが理解できません。>>404

407 名前:デフォルトの名無しさん :01/10/10 19:49
おっと・・・・
ということは、szStrの時点では正常に
書き込まれていて、Edit_SetText(hEdit,szStr)
が悪さをしているってことなののでしょうか
しかし、Edit_SetTextが勝手に理解している終記号が・・・
\0・・・・なのですか!

408 名前:デフォルトの名無しさん :01/10/10 19:51
>>407
Windows でテキスト、あるいは文字列と呼ばれるものは
\0 (ワイド文字の場合 L'\0')で終わると仮定されている。
だから、文字列として渡すと \0以下が落ちる。Edit_SetText の場合も同じ。

409 名前:デフォルトの名無しさん :01/10/10 19:57
それでもEDITコントロールを使いたかったら、EM_SETHANDLE を使う方法がある。
そのとき親ウィンドウに DS_LOCALEDIT スタイルをセットしないといけない。

410 名前:デフォルトの名無しさん :01/10/11 15:40
低水準関数read(szFName,szStr,1)
についてなのですが、この関数は必ずszStrの
先頭から書き込んで行くとは限らないのですか?

一度Edit_SetText(hEdit,szStr,0,0)で使った
szStrに、read()で何かを読み込むと、明らかにszStrの先頭に
変なヘッダ情報みたいのがついています。for i〜if szStr[i]='\0'
みたいなのをやって確認したんですけど・・・・・・

411 名前:デフォルトの名無しさん :01/10/11 15:54
while(1){
if(0==(read_flg=read(hFile,szStr,1)))
if(0==(read_flg=read(hFile,szStr,1))){szStr[tell(hFile)-1]='\0';
read_flg=read(hFile,szStr,1);
if(read_flg==0)break;
}Fsize=tell(hFile);
で読み込んで、

for(i=0;i <= Fsize;++i){
if(szStr[i]=='\0')
szStr[i]='h';}

szStr[i]='\0';最後の\0ENDOFSTRING

このszStrは既に一回使ったものなんで、今回上書きです。
EditSetTextでエディットに表示すると、
先頭に、ウィンドウ(hWnd)タイトルに表示しておいた
テキストが、くっついてきます・・・・・・

412 名前:デフォルトの名無しさん :01/10/11 15:55
if((-1)==(hFile=open(szFName,O_BINARY|O_RDONLY)))です

413 名前:デフォルトの名無しさん :01/10/11 15:57
先頭2行目と3行目のif文は無視してください。ごめんなさい。

414 名前:デフォルトの名無しさん :01/10/11 16:04
>>410
_read と read を間違えていませんか? _read 前後はどのように書きました?
_read の返り値も教えて。

415 名前:デフォルトの名無しさん :01/10/11 16:15
うー、僕の本は新版実習C言語っていうんですけど、
_readなんて出てませんでした。readはでてました。
でも、_readもあるみたいですね。

416 名前:デフォルトの名無しさん :01/10/11 16:26
readやcloseやopenをすべて_※で置き換えてやりましたが、
やっぱり変なのがヘッダについています。

417 名前:デフォルトの名無しさん :01/10/11 16:36
Fsize は初期化しましたか?

418 名前:デフォルトの名無しさん :01/10/11 17:12
ライブラリやAPIのせいにするのいい加減やめろ
お前のプログラムが腐ってるに決まってるだろ

419 名前:デフォルトの名無しさん :01/10/11 17:58
初心者に限ってすぐに「言語製品のバグです」などと平気で言う。
お前の頭がバグってんだよ。

420 名前:デフォルトの名無しさん :01/10/11 18:34
わざわざ初期化の意味で0を代入すると、コンパイル時警告で
「値は使われてません」と出るのはなんでですか?
安全のため警告を無視して初期化文を残して
置いた方がいいですか?

421 名前:デフォルトの名無しさん :01/10/11 19:33
>>420
それはWin32APIの質問なのか?

422 名前:デフォルトの名無しさん :01/10/12 00:16
>>414ごめんなさい、読み込めていませんでした。
けれど、グローバルで、szStr宣言して、読み込みサブルーチンの
なかでもszStrを宣言しているのですが、関数の中で宣言したものは
独立だと思っていたのですが、ちゃんと、他の実行単位で使用した
szStrの内容がのこっているのは驚きでした。

っていうか低水準で立ち向かうのって無謀ですか?っていうか無理
ですね、read使う場合は。高水準でfopenとか使った例を見つけたので、
参考にやってみたいと思います。

423 名前:デフォルトの名無しさん :01/10/12 00:28
あぁ、勘違いですね。どうやらReadFileに毒されていたようです。
更に、文字一個読むとポインタが自動的に一個ずれるというような
ことをどっかで聞いたのが聞きました。それはfgetcですね。とかですね。

あぁ、readは、まいかいまいかいszStrに最初から書き込んでいたことを
知り、疲れ果てるばかりです・・・・・・

424 名前:デフォルトの名無しさん :01/10/12 09:17
>>423
サンプルプログラムを必死になって探しなさい。
Web検索するとか、本を探すとか。

425 名前:デフォルトの名無しさん :01/10/12 17:07
はい、僕の頭はバグってました。強い憤りを覚えます。
僕の脳みそは1バイトを16ビットで換算しており、
readについても誤解していたようです。readでは
与えた配列ポインタに毎回書き込まれることについて、
頭が混乱してました。
1バイト8ビットなら話は簡単です。しかも上位下位わかるのなんか
造作もない。16で割り算すればいいんですから。

426 名前:デフォルトの名無しさん :01/10/12 17:22
win2kでPCCardを停止する方法を教えてください
win95の時はAPIをではなく

rundll32 mspcic.dll,ejectsocket 1

でやっていたのですが
お願いしますヒントだけでも

427 名前:デフォルトの名無しさん :01/10/12 18:03
VBで、N88−BASIC!などにあった
「READ〜DATA」を実現する方法が
あったら教えてください、困ってます。とほ。

428 名前:デフォルトの名無しさん :01/10/12 18:18
while(1){
read_flg=_read(hFile,szBox,1);
if(read_flg==0)break;
if(read_flg==-1)break;
// if(szBox[0]='\0')szBox[0]='h';
wsprintf(szAsc,"%02x",szBox[0]);
strcat(szStr,szAsc);
// lseek(hFile,1L,
}
皆様。上記プログラムで難なく通ります。16進表示なんてちょろいです。
まぁ、時間はかかります。

けど、ですねぇ、%02xに注目してください。%2xだとウィンドウズ
エラーと、コンパイル警告が出ます。重要なんですか?だれかしっていますか?
それと、もしそうなら、大文字のXっていうのも見たことあるんですけど、
これも重要なんですか?どう重要なんですか?ちなみに全部charでいけますよ。
Box[2]
Asc[3]で最初\0で埋めています。static宣言はいりません。

429 名前:デフォルトの名無しさん :01/10/12 18:44
皆さんごめんなさい。Boxはintでないとだめです。
%02xの前にスペース入れてみてわかりやすく見たらちょっと
バグってます。あぁ、あと、xとXは16進の大文字と
小文字の違いくらいですね?考えて分かったつもりになりました。

でも02はどうなんでしょう・・・・・・か・・・・

430 名前:デフォルトの名無しさん :01/10/12 20:12
なはーんで無視すんのサ!これでどうだ。
  szRtn[0]= (char)0x0d;
szRtn[1]= (char)0x0a;
szRtn[2]='\0';
・・・・・・・・・
strcat(szStr,szAsc);
if(i==16){strcat(szStr,szRtn);i=0;}i++;

431 名前:デフォルトの名無しさん :01/10/12 20:17
この板みれば、バイナリーエディタ作ろうとして
同じ思いで検索板駆け回ってる人はすぐできるYO。
(この板たまにヤフーで引っかかるからなぁ(藁

432 名前:デフォルトの名無しさん :01/10/12 20:21
>>431
googleならかなりの確率で引っかかるが。

433 名前:デフォルトの名無しさん :01/10/12 20:35
あとから見た人へ。xzBoxはcharじゃだめだYO<<428

434 名前:デフォルトの名無しさん :01/10/12 21:10
>>428
・szBox とやらは unsigned char にしろ。
・↑つーか1byteずつしか読まないのならわざわざ配列にするな。
・%02x じゃなくて %2x にするとスペース埋めになって嫌な感じだと思う。
>>430 char szRtn[]="\r\n";

> まぁ、時間はかかります。
 ・毎回strcatするな。異様に無駄だ。
 ・wsprintf使わないで自前で変換すれ。
 ・1バイトずつじゃなくて、ある程度まとめて_readするように。

435 名前:デフォルトの名無しさん :01/10/12 22:40
http://cocoa.2ch.net/test/read.cgi/linux/1002807876/10

436 名前:デフォルトの名無しさん :01/10/13 02:47
あーぁ、コンドは、ReadFileつかって一回配列に落とした後、16進表示
してみました。これがなかなかうまくいかず、さいぼにたどりついたのが、
unsigned charでした。charっていうのもreadみたいにヘッダで中身替えられチャ
ってるっとことですか?

途中でintとか使ったので、intが16の8乗で、2の32乗ですか、60000の
更に2乗ですか、チャーと全然違うじゃないですか。しかもチャーは定義を変えられてる
感じがするんですけど。茶ーは2の何乗ですか?16乗でも足りないって言うんですか?
unsignedチャーは平和でいいですね。

437 名前:デフォルトの名無しさん :01/10/13 02:49
うぜーよ氏ね
APIと関係のない質問ばかりえんえん続けやがって
答えるほうも答えるほうだ

438 名前:デフォルトの名無しさん :01/10/13 02:49
ちなみにint配列に読み込んだとき32ビット中の4つの8ビットの塊が
坂さまになってるのをどうにかして下さい。

439 名前:デフォルトの名無しさん :01/10/13 02:50
SunかMac買え

440 名前:デフォルトの名無しさん :01/10/13 02:50
いや、LOWORDマクロとHIWORDマクロ使えば立派にAPIだとおもう

441 名前:デフォルトの名無しさん :01/10/13 02:52
HIWORD(HIWORD(szBuf(j)))が何故0を返すのか
おしえてクダサイ。LOWORD(LOWORD
も同じです。ものはffffffffとかだったのに。

442 名前:デフォルトの名無しさん :01/10/13 03:52
いいからとっとと氏ね

443 名前:デフォルトの名無しさん :01/10/13 04:24
while(((int)dwSize-4*(j-1))>0){
H=(szBuf[j])>>16;L=(szBuf[j++])&0xFFFF;
A=H>>8;B=H&0xFF;C=L>>8;D=L&0xFF;
wsprintf(szAsc," %02x %02x %02x %02x",D,C,B,A);
strcat(szStr,szAsc);
if(i==4){strcat(szStr,szRtn);i=0;}i++;
}
くそったれオレの生き様をみろ!

444 名前:デフォルトの名無しさん :01/10/13 04:26
前よりちーとは速くなったぞ。ちなみに前のやつはこうだ。

if((unsigned char)szBuf[j++]=='\0')strcat(szStr," 褐");else
strcat(szStr,szAsc);
テキスト中に¥0があると褐がはいるって寸法だ。ちなにみunsigned charは
自分でみつけました。

445 名前:デフォルトの名無しさん :01/10/13 04:28
whileって括弧の中が0以上だったらっつー条件じゃなかったっけ?
while doだっけ? 〜〜>0つけなかったらぐるぐる回ってしまったYO

446 名前:デフォルトの名無しさん :01/10/13 05:08
APIのリッチテキストのストリーム処理では
どんな風に処理してるんですか?

447 名前:デフォルトの名無しさん :01/10/13 09:22
>>436
char はたぶんキミの環境だと -128〜127 だ。
これをwsprintfに渡すためにintに拡張すると 0xffffff80 〜 0x0000007f だ。
それを%02xで表示すると、元々1Byteなはずなのに16進で8桁くらい表示されることがありうる。
unsigned char ならたぶんキミの環境だと 0〜255 だ。以下略。
>>438
リトルエンディアン/ビッグエンディアンで検索。
>>441
0になって当たり前だろ。少しは考えろ。
>>445
中学校逝って英語の勉強してこい。

448 名前:デフォルトの名無しさん :01/10/13 16:14
ダイアログテンプレートの使い方教えてくれ!

449 名前:デフォルトの名無しさん :01/10/13 16:27
>>447そうですね。0になりますね。
調べてないけどHILOWORDマクロは
ビットシフトとマスクを32ビット仕様でやてるんでしょうね。

だけど言わせてクレ。どっかで、だ、

「*」はポインタと掛け算で使われてるけど、
二つは深い意味では、コンピュータ内部の処理としては、
同じ意味でつながってないですか?と聞いたのだ。チャットだ。

そいつはなんだか漏れのことを愚弄するかのように笑っていた
が、やっぱ、あいつはヴァカだ!

最近のコンピュータでは掛け算の積は、いちいち計算するのではなく、
どっかに2次配列かなんかで格納されてるって聞いたことがある。

ポインタやればやるほど、掛け算は、内部の掛け算フィールドへの
ポインタ移動みたいな感じだと確信してくるゾ。ヴァカめ。クソめ。

言語は美しく出来ているのダ!

450 名前:デフォルトの名無しさん :01/10/13 16:33
僕は今のところビットシフトとマスク(マスクよりシフトの方が好き)
が気に入っています。これらはかなり使えるんですか?使えないのに
好きになってしまう前におしえてクダサイ。

451 名前:デフォルトの名無しさん :01/10/13 16:35
ちなみに僕はなかなかやる男なので441=443です。進化しました。

452 名前:デフォルトの名無しさん :01/10/13 16:39
おもに、どっちの穴でやりますか?>451

453 名前:デフォルトの名無しさん :01/10/13 16:45
マンコに決まってんだろ>>452

454 名前:デフォルトの名無しさん :01/10/13 17:25
>>451
進化おめでとう。どっちが好きとか言わず、両方やっとけ。
http://www2.freehostzone.com/~freeasian/action48/005.jpg

455 名前:デフォルトの名無しさん :01/10/13 17:43
Forbiddenされてんゾ>>454

456 名前:デフォルトの名無しさん :01/10/13 17:47
strcat(&szStr[k],szAsc);k+=12;
if(i==4){strcat(&szStr[k],szRtn);i=0;k+=2;}

このように、やりました。格段に速いです。理由はだいたい
わかります。strcatは今後も安全のため暫くお世話になる
つもりです。

ところで、signed と、unsigned charを分けることによって
どう使い道がちがうんですか?おおもじょと小文字の区別って
漢字ではないような気がするんですけど。たまにある符号付
intとかのキャストとかのためだけにあるんですか?

457 名前:デフォルトの名無しさん :01/10/13 17:47
でも僕は別にバイナリエディタ作ってるわけじゃなかったので、
暫く考え直したいと思います。

458 名前:デフォルトの名無しさん :01/10/13 17:53
>>454使えるかどうかおしえてクダサイ。

あとポインタと掛け算なんですけど、彼の
言っていることは、あってるんですか?

459 名前:デフォルトの名無しさん :01/10/13 18:11
すいません。これから新たにCreateWindowで
ウィンドウを追加したい者です。

CreateWindowに識別子(HMENU)hoge
の項目があるのですが、これの利用法
をおしえていただけないでしょうか。

この新しいウィンドウに来るメッセージを
手軽に識別するために利用したいのですが、
そういった種の識別子ではないのですか?

460 名前:デフォルトの名無しさん :01/10/13 18:13
>>459
MSDN Library は読みましたか?

461 名前:デフォルトの名無しさん :01/10/13 18:25
>>459
WS_OVERLAPPEDのときは(HMENU)として使われるんですけど
WS_CHILDスタイルのときは(UINT)とかにキャストした値を入れて
ウィンドウIDとして使うんですよ。
まったく、なんて仕様だろう。

462 名前:デフォルトの名無しさん :01/10/13 18:50
たびたびすいません。459です。

あんまりサブクラス化するとプログラムが
煩雑になるので、できれば子ウィンドウの
KeyUpやKeyDownを(HMENU)IDをつかって
捉えられないかと考えているのですが、で
きると思いますか?

463 名前:デフォルトの名無しさん :01/10/13 18:59
>>462
MSDN読め

464 名前:デフォルトの名無しさん :01/10/13 22:55
case (HMENU)ID_EDITBOX1:
wsprintf(szMyTex,"%d %x",wParam,wParam);
MessageBox(hWnd,(LPCTSTR)szMyTex, "EDITBOX1検出", MB_OK);
SetFocus(hEditEntryBox);
switch(HIWORD(wParam)){
case VK_RETURN:
MessageBox(hWnd,(LPCTSTR)szMyTex, "Return入力検出", MB_OK);
if(!(fstring=(LPTSTR)malloc(64L))){wsprintf((LPTSTR)szMyTex,"Fallstrlen==0? %ld ",sizeof(fstring));
MessageBox(hWnd,(LPCTSTR)szMyTex, "警告!", MB_OK);exit(0);break;}
if(GetWindowText(hEditEntryBox,fstring,64)){
MyFindString(hMainEdit,fstring);}
free(fstring);
break;}break;

こういうことをしてたらメッセージボックスの無限地獄に
陥りました。だれか救ってください。どうやったらできますか?

465 名前:デフォルトの名無しさん :01/10/13 23:11
どうやらキーイベントは親ウィンドウに知らされないっぽいんですけど、
MSGFILTERとか使わない方法でいい方法はありますか?

466 名前:デフォルトの名無しさん :01/10/13 23:13
いや、普通のキーのキーアップダウンは受け付けている模様。

467 名前:デフォルトの名無しさん :01/10/14 00:14
459==464か?
WM_KEYUP,WM_KEYDOWNは、普通のウィンドウとダイアログでは全く処理が違います。
464のプログラムは何をしたいんですか?
それと作ってるのは普通のウィンドウですか?ダイアログですか?

468 名前:デフォルトの名無しさん :01/10/14 01:07
>>466
WM_NOTIFY使え。

469 名前:デフォルトの名無しさん :01/10/14 02:41
>>467最近全部僕の書き込みです。
あれは、親ウィンドウに検索用の小さなボックスを作て、(wantreturnを無しで)
まず手始めにVK_RETURN,あとは、VK_UP,VK_DOWNを、サブクラス化無しで、捕まえ
ようと試みたものです。無理です。多分WM_NOTIFYも無理です。

現在サブクラス化して、VK_RETURNは捕まえましたが、UPDOWNのところで
壁があることが判明しました。ホットキーとかアクセラレータとか仕様とか色んな
言葉が出てきます。

答ついでにというか、基本的に聞きに来たんですけど、VK_UP、DOWNを捕まえる
方法はあるみたいなのですが、参考コードは、いまだみたことのない、::とか
いって、どうも、MFCっぽいっていうか、まぁ、クラス、ですか?みたいなんで
すけど、フリーのBCCで突き進む僕のコードに、前例のないこういった::
とか書いても大丈夫なのでしょうか?c++はオブジェクト指向がなんたらなので
本来は::とか使うほうが筋だと言われればなんにも言えないんですけど・・・

470 名前:デフォルトの名無しさん :01/10/14 06:10
>>469
まずは日本語の勉強から。

「どうも、MFCっぽいっていうか、まぁ、クラス、ですか?みたいなんで」

何が言いたいのか、さっぱりだよ。

471 名前:デフォルトの名無しさん :01/10/14 07:11
僕は::がわからないので、今wxwindowsをダウンロードしています。
なのでこの板とはもしかしたらお別れカモシレナイんですけど、
最後にwswindowsについて語ってください。類似のものがあれば
それも語ってください。

472 名前:デフォルトの名無しさん :01/10/14 07:16
お別れなんて、悲しいこと言うなよ

473 名前:デフォルトの名無しさん :01/10/14 07:25
TEditがなんなのかわかりません。
MFCになると、ウィンドウ間のメッセージのやり取り
とかも自前で構築するんですか?そのためのクラスですか?
TEitの実体がつまめません。

474 名前:デフォルトの名無しさん :01/10/14 12:23
なんで下げるんだYO

あの、質問なんですけど、MFCっていうのは
APIで言うところの、メッセージ苦落下寄りの仕様
なんですか?それに、継承とかいって魔夜化しじゃないんですか?

漏れは::を理解するためにはFOXをやらなくてはなりません。
APIにFOxを加えてプログラムしてみてください。話はそれからです。

っていうかなんで下げるんだYO

475 名前:デフォルトの名無しさん :01/10/14 12:49
>>474
ネタは sage てな

476 名前:sage :01/10/14 17:01
>>475ネタっぽいけど半分本気だ

477 名前:デフォルトの名無しさん :01/10/14 18:05
アルファベットを全角で書いてるとバカっぽいよ。

478 名前:デフォルトの名無しさん :01/10/14 18:11
>>476
それなら、せめて誤字脱字は訂正して、日本語として意味が通る文章に
してくれ。話はそれからです。

479 名前:デフォルトの名無しさん :01/10/14 18:33
こうしてみると、意味の通る文章が書けること、というか
論理的に整合性が取れてることって大切だと実感できる。

480 名前:デフォルトの名無しさん :01/10/14 18:39
http://mentai.2ch.net/test/read.cgi/prog/1002039334/

AA貼ってあるけど、こっちにいくといいかも。

481 名前:sage :01/10/15 00:16
よく見つけたな!

・・・・・感動した!

482 名前:デフォルトの名無しさん :01/10/16 02:22
いいかげんアゲロョ

483 名前:デフォルトの名無しさん :01/10/16 17:11
構造化例外 (__try, __exception )について、各人のポリシーを語って
ほしいです。
MSDNみても構文についてのドキュメントだし、sampleみても、これでいいのか
って感じだし。先に言っておくけど、on error goto か何かと勘違いしている
のはパス。あと、__try{ ... __leave ... } __finally{} で、do {}while(0)
の代わりに使用するってーのも却下。
漏れが却下したのはこういう理由で使えYO!ってーのはあり。

4649

484 名前:デフォルトの名無しさん :01/10/16 17:20
>>483
 スレ違いですよ。
見なかった事にしますから 移動して下さい

485 名前:デフォルトの名無しさん :01/10/16 20:03
OS依存の話しだからここでもいいと思われ

486 名前:デフォルトの名無しさん :01/10/16 20:09
>>484
たしかに構造化例外は win32apiでなくて、osが提供している機能ですね。
適切な擂れが他に見つからなかったのと、win32apiを直で呼ぶ人って、
C言語でゴリゴリ書いている人たちだろうと、ならば 構造化例外もうんこする
くらいにふつーにつかっているだろーと。

おもーたわけです。

擦違いならどこになるのかな。

487 名前:デフォルトの名無しさん :01/10/16 20:19
>>486
構造化例外を使ってるソースなんて、仕事以外でみたこと無いけど。

488 名前:デフォルトの名無しさん :01/10/17 02:36
COM初心者なんですけど
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
{
....
}
を作ろうとするとREFCLSIDが定義されてないって怒られる。
どのファイルをインクルードすればいいのか教えてくださいまし。




489 名前:デフォルトの名無しさん :01/10/17 16:34

ひとこと、パレットが変わると総ファイルサイズが変わりますって書いて欲しいよな

490 名前:デフォルトの名無しさん :01/10/17 16:35
>>483

漏れは無いと困るぞ。
無いとSSEとか3DNowとかの拡張命令の使用の可否が判断できん。
CPUのフラグ見ても、CPUが対応しているかどうかしかわからんから、
Winが対応してるかどうか調べるには、
__try { } __exception()で囲って、試行してみるしかない。

491 名前:デフォルトの名無しさん :01/10/17 23:27
 VC++6.0で、mciSendCommandを使ってCDを鳴らすソフトを
創ったのですが、Win2kユーザの方から、『終了させても
CDが鳴ったままで止まらない』との報告がきたのです。
ウチのマシン(Win98)ではちゃんと止まるのですが…。
Win2kでは、なにか特別な記述をしなければ
ならないのでしょうか?
 ちなみに、CD用のクラスのデストラクタで、
::mciSendCommand(id,MCI_STOP,0,(DWORD)NULL);
で止めています。

492 名前:デフォルトの名無しさん :01/10/18 02:03
>>491
うるせー

493 名前:デフォルトの名無しさん :01/10/18 11:37
MCI_GENERIC_PARAMS mciStop;
.
.
.
mciSendCommand(id,MCI_STOP,0L,(DWORD)(LPMCI_GENERIC_PARAMS)&mciStop);


ってーなかんじどうかな?
というか、ちゃんと MSDNなり、APIの使用方法や、Sampleに一度目を通して
見てはどうでしょう。

494 名前:デフォルトの名無しさん :01/10/18 17:56
UnregisterClassを使うとエラーになるんですけど
GetLastError()で詳細を調べようとしても0しか
帰ってきません。
どうやって原因を調べればいいんでしょうか。

495 名前:デフォルトの名無しさん :01/10/18 18:48
while(!UnregisterClass(szAppName, (HINSTANCE)*lpinstance)){
sleep(100);
}
で、真になるまでぶんまわしたら
うまく動くようになりました。
ただ、Window破棄からの待ち時間が足りないだけでしょうか?

496 名前:デフォルトの名無しさん :01/10/19 00:32
非同期のRasなんだけど
RASCONNSTATEのどの状態にどういった日本語を割り当てればよいでしょうか?
そもそも公式な資料などあるのでしょうか?最新MSDNでも英語しかなくて翻訳
に悩むところなのですが・・・。MS公式翻訳が欲しいです。

RASCONNSTATE
{
RASCS_OpenPort = 0,
RASCS_PortOpened,
RASCS_ConnectDevice,
RASCS_DeviceConnected,
RASCS_AllDevicesConnected,
RASCS_Authenticate,
RASCS_AuthNotify,
RASCS_AuthRetry,
RASCS_AuthCallback,
RASCS_AuthChangePassword,
RASCS_AuthProject,
RASCS_AuthLinkSpeed,
RASCS_AuthAck,
RASCS_ReAuthenticate,
RASCS_Authenticated,
RASCS_PrepareForCallback,
RASCS_WaitForModemReset,
RASCS_WaitForCallback,
RASCS_Projected,

#if (WINVER >= 0x400)
RASCS_StartAuthentication,
RASCS_CallbackComplete,
RASCS_LogonNetwork,
#endif
RASCS_SubEntryConnected,
RASCS_SubEntryDisconnected,

RASCS_Interactive = RASCS_PAUSED,
RASCS_RetryAuthentication,
RASCS_CallbackSetByCaller,
RASCS_PasswordExpired,
#if (WINVER >= 0x500)
RASCS_InvokeEapUI,
#endif

RASCS_Connected = RASCS_DONE,
RASCS_Disconnected
};

497 名前:デフォルトの名無しさん :01/10/19 00:34
>>495
MSDNのサンプルで、戻り値をチェックしているのってひとつもなさげ.
たぶん、UnregisterClassでエラー返ってきても、GetLastError()で 0返ってくる
なら問題無いのでは?

予想としては、該当クラスで作った windowが残っているのでエラーとしているが、
windowが消えた時点でclassが削除されるので GetLastError()は 0返す.

「アプリケーションが登録したウィンドウクラスは、アプリケーションの終了時にすべて自動的に削除されます」
と、MSDNにあるので、RegisterClassをしたプログラムが DLLでなければ特に
明示的に UnregisterClassしなくても平気かな。

498 名前:デフォルトの名無しさん :01/10/19 00:37
>>496
直訳で問題無いように思えますが、具体的にどのステータスを日本語
にするのに悩んでいるのでしょうか?

499 名前:デフォルトの名無しさん :01/10/19 00:44
あー、エディットである場所から上を検索したいんだがー、
(下は出来上がってるんだがー、ぁ)
文字列逆さに配列しなおすとか、一度上からやって最下位の
やつを取り出すとかぁ、あー、ごり押しでいけないことはー
ないんだがぁ、あー、もっといいやり方あったら求む。
(あぁ、も、もとませて、ぁ、ください)
あー、揉んじゃぁだめだぞ、ネタスレじゃないゾ。

500 名前:デフォルトの名無しさん :01/10/19 00:45
あー、ちなみに、strstrを想定している


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