トップページ⇒tech
1001コメント301KB

VBプログラマ質問スレ(6.0以前) Part46

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/02/03(金) 22:58:33
VisuarlStudio
0784デフォルトの名無しさん2006/02/20(月) 21:19:42
>>783
特殊pngを表示する方法はわかってるのですが、
標準pngに変換する方法はわからないんです。
0785デフォルトの名無しさん2006/02/20(月) 21:26:11
>>784
特殊PNGを作った会社(?)に聞けば。
または、表示出来るならクリップボードに入れてペーストすりゃいいじゃん。
0786デフォルトの名無しさん2006/02/20(月) 21:29:31
>>785
なるほど、クリップボードは思いつきませんでした。
ちょいと試してみます。
どうもありがとうです
0787デフォルトの名無しさん2006/02/20(月) 22:03:20
昨日オナ禁したから今日たった今現在ナウ、解禁しようと思うんですけど、おかずくdさい。
0788デフォルトの名無しさん2006/02/20(月) 22:13:56
>>787
つMSDN
0789デフォルトの名無しさん2006/02/21(火) 02:48:00
>788
漏れはInStrRevあたりグッとクるなぁ。
だって「後から検索」だぜ。タマラン。
0790デフォルトの名無しさん2006/02/21(火) 16:13:56
CPU温度を取得する以下のVBScriptなんですが,
実行してもいつも同じ値しか得られず正しい温度でもありません.
CPU温度をリアルタイムにモニタする方法はないでしょうか?

Function ACPI_CPUTemp()
dim r, lu
set PFU = GetObject("winmgmts:{impersonationLevel=impersonate}!root\wmi").ExecQuery _
("SELECT CurrentTemperature FROM MSAcpi_ThermalZoneTemperature")
for each U in PFU
r = r&U.CurrentTemperature
Next
ACPI_CPUTemp = (r - 2732) / 10
set PFU=Nothing
End Function
0791デフォルトの名無しさん2006/02/21(火) 17:21:54
>>790
ttp://www2.noritz.co.jp/anchor/ashp/netmon/samples/wmi_hard.html
0792デフォルトの名無しさん2006/02/21(火) 18:09:11
現在フォームなしのプログラムを作成しています。
そこで質問なのですが、自分自身のウィンドウハンドルを取得するにはどうすればよいのでしょうか?

フォームがある場合はMe.hWndで求めればよいと思うのですが、今回はフォームがありません。
下記の2通りの方法を考えましたが、もっとスマートな方法はありませんか?
・EnumWindows+GetWindowThreadProcessIdの返り値をApp.ThreadIDプロパティと比較する
・EnumWindows+GetWindowTextの第2引数とApp.Titleプロパティと比較する
0793デフォルトの名無しさん2006/02/21(火) 18:14:48
>>792
ウィンドを作成してないんだから hWnd はないけど。
Sub Main で Load Form1 とかしてその hWnd を使うとか。
0794デフォルトの名無しさん2006/02/21(火) 18:41:42
HP潰す方法教えてください
0795デフォルトの名無しさん2006/02/21(火) 18:53:44
>>794
つ田代砲
0796あぼーんNGNG
あぼーん
0797デフォルトの名無しさん2006/02/21(火) 22:02:46
>>791
これは値を参照するだけにとどまりますか?
0798デフォルトの名無しさん2006/02/21(火) 22:09:00
>>796
こんなのがあぼーん?
単にURL貼ってあっただけだと思ったけど。

ずいぶんおかしな奴が削除人やってるんだな。
なんか2ch用語でいう「プロ市民」的な病理を感じるよ。
0799デフォルトの名無しさん2006/02/21(火) 22:57:44
>>796
何故?
0800デフォルトの名無しさん2006/02/22(水) 00:12:48
削除議論板にでも行ってこい
0801デフォルトの名無しさん2006/02/22(水) 01:08:10
とあるアプリの検索ボックスに文字をセットしたいのですが、実現する方法はありますか?
0802デフォルトの名無しさん2006/02/22(水) 01:10:14
>>801
ある
08038012006/02/22(水) 01:13:13
>>802
えーと、具体的にお願いします。
0804デフォルトの名無しさん2006/02/22(水) 01:16:10
>>803
"アプリの検索ボックス"とやらの具体的な例を出したらな

何も分からないのなら、
SendKey()とかWinAPIのSendInput()とかkeybd_event()とか使ったり、
ウィンドウメッセージ送って(運良く)反応してくれるかもしれない。
とだけ言える
0805デフォルトの名無しさん2006/02/22(水) 01:33:07
>>804
調べてみます。ありがとうございました。
0806デフォルトの名無しさん2006/02/22(水) 09:06:50
>>791
そこのWin32_TemperatureProbeを試してみましたが,
For Eachの中が一度も実行されなくて,
何も表示されませんでした.
他のサンプルなら成功するのですが
温度が読めないのはどこに問題があるのでしょうか?
0807デフォルトの名無しさん2006/02/22(水) 13:05:00
>>806
ドライバが入ってないか、そもそも温度センサーが付いていない
0808デフォルトの名無しさん2006/02/22(水) 13:15:49
>>807
MobileMeterというソフトでは
(たぶん)正しい温度が読めているので
そういう問題ではないと思います.
逆にどのような環境では上のスクリプトで
リアルタイムに温度をモニタできるのでしょうか?
0809デフォルトの名無しさん2006/02/22(水) 13:27:17
>>808
っ [S.M.A.R.T機能(対応されているか確認しる)]

つか、製品わかってるなら参照しているDLLをDependencyWalkerなんかで調べればいいのでは?
0810デフォルトの名無しさん2006/02/22(水) 13:47:54
>>808
そのソフトはACPIとかのAPIを直接呼んでるんじゃないの?
0811デフォルトの名無しさん2006/02/22(水) 14:19:14
>>809
調べる前に確認したいのですが,
SMARTはHDDだけでなくCPU温度にも関係あるのでしょうか?

依存しているDLLは以下の通りです.
いずれも基本的なDLLばかりに見えますが
POWRPROF.dllあたりにそういう関数があるのでしょうか?

$ objdump -x mobmeter.exe | grep "DLL Name"
DLL Name: KERNEL32.DLL
DLL Name: ADVAPI32.dll
DLL Name: COMCTL32.dll
DLL Name: GDI32.dll
DLL Name: MSVCRT.dll
DLL Name: POWRPROF.dll
DLL Name: SETUPAPI.dll
DLL Name: SHELL32.dll
DLL Name: USER32.dll

>>810
MobileMeterはACPIを使っているようですが,
これは私の環境ではSMBIOSから読み取るWMIは使えなくて,
ACPIを直接呼ぶ必要があるという理解でよろしいでしょうか?
WindowsでのACPIをいじり方の解説などはないでしょうか?
0812pp2006/02/22(水) 21:37:19
Replace関数でダブルコーテーションと半角スペースの文字列の置き換えができません。
どなたか、知恵をかしてください。初歩的な質問ですいません。
0813デフォルトの名無しさん2006/02/22(水) 21:53:49
""""
0814デフォルトの名無しさん2006/02/23(木) 22:20:52
質問します。

VB6 sp5の環境で開発してるのですが、昨日まで使えてた
Right関数が今日になって 「配列がありません」 と、
未定義の配列であるかのようなエラーとともに使えなくなってしまいました。

VSの標準エディタで right と小文字で打って改行すると、
Right と変換されてるし、識別子カラーで表示されているのにです。

ちなみにLeft関数Mid関数は動きますが、
Right$関数だと、「型宣言文字と宣言されたデータ型が一致しません」と
エラーになってしまいます。

まったく謎な状態です。
どなたか対処方法を教えて下さい。
0815デフォルトの名無しさん2006/02/23(木) 22:26:02
>>814
気のせいですよ
0816デフォルトの名無しさん2006/02/23(木) 22:29:45
一言。
できない奴ほど真っ先に道具を疑う。
VBのバグを疑う前に自分のやってることを疑ってみた?
0817デフォルトの名無しさん2006/02/23(木) 22:30:59
>>814
なぁに、アフリカではよくある事。

それはそうとして、VB6にはSP6を当てましょうね。
0818デフォルトの名無しさん2006/02/23(木) 23:36:34
>>814
とりあえずStrings.Rightに改名する
0819デフォルトの名無しさん2006/02/23(木) 23:38:01
>>816
誰がVBのせいにしてるの?


>>814
標準モジュールでRightという名前の関数を定義していない?
標準関数と同じ名前の関数は作らないほうがいい。

まあ、標準モジュールでRightを定義しても、標準関数を
VBA.Strings.Rightと冗長な正式名で使用する方法もあるけどね。
ちなみに、標準モジュールのRightの正式名は、「標準モジュール名.Right」となる。

0820デフォルトの名無しさん2006/02/23(木) 23:50:59
馬鹿だな。
814の彼はVBのせいにしてるんだよ。間接的に、ではあれ。

でなきゃこんなところで質問する前にリテラルの文字列でRight$が
正しく動作することを確認するはず。

ついでに言えば、814の彼みたいなのは自分の勘違いに気づいて
問題が解決しても絶対に何もレスしないよ。
0821デフォルトの名無しさん2006/02/23(木) 23:53:42
なに必死になってんだよw
0822デフォルトの名無しさん2006/02/24(金) 11:25:16
>>814
本当に参照設定がおかしい可能性もあるが、まず100%ソースのどこかにコンパイルエラーがある
0823デフォルトの名無しさん2006/02/24(金) 12:51:17
モルスァ
0824デフォルトの名無しさん2006/02/24(金) 15:39:15
>>814
たまになったな。
Windows自体をリブートしたら直ったけど。
08258142006/02/24(金) 21:16:33
返事遅れてすいません。

参照設定で、「使用中のコントロールまたは参照を削除することはできません」って
怒られないものを全部外してみたら動くようになりました。
(何故か同じものが複数チェックされてたり謎な状態だった、、、)
0826デフォルトの名無しさん2006/02/24(金) 21:47:59
参照設定で使用しているライブラリにRight関数が定義されていたのかもね。
そのなぜか同じ物が複数チェックされているのがVB標準ライブラリだったりとか。
0827デフォルトの名無しさん2006/02/24(金) 21:50:31
>>825
ときどき起こります
参照をはずせない場合はvbpファイルを直接エディタで書き換えたりもします

(,,゚Д゚) ガンガレ!
0828デフォルトの名無しさん2006/02/25(土) 00:48:33
Sleipnirの検索欄に検索したい文字をセットする方法はありますか?
0829デフォルトの名無しさん2006/02/25(土) 01:33:44
>>828
あります
0830デフォルトの名無しさん2006/02/25(土) 02:01:28
VB6はフォームモジュールから作られるウィンドウのほかに隠しウィンドウが
1個必ず作られて、App.Titleプロパティはこのウィンドウの
GetWindowText()を返してるんじゃなかったっけな確か。だから逆に
App.TitleでFindWindow()すれば、そのウィンドウのハンドルは取れるよ。
ウィンドウクラスはvbNullStringでも取れるけど、開発環境だと
"ThunderMain"でexeだと"ThunderRT6Main"になる。
これで開発環境とexeの区別を付けてもいいかもしれん。
0831デフォルトの名無しさん2006/02/25(土) 02:57:22
>>830
なんでそんなあやふやな方法で、しかもわざわざAPI使ってやる必要があんのかと
0832デフォルトの名無しさん2006/02/25(土) 10:00:11
>>831
開発環境と実行環境を区別するプロパティ、何だっけ・・・?
0833デフォルトの名無しさん2006/02/25(土) 11:00:28
>>832
ttp://support.microsoft.com/default.aspx?scid=kb;ja;JP177636
0834デフォルトの名無しさん2006/02/25(土) 11:31:47
ちょっとわかんなくなってしまったので教えてくれませんか?

項目数、INDEXなど全く同一のTblに対し、VBからSQLを発行して検索した場合と
SqlPlusから検索した場合とで検索結果が違ってくるのですが、
どなたかこういう現象を見た、とか知っている方いらっしゃいませんか?
0835デフォルトの名無しさん2006/02/25(土) 11:35:20
どう違うのかぐらい書けよw
0836デフォルトの名無しさん2006/02/25(土) 11:40:10
>>835
件数が違うのです

件数にして5件VB側の方が少ないです。

他のPCではVBでもPlusでも検索結果が同じなのですが...
0837デフォルトの名無しさん2006/02/25(土) 11:49:02
カナからローマ字のヘボン式に変換するソースありますか?
長音oを含む場合母音を重ねないってとこが上手くいきません・・
08388312006/02/25(土) 12:38:58
>>832
もともとそんなプロパティは用意されとらんよ
>>833 のEXE名変更は利用者にリネームされたら終わりなのでダメ
GetModuleFileName の方法もEXEをVB6.EXEにリネームされる危険があるんで、
レジストリキーからVB6のインストール先を取得するところまで考慮してなんとか使えるレベル
以下の方法が一番明快、かつ簡単だと思うぞ

Public Function IsIDE() As Boolean
  Debug.Assert IDETest(IsIDE)
End Function

Private Function IDETest(ByRef bIsIDE As Boolean) As Long
  bIsIDE = True
  IDETest = True
End Function

API が使いたくて辛抱溜まらんなら、こういうトリッキーな方法もある
Public Function IsIDE() As Boolean
  Debug.Assert lstrcpy(IsIDE, Chr(1))
End Function
08398312006/02/25(土) 12:41:43
関数の戻り値の型打ち間違えた
まあ分かるか
0840デフォルトの名無しさん2006/02/25(土) 13:00:40
こういう尊大口調な奴って普段の生活になんか巨大な抑圧でも存在するのかなw
まあギャグのつもりかもしれないが、普通の人はそれを「痛々しい」と見るんだよ。
ひとつ大人になったね坊ちゃん。
0841デフォルトの名無しさん2006/02/25(土) 13:31:58
>>840
痛々しい
0842デフォルトの名無しさん2006/02/25(土) 13:37:17
>>838
何やってるコードかさっぱり分からん・・・
0843デフォルトの名無しさん2006/02/25(土) 14:37:33
>>836
SQLの条件が違うとか?w
0844デフォルトの名無しさん2006/02/25(土) 14:42:57
XMLHTTPとServerXMLHTTPでは処理速度に関して違いはありますか?
0845デフォルトの名無しさん2006/02/25(土) 14:43:21
>>844
ほとんどない。
0846デフォルトの名無しさん2006/02/25(土) 14:58:07
>>844
何で処理速度なんか気にするのか理解出来ない。
例え差があったって、1000億回位ループする中でやるとか以外、
何の問題もないだろうに。
そうじゃない処理を1msや2ms速くしたって何だと言うのか。
0847デフォルトの名無しさん2006/02/25(土) 15:02:17
>>836
OracleのOO4OのどっかのバージョンはFetchにバグがあって、ページまたぎのFetchを取りこぼすとか昔あったな〜

で、DBのバージョンとミドルウェアのバージョンは?
0848デフォルトの名無しさん2006/02/25(土) 15:25:02
>>834
SQL文が間違ってるんでしょう。
0849デフォルトの名無しさん2006/02/25(土) 16:35:21
>>834
ほかのPCが何を指してるのか
08508442006/02/25(土) 17:27:19
>>845
ありがとうございます

>>846
単純に知りたかっただけです。
0851デフォルトの名無しさん2006/02/25(土) 18:52:01
ヘッドハンター西脇を公開しました
http://www.vector.co.jp/soft/winnt/net/se392514.html
0852デフォルトの名無しさん2006/02/25(土) 20:16:08
>>837
> カナからローマ字のヘボン式に変換するソースありますか?
あるよ。
先に言っておくけど、呉とか言わないでね。



>>838
超有名な手法だね。
2ch以外でも掲示板でこの手の質問が出ると、必ず誰かがコレを書き出す。
まぁ関数名や引数名はちょっと違ったりするけどね。
個人サイトのVB Tipsなんかにも載ってたこと有るし。
0853デフォルトの名無しさん2006/02/25(土) 20:56:23
>>852 
長音を含む母音のときどう書くのですか?
促音とかはできたのですが。。
0854デフォルトの名無しさん2006/02/25(土) 22:12:53
VBから呼び出したIEのサイトのテキストボックスに
文字入力したいんですが・・・テキストボックスの指定の
仕方がわからない。どうやってかいたらいいのか・・・orz
わかる方教えてくださいm(_ _)m
0855デフォルトの名無しさん2006/02/25(土) 22:30:17
>>831
ああごめん、>>792を読んだもんだからちょっと思い出してみただけです。
アンカー付け忘れ。IDEとexeうんぬんは余談で。
0856デフォルトの名無しさん2006/02/25(土) 22:41:18
>>842
Debug.Assertが実行されるかどうかをブール値で返してるの。
あと誰も「API」を「使いたくて」使ってるわけなんかないから、最後の
トリッキーとか言うのは読まなくていい。
0857デフォルトの名無しさん2006/02/25(土) 23:13:06
>>792
AllWin32.Ocx を使うとか。

>>856
自分自身の Function 名を引数で渡して ByRef bIsIDE As Boolean で受ける、
なんて、よく思い付くな・・・
確かに、関数名の変数に戻り値を設定出来るけど・・・
ったく、世の中には頭の良い人が一杯だ。
0858デフォルトの名無しさん2006/02/26(日) 05:53:39
ThunderRT6Main で思い出した

ThunderRT6Main の「Thunder(サンダー)」はVBの開発プロジェクトコード名
MSのプログラミングツール製品のイベントには雷のアイコンが使われているけど ココから来てるとの事
VB誕生当時、完全なイベント駆動は画期的だったらしく 現在も「サンダー」が名残っています

まぁ知ってても役に立たないVB豆知識でした
0859デフォルトの名無しさん2006/02/26(日) 07:59:13
>>858
一番最初にVBを開発したのはMSじゃぁないんだけど・・・
0860デフォルトの名無しさん2006/02/26(日) 14:47:40
FindFirstChangeNotificationとWaitForSingleObjectを使った
フォルダ監視のプログラムを常駐させています

FindFirstChangeNotificationがタイムアウトを返せば関数を再帰呼び出し、
ファイル変更のシグナルを検知すれば処理を行って、また監視継続させます

日中はそれでうまく動いているのですが、深夜・早朝も使うことがあるため、
パソコンをつけっぱなしで放置しています

次の日の朝確認すると、再帰呼び出しのCallのところで
「スタック領域が不足しています」とエラーが出て、止まってしまいます

スタックを増やすか再帰呼び出しごとに解放できればいいと思うのですが、
方法がわかりません・・・

VBでは無理なんでしょうか?
0861デフォルトの名無しさん2006/02/26(日) 15:02:21
>>860
そんな処理になんでリエントリを使う必要があるのよ。
根本的に考え方がおかしい。
0862デフォルトの名無しさん2006/02/26(日) 15:13:47
再起呼び出しを使ってみたい年頃なのね
0863デフォルトの名無しさん2006/02/26(日) 15:16:48
>>860
わざわざ API なんか使わなくても Dir$ でいいじゃん。
0864デフォルトの名無しさん2006/02/26(日) 15:18:39
>>863
今の問題はそこではない
08658602006/02/26(日) 15:25:59
はじめはdo loopとdirでやっていたのですが、
CPU使用率が常に100%になってしまうので
別の方法はないかと、見つけたのが
こういうやり方だったんです…

どんな考え方をするべきなんでしょうか
0866デフォルトの名無しさん2006/02/26(日) 15:27:38
単純にFindCloseChangeNotificationを呼んでないとか。
本当にこれに「再帰呼び出し」を使ってたらただの馬鹿だが、
繰り返し呼び出すくらいの意味に勘違いしてるだけだと思うが。
0867デフォルトの名無しさん2006/02/26(日) 15:28:11
>>865
つ Timer
0868デフォルトの名無しさん2006/02/26(日) 15:31:52
>>865
つDoEvents
0869デフォルトの名無しさん2006/02/26(日) 15:35:03
>>868
DoEvents はスタックオーバーフローの温床になるので
使用は極力控えましょう
0870デフォルトの名無しさん2006/02/26(日) 15:35:18
質問者が馬鹿なら突っ込む方はもっと馬鹿かw
タイマなんか使えるわけないだろw
次のインターバルで待機関数呼び出すまでの間にイベントが起こったらどうするんだよw

正攻法にCでdll作ってスレッドでやるのがいいんじゃないの?
スレッドでフォルダを監視して、イベントを検出したらフラグを立てる。
VB側ではそのフラグをポーリングすると。
あるいはウィンドウメッセージ送出するとか。
0871デフォルトの名無しさん2006/02/26(日) 15:35:51
WaitForSingleObjectを使うならスレッドを起こさないとなー
しかしVB6では無理だしなー。
まあ、再起呼び出しはアホ過ぎるが
0872デフォルトの名無しさん2006/02/26(日) 15:37:16
ちとかぶったか
08738702006/02/26(日) 15:41:42
ああタイマってのはDir使ってイベントの検出を自前で実装するってことか。。。
スマン、俺が馬鹿だったw
08748602006/02/26(日) 15:44:07
>>866
単純に呼んでませんでした…
今日はこれを入れて常駐させて様子見します
ありがとうございました

>>870-871
Cはやったことないです…


馬鹿ですみませんでした
これで失礼します
0875デフォルトの名無しさん2006/02/26(日) 15:47:34
>>874
VB.NETに乗り換えればそのものずばりのコンポーネントがデフォであるぞよ。
0876デフォルトの名無しさん2006/02/26(日) 15:50:43
>>874
再起呼び出しをやめないとcloseしても
そのうちスタックオーバーフローは発生するぞ
0877デフォルトの名無しさん2006/02/26(日) 15:50:44
あれはでもWin9xでは使えんよ
0878デフォルトの名無しさん2006/02/26(日) 15:53:52
>>869
それは使い方を間違えてるだけ。
0879デフォルトの名無しさん2006/02/26(日) 15:59:18
DoEventを使ってもCPU使用率100%を下げるのには役に立たない。
単に画面が張り付くのを回避できるだけ。
0880デフォルトの名無しさん2006/02/26(日) 16:04:48
>>878
別に使うなとは言わん
Gotoだって使い方を間違えなければ、使えないことはない
俺は間違えない!って考えの人なら、もはや言う言葉は無いがな
0881デフォルトの名無しさん2006/02/26(日) 16:17:27
CPU使用率を下げるならSleep(1)だな
0882デフォルトの名無しさん2006/02/26(日) 16:21:25
DoEvents で CPU 使用率上がっても、別に他の操作に影響ないよね。
他の作業で上がった場合、他の操作に影響出るけど。

>>881
通信系とかは、Sleep 使わない方がいいと思う。
0883デフォルトの名無しさん2006/02/26(日) 17:26:31
■VBのバージョン : VB6

カナからローマ字のヘボン式に変換するソースありますか?
長音oを含む場合母音を重ねないってとこが上手くいきません・・

上記のソースないっすか?
■ このスレッドは過去ログ倉庫に格納されています