- ベストアンサー
vbでのAPIの処理定義について
はじめまして。 vb6.0で開発を行っている者です。 vbにてAPIを使用する際、 (1)GetProfileString (2)WriteProfileString (3)SendMessage は具体的にどこのファイルを参照・設定しているのでしょうか? (6.0や.NETも同様だと思いますが・・・) プログラムは正常に動いていますが、こう書けばいいのかなぁ? で希望通り動いてしまったため深く理解できずにいます。 ちなみに意味は以下のようにとらえています。 (1)端末設定を読み取る(c:\windows\win.iniの情報?) (2)端末設定の書き換え (3)書き換え情報の端末内通知? APIの情報がなかなか見つけれないため、 間違いや、ここを参照すればわかるなどありましたら教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
GetProfileStringやWriteProfileStringのAPIの宣言は以下のように行いますので、Kernel32.dllを参照していることが分かると思います。 Public Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName$, ByVal lpKeyName$, ByVal lpDefault$, ByVal lpReturnedString$, ByVal nSize&) As Long Public Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection$, ByVal lpszKeyName$, ByVal lpszString$) As Long これらはWIN.INIの読み取りと書き込みを行います、その他のINIファイルの読み取りにはGetPrivateProfileStringやWritePrivateProfileString関数が使えたと思います。 同様にSendMessageはUSER32.DLLを参照しており、指定したウィンドウにメッセージを通知します。 こんな感じです。 http://yokohama.cool.ne.jp/chokuto/urawaza/api/SendMessage.html .NETでは.NET Frameworkにクラスがたくさんあるので、あまりAPIは使わないと思います。
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1416)
他にも特別なプリンタで印刷しようとしているプロセスが動いて いるかも知れないので、トップレベルウィンドウ全部に規定の プリンタが変更されたことを通知する働きがあります。しかし、 このメッセージを受け取ってどうこうするようなプログラムって 見たことがありません。(まぁ、私が知らないだけだろうけど) VBだって、そんなイベントプロシージャ無いでしょ? それに、ローカルマシンの規定のプリンタの変更だから、利用者は 分かって実行しているはずなので、こんな心配は杞憂でしょう。
- nda23
- ベストアンサー率54% (777/1416)
昔(Windows 3.1 まで)はiniファイルでしたが、今はレジストリです。 昔のプログラムが動かなくなると困るので、残されている機能です。 レジストリを直にイジルのはアブナイので、こちらでできることは こちらを使った方が安心ですね。(個人的意見です) >SendMessage ウィンドウにトリガを与えるためで、これをしないと書き換わらない という訳ではありません。
お礼
回答ありがとうございます。 実際に読み込んだ内容とwin.iniの内容が一致しないので不思議に感じていたのですが、 レジストリの内容を読み書きしていたのですね。 > ウィンドウにトリガを与えるためで、これをしないと書き換わらない という訳ではありません。 仰るとおり、書かずとも同じ動きをしました。 WriteProfileStringなどで更新した後の「おまじない」のようなものだと感じていたのですが、なくてもいいのであれば存在意義が余計にわからなくなってしまいました。 実際は、WriteProfileStringでプリンタ設定の変更をした直後に記述しています。 不要の場合や絶対いる場合などがあるのでしょうか?
お礼
回答ありがとうございます。 実際に読み込んだ内容とwin.iniの内容が一致しないので不思議に感じていたのですが、 レジストリの内容を読み書きしていたのですね。 >同様にSendMessageはUSER32.DLLを参照しており、指定したウィンドウにメッセージを通知します。 どこかの画面に表示させているのでしょうか? sendMessageはnda23さんのいうとおり、書かずとも同じ動きをしていいます。 WriteProfileStringなどで更新した後の「おまじない」のようなものだと感じていたのですが、なくてもいいのであれば存在意義が余計にわからなくなってしまいました。 実際は、WriteProfileStringでプリンタ設定の変更をした直後に記述しています。 不要の場合や絶対いる場合などがあるのでしょうか?