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


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

Win32API質問箱 Build16
501 名前:デフォルトの名無しさん :04/02/02 11:46
>>499
Win32APIに関することで来いよ
わざわざスレ違いネタを引っ張り出すな

502 名前:デフォルトの名無しさん :04/02/02 11:48
>>501
お前も無視しろ
いちいち反応すんな

503 名前:デフォルトの名無しさん :04/02/02 12:30
>>497
それのどこがWin32APIなんだと小一(ry

>>498
BHOの事か?


504 名前:デフォルトの名無しさん :04/02/02 13:12
>>497
using namespace std;とかstd::replaceとか?

templateスレもあるよ。
 【C++】template 統合スレ -- Part3
 http://pc2.2ch.net/test/read.cgi/tech/1066493064/

それより、こっちのほうがいいか。
 C++相談室 part27
 http://pc2.2ch.net/test/read.cgi/tech/1074454641/
 【初心者歓迎】C/C++室 Ver.4【環境依存OK】
 http://pc2.2ch.net/test/read.cgi/tech/1073473867/

505 名前:486Get!! :04/02/02 14:25
>>495 HOOKで行きます。 仕様を追加してくれたご親切な皆さん、感謝(涙)。

506 名前:デフォルトの名無しさん :04/02/02 14:27
PathRemoveBackslash
の使い肩を教えてください。
何かをinkcludeしてやるのが必要なのでしょうか

507 名前:デフォルトの名無しさん :04/02/02 14:40
自分で調べることが必要。

508 名前:デフォルトの名無しさん :04/02/02 14:40
なんでMSDN見ないんだよ。怒るよ!

509 名前:デフォルトの名無しさん :04/02/02 14:49
URLを分解してくれるAPIってなかったっけ?

510 名前:デフォルトの名無しさん :04/02/02 14:51
CreateFileでファイルを作成して

そのファイル名が格納されるときに、c:\test\test.txtとして保存した場合

格納される配列をFileNameとすると、中身は"c:\\test\\test.txt"となっているのでしょうか

そのFileNameを使用してiniファイルとして出力を

WritePrivateProfileString関数で行い、最後の引数をFileNameにしているのですが

うまく保存されません。どうしてなのでしょうか。よろしくお願いします。

511 名前:デフォルトの名無しさん :04/02/02 14:55
・一行空け見にくい
・何を質問しているのかさっぱりわからない

512 名前:デフォルトの名無しさん :04/02/02 14:57
>>510
どこで失敗しているのか、戻り値もチェックしないとわからん

デバッガ使えないのかな?
ステップで実行しながら戻り値や変数の中身をみるだけで勉強になるぞ

513 名前:デフォルトの名無しさん :04/02/02 14:57
>>509
ttp://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&q=URL+%95%AA%89%F0%81@API%81@%82%A4%82%F1%82%B1&lr=lang_ja

514 名前:デフォルトの名無しさん :04/02/02 15:00
>>513
見つかった。ありがと!

>>510
ソースファイル中のエスケープとごっちゃにしてる悪寒

515 名前:デフォルトの名無しさん :04/02/02 15:04
>>510
>CreateFileでファイルを作成して
>そのファイル名が格納されるときに、c:\test\test.txtとして保存した場合
この段階で意味不明っぽ。

516 名前:デフォルトの名無しさん :04/02/02 15:06
hFile = CreateFile(FileName, GENERIC_WRITE,0,
           NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,
           NULL);
でファイル保存作業を行わせてから
WritePrivateProfileString("SECTION", "THEME",rData,
FileName);
としてiniファイルを作り、そこにデータを保存したいのですが
うまく保存されないんです。

517 名前:デフォルトの名無しさん :04/02/02 15:11
>>516
CreateFileって必要?

518 名前:516 :04/02/02 15:15
>>517
保存する場所を選択できるような形にしたいので
CreateFileを使うと思ったので。

519 名前:デフォルトの名無しさん :04/02/02 15:16
>>516
CreateFileしなくてもWritePrivateProfileStringは自動的にファイルを作成する
たぶんCreateFileでハンドル握ってるから保存されん

520 名前:516 :04/02/02 15:32
>>519
ハンドルを閉じたらできました。
ありがとうございます。
皆さん、ありがとうございました。

521 名前:デフォルトの名無しさん :04/02/02 15:35
いやいや閉じるんじゃなくて作らなければいいのでは
これじゃ毎回初期化されるが・・・

522 名前:デフォルトの名無しさん :04/02/02 15:44
>>521
もう、見ちゃいないって

523 名前:519 :04/02/02 15:45
>>520だれも閉じろなんて言ってないよ...
WritePrivateProfileStringってのは独自のファイルI/Oをもってるからさ
クリされてイジイジされるとこまるんだ

524 名前:516 :04/02/02 16:01
ファイル選択→WritePrivateProfileStringでデータ読込
ではますいんですか?

525 名前:デフォルトの名無しさん :04/02/02 16:07
GetOpenFileNameでファイル選択すればいいんじゃないの?
CreateFileはファイル選択するAPIではないとおもうが

526 名前:デフォルトの名無しさん :04/02/02 16:07
>>524
ファイルがないときは自動的に作成されるはずだし、
あるときはそのファイルに書き込みされるはず。
だから、CreateFileするこたない。

ファイル選択とCreateFileは関係ないでしょ。


527 名前:デフォルトの名無しさん :04/02/02 16:08
根本的に勘違いしてる悪寒

528 名前:516 :04/02/02 16:19
CreateFile自体必要じゃなかったんですね。


529 名前:デフォルトの名無しさん :04/02/02 16:24
そもそもなんのためにCreateFileしようと思ったんだい?

まさかおまじない程度?('A`)

530 名前:デフォルトの名無しさん :04/02/02 16:50
最初はテキスト形式でキー値を出力させようとしていたので。


531 名前:デフォルトの名無しさん :04/02/02 18:00
とてもしょぼい質問で申し訳ないのですが
最小化または最大化されているウィンドウを
元の状態に戻すAPIかメッセージは
ありませんでしょうか?
よろしくお願いします。

532 名前:デフォルトの名無しさん :04/02/02 18:19
ShowWindow

533 名前:デフォルトの名無しさん :04/02/02 18:47
>>532
アリガトン

534 名前:脳豚 :04/02/02 22:15
アンチウィルスソフトとかって
あるプロセスがファイルを開こうとしたら
その前にファイルを開いてチェック !
みたいなことをやっているように思えるのですが。

こういうのってどうやってやるのですか?
標準のフックではAPIまでフック出来ないし・・。


535 名前:デフォルトの名無しさん :04/02/02 22:48
Unicodeベースでソースを書こうと思い立ったので
MessageBox(NULL, TEXT("ユニコードのメッセージ"), TEXT("ユニコードのタイトル"), MB_OK);
といったコードを書き、UTF-8Nで保存してコンパイルしてみたのですが正常に表示されません。
使ったコマンドラインはこのようなものです(MinGW3.3.1):
 gcc -s -mwindows -O2 -o uni sample.c

どのようにすれば正常に表示されるのでしょうか?ご教示お願い致します。

なお、UnicodeやUTF-8ではコンパイルエラーが出ました。
OSはWindows2000を使っています。

536 名前:デフォルトの名無しさん :04/02/02 22:50
>>534
標準じゃないフック使ってるから。
ってAPIフックなんて半分標準みたいなもんだが。

537 名前:デフォルトの名無しさん :04/02/02 23:01
>>535
それのどこがWin32APIなんだと小一(ry


538 名前:デフォルトの名無しさん :04/02/02 23:09
534じゃありませんが、

>>536
なんとおもしろそうな。
もし良かったらその手の解説がのっているサイトを教えていただけませんでしょうか。

539 名前:デフォルトの名無しさん :04/02/02 23:19
>>536
んなAPIあんの?
プロセス止めてテーブル書き換えてリスタートさせるしか方法ないんじゃないの?

540 名前:デフォルトの名無しさん :04/02/02 23:31
APIというか、カーネルドライバを挟んでるんじゃねーの?

541 名前:535 :04/02/02 23:45
>>537
MessageBoxは立派なWin32APIだと思ってるんですが、違うんですか?

542 名前:デフォルトの名無しさん :04/02/02 23:47
>TEXT("ユニコードのメッセージ")
これはちゃんとUTF-2文字列になるのかが問題だな。
あと、UNICODEを定義しないとMessageBoxAが呼ばれるはずだが。

543 名前:535 :04/02/02 23:56
>>542
ありがとうございます。直接MessageBoxWを使ってみました(-DUNICODEをつけてコンパイル)。
コンパイルエラーの類は出ないのですが、やはりおかしな文字列が表示されます。

TeraPadを使ってソースを書いているので、UTF-2(現UTF-8N?UTF-8ではgccが文句を言います)保存のほうは大丈夫だと思います。

544 名前:デフォルトの名無しさん :04/02/02 23:56
>>542
UTF-2などというものは存在しない。
UCS-2でしょ。
でも最近のWindowsはUCS-2ではなくUTF-16だったりするが。

545 名前:デフォルトの名無しさん :04/02/02 23:58
つーか、MingwがUTF-8で書かれたL""をUCS-2/UTF-16に変換してくれるかどうかの
問題じゃないのか?

546 名前:デフォルトの名無しさん :04/02/03 00:00
>>534,536
http://www.nai.com/japan/security/virB2003.asp?v=Backdoor-AOK
レジストリフックなるものがあるらしい。

547 名前:デフォルトの名無しさん :04/02/03 00:01
>>544
UCSは文字セットの名前
UTFは文字エンコードの名前
UCS-2の文字セットを16bit固定でエンコードするとUTF-16、8bit単位の可変長とするとUTF-8です。

で、質問なんですけど、不透明度アルファチャンネルを持つビットマップを描画するAPIってありますか?

548 名前:534 :04/02/03 00:03
>>536
> ってAPIフックなんて半分標準みたいなもんだが。

ってあるのですが。
そんなにメジャーな方法なのですか?
色々探し回ってみたけど、見つからなかったです(´・ω・`)

>>539氏の方法がソレなのでしょうか?
再び検索の旅に逝ってきます・・。

549 名前:デフォルトの名無しさん :04/02/03 00:05
UTF-16ってUCS4じゃなかった?サロゲートペアを考えると。

550 名前:535 :04/02/03 00:06
>>545
なるほど、そうですね。板内を検索してみると同様のことを試している人が居ましたので参考にして見ます。
http://pc2.2ch.net/test/read.cgi/tech/1052186697/308
(どうやら、MinGWは変換してくれないようです)

551 名前:デフォルトの名無しさん :04/02/03 00:06
>>547
UTF-16はUCS-4をサロゲートで表記したものを言うのが普通。
サロゲートが存在しなかった頃の16bit Unicode時代のものをわざとUCS-2と呼んで区別する。

アルファチャンネル関連はDirectDrawかGDI+を使うしかない。

552 名前:デフォルトの名無しさん :04/02/03 00:08
>>551
AlphaBlend忘れるなよ。
つか、DIBSectionあたりが相手なら自前でもそうたいしたコストじゃないか。

553 名前:デフォルトの名無しさん :04/02/03 00:10
>>552
忘れてないけど?

554 名前:デフォルトの名無しさん :04/02/03 00:14
>551
DirectDrawつーか、Direct3Dの2D利用では。もう統合されたんだっけか。

555 名前:デフォルトの名無しさん :04/02/03 00:27
>>546
フックの意味合いが違うと突っ込んでみる。


556 名前:デフォルトの名無しさん :04/02/03 00:27
>>554
msimg32.dllってDirectXだっけか。

557 名前:デフォルトの名無しさん :04/02/03 04:58
APIフックに興味がおありなら
「Advanced Windows」をご購入下さい

558 名前:デフォルトの名無しさん :04/02/03 06:37
>>548
NT系なら、フィルタドライバかな。要DDK。
95系はしらん。

559 名前:デフォルトの名無しさん :04/02/03 10:13
>>544
UTF-2はUTF-8の旧称
542は間違えただけだと思うが

560 名前:デフォルトの名無しさん :04/02/03 12:04
TDI(Tramsport Driver Interface)周りの質問ってここでOK?
WDMのほう逝け?

561 名前:デフォルトの名無しさん :04/02/03 12:50
一応聞くだけ聞いてみれば?
無理ならWDM逝けばいいかと

(マルチ氏ねっていわれるかもしれないけどな)

562 名前:560 :04/02/03 14:37
netstat -o(xp以降)のようなnetstat + プロセスIDをwin2000で実現しようとしています。
xp以降は散々既出な非公開関数で実現できるのですが、win2000ではググってみたところ

NtQuerySystemInformationでハンドル-プロセスID情報を取得。
上記に対しgetsockname / getpeernameが有効であればこれを利用。
無効なら取得ハンドルからDeviceIoControlの制御コード0x210012 + 適当に情報を入れた
TDI_CONNECTION_INFORMATIONからTDI_CONNECTION_INFOを取得。

のような流れが主流のようで、これで一応ローカルIP、ポート、プロセスID
のデータを取得できています。が、TCPにおけるリモートIP、ポートや
connection statusがうまく取得できていません。

TDI_CONNECTION_INFORMATIONを取得するような方法、または他の実現方法、
TDIに関する情報等ありませんでしょうか?
DDKのサンプルには目を通していますが、今一バッチリとは来ませんでした。

563 名前:デフォルトの名無しさん :04/02/03 15:29
↑snmp 系の API で取得できたような気がする。


564 名前:デフォルトの名無しさん :04/02/03 16:42
例えばデスクトップ上のあるファイルをクリックしたら、
そのファイルのファイル名及びパスを取得できるようにするにはどうしたらいいでしょうか?
分かる方、お願いします><。

565 名前:デフォルトの名無しさん :04/02/03 16:51
>>564
パス:SHGetSpecialFolderLocation

566 名前:デフォルトの名無しさん :04/02/03 22:49
フルスクリーンで使うソフトを作っています。
起動中は使用者がほかのソフトに切り替えるのを防ぎたいのです。
何かいい方法はありますか?WINキーやALT+TABキーを殺したいのですが。

567 名前:デフォルトの名無しさん :04/02/03 22:57
PreTranslateMessageでブロックすりゃええがな

568 名前:デフォルトの名無しさん :04/02/03 23:03
でもな、ALT+TABとかALT+F4は残しとけ。教えといてなんだけどな

569 名前:デフォルトの名無しさん :04/02/03 23:09
デバッガ使われたらまずいソフトでも作ってんのか?

570 名前:デフォルトの名無しさん :04/02/03 23:17
566です
567さまありがとうございました。
568、569さま、子供用ソフトです。いじられないように。

571 名前:デフォルトの名無しさん :04/02/04 15:54
>>566 別デスクトップ生成→そこで実行、もアリかな?面倒かもしれないし9X系だと使えないが。

572 名前:デフォルトの名無しさん :04/02/04 17:51
Win32APIを使わず、windowを作るなんてこと出来るんすか?
というかOSなしで稼動できるように・・・。

573 名前:デフォルトの名無しさん :04/02/04 17:52
もう一回何言ってるのかわかるように説明してください

574 名前:デフォルトの名無しさん :04/02/04 19:18
>>572
いくらでも出来ますが、このスレと関係ありません。

575 名前:デフォルトの名無しさん :04/02/04 20:59
IEに貼り付けるムービープレイヤのActiveX作ってるのですが、
IE側でスクロールするとちらついてしまうので
その間は描画を止めたいと思っています。
IEのスクロールを検知するにはどうしたらよいのでしょうか。
システムフックするしかないのでしょうか?

576 名前:デフォルトの名無しさん :04/02/04 23:17
Win2000で、Win32_NTEventLogを参照して、イベントビューワ上で
表示されるのと同様のテキストを得ようとしています。

イベントビューワ上の"説明"欄に表示されるテキストが
"Win32_NTEventLog.Message"の値とのことなのですが、一部の
イベントでは .Message に"%n" (n:整数)という文字列が挿入され
ており、これがイベントビューワ上では他の文字列に置き換えて
表示されます。

見つけた例:
 ソース:DCOM,イベントID:10005のイベントでは、.Message中
 に"%109"と記述されていたが、イベントビューワで見るとこの部分
 が"ファイルが見つかりません"と置換される

置換される文字列がどこにあるのか、WMIのリファレンスやObject-
Browser等で探したのですが、見つけることができませんでした。

Windowsの標準的なエラーメッセージを保持しているクラスでもある
のか思うのですが、どなたか、思い当たる事でもありましたらお教え
頂けないでしょうか。
よろしくお願いします。

577 名前:デフォルトの名無しさん :04/02/05 00:11
FormatMessageでねーの?

578 名前:デフォルトの名無しさん :04/02/05 00:46
エラーコードからFormatMessageでエラー文字列に変換する場合
エラー文字列の中には%1や%2というようにパラメータが必要なものがありますよね(例えばERROR_WRONG_DISK)
こういうのっていちいちエラーコードを調べてパラメータを指定するもんなんですか?


579 名前:デフォルトの名無しさん :04/02/05 01:53
APIでいいのかな
質問しちゃいます。

メモリにあるHTMLソース
char html[]="<HTML><h1>test</h1></HTML>";
みたいな
物を、表示したいんですが
何を使えばよろしいのでしょうか?

ActiveXのwebBrowser使ってみたけど
ファイルに保存した状態じゃないと駄目みたいなのです。

580 名前:デフォルトの名無しさん :04/02/05 02:03
>>579
ttp://www.nitoyon.com/vc/tips/ie_component.htm
about:blankの〜ってやつ

581 名前:デフォルトの名無しさん :04/02/05 02:04
http://pc2.2ch.net/test/read.cgi/tech/1075319943/
向けだな。↑の前スレ探せば出てきそうな気がするけど。

582 名前:デフォルトの名無しさん :04/02/05 02:10
質問です。
Google Deskbar みたいなアプリってどうやったら作れるのでしょうか?

583 名前:デフォルトの名無しさん :04/02/05 02:35
IDeskBandを実装する。

584 名前:デフォルトの名無しさん :04/02/05 12:04
WinXP用ネットワーク切り替えツールが作りたいのですが
その辺のAPIってどれでしょう?

585 名前:デフォルトの名無しさん :04/02/05 13:34
ネットワーク切り替えってなに?

586 名前:デフォルトの名無しさん :04/02/05 13:37
ネットワークっていったらインターネットのことだろ
インターネットっていったら2ちゃんねるとかあれのことだろ
そーいうことだから

587 名前:デフォルトの名無しさん :04/02/05 13:50
マジレスするとこーゆー奴じゃねーの?

http://arena.nikkeibp.co.jp/qa/internet/gaz/int_m31/

588 名前:デフォルトの名無しさん :04/02/05 15:51
CRowset::SetDataについて質問があります。
現在、WinXP Pro + VS2003Pro + MSDE の環境と
MFC + ATLサポートの形式でOLE DB接続コンシューマの
データベースアプリを作っています。

そこで、レコードの更新・挿入時にSetDataを使用しているのですが
主キーを設定しているテーブルを更新しようとすると
DB_E_ERRORSOCCURREDを返して更新ができません。
MSDN(日本語・英語両方)では、

書き込み禁止列がある場合、操作は失敗し、
これを回避するにはカーソル マップを変更します。

といった意味の記述がありますが具体的にどのような
コーディングをすればいいのでしょうか?

589 名前:デフォルトの名無しさん :04/02/05 16:30
すれ違い

590 名前:デフォルトの名無しさん :04/02/05 18:11
APIでcryptと同じ関数あったら教えてください

591 名前:デフォルトの名無しさん :04/02/05 18:19
ソース探してきて自分で組み込む

592 名前:576 :04/02/05 21:48
>> 577-578
ありがとうございました。
FormatMessageをVC++でから試したところ、イベントビューワと同じ
メッセージが得られました。

ところで、今更申し上げるのは恐縮なのですが、実環境は以下のような
事情があります。

1.開発環境が買えないので、スクリプトで作成する
 (すくなくともVBSに、エラーコードからメッセージを引く関数は無い様子
 → FormatMessageが使えない? JScriptの"Format"が使えるか試す予定)

2.ネットワーク経由で他のPCからイベントを収集し、且つターゲットのOSが
 日本語版/英語版混在
 (日本語版Winは日本語のメッセージしか保持していないらしく、LANGID
 を切り替えても英語のとメッセージは得られない模様。
 → 接続先のOSから、メッセージの一覧を取得する必要あり?)

というわけで、できればシステムメッセージを保持しているオブジェクト(?)を
特定し、接続先OSのそれを参照できないかなと考えています。
度々もうしわけないのですが、心当たりありましたらお教え頂けませんでしょう
か...

593 名前:デフォルトの名無しさん :04/02/05 22:24
>>592
うーん、、、KERNEL32.DLLにMessageTableリソースでエラーメッセージの一覧があるので、
あらかじめ取得しておくとか解析するとか。

594 名前:デフォルトの名無しさん :04/02/05 22:32
bccなりで引数にエラーID取って標準出力なりにFormatMessageの結果を返す
コマンドでも作ったほうが早そうだが。

595 名前:デフォルトの名無しさん :04/02/06 09:36
この辺を参照して自分で作成するとかw
http://msdn.microsoft.com/library/en-us/debug/base/system_error_codes.asp

596 名前:高校生 :04/02/06 12:52
ひょっとしたらガイシュツかもしれませんが、
絶対パス、相対パスからファイル名だけを抜き出すAPIはありますか?

C:\\Program files\\test\\a.exe
test\\a.exe
.\a.exe
a.exe

のようなパスで、どれでもa.exeが返ってくるようなAPIが理想なのですが。
それぐらい自力で抜き出せと言われそうですが。
その場合、文字列末尾から\\までを抜き出せばいいのかな?
見つからなかったらそのまま返すという風に。

597 名前:デフォルトの名無しさん :04/02/06 12:59
PathFindFileNameあたりか?

598 名前:デフォルトの名無しさん :04/02/06 13:04
>>596
GetFullPathNameのlpFilePartでどうだろ

599 名前:デフォルトの名無しさん :04/02/06 13:28
>>596
_splitpathってどう?
でも、APIとは言わないか。

600 名前:デフォルトの名無しさん :04/02/06 13:37
APIだけどWin32APIではないね

601 名前:デフォルトの名無しさん :04/02/06 15:52
現在マウスをフックしようと思ってプログラムを作っているのですが、
SetWindowsHookExに渡すWH_MOUSE_LLというフラグが使えなくて困ってます。
HDの中を検索した所winuser.hに書いてあるようなのですが、
インクルードしても「定義されていない識別子です。」とコンパイラに怒られます。
一応以下のようにしてインクルードしています。
#define _WIN32_WINNT 0x0400
#include<winuser.h>

開発環境はVC6 OS:Win2000です。


602 名前:デフォルトの名無しさん :04/02/06 16:00
#define _WIN32_WINNT 0x0500


603 名前:デフォルトの名無しさん :04/02/06 16:22
Win9x系でのキーフックについて質問なのですが、
システム全体でAlt+TabやCtrl+Escなどを禁止して、Ctrl+Alt+Delだけ
有効にする方法はないでしょうか?

SystemParametersInfo(SPI_SCREENSAVERRUNNING, ...)を使えば
Ctrl+Alt+Delまで使えなくなるし、かといってWH_KEYBOARD_LLは使えない。
WH_KEYBOARDでは、フックしても効果がないですし…。

やっぱり、無理なんでしょうか?

604 名前:デフォルトの名無しさん :04/02/06 16:28
>>602
嘘はいかんよ、嘘は。

手元のwinuser.h見たら
#if (_WIN32_WINNT >= 0x0400)
で囲まれてるから、_WIN32_WINNTの定義はそれであってると思うよ。

気になるのは、>>601で示された定義の前にwindows.hとか、
中でwinuser.hをincludeしてるファイルをincludeしてない?

ってか、winuser.hを直接includeするよりはwindows.h一つで
済ませた方が良くないか?

605 名前:デフォルトの名無しさん :04/02/06 16:49
C/C++スレから移動してきました。

開発環境Win2K,VB6.0&VC++6.0で、
内容としてはVBの要素も強いのですが教えてください。

VB6.0でPrinterオブジェクトを利用した出力処理があるのですが、
プリンタの設定でファイルに出力する場合にファイル名を入力するダイアログがでてきます。
このダイアログを出さないようにしたいのですがなにかよい方法はないでしょうか?

(最初考えたのは、WinSpool の StartDocPrinter をフックして、
DOCINFOにファイル名を加えてやればできるかなと思ったのですが
それより先に StartDocDlg というよくわからないAPIを呼んでいて
ダイアログもそこででているようで行き詰ってしまいました・・・)


606 名前:デフォルトの名無しさん :04/02/06 17:24
w2k+IME2kなのですが、
ワードパッドで日本語入力しているときに
入力文字の下の線が波線になっているのはどうやっているのでしょうか?
通常は点線なのですが・・・

607 名前:デフォルトの名無しさん :04/02/06 17:30
UNIXでのシステムコールがWindowsでのW32APIに相当する物と考えていいんですか?

608 名前:デフォルトの名無しさん :04/02/06 17:46
システムコール+Xのライブラリ、かな〜

609 名前:デフォルトの名無しさん :04/02/06 17:51
SysListView32をCreateWindowExで作ってごにょごにょやってるんですが
リスト内でマウスクリックが起きたときにどのアイテムがクリックされたかを
知るにはどうしたらいいでしょうか?
LBItemFromPtかと思ったんですが動いてくれませんでした…

610 名前:デフォルトの名無しさん :04/02/06 17:52
WM_NOFITYでNM_CLICKあたりが飛んでこない?

611 名前:デフォルトの名無しさん :04/02/06 18:22
>>604
ありがとうございました。
指摘されたようにwinuser.hをインクルードする前に、
windows.hをインクルードしていました。


612 名前:デフォルトの名無しさん :04/02/06 18:31
>>596 どうでもいいがデリミタは/も有効。自作する場合気をつけて

613 名前:デフォルトの名無しさん :04/02/06 19:14
それはNTだけじゃないか?
というか、一度フルパス>UNCに正規化した後に扱うのが
Win32パスを扱う場合の定石っぽい

614 名前:デフォルトの名無しさん :04/02/06 19:51
特定のファイルタイプに関連付けされたアイコンの取得方法って無いでしょうか?
ファイルの実体が無くても、フォルダや各種タイプに応じたアイコンがほしいんですが・・・
レジストリをたどるしか無いかな

615 名前:デフォルトの名無しさん :04/02/06 20:38
>>607
単に「UNIX」では範囲が広すぎて何とも言えない。
Windowsのシステムコールというとネイティブということになる。
通常はエグゼクティブに直接発行するのではなく、
Win32, POSIX, OS2 などのラッパーを通して使っている。

616 名前:デフォルトの名無しさん :04/02/06 23:28
とてもあいまいな質問なのですが、何か思いついたことがあれば一言でもお願いいたします。
APIとはちょっと違うかもしれませんが、VC質問スレとか見当たらないもので…。



以前DLLを作成するときに、自作classは使わないほうが良いと知った覚えがあります。
本で読んだのか、人から聞いたのかはよく覚えていませんが、当時の私はDLLのソースの中で
自作classを宣言&使用するのをやめてDLLを作成しました。

最近またDLLを作ろうとしたところこれを思い出し、
「はて、DLLでは自作classが使えないのかな…」と試してみたら普通にコンパイル通りました。

DLL内で自作classを宣言&使用することに、何か不都合などありますでしょうか?
どんなに細かいことでも良いのでよろしくお願いいたします。

ぐぐって調べようとしても、classもdllも一般的用語すぎてうまく絞れないもので煮詰まっております。

617 名前:デフォルトの名無しさん :04/02/06 23:36
>>616
ttp://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/05.html

618 名前:デフォルトの名無しさん :04/02/06 23:39
>>616
"DLL C++ クラス エクスポート"あたりをキーにすると少しは絞れるかも。


619 名前:デフォルトの名無しさん :04/02/06 23:55
>>616
DLLの中だけで完全に閉じた世界でなら、無問題。

しかしDLLからクラスをエクスポートさせたいなら、
newとdeleteがアセンブラレベルで(C++の言語仕様レベルじゃないよ)
いったい何を引きおきしているのか、完璧に理解していなければならない。


620 名前:609 :04/02/07 00:06
>>610
NM_CLICKの代わりに-530が飛んできました(なんじゃこりゃ…)。
うまく行かないようなので別の方法で切り抜けようと思います。
ありがとうございました。即レス戴いたのに遅くなってすみませんm(_ _)m

621 名前:デフォルトの名無しさん :04/02/07 00:49
ExtractAssociatedIcon APIがうまく動きません。
というか戻り値のアイコンハンドルが0になってしまいます。。。
ExtractIcon APIだとちゃんとアイコンハンドルを取得できるのですが。
下記にソースをうpしてみました。だれかおしえてー(>_<

ウインドウ上に2つのボタンが配置されてます。
ExtractIcon ボタンを押すと、explorerのアイコンを表示します。
(↑これは正常に動作します)
ExtractAssociatedIcon ボタンは、win.iniに関連付けされたEXEファイルのアイコンを表示します。
(↑こちらがダメです。。。)

http://www.pandora.nu/tv/src/img20040207004452.zip


622 名前:デフォルトの名無しさん :04/02/07 01:14
SHGetFileInfoにしてみてはどうか

623 名前:デフォルトの名無しさん :04/02/07 01:35
>以前DLLを作成するときに、自作classは使わないほうが良いと知った覚えがあります。

MFCの共有DLLを思いっきり否定してる人がいたわけか

624 名前:デフォルトの名無しさん :04/02/07 01:49
つーかMFCの共有DLLは、VC++しか使わないし。
コンパイラ限定のDLLで好いなら、別にclassをdllから
exportするのは自由だとおもうけど、MS自体COM作ってるわけでねぇ。

625 名前:デフォルトの名無しさん :04/02/07 01:52
>ExtractAssociatedIcon 
第2引数にリテラルを渡したらダメじゃないの?

626 名前:デフォルトの名無しさん :04/02/07 01:52
httpのファイルを拾いたいんですが
簡単に出来ますか?

GetHttpFile("http://〜");

見たいな感じで。

もうちょっとめんどくさくてもいいや。

627 名前:デフォルトの名無しさん :04/02/07 01:59
>>626
URLDownloadToCacheFileとか?

628 名前:607 :04/02/07 02:07
>>608,615
ありがとうございます。そういえばw2kまではos2/posixサブシステムがありましたね。

629 名前:デフォルトの名無しさん :04/02/07 02:07
ExtractAssociatedIconの引数って、なんかアレだよなw

630 名前:デフォルトの名無しさん :04/02/07 04:24
こんにちは。

ファイル関連の扱いとして、
あるフォルダ内に、どのようなファイルがあるかを調べたいのですが、
適切なAPIがよくわかりません。

どのAPIを使うのか、軽く教えていただけるとありがたいのですが。
申し訳ありませんが、よろしくお願いいたします。

631 名前:デフォルトの名無しさん :04/02/07 09:02
>>630
> あるフォルダ内に、どのようなファイルがあるかを調べたいのですが、

「どのような」の内容を具体的に書けよ。
ファイル名、サイズ、作成日付なんかだと API でそれなりにさくっと得られるけど、エッチな絵が含まれるファイルがあるか調べたいとか言われても困るしな。

632 名前:デフォルトの名無しさん :04/02/07 09:14
>>617-619
ありがとうございました。昨日はあのまま寝てしまったので、これから色々調べてみます^^

633 名前:デフォルトの名無しさん :04/02/07 10:59
>>624
お主、COMを持ち出した意図はどっちだ?

634 名前:デフォルトの名無しさん :04/02/07 11:00
>>630
UNIXのfileみたいなやつ?

635 名前:デフォルトの名無しさん :04/02/07 11:12
>633
どっちとは?すくなくとも、MSは、DLLでclassをexportするより、
新しくCOMを作ったという面があるわけで、つまり、DLLのexportは、
MSからしてもあまり推奨されていない、限定的な解でしかない、ってことでしょ。

636 名前:デフォルトの名無しさん :04/02/07 12:07
COMみたいに抽象クラスを定義しておいて
インスタンス生成関数をエクスポートした方が楽だよなぁ。

637 名前:デフォルトの名無しさん :04/02/07 13:17
>>635
推奨とかそういうんじゃなくて、
C++は名前修飾に標準規格のようなものがないから、
他社製のさまざまなC++処理系でも平等に使えるようなAPIが
作れないからだと思うぞ。


638 名前:デフォルトの名無しさん :04/02/07 15:59
>>626
MFC使え。


639 名前:621 :04/02/07 17:09
>>622
SHGetFileInfoですか。そちらでも試してみます。

>>625
>>ExtractAssociatedIcon 
>第2引数にリテラルを渡したらダメじゃないの?

むぅーよくわかりません。何を渡せばいいのでしょうか・・。

HICON ExtractAssociatedIcon(
HINSTANCE hInst, // アプリケーションインスタンスのハンドル
LPTSTR lpIconPath, // ファイル名
LPWORD lpiIcon // アイコンのインデックス番号
);

lpIconPath
1 つの文字列へのポインタを指定します。この文字列で、アイコンを
保持しているファイルのフルパスとファイル名を指定します。

と、MSDNには載っています。

640 名前:デフォルトの名無しさん :04/02/07 17:56
でかい配列を作ってpathをコピー。そして、その配列を2番目の引数に入れる

641 名前:621 :04/02/07 18:50
>>640
ありがとうございます。動きました。

うわぁワケワカラン・・・。

char* lpExeFileFullPath = "C:\\WINDOWS\\win.ini";
↑これでは動かずに、
char lpExeFileFullPath[] = "C:\\WINDOWS\\win.ini";
↑これで動く。

この2つの違いって何なんですか???わからない〜〜

>>622
SHGetFileInfoも正常に動きました。

642 名前:デフォルトの名無しさん :04/02/07 19:04
memory allocation

643 名前:デフォルトの名無しさん :04/02/07 19:18
>>630
ワイルドカード使ってFindFirstFile、FindNextFile

644 名前:デフォルトの名無しさん :04/02/07 19:33
>>641
C言語なら私に聞け! Part 65
http://pc2.2ch.net/test/read.cgi/tech/1064234533/945-


645 名前:デフォルトの名無しさん :04/02/07 19:43
>>641
俺もそう思う。ホントに変な動きだね。
char *lpExeFileFullPath = strdup("C:\\WINDOWS\\win.ini");
とすると動くし。ワケワカラン

646 名前:デフォルトの名無しさん :04/02/07 19:48
strdupは領域確保するから。lpExeFileFullPathに確保した領域への参照をさせる

647 名前:デフォルトの名無しさん :04/02/07 19:53
多分APIだと思うんですが。。。

エクスプローラのツール→フォルダオプションで表示される
ダイアログをプログラムから表示する方法ってあるでしょうか。

648 名前:645 :04/02/07 20:05
>>646
要は、ExtractAssociatedIcon()は第2引数を書き換えるから
定数領域のメモリを渡しちゃダメって言うことでしょうかね?
(スレ違いすまん)

649 名前:デフォルトの名無しさん :04/02/07 20:12
>>648
そのとおり。ヘルプ見ると第二引数は書き換えられることがあると
書いてあるね。バッファの大きさに気をつけないとバグるかも
嫌な仕様だなぁ。

650 名前:デフォルトの名無しさん :04/02/07 20:40
本当なら文字リテラルを渡してもOKなはずですが、その領域は
リンカによって書き込み不可になっているのです。

多分ExtractAssociatedIcon()を実行中、保護例外が発生してると思いますよ。

651 名前:デフォルトの名無しさん :04/02/07 20:49
>>647
control.exe folder
(Windows 2000 or lator)

652 名前:デフォルトの名無しさん :04/02/08 00:42
VB6なんですが
DrawFrameControlやDrawEdgeでユーザーコントロールの外観を描いてますが
WinXPの視覚スタイルが適用されないので困ってます。
Manifestファイルを使っても効果がありません。
"DrawFrameControl 視覚スタイル"とかで検索しても情報出てきません。
視覚スタイルを使って描画するにはどうしたらいいのでしょうか。

653 名前:デフォルトの名無しさん :04/02/08 00:52
DrawThema〜
あたりを使うらしい。

654 名前:デフォルトの名無しさん :04/02/08 02:34
Win32APIから外れるかもしれませんが、アプリのボトルネックを調べる為にターゲットアプリを
内部で実行し、Win32API呼び出しをフックして取得、それぞれのAPIが呼ばれた回数とそれらに
かかった時間を調べるにはどのような方法を使えば良いのでしょうか?
ターゲットアプリのソースコードは無い(つまり、gprofやVC++のプロファイラは使えない)状況でも
使えるようにしたいのですが・・・

655 名前:デフォルトの名無しさん :04/02/08 03:06
レバーコントロールを作ろうとしているのですが、
生成されずに困っています。

生成部分は下記のとおりです(BCC5.5.1 + BCC Developer)。
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(&icc);
icc.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;
InitCommonControlsEx(&icc);

hRebar = CreateWindowEx(
WS_EX_TOOLWINDOW,
REBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_BANDBORDERS | RBS_VARHEIGHT | CCS_NOPARENTALIGN,
0,0,100,100,
hWnd,
(HMENU)ID_REBAR,
hInstance,
NULL);

ツールバー、ステータスバーは問題なく生成できています。

ご存知の方いらっしゃいましたら、ご教授お願いします。

(Delphiでは生成できたのですが、BCC側の問題なのでしょうか?)

656 名前:デフォルトの名無しさん :04/02/08 14:20
こんにちは。

猫さんのHPに、こういう記載がされています。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_189.htm

switch (lpnmTB->iItem) {
case IDM_MARU:
lstrcpy(szMenuName, "MARUMENU");
break;
case IDM_SHIKAKU:
lstrcpy(szMenuName, "SHIKAKUMENU");
break;
}
hMenu = LoadMenu(hInst, szMenuName);
hPopup = GetSubMenu(hMenu, 0);


rebarのドロップダウンメニューを持つツールバーなんですけども、
なぜか、リソースからメニューがロードされないです。
で、上記の部分を、hMenu = LoadMenu(hInst,MAKEINRESOURCE(MARUMENU));
に変えると、きちんと読み込まれます。

何が問題で、読み込まれないんでしょうかね。?
できれば、char型のストリングで指定したいんですけども。

お手数ですが、ご返答願いますでしょうか。

657 名前:656 :04/02/08 14:21
すいません、修正します。
MAKEINTRESOURCEでした。

658 名前:デフォルトの名無しさん :04/02/08 14:37
>>655
icc.dwSize = sizeof(&icc);
これが悪いようだ。

659 名前:デフォルトの名無しさん :04/02/08 14:39
>>656
LoadMenu(hInst,"MARUMENU");
と直接指定した場合は?

660 名前:655 :04/02/08 15:16
>>658
ありがとうございます。

初歩的なミスですが、ぜんぜん見えてませんでした。
すごく恥ずかしいです。

661 名前:デフォルトの名無しさん :04/02/08 16:51
>>654
VCならプロファイルでいけたはず。


662 名前:661 :04/02/08 16:52
ごめん。本文よく呼んでなかった。
忘れてくれ。


663 名前:652 :04/02/08 21:55
>>652
DrawThem"e"ですよね?検索したらかろうじて3件引っかかりました。
members.jcom.home.ne.jp/1213687801/cs/windowsforms/theme.html
「WM_THEMECHANGEDメッセージを監視する必要があり」とか書いてあるので
VB6だと結構苦手っぽいですね。書けないことはないと思うのでやってみます。


664 名前:デフォルトの名無しさん :04/02/08 22:51
>>654
APIMONとか。


665 名前:デフォルトの名無しさん :04/02/09 00:19
WinsockAPIをフックしたいのですがどうすればいいでしょうか?
メッセージフックでは出来なさそうですし、DLLを置き換えるくらいしかありませんか?

666 名前:デフォルトの名無しさん :04/02/09 00:33
API関数の呼び出しをフックするにはどうすればいいでしょうか?

667 名前:デフォルトの名無しさん :04/02/09 00:33
>>665-666

668 名前:デフォルトの名無しさん :04/02/09 12:57
関数Aの引数として、関数Bの関数ポインタを渡す際、関数Bはグローバルでないと
いけないのでしょうか。
関数Bがグローバルのときは通ってたコンパイルが、クラスのメンバ関数にすると
とたんにエラーをはくようになります。

669 名前:デフォルトの名無しさん :04/02/09 13:00
>>668
これはC++の質問ですな。staticでないメンバ関数へのポインタは普通にはとれない。

670 名前:デフォルトの名無しさん :04/02/09 13:20
>>669
いや普通に取れるだろ。

671 名前:デフォルトの名無しさん :04/02/09 13:45
実体のないものはコンパイルとおらん
なのでstaticで宣言するのが定石
但しstaticメンバ内にはスコープが通らないため
工夫が必要

続きはC++な質問の方へ

672 名前:デフォルトの名無しさん :04/02/09 13:48
>>668-669
取れる
ttp://www.emit.jp/prog/prog_cpp0.html

673 名前:デフォルトの名無しさん :04/02/09 13:53
あんまり普通とは言えない気がするなあ

674 名前:デフォルトの名無しさん :04/02/09 13:54
>>672
>>672
このスレで質問してるって事は、APIで使うんだろ?

675 名前:デフォルトの名無しさん :04/02/09 14:15
>>674
いや取れるから

676 名前:デフォルトの名無しさん :04/02/09 14:19
そのポインタをAPIに渡しても無駄

677 名前:デフォルトの名無しさん :04/02/09 14:30
中途半端な知識のやつがスレ違いなC++の事語るスレはここです。

678 名前:デフォルトの名無しさん :04/02/09 14:49
>>671
実体が無いって
メンバ関数も new の時に実体が作られるとか
思っちゃってるのだろうか。
メンバ関数のアドレスなんていつでも取れるでしょ。

エラーが出るのは static じゃないメンバ関数は
呼び出し規約が thiscall になってるからでしょ。

679 名前:デフォルトの名無しさん :04/02/09 15:14
>>678
virtualの扱いはどうなる。

680 名前:デフォルトの名無しさん :04/02/09 15:18
メンバー関数のポインタはclassを指定しないと使えないから
virtualは関係ないわけだが

681 名前:デフォルトの名無しさん :04/02/09 15:59
単に、関数ポインタの型が違っているから怒られると思うのだが......

class A
{
 static int FuncStatic(); // int (A::*)();
 int Func(); // int (*)();
};

682 名前:681 :04/02/09 15:59
逆やん…
class A
{
 static int FuncStatic(); // int (*)();
 int Func(); // int (A::*)();
};


683 名前:デフォルトの名無しさん :04/02/09 16:20
>>681-682
いやだからそれが thiscall と __cdecl や __stdcall の
呼び出し規約の違いだろ。

684 名前:デフォルトの名無しさん :04/02/09 16:35
この話題ってFAQ&スレ違いだな。
なんか定期的にどっかで見かける。

685 名前:デフォルトの名無しさん :04/02/09 18:13
透過色を使ったスプライト表示はどうやるんでしょうか? BitBltにはその機能はないですよね?




686 名前:デフォルトの名無しさん :04/02/09 19:17
ウィンドウ内の話ならAlphaBlend/TransparentBlt(2000/XP)、
もしくは自力で抜き色からリージョン生成してデバイスコンテクストに選択してBitBlt。
or
DIBSectionに自力で合成。
or
DirectX。

ウィンドウそのものの形を変化させたいならSetWindowRgn/UpdateLayeredWindow(2000/XP)

687 名前:デフォルトの名無しさん :04/02/09 20:37
ImageListもアリ

688 名前:654 :04/02/09 21:12
>>664
気付きませんでした。こんな便利なものがあるんですね
ありがとうございます

689 名前:デフォルトの名無しさん :04/02/10 11:12
JavascriptのsetTimeoutのような関数はWIN32APIにはありますか?
引数に関数と時間をセットすると、その時間経ってから関数を実行してくれるやつです。

690 名前:デフォルトの名無しさん :04/02/10 11:32
setTimeoutがどういう動きをするのか知らんが、

処理がそこで停止して、
指定時間後に関数を実行するのなら
Sleepの後に関数呼べば済むだろ

処理がそのまま継続されるのなら、
スレッドつくることになるかな


691 名前:デフォルトの名無しさん :04/02/10 11:39
SetTimer() はだめなんでつか。そうでつか。

692 名前:デフォルトの名無しさん :04/02/10 11:49
timeSetEventもあるでよ。

693 名前:デフォルトの名無しさん :04/02/10 14:01
>>690-692
ありがとうございました。
スレッドとSetTimerでやってみます。

694 名前:デフォルトの名無しさん :04/02/10 14:25
プログラム上でWindows2000のシステムロケールの既定値を変更する方法を
ご存知の方はいらっしゃいませんか?

SetLocaleInfo Win32APIが変更できるのはユーザー上書き部分だけで、シス
テムロケールの既定値は変更出来ないとの事なのですが、

[コントロールパネル]-[地域のオプション]-[既定値に設定]-[システムロケールの
選択]で変更が出来ると言うことは、なにか他の手がありそうなんですが、MSDN
ライブラリを漁ってもそれらしき方法が見つかってない状況でして...


695 名前:デフォルトの名無しさん :04/02/10 15:18
ファイルをクリックしたらそのファイルのファイル名を取得する方法はないのでしょうか?
D&Dとか使えば簡単にファイル名を取得できるのですが、
ファイルをクリックしただけでファイル名を取得したいのです。
以前にも似たような質問させてもらって恐れ入りますが、
分かる方いらっしゃいましたらよろしくお願い致します。

696 名前:デフォルトの名無しさん :04/02/10 15:19
>>695
どこのファイルだよ?エクスプローラーか?

697 名前:デフォルトの名無しさん :04/02/10 15:20
>>695
Browser Helper Objectsで出来るかもしれん。
出来ないかもしれん。


698 名前:デフォルトの名無しさん :04/02/10 15:57
>>695
www.microsoft.com/globaldev/handson/dev/muiapp.mspx
によれば "Changing the system locale requires a reboot"だそうだけど。

699 名前:デフォルトの名無しさん :04/02/10 15:58
      | Hit!!
      |
      |
   ぱくっ|
     /V\
    /◎;;;,;,,,,ヽそんなエサで
 _ ム::::(,,゚Д゚)::| 俺様が釣られると思ってんのか!!
ヽツ.(ノ:::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'

700 名前:699 :04/02/10 15:59
ごめん、、、誤爆した。

701 名前:デフォルトの名無しさん :04/02/10 16:17
>>698
>www.microsoft.com/globaldev/handson/dev/muiapp.mspx
>によれば "Changing the system locale requires a reboot"だそうだけど

うん。[コントロールパネル]-(中略)-[システムロケールの選択]を行った場合も
再起動を要求されるので、その点は問題ないのだけど、自分の知りたいのは、
ユーザーさんにコントロールパネルを操作させずに、例えば、

[日本][中国][韓国]と言ったオプションボタンなりメニューなりを用意して、
ユーザーの選択に従ってWindows2000のシステムロケールを変更したいと思っ
てるんですわ。


702 名前:デフォルトの名無しさん :04/02/10 16:32
うーん、レジストリかな。CPL内でゴニョゴニョ設定してそうに見えるけど。

703 名前:デフォルトの名無しさん :04/02/10 16:50
>>702
>うーん、レジストリかな。CPL内でゴニョゴニョ設定してそうに見えるけど。

なるほど、起動時にレジストリを読んで設定してるかも知れないですね。
ちと調べてみます。

704 名前:695 :04/02/10 17:02
相手にしてくださった方どうもありがとうございました。
早速色々とやってみます。

705 名前:デフォルトの名無しさん :04/02/10 18:48
MoveWindowAPIを使ってウィンドウのクライアント領域をドラッグしても
ウィンドウを動かせるようにしているのですが
通常のウィンドウはタイトルバーを使ってドラッグすると
枠のみ表示された状態で移動するので
同じようにしたいのですがどうすればいいでしょうか?

706 名前:デフォルトの名無しさん :04/02/10 18:54
MoveWindow やめて、WM_NCHITTEST で HTCAPTION 返す式にしてみては

707 名前:デフォルトの名無しさん :04/02/10 18:54
意味わかんね

708 名前:デフォルトの名無しさん :04/02/10 19:12
クライアントをクリックしても、タイトルバーをクリックしたってことにすんだろ。

709 名前:デフォルトの名無しさん :04/02/10 19:21
例えがいいかどうかは別として、RealPlayerみたいに
ドラッグ中にウィンドウそのものも移動させるってことでしょ?多分。

710 名前:デフォルトの名無しさん :04/02/10 19:30
話が耕作している

711 名前:705 :04/02/10 19:47
>>706
サンプル見つけました。
まさにこれです。
わざわざマウスの座標とか計算してたのが
馬鹿みたいですね。

712 名前:デフォルトの名無しさん :04/02/10 22:00
CreateFile使わないでLoadImageでビットマップ読み込んで
それをGetDIBitsか何か使って色数変更してHBITMAP作りたいんだけど
何かいい方法ない?
ttp://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200206_02060010.html
こんな例見付けたけど、delphi私読めないから分からないから。

713 名前:デフォルトの名無しさん :04/02/10 22:18
ア キ ラ メ ロ

714 名前:デフォルトの名無しさん :04/02/10 22:30
つーか、16bpp/24bpp/32bppの相互変換ならともかく、256色以下への減色だと
どう減色するかの問題だろ。

715 名前:デフォルトの名無しさん :04/02/10 22:33
お尋ねします。
フォントをインストールせずに表示するのってどうやるんでしょうか?
APIだけでできるのでしょうか?

716 名前:デフォルトの名無しさん :04/02/10 22:39
フォントがらみのAPIであった気がする。
一覧に表示させないでインストールしたりとか。忘れた。

717 名前:デフォルトの名無しさん :04/02/10 22:42
>>714
あーごめん、言葉足らなかった。
全部32bitに色数変更したいんよ。
さっきLPBITMAPINFOHEADER作って、biBitCountを32にして
GetDIBitsにLoadImageから返ってきたHBITMAPを突っ込んで
やってみただんけど失敗。GetLastErrorやったら何故か0が返ってきて
意味分からなくなったから止めた…。

718 名前:デフォルトの名無しさん :04/02/10 22:49
質問です。
モニタの省電力設定時間で省電力モードに入ったあと(画面ブラックアウト後)
何かのイベントが発生した時に、省電力モードを解除して(画面表示復帰して)
ユーザーに知らせたいのですが、うまく行きません。
PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1)で
一瞬モニタの電源が復帰するのですが、またすぐに電源が切れてしまいます。

自分自身のコードで
PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2)を
実行してブラックアウトした後に
PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1)を
実行するとうまく行くのですが
システム側から省電力モードにされた後だとうまく行きません。
(常に省電力モードのメッセージが発行されている?)
WM_MOUSEMOVEとか投げても復帰しません。

よろしくお願いします。

719 名前:デフォルトの名無しさん :04/02/10 22:56
>>717
DIBSectionで32bppなDIB作ってそこにLoadImageで作成したHBITMAPを
BitBltすれば?

720 名前:デフォルトの名無しさん :04/02/10 23:01
>>718
キーボードイベントやらマウスイベント送ってやったら?

721 名前:718 :04/02/10 23:51
>>720
上にも書いたのですが、WM_MOUSEMOVEではダメでした。
今度キーボードイベントで試してみます。
けどHWND_BROADCASTでキーボードイベントPostしたら
別に開いているアプリにキー入力されそう・・・
省電力を監視しているプロセスが見つかれば、そこにだけ送ればいいんでしょうけど・・・
(スクリーンセーバーを解除するのにはその手が使えますけどね。WM_CLOSE送って。)

722 名前:デフォルトの名無しさん :04/02/10 23:54
マウスイベント→mouse_event

723 名前:718 :04/02/11 00:00
>>722
ぐはぁ、mouse_eventなんてAPIがあったのですね。
知らなかった〜。試してみます。

724 名前:デフォルトの名無しさん :04/02/11 00:04
>>722
キーボードイベント→keybd_event

725 名前:715 :04/02/11 00:23
>>716
自己解決したような気がします。
AddFontResource ってやつでいいみたいです。

726 名前:デフォルトの名無しさん :04/02/11 02:40
分かりにくい質問かと思いますが・・・タスクバーやWin9xのDOS窓のように、リサイズの際
一定量以上マウスを動かさないとリサイズ出来ないようにするにはどうすればよいのでしょうか。
APIで制限出来るのですか?

727 名前:デフォルトの名無しさん :04/02/11 02:48
WM_WINDOWPOSCHANGINGで出来ると思うよ。

728 名前:デフォルトの名無しさん :04/02/11 02:59
素早いレスありがとうございます。色々サンプルを探してやってみます。

729 名前:デフォルトの名無しさん :04/02/11 16:31
システムに登録されているアイコン(フォルダや関連付けされたファイルなど)を
取得するためにはどうしたらよいでしょうか。キーワードとなる関数名だけでも
教えてもらえれば自分で調べますので、よろしくおねがいします。

730 名前:デフォルトの名無しさん :04/02/11 16:34
ExtractAssociatedIconとかSHGetInfoとか

731 名前:デフォルトの名無しさん :04/02/11 19:12
>>730
それって実体がないと失敗するから・・・

732 名前:デフォルトの名無しさん :04/02/11 19:29
レジストリさらえ

733 名前:デフォルトの名無しさん :04/02/11 20:54
システムイメージリスト。…自信ないな。

もうね、CodeGuru見てくればいいじゃない。

734 名前:729 :04/02/11 21:37
>>730->>733
みなさんどうもありがとうございました。
ひとつずつ調べてみます。

735 名前:デフォルトの名無しさん :04/02/11 22:52
こんにちは。

FindFirstFileで、検索ハンドルを得たあと、
その後、次のファイルを調べますよね、FindNextFileで。

その際、なぜか初めに必ず「.」(ピリオド)がファイル名として出てくるんですが、
これって、仕様なんですかね?
それとも、私のプログラム記述に何か問題でもあるのでしょうかね。

その点について、ご返答いただけたらうれしいです。
宜しくお願いします。


WIN32_FIND_DATA FindFileData;
HANDLE hFind;

hFind = FindFirstFile("D:\\*", &FindFileData);

if(hFind == INVALID_HANDLE_VALUE)
{
MessageBox(hWnd,"ERROR","FINDFIRSTFILE",0);
}

for(sfi_index=0;sfi_index<256;sfi_index++)
{
FindNextFile(hFind,&FindFileData);
if(ERROR_NO_MORE_FILES==GetLastError())break;

strcpy(sfi[sfi_index],FindFileData.cFileName);
}

FindClose(hFind);

736 名前:デフォルトの名無しさん :04/02/11 22:55
>>735
ピリオドは、そのディレクトリ自身をあらわすディレクトリ
ピリオド2つは親ディレクトリをあらわす

サブディレクトリには必ずこの2つがあるよ

737 名前:735 :04/02/11 23:15
>>736
あぁ、どうもです!
わかりました。

ご返答ありがとうです。

738 名前:デフォルトの名無しさん :04/02/11 23:19
必ずではないよ
NTFSでフォルダにドライブをマウントすると
ピリオドひとつのエントリは存在しない

739 名前:デフォルトの名無しさん :04/02/11 23:46
それはサブディレクトリではないね

740 名前:デフォルトの名無しさん :04/02/12 09:05
でもルートディレクトリはドライブの直下にしかないと
思い込んでるとハマる

741 名前:723 :04/02/12 12:20
>>722
mouse_event(MOUSEEVENTF_MOVE, 0, 0, 0, 0);
で無事解決しました。
どうもありがとうございます。

742 名前:デフォルトの名無しさん :04/02/12 22:56
スクリーンショットをとることのできる
APIってありますか?



743 名前:デフォルトの名無しさん :04/02/12 23:02
>>742
BitBlt()

744 名前:デフォルトの名無しさん :04/02/12 23:02
自分でデスクトップのDC拾ってきてBitBltすりゃいいじゃん

745 名前:742 :04/02/12 23:06
ごめん説明不足でした。
ウインドウの中じゃなくてデスクトップすべてなんだけど
どうかな?


746 名前:デフォルトの名無しさん :04/02/12 23:09
>>745
だから〜、GetDC(GetDesktopWindow()) で返ってきたhDCをBitBlt()してごらん

747 名前:デフォルトの名無しさん :04/02/12 23:29
CreateDC("DISPLAY", 0, 0, 0)という手もアリかな。

748 名前:742 :04/02/13 00:05
できました〜。
どうも有り難うございました。


749 名前:デフォルトの名無しさん :04/02/13 00:37
>>747
それを言うなら GetDC(NULL)

750 名前:デフォルトの名無しさん :04/02/13 10:01
746と749では微妙に違いがあったような


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