Win32API質問箱 Build ..
[2ch|▼Menu]
325:デフォルトの名無しさん
07/05/25 10:03:00
256色だとパレットも持ってこないとな

326:294
07/05/25 11:32:09
皆様レスありがとうございます
特に>>317の記事大変参考になりました。
DLLをわざわざ開発するくらいですからAPIでは無理ですね。

BIND(dig,host,nslookup,...)のソースなどを参考に時間があるときにでも作成したいと思います。

327:デフォルトの名無しさん
07/05/25 16:15:08
読み込み違反ってどんな時に起きるんでしょうか?
LoadLibraryでDLLを呼び出してDLL内の関数を実行すると、
「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
となります。そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。

328:デフォルトの名無しさん
07/05/25 16:19:40
まさにぬるぽ

329:デフォルトの名無しさん
07/05/25 17:24:14
>>327
デバッグしろよ

「作ったソフトがまともに動きませんどうしてでしょうか?」
みたいな質問が多いけど情報は少ないし、しかもスレ違い

330:デフォルトの名無しさん
07/05/25 17:43:54
とりあえず、APIと関係なさそうなのは間違いない感じだなw

あれじゃね?
渡さなきゃいかん値をNULLで渡してるとか。
渡してるつもりになってる変数が0でしたとか。

331:デフォルトの名無しさん
07/05/25 17:48:23
>>327
> そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
どういう意味?
引数の数が一つで、4種類の値しかとらないってこと?
それとも、DLLが複数の関数をエクスポートしていて、
引数が3つのやつは成功するけど、4つのは失敗するってこと?

332:デフォルトの名無しさん
07/05/25 18:31:40
>>327
わんわん わわわん わんわん わん?
(関数ポインタの宣言がおかしいじゃね?)

333:デフォルトの名無しさん
07/05/25 19:30:13
>>327
その「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
という分かりやすく簡潔なメッセージの何がわからないのか書いてもらわないと・・・

「アドレス」の意味が分からないとか?

334:デフォルトの名無しさん
07/05/25 19:37:12
メッセージが分からないとは書いてないぞ

335:デフォルトの名無しさん
07/05/25 19:46:51
じゃあこれでいいだろ

問い
>読み込み違反ってどんな時に起きるんでしょうか?

答え
「アドレス 00000000 に対する読み込み」を行ったとき、等。

336:デフォルトの名無しさん
07/05/25 19:48:52
( ゚д゚)ポカーン

337:デフォルトの名無しさん
07/05/25 19:50:46
OSが保護している領域に書き込んだ時
「そのアドレスはらめぇ」とWinに言われてる

338:デフォルトの名無しさん
07/05/25 19:53:24
読み込みエラーの話をしているのに書き込みの話をし出す馬鹿。

339:デフォルトの名無しさん
07/05/25 19:56:27
馬鹿馬鹿言うしか能のない馬鹿。

340:デフォルトの名無しさん
07/05/25 20:12:10
OSが保護している領域を読み込んだ時
「そのアドレスはらめぇ」とWinに言われてる

341:デフォルトの名無しさん
07/05/25 20:12:11
まぁたぶん今回のはコールバック関数のアドレスとして NULL を渡したとか
なんかそんなことだろうね。IP もゼロだし。

342:デフォルトの名無しさん
07/05/25 20:44:07
>>341
IP???????????

343:デフォルトの名無しさん
07/05/25 20:50:44
>>342
Instruction Pointer。どこのコードを実行するかを格納しているレジスタ。
「アドレス 00000000 で」の部分が当該コードのアドレスを示している。

それはともかくとして、Win32 とかいう以前の話ばかり・・・
レベル低すぎだろいくらなんでも。
この板には初心者スレとか無いのか?

344:デフォルトの名無しさん
07/05/25 20:55:26
たくさんあります

345:デフォルトの名無しさん
07/05/25 21:04:59
>>343
レベル低いのはお前の方では?
コールバック関数のアドレスとして NULL を渡したとかそんなレベルの話でないと思われ。
レベルの低い奴はレベルの低い事しか考えられないと思われても仕方ない。

346:デフォルトの名無しさん
07/05/25 21:10:02
tabcontrolってデフォルトでフォーカスの四角を表示しない機能って
ありませんでしたか?

もしあったら教えてください。

347:デフォルトの名無しさん
07/05/25 21:18:05
>>327
>読み込み違反ってどんな時に起きるんでしょうか?
>LoadLibraryでDLLを呼び出してDLL内の関数を実行すると、
>「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
>となります。そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。

とりあえず、考えられるのはこんなとこか?

考察1.まず、LoadLibraryの戻り値はちゃんと値が入っている?
考察2.Unicode版,ANSI版の関数名の問題
     引数に文字列を要求している場合はGetProcAddressには明示的に指定しないいけない。
     CreateFile→ANSI版はCreateFileA, Unicode版はCreateFileW
考察3.GetProcAddressの戻り値のキャスト先の問題。
     多分>>332のわんこが云う様にGetProcAddressの戻り値FARPROCの代入先が不完全で、
     関数コール時できてない。
考察4.引数が3つの関数と引数が4つの関数は同一ライブラリなのか?
     例えばLoadLibraryの実験で、
     一般的な引数3つの関数(Kernel32.libのCopyFile関数)で確認したが、
     引数4つのFloodFill関数は未チェックでKernel32.libをGdi32.libに直してない。
考察5.ライブラリの位置が巧く取得できてない。
考察6.実は、呼び出し元のアプリケーションはVBで、巧くDeclarできてない。

348:デフォルトの名無しさん
07/05/25 21:20:52
僕バッカー!

349:デフォルトの名無しさん
07/05/25 21:22:36
>>346
スタイルのTCS_TABSを外す

350:デフォルトの名無しさん
07/05/25 21:22:51
>>345
>コールバック関数のアドレスとして NULL を渡したとかそんなレベルの話でないと思われ。
おそらくそこまでも行っていないレベルの話だと思われ
NULL をコールしてるんだよね、たぶん。

351:デフォルトの名無しさん
07/05/25 21:25:54
DLL自作なのかな?

352:デフォルトの名無しさん
07/05/25 21:29:06
>>346 TCS_FOCUSNEVER ?

353:名無し@沢村
07/05/25 21:40:29
画面の描画プログラムで、hdcの互換メモリデバイスコンテキストmemdcとmemdc2をつくり、
memdcのほうに黒い線、memdc2のほうに赤い線を描いて、それらをhdcにコピーして
表示するプログラムをつくったんですが、何故かmemdc2のほうの赤い線がWM_PAINTが
送られると消えてしまうんですが、どこが悪いのでしょうか?
プログラムはまったく同じようにmemdcとmemdc2の描画とコピーを並べて書いたんですが…?

354:デフォルトの名無しさん
07/05/25 21:44:35
memdcとmemdc2をSRCPAINTにしてないとか

355:デフォルトの名無しさん
07/05/26 01:08:52
MeteredSection
・パフォーマンスはCriticalSection並で
・セマフォの様にカウンタもあり
・win9x,NT,CEで使える
というステキな同期機構があるようなんですが、

MeteredSectionを作成する関数
CreateMeteredSectionをググっても(日本語)
ヒット数が数件しかありません

これは一般には使われてないんでしょうか
だとしたら理由はなんでしょう

356:デフォルトの名無しさん
07/05/26 01:14:54
そんなに必要じゃないからだろ マイナーだし

357:デフォルトの名無しさん
07/05/26 01:15:52
>>355
単純にみんなが知らないだけだと思われ。
ってか、自分もはじめて知った

358:デフォルトの名無しさん
07/05/26 01:22:24
>>355
URLリンク(msdn.microsoft.com)

マイナーなだけ。
知ってる人は知ってる。

359:デフォルトの名無しさん
07/05/26 01:50:48
唐突な質問すみません。
WAVファイルが使用されているかどうかをチェックするにはどうすればいいでしょうか?

360:デフォルトの名無しさん
07/05/26 02:02:34
アクセス日時でも調べたら?

361:デフォルトの名無しさん
07/05/26 02:09:16
使用とはつまり今使用中なのかどうかを調べたいのですが、

362:デフォルトの名無しさん
07/05/26 02:13:31
そのWAVファイルをごみ箱に投函。

入ってくれなければ使用中。以上

363:デフォルトの名無しさん
07/05/26 02:26:09
さうんどどらいばにおくられているはけいがそのわヴのものならしようちゅう。いじょう。

364:デフォルトの名無しさん
07/05/26 02:31:54
スレ違いでしたら誘導をお願いします

CreateProcessで作成したプロセスを安全に終了させたいと思っています。
メッセージループを持っているプロセスならWM_CLOSEで事足りるのですが、コマンドラインアプリケーションの場合はどうすればいいのでしょうか?
たとえばpingの場合control-Cを送れば終了できるんじゃないかと思い、パイプを作成してETXを送ったのですが終了できません。
また、command.comのプロンプトはCR(control-M)でちゃんと改行と処理されるのですが、パイプを通した場合はLFCRを送らなければ認識されません。
パイプの処理に関して何か根本的な勘違いをしているのでしょうか?

365:デフォルトの名無しさん
07/05/26 02:42:52
>>364
どういう使い方してるの?
ウチの環境ではpingし終わったら勝手に閉じるけど?

366:デフォルトの名無しさん
07/05/26 05:59:02
command.comってことは98・・・か・・・?

367:デフォルトの名無しさん
07/05/26 08:50:30
>>364

URLリンク(support.microsoft.com)

まず、ここのサンプルを試してみ

368:デフォルトの名無しさん
07/05/26 10:16:56
シグナルを送るんだよ

369:デフォルトの名無しさん
07/05/26 11:05:33
>>364
安全に終了させる汎用的な方法は無い。
WM_CLOSEで終了したとしても、それが正規な終了方法でないアプリがあるかもしれない。
結局各アプリを解析して、個別の対応を採らなければならない。

370:デフォルトの名無しさん
07/05/26 11:08:36
ウィンドウクラスのとこで
winc.hIcon = LoadIcon(NULL , (LPCSTR)IDI_ICON2);
で、アイコンを指定しているのですが、何故かふきだしに i マークがついたアイコンになります。
リソースに自分で作成したICONを追加もしているのですが、何か上の式は間違ってるのでしょうか?

371:デフォルトの名無しさん
07/05/26 11:18:46
>>370
MSDNで第一引数の説明を調べるんだ

372:デフォルトの名無しさん
07/05/26 11:37:37
>>371
ああああありがとうございます(泣)
NULLをhInstanceにしたらアイコンが変わりました!
ぬるぬる

373:デフォルトの名無しさん
07/05/26 12:07:52
ぽぽ

374:デフォルトの名無しさん
07/05/26 13:26:33
>>364
GenerateConsoleCtrlEvent

375:364
07/05/26 19:25:12
>>365
現在親プロセスからコマンドラインアプリケーションを起動して標準出力を拾っているのですが、親プロセスを終了したときにそのコマンドラインアプリケーションを安全に終了させたいのです

>>367
拝見したところパイプの接続は私のテスト環境と同じようで、子プロセスの終了も親からでは無くping同様に子プロセスのChild.EXEが勝手に終了するのを待つだけのようでした。

>>369
起動させるプロセスは限られていますので私も個別に対応したいと考えています
たとえばCOMMAND.COMならば'EXIT'を送れば終了でき、pingならばctrl-Cで終了できるはずです。
しかし前者は成功するのですが、後者は失敗しました
パイプでは制御コードを送れないってことはありませんか?

376:デフォルトの名無しさん
07/05/26 19:35:47
>>364
ちょっ話変わるけど、
コンソールリダイレクトの想定先は何?
例えば、コンパイラのキッカーみたいなもの?
バッチ処理の結果を取得したい為?

377:デフォルトの名無しさん
07/05/26 19:35:53
自作アプリケーションにXPスタイルを適用しつつ
一部のコントロール(ステータスバーなど)のみをXPスタイル以外ってできないのかな?

378:デフォルトの名無しさん
07/05/26 20:01:01
>>377 SetWindowTheme

379:355
07/05/26 20:15:21
>>356
>>357
>>358
ありがとうございます

MSDNの記述を読む限り、とても有用な機能だと思ったんですが
何でマイナーになってるんでしょうね・・・

380:デフォルトの名無しさん
07/05/26 20:22:20
>>379
強いて言えば、無くても作れるからかも
URLリンク(msdn.microsoft.com)

381:デフォルトの名無しさん
07/05/26 20:27:33
>>379
自分で作らにゃならんし、メンテナンスや互換性を考えると面倒くさいからでしょ

382:デフォルトの名無しさん
07/05/26 20:27:36
>>379
URLリンク(forums.microsoft.com)
MeteredSectionってもともとはAPIじゃなくて
あるユーザーが勝手に作ったものみたい。

383:デフォルトの名無しさん
07/05/26 21:04:50
>>375
>>374は無視ですか。パイプを作ってCtrl-Cを送る必要自体ないと言ってるんだけど

384:デフォルトの名無しさん
07/05/26 21:13:22
>>383
心配しなくても無視されないよ。
パイプを作ってCtrl-Cを送ってもどうせ効かないから。

385:デフォルトの名無しさん
07/05/26 21:32:05
逆にパイプのデータ経由で死ねるなら、
パイプはバイナリデータを送れない、という話になる

386:デフォルトの名無しさん
07/05/26 21:33:25
その理屈はおかしい

387:デフォルトの名無しさん
07/05/26 23:57:14
ドラッグドロップとImageListについて質問です。

DropTargetの側で
ImageList_BeginDragやImageList_DragMove等のAPIを使って
ドラッグ中の画像を作るのは邪道でしょうか?
実際動いてはいるんですが。
やはりDropSourceの方でやるものなのでしょうか。

あと一つ、
ImageList_BeginDragで始まったあとに
表示されている画像を変更することはできないんでしょうか。
ImageList_Replaceは動作しませんでした。


388:デフォルトの名無しさん
07/05/27 00:11:18
ども。>>364です

>>376
ちょうどそんな感じです

>>383
ご指摘ありがとうございます。完全に見落としていました

>>374
私が探していた方法はまさしくコレです
コマンドラインアプリケーションにもちゃんとExitProcessが標準で実装されていたんですね
プログラム側で入力シーケンスを監視してctrl-C信号を拾っているんだと思っていました
色々とありがとうございました。

389:デフォルトの名無しさん
07/05/27 00:23:29
>>388
だからシグナル送れといっとるだろうが

390:387
07/05/27 00:39:55
自己解決しました。
同スレッドからD&Dされると挙動不審になるみたいです。
別スレッドからなら(一見)問題ないみたいですが。
止めることにしました。


391:デフォルトの名無しさん
07/05/27 02:35:12
猫でもわかるプログラミングってどこにあるんですか?

392:デフォルトの名無しさん
07/05/27 02:36:22
「猫でも」でぐぐれ

393:デフォルトの名無しさん
07/05/27 06:26:12
本屋に有る

394:名無し@沢村
07/05/27 08:40:17
hdc=GetDC(hwnd);

memdc=CreateCompatibleDC(hdc);
memdc2=CreateCompatibleDC(memdc);
hBita=CreateCompatibleBitmap(hdc,maxX,maxY);

SelectObject(memdc,hBita);
SelectObject(memdc2,hBita);
PatBlt(memdc,0,0,maxX,maxY,PATCOPY);
PatBlt(memdc2,0,0,maxX,maxY,PATCOPY);

で、後にSelectObjectしたほうのmemdc2がうまく作成されてないようなのですが、
(hdcにコピーして再描画すると消えてしまうので)
memdc2をうまく作成するにはどうしたらいいでしょうか?

395:デフォルトの名無しさん
07/05/27 10:54:49
ダイアログを、呼び出したアプリケーションのフォームの最前面に表示したいのですがどうすればよいのでしょう?
WS_EX_TOPMOSTや、SetWindowPosでHWND_TOPMOSTだと、他のアプリの前面にも出てしまいます。
あくまで呼び出したアプリの最前面にしたいのです。

396:デフォルトの名無しさん
07/05/27 11:04:26
WM_OVERLAPPED & WM_CHILD & WM_POPUP

397:395
07/05/27 11:10:18
失礼しました。
DialogBox関数の第3引数がうまく設定できていないのが原因でした。
お騒がせしました。

398:デフォルトの名無しさん
07/05/27 11:14:09
>>394 そのSelectObjectは何かのギャグか?

399:デフォルトの名無しさん
07/05/27 12:17:07
>>394
URLリンク(msdn.microsoft.com)
> アプリケーションは、1つのビットマップを一度に複数のデバイスコンテキストで選択することはできません。

400:名無し@沢村
07/05/27 12:52:00
>>399
つまり描画用のデバイスコンテキストを複数つくることはできないということですか?
ペイントソフトのアンドウリドゥとかはどうなっているんだろう?
メモリデバイスコンテキストを複数つくれば、そこにコピーして待避させておいて、簡単に実装できるんだけど…

401:デフォルトの名無しさん
07/05/27 12:54:49
逆にビットマップを複数作ればいい

402:名無し@沢村
07/05/27 12:58:04
私がつくりたいのは、
例えば赤と黒で画面に線を描画して、
あとから赤の線だけを消して、赤の線の下に引かれている黒い線もちゃんと復元できるようなソフトなんですけども…

黒い線と赤の線を別々のデバイスコンテキストに描画すれば簡単だと思ったんですがテ…

403:デフォルトの名無しさん
07/05/27 13:13:53
操作履歴があるなら、それをもとに
「ファイルを開く」から復元できるやろうが。

404:デフォルトの名無しさん
07/05/27 13:19:52
例えば、同じビットマップを複数のDCに選択できたとしたら、
片方のDCに書き込んだ内容はもう片方のDCでも同じ内容になるだけだが・・・

なんでビットマップを複数作ルことを思いつかないんだ?

405:デフォルトの名無しさん
07/05/27 14:23:49
熾烈な首位争いを繰り広げる、日本とハンガリー。
日本は現在ハンガリーに500万クリックほど差をつけているものの、
これで安心してはいけない。
我々のこれまでの最大クリック速度は8万〜9万回/分が限度だが、
ハンガリーはなんと13万回/分を叩き出した実績がある。
実際、1400万の差を一晩でひっくり返されている。

今はハンガリー時間で7時を過ぎたところ。
彼らの動きが活発になり始めるころだ。
おまけに月曜日は祝日だという確定情報もある。
今の戦力では心もとない、まだまだ戦力を募集中だ。

もはやVIPPERだけでは太刀打ちできない。
これはもはや、VIPの枠を超え、2ch全体で立ち向かう以外に勝機はない。
諸君の参戦を切に願う。

現行スレ
【首位奪還】一番クリックした国が優勝 Click82【天王山の決戦!!】
スレリンク(news4vip板)

まとめサイト
URLリンク(www33.atwiki.jp)


406:デフォルトの名無しさん
07/05/27 14:49:49
>例えば赤と黒で画面に線を描画して、
>あとから赤の線だけを消して、赤の線の下に引かれている黒い線もちゃんと復元できるようなソフトなんですけども…

レイヤーのことだろうか?

407:デフォルトの名無しさん
07/05/27 16:23:17
この手のは、BitBltをパワーアップさせて、転送先や転送元に、
HDCだけじゃなくHWNDやHBITMAPも渡せるような
関数を作っておくと楽かな。

408:デフォルトの名無しさん
07/05/27 18:36:53
>>402
スレ違いの回答になるが・・・・
Undo/Redoをやりたいなら、ビットマップレベルで履歴を保存するより
描画内容(座標・色・線種など)で履歴を保存するほうがいいと思うよ。


409:デフォルトの名無しさん
07/05/27 18:42:42
質問です。F1を押したときにある動作をさせたいのですが、
ウィンドウプロシージャでWM_KEYDOWNでメッセージを受け取る事が出来ません。
起動した直後は出来るのですが、その後、エディットコントロールにフォーカスを移動した時とかに
メッセージを拾う事ができなくなります。エディットコントロールやボタンにフォーカスがある状態でも
メッセージを受け取るにはどうすればいいのでしょうか?

410:デフォルトの名無しさん
07/05/27 18:54:56
キー関係のメッセージははフォーカスを持つウィンドウに送られる

メッセージをDispatchする前に、アクセタレータを使うなり何なりすること。

411:デフォルトの名無しさん
07/05/27 18:56:55
ごめtypo
*アクセラレータ

TranslateAcceleratortとかHACCELとかのことです

412:デフォルトの名無しさん
07/05/27 19:56:41
HP見ながら頑張ってみたのですが、上手くいきません。
肝心な部分だけ書いてみました。どこかいけないところはあるでしょうか?

//aaa.rc
IDR_ACCELERATOR1 ACCELERATORS
BEGIN
  VK_F1,  ID_MYHELP,  VIRTKEY,  NOINVERT
END

//resource.h
#define ID_MYHELP 40001

//aaa.cpp
WinMain(){
  haccel = LoadAccelerators(hInstance, (LPCSTR)IDR_ACCELERATOR1);
}

WndProc(){
  case WM_COMMAND:
    if(LOWORD(wp)==ID_MYHELP) MessageBox();
    return 0;
}

413:デフォルトの名無しさん
07/05/27 20:07:28
LoadAccelerators(hInstance, MAKEINTRESOURCE(IDA_ACCEL1)); とか
TranslateAccelerator(hwnd, hAccel, &msg) 抜けとかかなーといってみる


414:デフォルトの名無しさん
07/05/27 20:12:37
TranslateAcceleratorは?
あと、(LPCSTR)IDR_ACCELERATOR1よりもMAKEINTRESOURCE(IDR_ACCELERATOR1)
LOWORD(wp)よりもGET_WM_COMMAND_ID(wp, lp)お薦め

415:デフォルトの名無しさん
07/05/27 20:32:19
>>413-414
TranslateAccelerator()を入れたら動作しました!
大事なところを見逃してました。ありがとうございます。

416:名無し@沢村
07/05/27 20:39:52
>>404
>なんでビットマップを複数つくることを思いつかないんだ?
memBit1=CreateCompatibleBitmap(hdc,x,y);
memBit2=CreateCompatibleBitmap(hdc,x,y);
のようにでしょうか?
表示用のデバイスは1つ(hdc)しかないので、ちょっと無理っぽい気が…

417:デフォルトの名無しさん
07/05/27 20:40:34
なんで見えない番号があるのかと思ったら
なつかしいな沢村

418:デフォルトの名無しさん
07/05/27 20:42:47
TranslateAcceleratorは>>411でわざわざ言ってあげたのにな

419:名無し@沢村
07/05/27 20:47:02
>>408
描画内容(座標、線種、色)を数値データとしてスタックに保存するのでしょうか?
データを画面に復元するときはどうすれば?
思い付くのはSetPixcelですが、
SetPixcelで1点ずつ画面に点を打っていくのでは、時間がかかりすぎるような気が…

420:名無し@沢村
07/05/27 20:52:27
>>417
なつかしいな。
プログラミングは当分休止。つーかいまプログラミングしてるけど…
いま投稿用の漫画描くためのソフトつくろうと思って質問しまくっているとこ…

これができたら、プログラミングはお休みして漫画に専念する。

421:デフォルトの名無しさん
07/05/27 21:00:41
>>419
既にAPIの質問ではないと思うが
基本的な方法としては、
1、画像そのものを最初にどこかに保存しておいて
2、描画時に使ったコマンドの内容を保存しておく。 点を打った、線を引いた、円を描いたというようなね。

そして、巻き戻すときは、1から順にコマンドを再現して、一つ手前で止めればいい。

422:デフォルトの名無しさん
07/05/27 21:26:41
WM_CHARメッセージで、送られてきた文字を取得することは可能なのでしょうか?


423:デフォルトの名無しさん
07/05/27 21:29:18
>>422
お前が手の届く範囲にいたら殴りたい。
なんで訊く前にちょっと調べてみないわけ?
ほんの少し調べれば分かることなのに。

424:デフォルトの名無しさん
07/05/27 21:37:34
本人にとって、2chで聞く=調べる、なんだろうな

お前の手の届く範囲にはディスプレイがあるだろうから代わりにそれでも殴っとけ

425:デフォルトの名無しさん
07/05/27 21:52:49
いえ、質問の仕方が適当すぎました・・・。
WM_CHARのwpに入ってるっぽいのですが、その取り出し方がわかりません。
MessageBox()で表示させようと、(PTSTR)&wpにしても、文字コード取得しようとして(int)wpで見てみても
なんか全然変な値が入っててわけわかりません。

426:デフォルトの名無しさん
07/05/27 22:01:52
あのさあ、ちゃんと調べてんの?
ぐぐっただけで詳しい使い方なり情報なりわんさか出てくるんだが。

TranslateMessageはちゃんと読んでんよな?
だったらWPARAM型のwpにキャラクタコードが入ってるんだが。
ちなみにキーコードじゃないぞ

俺も殴りたくなってきた

427:デフォルトの名無しさん
07/05/27 22:02:22
殴るなら俺を殴れ

428:デフォルトの名無しさん
07/05/27 22:15:19
>>419
SaveDC, RestoreDCじゃダメか?

429:デフォルトの名無しさん
07/05/27 22:16:38
>>425
Cの文字の扱いをまるで理解していないと見た。

430:デフォルトの名無しさん
07/05/27 22:36:50
いえ、殴るなら僕を殴って下さい。それはそのはず、入ってるわけがありませんでした。
WM_COMMANDで拾ってそのパラメータからWM_CHARの処理やってたので、
そのままWM_CHARを捕まえたような気分になってました。

431:デフォルトの名無しさん
07/05/27 22:44:41
>>430
あんた誰だよ。>>425か?

名乗りもせずいきなり僕などという一人称使うな。殴るぞ

432:412
07/05/27 22:57:40
>>412-415
これでF1はどこにカーソルがあっても機能するようになったのですが、
F2、F3は機能しなくなりました。F2、F3等は、あるエディットコントロール内にカーソルが
ある時のみ有効にしたくて、F1だけ特殊な感じでした。これはF2、F3とかも
アクセラレータに持っていかれてしまってるせいなのでしょうか?

433:デフォルトの名無しさん
07/05/27 22:59:21
>>431
すみません、俺が悪かったです。もう名乗りません。
違う方法でなんとか解決できたのでなんとか出来ました。

434:デフォルトの名無しさん
07/05/27 23:25:20
>>433
だーかーら、名乗りもせず「俺が」なんて言うな、っていってんだよ
>>430です、くらい書けよ
誰だかわからんだろう

435:デフォルトの名無しさん
07/05/27 23:28:17
いえ、それは俺です。

436:デフォルトの名無しさん
07/05/27 23:29:05
>>434
俺だよ俺

437:デフォルトの名無しさん
07/05/27 23:34:17
だから俺が俺なんだって
勝手に人の名前騙るなよ

438:デフォルトの名無しさん
07/05/27 23:36:23
>>437
すまん、お前が俺か。
悪かった。

439:デフォルトの名無しさん
07/05/27 23:54:24
>>412
もしかして: WM_HELP
なんか、ID_MYHELPとか書いているし。

440:412
07/05/28 00:02:55
>>439
いえ、WM_HELPではありません。まぁ同じなんですけど、
F1ボタンを押したら自分で作ったヘルプのウィンドウが出るようにしています。
それはいいんですが、F2〜F8にもその他の機能を用意していて、
あるエディットコントロールをサブクラス化してそのプロシージャで
WM_KEYDOWNで拾っているのですが、それが機能しなくなりました。
F1だけをアクセラレータで変にやったせいなのでしょうか?

441:デフォルトの名無しさん
07/05/28 00:12:26
>>420
コミックスタジオでも買った方が良いぞ

あ、マンガ描くためのソフトから作ったのを作品の
ネタにするのなら恐れ入る

442:名無し@沢村
07/05/28 00:16:43
突然ですが、2つのメモリデバイスコンテキストを合成して描画することに成功しました。
黒い線の画面のほうをBitBltのSRCANDで画面にコピーし、
赤い線の画面のほうをSRCCOPYで画面にコピーしたら、
再描画をかけてもどっちの線も消えませんでした。
ただ、この方法だと、赤い線も黒くなってしまうようです…

赤い線が黒くならないようにするには、どうしたらいいのでしょう?
いくつも組み合わせがあるので、全部ためすのは、気が遠くなるほど時間がかかりそうなので…

443:デフォルトの名無しさん
07/05/28 00:20:18
組み合わせとは何の組み合わせ?

444:デフォルトの名無しさん
07/05/28 00:30:55
ねむい

445:デフォルトの名無しさん
07/05/28 00:58:48
質問です。
CでWindowsプログラム作るため、Win32APIを学ぼうと思っていろいろ調べている途中で気になったことがあります。
テンプレのWin32 API入門というサイトではWin32API学ぶ上で、
windowsの知識とアーキテクチャの知識が必須だと書かれていました。
そこで、「コンピュータの構成と設計」「アーキテクチャ徹底解説MicrosoftWindows2000・・・」
などの書籍でコンピュータアーキテクチャについて学んだ方がいいのでしょうか?
お金に余裕がないので無駄な出費は避けたいです。
ちなみに私は、基本情報技術者試験の知識とCの入門書の知識くらいしかもっていません。
御回答よろしくお願いします。

446:デフォルトの名無しさん
07/05/28 01:02:31
パソコン初心者でもなければ別に要らないと思う

447:デフォルトの名無しさん
07/05/28 01:02:50
いらん

448:デフォルトの名無しさん
07/05/28 01:03:19
その程度は、Win32APIを色々試しているうちに自ずと判ってくるから要らない。

449:445
07/05/28 01:09:36
>>446-448
御回答ありがとうございました。
ではこのままWin32APIの学習に入ろうと思います。

450:デフォルトの名無しさん
07/05/28 02:30:45
Windowsプログラムを作るためならば、APIから学ぶのは止めたほうがいい。
実際開発では窓とかはフレームワーク任せだからな。それで問題ない。
ど〜しても、変態的な非効率な開発を求めるならAPIから始めることを止めはしない。

451:デフォルトの名無しさん
07/05/28 02:59:11
>>449
>>450の意見と思いっきり逆のタイトルですまんが

APIで学ぶWindows徹底理解
URLリンク(www.amazon.co.jp)

この本はまじでおすすめ。
雑誌連載のムック化だから、それぞれのトピックは完全に独立してて
一つ一つ段階的に学習していく、って使い方はできない(想定されてない)けど、
それぞれに読み応えがあるし、なにより文章がとても上手くて面白い。
内容はタイトルどおりで(「徹底」はちと言いすぎか)、
APIの使用例を通してWindowsの仕組みや叩き方が結構クリアに見えてくると思う

ただし、Cの基礎が分かっていることが条件。
あとソースはBCC用だがVCのことも全体に渡ってちゃんと配慮して書かれてる

まぁ服毒本として興味があればどうぞ


452:デフォルトの名無しさん
07/05/28 05:26:58
XPのタスクマネージャのプロセスタブと同じ様な働きをするプログラムを作ってます。
本物のタスクマネージャのプロセス一覧でユーザー名を有効にすると、
LOCAL_SERVICEやNETWORK_SERVICEといったユーザー名の
プロセスが表示されますが、これらのプロセスをOpenProcessTokenで
開こうとするとGetLastError() == 5のアクセス違反でを取得できません。
ログインユーザーやSYSTEMのプロセスなら成功するのですが、
こういった****_SERVICEのプロセスからユーザー名を取得する
方法がありましたら教えてください。
Web検索しても成功してる人の記事が見つかりませんでした。

ぶっちゃけ下の人と同じ事をしたいのですが、
リンク先の回答者が教えているcodeprojectの方法では
取得する事はできない様です。
URLリンク(rararahp.cool.ne.jp)


453:デフォルトの名無しさん
07/05/28 06:03:28
すいません、アクセス違反じゃなくて、
GetLastError() 5 「アクセスが拒否されました。」
ってエラーです。

454:デフォルトの名無しさん
07/05/28 06:31:58
開き方が悪い

455:デフォルトの名無しさん
07/05/28 08:08:45
最低限必要なところのAPIくらい理解しとかんと問題が起きたときにどうにもならん

456:デフォルトの名無しさん
07/05/28 08:14:01
>>442
そうか?
小さいBMPを2つ作って、
組み合わせをプレビューをすればいいんじゃない?

Photoshopとかあれば、もっと容易だけど

457:デフォルトの名無しさん
07/05/28 08:44:38
>>453
偽装しておけ

458:デフォルトの名無しさん
07/05/28 10:08:22
ツールバーのアイコンに指定する背景色のカラーコードって何を指定すると透過になるんですか?

459:デフォルトの名無しさん
07/05/28 10:10:09
イメージリストを作るときのフラグによって異なる

460:445
07/05/28 10:59:14
いろんな回答がでて、よく分からなくなってきました。
最終的にDirectX使いたいという場合はどうなのでしょう?


461:デフォルトの名無しさん
07/05/28 11:04:22
DirectXとWin32API はあんまり関係ない。
API直接やDirectX直接を身に付けたいなら 参考書を買ってDelphiでやるという手がある。
API/DirectXの参考書はC/C++で書かれているから、これをC/C++のままコピペしたら
動くのは当然だけど勉強には、あんまりならん。
Delphiに直しながらやれば結構勉強になる。


462:デフォルトの名無しさん
07/05/28 11:17:27
>>460
DirectX 入門

>>461
Delphiはマジ死亡しているんで知らないなら覚えるだけ無駄。
移植の問題ありまくりなのに素人に、わざわざ複雑な方法を提案してどうする馬鹿か?

463:デフォルトの名無しさん
07/05/28 11:18:25
>>461
Delphiの布教乙

464:デフォルトの名無しさん
07/05/28 11:22:02
>>462
  WIN32APIを今さらやるのも、Delphiやるのも同じだろう。
トータルで速い方法を説明してるだけ。
DelphiのVCLはWin32APIの非常に素直なラッパで、VCLを理解すればAPIの作法も理解出来るからね。
MFCでやるよりはずっといい。

465:デフォルトの名無しさん
07/05/28 11:22:39
DirectX はコピペだけでもやること多いのに、さらに言語移植て…

466:デフォルトの名無しさん
07/05/28 11:23:33
>>464
ラッパライブラリから API を学ぶのは違うようなキガス

467:デフォルトの名無しさん
07/05/28 11:25:31
DirectXをやるのにDelphiを勧めるぐらいならC++Builderにしろよ

468:デフォルトの名無しさん
07/05/28 11:26:14
APIって学ぶものなの?
こんなんあったよな〜ってMSDN漁って
挙動とか注意点とか調べて使うだけじゃない?

469:デフォルトの名無しさん
07/05/28 11:28:00
>>468
最初の作法とイベント駆動まわり、MSDNの見方だけは 慣れとく必要がないかな?

470:デフォルトの名無しさん
07/05/28 11:37:09
>>464
>WIN32APIを今さらやるのも、Delphiやるのも同じだろう。
同じじゃねーよ!

471:デフォルトの名無しさん
07/05/28 11:41:58
>>465
DirectXは COMで IDispatch も持ってるから、 Delphiからだと実はVBのようにもアクセス出来る
インターフェースを定義せずに、OLEVariantでアクセス出来るわけ。
ただし遅いけど挙動を見るお試しならまあ十分


472:デフォルトの名無しさん
07/05/28 11:44:46
>>460
Win32APIでWindowsプログラミングは激しく不向き。
窓一枚で100行とか書かされるからな(コピペですむにしても)。

ただDirectXアプリは窓一枚出せば枠組みはそれでおしまいだから十分いける。

言語に関してはWindowsでCが最適な分野というものはほぼ存在しない。
Cの学習が主眼でないならC++なんかの他の言語の方が後々効率がよい。
C++はCの知識の延長で使うだけでもだいぶ便利。

>「コンピュータの構成と設計」「アーキテクチャ徹底解説MicrosoftWindows2000・・・」
この辺は日本語学習における日本文化の知識みたいなもんでさしあたり不要。
最低限の説明はDirectXの本に載っている程度のもので十分。

473:デフォルトの名無しさん
07/05/28 12:34:07
>>471
サンプルやヘルプがC++を前提に書かれていて、
いちいち言語の違いを意識して書き直さなければならないので、
挙動を見るだけでも完全に不向き。

474:デフォルトの名無しさん
07/05/28 12:37:12
>>461は自分がやった方法が一番良いと思っている可哀想な子

475:デフォルトの名無しさん
07/05/28 13:02:54
>>473
質問者はC++じゃなくてCらしいから
->lpVtbl->ブフォァアな目にあうけどな

476:デフォルトの名無しさん
07/05/28 13:10:43
全く別の言語を扱うより遙かにマシ。

477:デフォルトの名無しさん
07/05/28 13:10:57
ぶふぉぁあ?

478:デフォルトの名無しさん
07/05/28 13:18:39
>>477
次のバージョンで追加されるメソッドです
たぶん

479:デフォルトの名無しさん
07/05/28 13:20:29
そうなのか、ダイレクトエッキスには日本語のメソッドがあるんだなたぶん

480:デフォルトの名無しさん
07/05/28 13:53:17
COMの話だろ

481:デフォルトの名無しさん
07/05/28 14:31:16
昔は、Delphiから CreateOleObject('CLSID_DirectInput') とか出来たけど DirectX8から出来なくなった


482:445
07/05/28 15:23:03
ではアーキテクチャについては放置し、C++の方が楽みたいなのでそちらも覚えながら、
C++でDirectX使えることを目標にします

483:デフォルトの名無しさん
07/05/28 15:27:18
DirectXならDirectXだけの世界だから大丈夫 Win32もとなると大変だけどね。

なお、言語の複雑さは C++ >>> Delphi/C#/VB > C だから覚悟はしておいてね

484:デフォルトの名無しさん
07/05/28 15:46:39
C#って結構難しいよ

485:デフォルトの名無しさん
07/05/28 16:15:54
>>483
>言語の複雑さは C++ >>> Delphi/C#/VB > C
C++の全てを理解しようとすればそうかもしれんが、DirectX/MFC等を使うのに必要最低限の知識でいいなら、
Cを(本当に)知ってる人なら3日もあればOKでしょう。


486:デフォルトの名無しさん
07/05/28 16:21:02
言語論争ウゼェ

487:デフォルトの名無しさん
07/05/28 16:33:10
>>445君へ

まずは、君が言うとこのDirectXの大海に向かって漕ぎ出せばいいんじゃね?
悩んだら、CやSDKの掟みたいなものをクレクレで聞くんじゃなく、
自分なりの解答を得たうえでをここの荒くれどもに問い合わせればいいんじゃない?
(そこそこ罵声はあるけどビビらないで)

んで、気が付きゃ、君も荒くれどもの一員

488:デフォルトの名無しさん
07/05/28 16:37:47
>>486 素のAPIに触ろうなんて貴重な人材を自分の陣営に入れたくて必死なんだろ。 許してやれよ

489:デフォルトの名無しさん
07/05/28 19:16:09
ウィンドウの中にタブコントロールを作成し、それにアイテムを
1つだけ挿入するプログラムを書いたのですがうまくいきません。

以下のコードはメインウィンドウのウィンドウプロシージャが
WM_CREATEを受け取ったときに実行されるOnCreate関数です。

これを実行すると、ウィンドウの中に 250×150のサイズの立体的な
ダイアログ色の長方形が表示されますが、その長方形にタブは付いていません。
また、タブコントロールに挿入されているアイテムの数を表示するメッセージ
ボックスは "n=0"と表示します。なぜでしょうか?

1. throwは実行されない ⇒ タブコントロールの作成は成功している。
2. "挿入失敗"のダイアログは表示されない ⇒ アイテムの挿入にも成功しているはず。

490:デフォルトの名無しさん
07/05/28 19:17:26
void OnCreate(HWND hParent)
{
InitCommonControls();
HWND hTab = CreateWindow(WC_TABCONTROL,
"",
WS_CHILD | WS_VISIBLE,
0, 0, 250, 150,
hParent, (HMENU)123,
(HINSTANCE)GetWindowLong(hParent, GWL_HINSTANCE), 0);
if (!hTab) throw;
TCITEM item;
item.mask = TCIF_TEXT;
item.pszText = "hello";
if (TabCtrl_SetItem(hTab, 0, &item) == -1)
MessageBox(0, "挿入失敗", "", MB_OK);

// 挿入されたかどうかチェック
int n = TabCtrl_GetItemCount(hTab);
char buf[1024];
wsprintf(buf, "n=%d", n);
MessageBox(0, buf, "", MB_OK);
}

491:デフォルトの名無しさん
07/05/28 19:23:24
エディットコントロールにWS_VSCROLLでついてくるスクロールバーについてですが、
このスクロールバーが一番下までスクロールされているかされていないかを判断するには
SetScrollInfo()とGetScrollInfo()を使わなければいけないのでしょうか?
なんかSetScrollInfo()で設定しても、元からあるスクロールバーのままで何も変わらず
いまいち使い方がよくわからなくて困ってます。これらを使わずに
一番下までスクロールされているかそうでないかを判断する方法はないでしょうか?

492:デフォルトの名無しさん
07/05/28 19:26:43
あります

493:デフォルトの名無しさん
07/05/28 19:43:45
で?

494:デフォルトの名無しさん
07/05/28 19:48:07
bool 型は便利だな

495:デフォルトの名無しさん
07/05/28 20:33:48
>>492
>>491の後半部分しか答えてないよ。

496:デフォルトの名無しさん
07/05/28 20:42:39
全部の質問に答えたとは誰も言っていない。

497:491
07/05/28 21:29:42
どのように判断すればいいのでしょうか?

498:デフォルトの名無しさん
07/05/28 21:38:57
::GetScrollPos

499:デフォルトの名無しさん
07/05/28 21:46:11
>>489-490
> (中略)
> 2. "挿入失敗"のダイアログは表示されない ⇒ アイテムの挿入にも成功しているはず。
> (中略)
> if (TabCtrl_SetItem(hTab, 0, &item) == -1)
> MessageBox(0, "挿入失敗", "", MB_OK);

挿入のときはTabCtrl_InertItem(or TCM_INSERTITEM)。

あと、そこのSetItemは失敗してる。
にもかかわず"挿入失敗"のダイアログが出ないのは「== -1」にしているから。
ヘルプでSetItemの戻り値確認してみ。(InsertItemとの違いもな)


500:デフォルトの名無しさん
07/05/28 23:12:36
教えてください。
SetClipboardViewerで画像かどうかを識別するには何を使えばいいのでしょうか?

501:デフォルトの名無しさん
07/05/28 23:29:50
>>500
WM_DRAWCLIPBOARDでEnumClipboardFormats

502:500
07/05/28 23:35:32
>>501
ありがとうございます。やってみます。

503:デフォルトの名無しさん
07/05/29 00:02:42
自作アプリの起動時処理として、とある起動済みの(自作でない)アプリケーションのウィンドウハンドルを取得したいのですが
ウィンドウキャプションがしょっちゅう変わる上に
ウィンドウクラス名もATL:00xxxxxxといった名前でこれまたWindowsを再起動するたびに変わります

なので FindWindow では手が出ません。
どうやって取得したらいいでしょう?


現在は、起動時に「対象アプリケーションをクリックしてください」と表示して
SetCapture と WindowFromPoint の組み合わせでなんとか取得してますが自動化したいのです。

504:デフォルトの名無しさん
07/05/29 00:10:16
そのアプリの特徴を研究する。

505:デフォルトの名無しさん
07/05/29 00:23:09
子ウィンドウを列挙してそのパターンから判別ればよかろ。

506:デフォルトの名無しさん
07/05/29 00:31:55
プロセス列挙してモジュール名で判別なんてのも

507:503
07/05/29 00:59:45
>>504-506
506さんの方法でやってみます。
ありがとうございました。

508:デフォルトの名無しさん
07/05/29 02:03:14
>>503
FindWindowを使えばいいよ

509:デフォルトの名無しさん
07/05/29 05:31:25
>>503
アプリケーションの名前が判ってるなら、
GetWindowThreadProcessIdで指定の窓のpidを取得、
pidからOpenProcessでプロセスハンドル、
プロセスハンドルからEnumProcessModulesでモジュールハンドル、
GetModuleBaseNameでアプリケーション名を取得できる。
GetModuleFileNameExでフルパス名も取得できる。
以上を見つかるまでEnumWindowsで繰り返す。

EnumProcessesから辿る場合はどうすんのかな。


510:452
07/05/29 05:52:02
お願いします。
>>452

511:デフォルトの名無しさん
07/05/29 06:01:19
>>510
セキュリティソフトに蹴られたりしてね?
最近のセキュリティソフトはマルウェア対策でその手のアクセスを蹴る場合がある

512:デフォルトの名無しさん
07/05/29 06:12:48
あ、分かった
>>510
WTSEnumerateProcessesでプロセスのSIDが直接手に入る
OpenProcessTokenは必要ない

513:452
07/05/29 06:37:47
ありがとうございます。
SID取得できたんで解決しそうです。

514:489
07/05/29 06:39:32
>>499
ありがとうございます。
TabCtrl_InsertItemに変えるとうまくいきました。

515:452
07/05/29 07:06:24
NETWORK SERVICE、LOCAL SERVICE共に
無事LookupAccountSidで取得できました。

516:デフォルトの名無しさん
07/05/29 07:11:47
報告乙

517:デフォルトの名無しさん
07/05/29 07:20:17
なんか夜明けと共に明るい声が響いてくる

518:デフォルトの名無しさん
07/05/29 07:42:12
EnumWindows/EnumChildWindowsで見て特徴的な何かを探すかないんじゃないの

519:デフォルトの名無しさん
07/05/29 08:20:52
>>509
それをソースコードにするとどのようになりますか?

520:デフォルトの名無しさん
07/05/29 08:42:03
コンパイルすればプログラムになるだろ。

521:デフォルトの名無しさん
07/05/29 11:31:32
とにかく、ウィンドウタイトルもウィンドウクラスも変わるものに対して、
何を持って特定するのだろうか。EXEファイル名だって変えられるしな。

522:デフォルトの名無しさん
07/05/29 12:19:32
ファイル名が分かればファイルのチェックサムを算出できる。

523:デフォルトの名無しさん
07/05/29 12:31:16
>>503
なんか、ネトゲのチートツールかなにかを作ろうとしてるように見えるwww

524:デフォルトの名無しさん
07/05/29 12:56:08
ATL製ネトゲなんてあるのか・・・?

525:デフォルトの名無しさん
07/05/29 14:26:51
ふとした疑問なんだけど
Win32ファイバって一体どういう用途で使うと真価を発揮できるんだろ?

526:デフォルトの名無しさん
07/05/29 15:06:03
アセンブラが使えない言語でコルーチンを実装したい場合だろうな >>525
C++/Delphi はインラインアセンブラが使えるから自前でコールチンの実装が出来るから不要。
C#.NET VB.NET あたりの為に用意されたものだろう。

コルーチンは、get/put同士を接続するパイプとか
クライアント型で書かれたものをサーバ型に変換するといった場合に使う

527:デフォルトの名無しさん
07/05/29 15:07:04
フィボナッチ数列を求める

528:デフォルトの名無しさん
07/05/29 15:32:41
アニョハセヨー(SJIS)を
%E3%82%A2%E3%83%8B%E3%83%A7%E3%83%8F%E3%82%BB%E3%83%A8%E3%83%BC
に変換するのってなんか手っ取り早いAPIあったら教えてください。
最終的には↓にしたいです。
URLリンク(www.google.co.jp)

529:デフォルトの名無しさん
07/05/29 15:46:06
MultiByteToWideChar と WideCharToMultiByte

530:529
07/05/29 15:50:08
具体的には、MultiByteToWideChar でSJISからunicodeにし、
WideCharToMultiByte で unicodeから UTF-8にする。
最後に、そのバイト列をsprintf とかで文字列にすればよかろう。

531:デフォルトの名無しさん
07/05/29 17:40:47
#define VOID void とか #define CONST const は、どういう意味があるんですか?

532:デフォルトの名無しさん
07/05/29 17:44:23
>>531
#define マクロで置き換えてるだけ。
データ型が大文字(DWORD, UINT)なんで、
大文字で揃えたかったんだけじゃね?


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

4989日前に更新/234 KB
担当:undef