[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 09/04 11:48 / Filesize : 232 KB / Number-of Response : 924
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれVB6.0以前(超初心者向け)



1 名前:d mailto:age [2008/03/30(日) 09:01:59 ]
このスレッドはVBについて、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
VB使いが優しくコメントを返しますが、
お礼はVBの布教はしなくてよいので、初心者の救済をお願いします


前スレ
くだすれVB6.0以前(超初心者向け)
pc11.2ch.net/test/read.cgi/tech/1165574205/

780 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 09:18:12 ]
GSD_TextureInfo がどういう宣言のし方してるんだろうな・・・
Ginfoのバイト数とかはC++のそれと同じにしてるんだろうか とか・・・
詳しい動作の話になるとやってみないと突っ込めないけど


781 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 11:28:45 ]
>>780
マニュアルでは

struct GSD_TextureInfo
{
BOOL active;
DWORD texSize;
int x, y;
DWORD color;
DWORD align;
BYTE *data;
};

とありましたので

Private Type GSD_Info
GSD_Active As Boolean
GSD_TexSize As Long
GSD_X As Integer
GSD_Y As Integer
GSD_Color As Long
GSD_Align As Long
GSD_BYTE() As Byte
End Type

と置き換えました。
最後のByteは「テクスチャを格納したバッファへのポインタ」と書いてました。

782 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 21:28:58 ]
BOOLとintはVBのLongに対応する。
あとBYTE*もLongにして、コード中で別の配列変数からVarPtrで取得した値を代入するしかないと思う。
ところで元と名前を変えるのキモい。

783 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 22:57:02 ]
>>782
ありがとうございます。早速やってみようと思います。

>ところで元と名前を変えるのキモい。
すみません・・・以後気をつけます

784 名前:770 mailto:sage [2009/04/11(土) 04:40:18 ]
>>782

Private Type GSD_Info
active As Boolean
texSize As Long
x As Long
y As Long
color As Long
align As Long
data As Long
End Type

---
Dim Ginfo As GSD_Info
Dim GByte(256) As Byte
Ginfo.data = VarPtr(GByte(0))
Call GSD_DataLock
Call GSD_GetTexture(0, ByVal VarPtr(Ginfo))

とし、Ginfo.texSizeを取得しても戻って来るはずのテクスチャサイズが
戻ってきませんでした。
置き換えって難しいですね・・・更に試行錯誤してみます。

785 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 08:10:46 ]
ところで
GetTexture
の宣言文どうなってるの?


786 名前:770 mailto:sage [2009/04/11(土) 12:03:47 ]
>>785
BOOL GSD_GetTexture(int index, struct GSD_TextureInfo *info);

とマニュアルに記載いたしておりましたので

Private Declare Function GSD_GetTexture Lib "gsd.dll"
 (GSD_Index As Long, GSD_TextureInfo As Long) As Long

といたしました。

787 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 13:58:30 ]
>>786
ByVal 指定がないじゃん。

788 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 20:26:58 ]
だね。こんな感じでどうだ。
Private Declare Function GSD_GetTexture Lib "gsd.dll" (ByVal index As Long, ByRef info As GSD_Info) As Long



789 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 23:02:10 ]
予想通りの展開の予感

790 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 00:03:06 ]
>>752
ちょいまち
Err.RaiseもRaiseEventもQBにはないよ、と揚げ足をとる。


791 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 00:09:32 ]
お前は視野が狭く小さい人間だ
QBだけの話じゃない事すら見えていない
人間のクズだ
ゴミだ
何故おまえはここにいる
お前の目は飾り物か
ガラスの玉でも入れておけ
お前の頭は帽子のスタンドか
帽子すら置けない役立たずか

792 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 08:07:13 ]
どこを縦に読むんだ?

793 名前:デフォルトの名無しさん [2009/04/13(月) 23:18:04 ]
>>790
そもそもどちらもRaiseではあるけど、
まったく別の用途だから並んでることにすごい違和感を覚える。

クラス間連携でRaiseEventを使わざるを得ないこともあるし、
On Error Resume Next で拾わざるを得ない処理は Err.Raise 必須だし、
どちらも一般的に使いそうなもんだけどなぁ。


794 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 09:45:23 ]
>>793
俺もそう思う

795 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 18:21:00 ]
officeXPのaccessのmdbをVB6でGetObjectしています。
それからDoObj.RunSQLでSQL設定しています。

ところが、accessをoffice2007に変更すると、
GetObjectのところでunknown errorになってしまいます。
何かDLLか足りないみたいですが、ググっても
見つかりませんでした。どなたかヒントあったら下さい。
お願いします。

796 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 02:28:57 ]
救世主スレ見つけたw

VBで作ったスケジュール管理システムを、ネットを使って外からスケジュールをアップデートできるようにしたいんですけど
VBをHTMLでネット経由で動かす方法がまったくわかりません(´・ω・`)
学校の一学期使ったプロジェクトレベルのシステムなので、そんなに複雑じゃないので十分です。
自分はHTML担当で、VBを稼動ブラウザか何かで稼動させなくちゃならないのですが、
知識が無さ過ぎて何をググって良いのかも分からないっす(><)

何か良いページでもあったら、教えてくださいm(_ _)m

797 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 02:53:15 ]
VBでhttpdを作りたいって事?CGIとしてVBプログラムを動かしたいって事?クライアントがVBって事?

798 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:04:48 ]
>>797
>CGIとしてVBプログラムを動かしたいって事?
おそらくこれです!
MSISSとOracleとVBとAccessでスケジュール管理システムを構築するのですが、
利用者が自宅からスケジュールをチェックしたり更新したりする必要があるので
そのインターフェースをHTMLで。との事です。



799 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:09:25 ]
では VB CGI IIS でぐぐればいいんじゃないか?

800 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:12:14 ]
>>799
どうもありがとうございます!
逝ってきますノシ

801 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:32:05 ]
>>787
>>788
助言ありがとうございました。
あれから色々試してみたのですが、どうもダメでした・・・
せっかく教えて下さったのに申し訳ありません。

802 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:34:13 ]
VBでCGIは作れないよ
IIS使えるならASPで

803 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:46:32 ]
Win32APIで標準入出力できるからCGIは普通に可能
でもhttpdはCGIを呼ぶ側だろ
httpdもWinsockなどを使えば当然作れる

804 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 11:01:55 ]
API実装してまでやるんだったら
Cで書いた方が早くね?

805 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 12:25:46 ]
VBでやりたいって言うんだからしょうがないだろ

806 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 16:51:07 ]
FSOでできるだろ

807 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:26:48 ]
普通に考えたら、コンポーネント化して、ASP/ASP.NET から呼ぶだろ

808 名前:796 mailto:sage [2009/04/16(木) 01:26:57 ]
えっと・・・。何がなにやら・・・。
自分達はプログラマーじゃなくて、システム管理のクラスをとってるだけなんです(´・ω・`)
VBとSQLの基礎をちょっとやった事があるくらいのレベルなのに、
自分達でシステムをくみ上げなければいけないと言うクレイジーな状況でして・・・。
自分もHTMLのHPくらいは作った事あるけど、データを扱うとか皆目検討が付かないorz
一応ソースの一部を提供されてるんですけど、何がなにやら。
ソースの一部です。

<body lang=EN-US style="tab-interval: .5in">

<form ACTION = "/cgi-bin/Demo1" METHOD =GET>
<p>Type a word in each box, then press the Submit button
<p>

<p><INPUT TYPE="text" NAME="Field1" VALUE></p>
<p><INPUT TYPE="text" NAME="Field2" VALUE></p>
<p><INPUT TYPE="submit" VALUE="Submit Message"></p>
<p>
<p>
The button will call the VB program Demo1.exe

</form>

</body>



809 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 01:34:23 ]
こりゃあ一般人が二階建て住居を建てるようなもんだな
がんばれよ

810 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 01:38:03 ]
ちょwwまwwww
何か参考になるサイトの紹介でもいいんで、助けてプリーズ・・・orz

811 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 01:42:17 ]
VB → VBScript
exe → asp
にかえてもらえ。

たいしてかわらんだろ。

812 名前:796 mailto:sage [2009/04/16(木) 01:48:42 ]
>>811
あ、できると思います。
あくまで参考のソースなんで、使っても使わなくてもいいらしくて。
最終的には「ちゃんと動けばいい」くらいの話なんで。
質問には答えるけど、自分達で調べて勉強しろよー。と言う
千尋の谷に突き落とすと言う名の半手抜き講義っす(# ^ω^)

813 名前:796 mailto:sage [2009/04/16(木) 01:59:44 ]
>>811
ありがとうございます!
asp vbscript のセットでぐぐったら、入門ページがいっぱw
見てきます(・ω・)ノシ

814 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 23:34:28 ]
なんともこの業界の輝かしい未来のあるスレよ


815 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 10:05:03 ]
素人なのですが、VB6.0で遊んでます。手軽にWYSIWYGエディタ 機能 を
実現できる dhtmled.ocx(AvtiveX)が便利なのですが、
なにやrら、ネットに接続した場合脆弱性の問題が生じるとか。
その問題はWindowsXP環境だと最新にアップデートしてあれば
クリアできる?

816 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 10:36:26 ]
クリアできるかどうかすら定かにならないからセキュリティー問題ってのは難しいんだよ

そもそもこんなところで聞いて「クリアできる」って答えが返ってきたら、君はそれを信用するのか?
だとしたらソフトやコンポのセキュリティー以前に、君の思考セキュリティーに問題有りだ。
逆に信用しないなら、聞くこと自体意味がない

817 名前:デフォルトの名無しさん [2009/04/18(土) 18:43:07 ]
>>816
激しく同意

>>815
まずコンポーネントのメーカに確認しろよ

818 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 02:20:53 ]
>>793
VBのキーワードのおおらかさ(笑)を言い出したら、
N-BASICの時点でGETがグラフィックだったりファイルIOだったり
するしなあ・・・
いまじゃファイルIOとプロパティかw



819 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 17:17:49 ]
Form2.Show vbModal, Form1
のようにオーナーフォームを指定して呼び出した場合に
Form2のForm_Loadでオーナーフォームを取得する方法を教えてください。

手続き的にはForm2にグローバルプロパティとか作って、Showの後に直接Form1を渡せば
Form2側でForm1を取得すること自体は出来ますが、そういう方法ではなくForm2から辿る方法を知りたいです。
FormオブジェクトのメンバにOwnerFormとかParentObjectとか有るかなと思ったけど無いようだし、
GetWindowLongのGWL_HWNDPARENTでは、ThunderRT6FormDC(フォーム)ではなくThunderMainが取得されてしまい
他に有用なAPIも見あたらないです。

ThunderRT6FormDCを列挙するだけなら出来ますが、どれがオーナーフォームに設定されてるか
或いはオーナーフォーム指定無しで呼び出されているのかを取得するにはどうすれば良いのでしょうか?

820 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 18:02:38 ]
GW_OWNER指定してGetWindowでハンドルが取れるらしいけど。
ハンドルが取れればFormsで列挙して探せるんじゃないのかな。

でも、オーナーを指定して表示&オーナーフォームの取得ができるフォームの
インターフェイスを定義してそれを実装する方が簡単な気もする。

しかし、VBってそんなプロパティもなかったんだっけ。

821 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 20:40:14 ]
VB6を使用してIISアプリを作成したいのですが、
新規にプロジェクトを作成すると「IISかPWSが必要です」とエラーが表示されてしまいます。
IISはインストール済みなのですが他にも必要なものがあるのでしょうか?
OSはWindows2000Proです

よろしくお願いします。

822 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 22:01:24 ]
>>821
IISのバージョンが新しすぎる。VB6時代の古いのが必要。

823 名前:デフォルトの名無しさん [2009/04/22(水) 00:26:25 ]
VBEの ツール/オプション/エディタの設定 で、コードの文字色とか背景色とか設定できるけど
ここで指定できる色を書き換えるのってどうやるんだっけ?
以前何処かで見たんだが、そのときは「へぇ、こんな事も出来るんだぁ」くらいにしか思ってなかったが
今になってどうしてもやりたくなったので、知ってる人が居たら教えてください

824 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:26:49 ]
クラスモジュールって、初めは何なのか全く理解不能な怪物だったな。
クラスモジュールの説明をしてる本って無いんか。
VB4〜6の本やExcel VBAの本やWord VBAの本で、いずれも見たことが無い。
VBをほったらかして、別のプログラム言語を学習してたので、その知識を応用
すれば、理解できるようになった。
VBで直接クラスモジュールの学習をしたことが無い。
Visual C++人の作ったソースファイルだから、C++言語の学習しといて正解だった。
正しくVB用語使ってくれないからな。そのせいで、危うく理解不能で仕事失格になる
ところだったぞ。ユーザー定義型を構造体って言ったり、オブジェクトの参照のこと
をポインタと言ったりするのは、まだCにもあるから序の口だが、メンバ関数とか、
コンストラクタとか、デストラクタって言葉はC++の用語だということを後から知った。

クラスモジュールは上級者用の本なら載ってるんかいな。

825 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:33:43 ]
どこからタイムスリップしてきたんだ?

826 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:34:12 ]
載ってるだろ

827 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:39:17 ]
どの本に載ってるんだ。

828 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:42:53 ]
> ユーザー定義型を構造体って言ったり、オブジェクトの参照のこと
> をポインタと言ったりするのは、まだCにもあるから序の口だが、メンバ関数とか、
> コンストラクタとか、デストラクタって言葉はC++の用語だということを後から知った。

世の中と違う用語(MS俺様用語)を使うのはVBくらいのもので、それ以外の言語では
どこいっても通じるんですよ。



829 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:43:45 ]
上級者用プログラミング言語C++のプログラム人も、VB6を使うこともあるんですか。

830 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:44:36 ]
俺は「VBCOM」って本で勉強した記憶がある
ググるの面倒だから勝手に探して

831 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 02:05:31 ]
モジュール変数の宣言をPrivateと書くな、Dimと書け。

832 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 02:08:18 ]
>>831
何故それを強要するの?

833 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 20:18:49 ]
変数はDimで宣言が普通。ちょっと知的なムードを漂わせたい時はGlobalかな。
変数名は短く略語で大文字で。
クラスモジュールは言語オタクの為の機能だから禁止。


834 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 20:34:12 ]
>>833
しぬの?

835 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 08:54:03 ]
質問があります。

環境:VB6 SP6@XP Pro SP3

・リッチテキストボックスかテキストボックス内で、改行のみの行を削除したいです。

=========
あいうえお
かきくけこ
       ←改行のみの、この行を削除
       ←上に同じ
さしすせそ
=========

以上、どうかよろしくおねがいします。

836 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 09:03:52 ]
リストに突っ込むときに

if( 項目 = vbcrlf) then

とかではじけばいいじゃないか・・・・

837 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 10:32:46 ]
あいうえお[vbCrLf]かきくけこ[vbCrLf][vbCrLf][vbCrLf]さしすせそ

ってことだから、vbCrLfの連続をvbCrLf単一に置換すれば良いだけでしょ

正規表現使えば、2個以上→1個を一発で出来るし
2個→1個でループ回せば、正規表現無しでも出来る

838 名前:835 mailto:sage [2009/04/30(木) 10:36:51 ]
>>836
レスありがとうございます。
一気に>>835に書いた例で取り込んでしまっているのです。

>>873
レスありがとうございます。
ループの方で試してみたいと思います。


ありがとうございました。



839 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 10:55:54 ]
VB6だと配列を返す関数を下のように書いて動くの?
俺はVB使いじゃなくてVBAなのだが、VBAじゃAs Integer()としないと動かないんだが。
もっともExcelのユーザー定義関数として使うなら引数もInteger型にしないと動かないけど。
動く動かないはおいといてByte型はないと思うな。
これって数値に使う型じゃねーもんな。

Function fnc(ByVal a As Byte, ByVal b As Byte) As Integer
Dim ar(1) As Integer
ar(0) = a + b
ar(1) = a - b
fnc = ar
End Function

ここに書いてあった。
oshiete1.goo.ne.jp/qa3511531.html?from=navi_ranking



840 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 11:43:05 ]
> VB6だと配列を返す関数を下のように書いて動くの?
  ↓
> すみません Ano3です
> 関数宣言の As Integer は As Integer() でした
って補足回答ついてるじゃん

> これって数値に使う型じゃねーもんな。
数値に使う型だよ
バイナリってのが0〜255の正数の配列だから
0〜255の正数を扱うByte型を配列にした物が、バイナリの格納にも利用されるってのが正しい解釈で
Byte型ってのがバイナリ用なわけではなく、あくまでもByte型は数値を扱う型ね

841 名前:839 mailto:sage [2009/04/30(木) 12:23:07 ]
>>840
補足見落としてたのか。
Byte型を数値計算に使うべきじゃないと思うけどな。
そこは考え方の違いとしてもfnc(255,1)はオーバーフローするな。


842 名前:839 mailto:sage [2009/04/30(木) 12:30:21 ]
>すみません Ano3です
なので見落としたのか。
Ano3じゃないもんな。

843 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:38:15 ]
>>841
使うべきか使うべきじゃないかなんて話は一言もしてないよ
Byte型が数値に使う型か否かって話をしただけだ
君が「この場合は相応しくない」という状況に応じた話ではなく
「(Byte型は)数値に使う型じゃねー」という定義付けの話をしたから俺も定義付けの話をした

そのユーザー提議関数で使うべきか否かって話なら、俺の意見も「使うべきじゃない」だ

>>842
A no 3 じゃん

[A]nswer(回答)
[No](ナンバー)
[3]番目

844 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:45:49 ]
>>843
別にユーザー定義関数として使わなくてもByte型はないと思うな。
「数値に使う型じゃねー」じゃなくて「数値計算に使う型じゃねー」って書けばよかったかな?
Ano3は俺も書いた後気がついた。
あそこは初めてなのでそんな使い方するとは知らなんだ。

845 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 13:09:07 ]
>>838
おそれすだけど
SPLIT使って配列にしてしまえば?
対象は改行で
改行が
CRLとCRLF交るとか言うならREPLACEでやってからとか
配列にしときゃぁどうにでもなるっしょ?

846 名前:835 mailto:sage [2009/04/30(木) 15:03:22 ]
>>845
レスありがとうございます。
改行コードはCR+LFなので、Splitでも試してみたいと思います。
どうもありがとうございました。

847 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:04:49 ]
VB6.0からWordを操作しようと思ってるのですが、
「WINWORD.EXE /a」の様に、起動スイッチを付加して
applicationオブジェクトを生成することは可能なのでしょうか?
ご教示お願いします。

848 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:07:11 ]
>>847
無理。起動してから GetObject() とかでどう?



849 名前:デフォルトの名無しさん [2009/05/08(金) 08:41:35 ]
>>848
なるほど、GetObjectですか。試してみます、ありがとうございます!

850 名前:デフォルトの名無しさん [2009/05/08(金) 14:05:17 ]
はじめまして

VB6のプログラムを修正することになり、
試行錯誤で頑張っているのですが、
どうしても情報が少なくて行き詰ってしまいました、
ここの皆様のお知恵を貸して頂けますでしょうか

アナログモデムを使って、遠隔地のデータセンターと接続し、
ベーシック手順でデータの送受信を行う

そんなことがVBでできるのかすらわからないのですが、
調べた情報として
グレープシティの「PowerTools ActiveComm」という製品で、
モデムを使った送受信ができそう
というところまでで、行き詰ってしまいました

この製品で大丈夫なのか、遠隔地との接続はどうするのかなど、
まだわからないことばかりですが、
何卒、宜しくお願いいたしますm(__)m

851 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 14:22:15 ]
MSCommでよさそうなものだが

852 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 20:49:45 ]
自作は敷居高くね
全銀ベーシック手順なら、通信してテキストファイルに落してくれるパッケージ買った方が早いと思う。


853 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:01:53 ]
自作ってのはWin32API使って実装することだろ
それにMSComm任せなら十二分に敷居は低い

854 名前:デフォルトの名無しさん [2009/05/11(月) 00:30:39 ]
VB6でフォームのあるディスプレイの解像度の取得方法は可能なのでしょうか。

VB.NETでいうところのScreen.GetBoundsにあたるやつです。
VB6ではできない、など助言をいただけますと助かります。

どうぞよろしくお願いします。


855 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:37:49 ]
Screen オブジェクトから取れなかったっけか?

856 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:52:49 ]
>>855

情報小出しですいませんでした。

プライマリとセカンダリのディスプレイがある構成で、
セカンダリの方の解像度が知りたかったのです。

Screen.Widthですとメインのディスプレイしか取得できませんでした。

現在フォームがあるディスプレイの解像度を取得することで
セカンダリの解像度わかるはずと思ったのですが、
VB.NETのScreen.GetBoundsの情報しかなかったため質問させていただきました。

なんとか実現する方法はありませんでしょうか。

857 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 01:02:11 ]
マルチモニタ用の API を呼ぶしかないね。

858 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 01:20:50 ]
APIで。モニタを列挙して該当モニタの情報を取得、だったかな。



859 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 01:30:27 ]
>>857
>>858
アドバイスありがとうございます。

フォームのあるモニタのハンドルを取得(フォームをサブモニタ位置に移動してから)
MonitorFromWindow

モニタの情報を取得
GetMonitorInfo

でサブモニタのbottom,left,right,top座標を取得することができました。

マジ感謝しております。
ありがとうございました。

860 名前:850 [2009/05/11(月) 09:28:13 ]
>>851-853

返信ありがとうございます

MSCommで調べてみたところ、解決できそうな気がしてきました
ありがとうございました

861 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 07:53:34 ]
Dim c As Long
Dim s As String

c = RGB(&H12, &H34, &H56)
s = _
"R: " & Right("00000000" & Hex(c And &HFF), 8) & vbCrLf & _
"G: " & Right("00000000" & Hex(c And &HFF00), 8) & vbCrLf & _
"B: " & Right("00000000" & Hex(c And &HFF0000), 8)
MsgBox s

と書いて

R: 00000012
G: 00563400
B: 00560000

が表示されるんですが
G を 00003400 として加工するにはどうすればいいですか?

862 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 08:48:50 ]
RightString(8, "0")" & Hex((c Mod &H10000) And &HFF00), 8)

863 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 18:56:04 ]
>>862
ありがとうございました
おかげで希望通りの文字列が取得できました

しかし理解力に乏しいのでまだよくわかりません
>>861で書いた c And &HFF00 の時点で(1)の結果を期待してましたが実際には(2)です
Andでどういう風に演算されているのでしょうか?
00000000 01010110 00110100 00010010 (&H563412)
00000000 00000000 11111111 00000000 (&HFF00)
-------- -------- -------- -------- And
00000000 00000000 00110100 00000000 (&H3400)..........(1)
00000000 01010110 00110100 00000000 (&H563400)..........(2)


864 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 19:20:22 ]
>>863
ウォッチウィンドウで&hff00を入れてみると、Integer型で-256と解釈されていることが分かる。
-256を符号拡張すると&hfffffff00になるというわけ。

865 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 20:22:00 ]
>>864
ありがとうございます
確かにIntegerとして扱われてました
おかげでなぜうまくいかないのか把握できました

866 名前:デフォルトの名無しさん [2009/05/18(月) 08:55:14 ]
質問です。
VBでプログラムのデバッグをしたいのです。
エラーを発生させて確認したいのですが
イミディエイトウインドウにうちこむ
Err.Raiseを使うときの引数の渡し方がわかりません。

Err.Raise(゙゙,゙゙,゙゙,゙゙)
それぞれどう設定すればいいのでしょうか。
画面番号やヘルプテキストなど。

あと、Callなどを付けずに、Err.Raiseだけいれてエンターキー押せばいいのですか?

よろしくおねがいします。

867 名前:デフォルトの名無しさん [2009/05/18(月) 23:42:37 ]
>>866
Err.Raise エラー番号

ex) Err.Raise 9

---------------------------
Microsoft Visual Basic
---------------------------
実行時エラー '9':

インデックスが有効範囲にありません。
---------------------------
OK ヘルプ
---------------------------

まぁ、ヘルプくらい嫁

868 名前:デフォルトの名無しさん [2009/05/19(火) 13:11:46 ]
>>867
解答ありがとうございます。
Err.Raise 9
を入力したのですが、
エラーを発生させて、あらかじめラベルを貼った
Errorラベルにデバッグで移動をしないのです。

やりたいのは

On Error GoTo Error1

処理〜

Error1:
エラーメッセージ出力


これでF8キーで実行してデバッグ中に
Err.Raiseを使用して、Error1ラベルに移行したいのですがうまくいきません。

コードを編集せず、イミディエイトウインドウで行いたいのです。

よろしくおねがいします。



869 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 14:15:14 ]
停まってる車で目的地に行きたいと言ってるのか

870 名前:デフォルトの名無しさん [2009/05/19(火) 20:40:34 ]
>>869
はい。
何らかの処理でエラーが発生してErrにコードが設定されますよね。
例;ファイル書き込み異常など。

その時に、予め設定しておいたエラー処理に移行するのですが、
それをデバッグ中に、コードや環境をいじらず行いたいのです。

Err.Raiseで起こせると過去のログで読んで試したのですが、うまくいかず。

イミディエイトウインドウに教えていただいたコードを設定したのですが、
ポップアップウインドウは出るのですが
エラー処理に移行しないので。
その方法を教えてもらいたいのです。


ソースは、引数のない関数を呼び出しているだけなので、
環境でエラーを起こす方法が、それ以外なくて困っています。

よろしくお願いします。

871 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:11:31 ]
GoTo Error1
でいいんじゃね?

872 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:18:54 ]
バカか

873 名前:デフォルトの名無しさん [2009/05/19(火) 23:26:01 ]
>>870
小学生か??ほんとにヘルプ嫁と何度言ったら(ry

Private Sub Form_Load()

On Error GoTo Label1

  Err.Raise 8

  End

Label1:
  MsgBox ("Label1")

End Sub



874 名前:デフォルトの名無しさん [2009/05/19(火) 23:27:14 ]
ちなみにイミディエイトではできん

875 名前:デフォルトの名無しさん [2009/05/20(水) 09:49:28 ]
解答ありがとうございます。
記載しましたが、コードにErr.Raiseを仕込む事なく行いたかったのです。

試行錯誤した所、イミディエイトでエラーを起こす事で例外を発生の後にErrorラベルへの移行ができました。

以下、Yahoo知恵袋にて見つけた記載を転記。

イミディエイトでErr.Raise

マウスでドロップ ←これを知りたかった

後で同じ質問が出た時のために残しておきます。


876 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:59:44 ]
>後で同じ質問が出た時のために残しておきます

う・・・うん・・・・

877 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:31:20 ]
スレタイ通りで結構

878 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 14:35:04 ]
VB6で出来たEXEだけを
(例えば一般的なHelloWorldでもいいので)
インストールしたばかりで何もしていないwindows2000マシンに入れて動きますか?
ランタイム入ってるんだろうか…

最悪はExecel2000を入れてもOKです。

ちょっと変な質問なのですが・・・情報が少なくって・・・
よろしくお願いします。
うちの会社にWin2000がもうないので・・orz



879 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:04:02 ]
Windows2000にはMSVBVM60.DLLだけ入っているので
TextBoxやLabel等しか使っていなければ動く

880 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:10:34 ]
日本語表示がおかしくならなかったっけ?
古い話だからあまり記憶に無いが

881 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:17:13 ]
>>879->>880
サンクスです。

ひとまずランタイムは標準最小構成が入ってるから
ライブラリ使わないなら何とか動く感じですが色々問題がありそうですね。

ありがとうございました。

882 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:49:55 ]
880も書いてるが、日本語扱うならvb6jp.dllも必要
Msvbvm60.dllとVb6jp.dllがあれば、
標準コントロールのみで参照設定使ってないアプリは動く

あとは使用するコントロールやCOMに応じてdllなりocxなりが必要になる

Msvbvm60.dll、Vb6jp.dllや、コントロールのocxはシステムにインストールしなくても
exeと同じディレクトリに入れておけば大抵動くよ
但しVB6のProfessional以上のライセンスを持ってないと、同梱配布は出来ないけどね

COMの場合はレジストリに登録しないとダメだがな

883 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:31:09 ]
>>882
ご丁寧な補足説明ありがとうございます。
Professionalなのでそこは問題がなさそうです。

一回は実際に入れる前にどこかで実験しなけりゃいけないなぁ…・
2000は1つくらい残しておいてほしかった


884 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:09:22 ]
つ仮想PC

885 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:47:46 ]
なんだっけなぁ
MS UI ゴシックは文字化けして、
なぜか MS ゴシック 9 ポイント にすると、文字化けしないんだよね。
化けるなら全部化けるだろ、と思うんだが、
上記設定だと化けない謎。

886 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:38:49 ]
どうしてもVBじゃなきゃだめなのか
最小ランタイムで動かすようなものなら他の言語も検討してはどうか

887 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:03:42 ]
>>885
俺もそれで悩んだんだけど、各コントロールに明示的にUIゴシックを
設定するとちゃんと表示された

初期状態でUIゴシックになってるのはフォントのプロパティに何も設
定されていなくて、環境依存のデフォルトフォントで表示されるため
らしい。
フォームのソース見ると分かるよ

888 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:04:59 ]
>>886
察してやれよ
VB6の人に他の環境使えっていってもムリな話



889 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:12:54 ]
VB6のコンボボックスについて質問です。

ドロップダウンコンボでリストから何かを選択したら、選択したものを
リストの一番上に移動するというのをやりたくて以下のようなコードを書いたのですが、
何故か選択した後、コンボボックスの内容表示( .Text )が空になってしまいます。

2〜3で入れ替えを行い、2で消えてしまった表示を4で補完するという流れなのですが
ステップ実行してみると、4が実行されたときにちゃんと選択文字列がコンボボックスに
表示されるのですが、End Subが実行されると何故か消えてしまいます。

原因と解決方法を教えてください。

Private Sub Combo1_Click()
  Dim buf As String

  '1 選択項目の文字列を保持
  buf = Combo1.Text

  '2 選択項目を削除
  Combo1.RemoveItem Combo1.ListIndex   'ここで一端コンボボックスの内容表示は空になる

  '3 一番上に追加
  Combo1.AddItem buf, 0

  '4 選択項目の文字列を表示
  Combo1.Text = buf               ' ステップ実行ではここでちゃんと表示される
End Sub                        ' 何故かここで再度表示が消える

Private Sub Form_Load()
  Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc"
End Sub

890 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:51:49 ]
何時間もレスがないようなので・・・

いま、VB6 をインストールしてないので Excel 2003 で上記のコードを動かしてみた。
ちゃんと動いたよ。もしかして、Combo1_Change() プロシージャのない?
Combo1.RemoveItem を実行したときに Combo1_Change() を実行してしまうのが
原因かもしれない。はずれてたら、ごめん。

891 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:53:51 ]
訂正
Combo1_Change() プロシージャのない? → Combo1_Change() プロシージャが存在してない?

対策は、考えてみて。(はずれてたら、ごめん。)

892 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:02:37 ]
あ〜、さらに訂正
可能性としては、Combo1.Text を実行したときに Combo1_Change() が呼ばれている方が
濃厚だね。

解決法は、要求してないイベントを起こさないようにするか、Combo1_Click() から
Combo1_Change() を呼び出したときは、何もしないようにする。(なんか変数を用意する)

はずれてたら、ごめん。


893 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:15:32 ]
もう一回全部作りなおすとどうなるのかな?
保持ってるやつを先頭に入れて他の項目挿入中に保持ってるやつを判定して再挿入を防ぐとか


894 名前:889 mailto:sage [2009/05/24(日) 05:21:25 ]
>>890-892
Combo1_Changeイベントは有りません。

当初、あるアプリを制作中にこの問題に行き当たり、確認のため新規プロジェクト(標準EXE)の
Form1にCombo1のみを配置して、コードも>>889に書いたForm_LoadとCombo1_Clickのみで
確認した上で問題が再現したので質問させて頂きました。
>>889で書いた他にコードが無い状況で発生しているということを書き忘れていたため、
余計な考察をさせてしまい申し訳有りません。

あと、Excel2003のユーザーフォームで確認しましたが、確かにExcelでは問題が再現しませんでした。

>>893
一度Clearして選択項目を先頭にAddItemしたあと、他の項目をAddItemしていくということですか?
Listを配列変数に保持して、再挿入されないようにAddItemしてみましたが結果は変わらずで、
項目の入れ替えは正常に行われますがコンボボックスの内容表示は空になってしまいます。

もちろん、選択項目をAddItemしたときに.Textも設定して、ステップ実行でその時点では表示されています。
他の項目をAddItemしている間も表示は消えず、End Subで表示が消えてしまいます。

上にも書いたとおり、他にイベントはありませんし、仮に合ってもブレイクポイントではなくステップ実行なら
影響を与えているイベントがあれば、その部分にステップするはずですが。

895 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:07:53 ]
VB6 インストールした。ためしに、Win7RC にしてみた。動くみたい。

Private blnRecursive As Boolean

Private Sub Combo1_Click()
Dim buf As String

If blnRecursive = True Then
Exit Sub
End If

'1 選択項目の文字列を保持
buf = Combo1.Text

'2 選択項目を削除
Combo1.RemoveItem Combo1.ListIndex 'ここで一端コンボボックスの内容表示は空になる

'3 一番上に追加
Combo1.AddItem buf, 0

'インデックスを指定するようにするので、コメントにした
'4 選択項目の文字列を表示
'Combo1.Text = buf ' ステップ実行ではここでちゃんと表示される

blnRecursive = True '再帰的に呼ばれるのを回避
Combo1.ListIndex = 0 'これをすると、Combo1_Click() が再帰的に呼ばれてしまう
blnRecursive = False

End Sub ' 何故かここで再度表示が消える


896 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:09:03 ]
Private Sub Form_Load()
blnRecursive = False '初期化

Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc"
End Sub

とりあえず、動くようにしたよ。
でも、原因はなんだろね。確かに、元プログラムでは、 End Sub するときに消えるね。
時間あったら調べとくよ。

# Excel 2003 では、再現しないんだねぇ。
# ちなみに >>890 でした。


897 名前:890 mailto:sage [2009/05/24(日) 21:24:07 ]
ってか、これだけでも Hello が表示されない

Private Sub Combo1_Click()
Combo1.Text = "Hello"
End Sub

Private Sub Form_Load()
Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc"
End Sub

ってことは、Click イベントではクリックして選んだんだから、選んだもの以外に変更するんじゃーねーよ
って事らしい。

もうすでに解決してるかな?

898 名前:デフォルトの名無しさん [2009/05/25(月) 01:10:55 ]
>>889
何で消えるのかはCombo2の動きで感じ取れ

Private Sub Combo1_Click()
Static flg As Boolean
If flg Then Exit Sub Else flg = True
If Combo1.ListIndex > 0 Then
Combo1.AddItem Combo1.List(Combo1.ListIndex), 0
Combo1.RemoveItem Combo1.ListIndex
Combo1.ListIndex = 0
End If
flg = False
End Sub

Private Sub Combo2_Click()
Debug.Print "テキスト変更前"
Debug.Print "ListIndex:" & Combo2.ListIndex
Combo2.Text = "ccc"
Debug.Print "テキスト変更後"
Debug.Print "ListIndex:" & Combo2.ListIndex
Debug.Print
End Sub

Private Sub Form_Load()
Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc"
Combo2.AddItem "aaa": Combo2.AddItem "bbb": Combo2.AddItem "ccc"
End Sub




899 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:45:51 ]
質問です。
コマンドプロンプトでの入出力を逐次行いたいと思っています。

以下のようなサンプルを書いてみたのですが、うまくいきませんでした。

ipconfigの結果の最後の行を取得したのち、
もう1行読みに行ってしまいそのまま処理戻り待ちになってしまいます。
この時コマンドプロンプトを手動で閉じると制御が戻り処理が再開されました。

何がいけないのでしょうか?


Dim objWShell As Object
Dim objExec As Object
Set objWShell = CreateObject("WScript.Shell")
Set objExec = objWShell.Exec("%ComSpec%")

objExec.StdIn.WriteLine "ipconfig"

Do Until objExec.StdOut.AtEndOfStream
Debug.Print objExec.StdOut.ReadLine
Loop

objExec.StdIn.WriteLine "Exit"

Set objExec = Nothing
Set objWShell = Nothing


900 名前:デフォルトの名無しさん [2009/05/29(金) 01:36:03 ]
>>899
手動で閉じたときにエラー発生しなかった?
何でエラーになったか考えればこんな感じにたどり着くと思うよ。

objExec.StdIn.WriteLine "ipconfig" + vbCrLf + "Exit"


901 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 01:59:45 ]
>>900
助言ありがとうございます
その通りでした。
ですが、実のところ途中でExitしたくないのです

コマンドプロンプトを複数回呼び出すたびにウインドウが出てしまうためこれをさせたくないのです
元はといえば自由に操作可能なコマンドプロンプトを非表示で呼び出せれば良いのですが・・・
そのために考えたコードが上記のものでした

902 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 07:53:09 ]
パイプのようなものを使えばいいのでは

903 名前:デフォルトの名無しさん [2009/05/29(金) 12:24:36 ]
コンソールアプリケーションには疎いのですが、
パイプのようなものとは記号「>」でファイル出力するという意味でしょうか?

中間に入力などがあり分岐したい場合に対処できないと思ったのと
ファイルへの入出力を伴うのは処理速度がストレージ性能に依存するため避けたのですがどうでしょうか?

904 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 12:54:06 ]
VB パイプ
などでぐぐれば多少は出てくるでしょうに、それすらしないんですか

905 名前:デフォルトの名無しさん [2009/05/29(金) 13:07:49 ]
処理速度とか気にしてる割にはシェルの起動時間は気にならないんですね

めんどくさいから素直に何がしたいのか書けよ


906 名前:899 mailto:sage [2009/05/29(金) 13:16:59 ]
すいませんでした
ググって来ました
私が言っていたのはリダイレクトだったのですね、失礼しました

> 「標準入出力」というのは、ユーザーが何もしなくてもOSが「標準で」用意してくれる入力先・出力先のことです。
> 「リダイレクト」によって標準入出力をファイルに変更したり、
> 「パイプ」によってあるコンソールアプリの標準出力を別のコンソールアプリの標準入力につなげたり出来ます。

・・・このパイプのようなものを実際どう組み込んだらよいのでしょうか?

>>899ソースでobjExec.StdOut.ReadLineの場所で止まってしまう理由が分かりません
/cをつけて自動終了するようにして使うしかないのでしょうか?
StdInやStdOutをどのように捕らえたら良いのかお教え願えませんでしょうか?

907 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:24:06 ]
ぐぐれば一番最初に出てきただろうに、なんなのこいつ

908 名前:899 mailto:sage [2009/05/29(金) 13:34:33 ]
>>905
シェルの起動時間とはなんでしょうか?

CreateObjectの事でしょうか?
これは一度作成したのちずっと保持する予定なので気にしていません

コマンドプロンプトのExec呼び出しの事でしょうか?
こちらも一度しか呼び出さないようにして再利用する事を考えていて、その結果このような質問に至りました。

>何がしたいのか
いくつかのCUIアプリケーション(コンソールコマンドの結果)のGUI化です
ExecメソッドではStdIn、StdOutというもので制御が可能と知ったので、
これを使ってコマンドプロンプトもどきを作れないかと考えました。
これができればいろんなもののGUI化が出来るだろうと思いテストソースを書きました。

>>907
すいません




909 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:36:41 ]
ほぼそのもののソースがググると出てくるんだが
まだ不満があるのか

910 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:37:10 ]
ごめんなさい、それはどこですか?

911 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:40:52 ]
>>909
お前うぜーよ
URL貼る気ねーならくるな

912 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:46:28 ]
MSDNライブラリのStdInプロパティの説明くらい読めばいいのに

913 名前:899 mailto:sage [2009/05/29(金) 14:04:21 ]
>>912 ありがとうございます

このあたりの事でしょうか?
ttp://msdn.microsoft.com/ja-jp/library/cc364385.aspx
一応MSDNのこのあたりは関連するキーワードのものを含め何度か読み返してはいたのですが、
前述の無反応になる件の答えが見出せず困っています・・・
アホですいません

Do Until objExec.StdOut.AtEndOfStream
の判定ではポインタが最後に到達していないはずなのですが
StdOut.ReadLineメソッドを呼び出すと処理が戻らず(エラーも出ず)待機してしまう理由がどうしてもわかりません

914 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:33:52 ]
いちいち自分でググってそのページを見てるくせに、
ここではほのめかしの回答しかしない屑。

915 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:46:09 ]
先にexitを送らない限り一生終わらない(AtEndOfStreamはFalseのまま)
Dim objWShell
Dim objExec
Set objWShell = CreateObject("WScript.Shell")
Set objExec = objWShell.Exec("%ComSpec%")
objExec.StdIn.WriteLine "ipconfig"
objExec.StdIn.WriteLine "exit"
Do Until objExec.StdOut.AtEndOfStream
MsgBox objExec.StdOut.ReadLine
Loop

916 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 16:07:08 ]
ipconfigの出力に[[hoge]]があると誤判定で終了してしまうが
Dim objWShell' As Object
Dim objExec' As Object
Set objWShell = CreateObject("WScript.Shell")
Set objExec = objWShell.Exec("%ComSpec%")
objExec.StdIn.WriteLine "ipconfig"
objExec.StdIn.WriteLine "echo [[hoge]]"
Do Until objExec.StdOut.AtEndOfStream
Dim sLine' As String
sLine = objExec.StdOut.ReadLine
If sLine = "[[hoge]]" Then Exit Do
MsgBox sLine
Loop
If Not objExec.StdOut.AtEndOfStream Then objExec.StdIn.WriteLine "exit"


917 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:10:27 ]
>>915
ありがとうございます
相手(コマンドプロンプト)が終了しない限り、そのTextStreamは「Endがない」動作をするのですね

私のサンプルで停止していたのは、この「現在まだない次の行」を取得中で待機している、という事でしょうか
Exitを打たずともスマートな解決方法があるのではないかと思っていましたが、
簡単にはいかないようでその理由も大体把握できました

「Exec呼び出し先が動作中の時は、StdOutの最終行がAtEndOfStreamで検出できず、
 またStdOut.Read系で現在の最終行を超えて読もうとしてもエラーも出ず新たな行が入るまで待機してしまう」
と言う事ですね。
サンプルまで付けて頂いて、アホでも理解しやすく配慮していただき助かりました



>>916 回避策ありがとうございます
なるほど、未知の最終行を読むこと自体を回避するのですね
番兵を置いているところで目から鱗でした!
これならコマンドプロンプトをExitさせずに逐次StdOutを監視できそうです

918 名前:デフォルトの名無しさん [2009/06/07(日) 13:02:33 ]
誘導されてきました

何年か前の話です、バカでも使える簡単な言語を紹介してくれと知り合いに聞いたところ
「VBが良い、中学生でも扱える言語」といわれ家電量販店でVBを購入。
たしか「N88ベーシックと難易度は変わらない」とも言われました。N88ベーシックがなんなのか
よくわかりませんが似たようなベーシック言語は触ったことがあるのでVBもそんなものだと思って買いました
購入してそのまますっかり忘れて押入れの中に放置していたのですが、今日引っ張り出してきてインストール
しようとしたのです、するとIISとフロントベージと言うものがインストールされていないので
インストールできないとの表示が・・・
IISはアパッチのようなものだとしてフロントページが何なのか良くわかりません、調べてみると
ホームページビルダーのようなものらしいけどこれは買わないといけないのでしょうか?。
そもそも知り合いの説明がずいぶん間違っているようにしか思えないのですが。
昔のベーシックの難易度ってフォートランぐらいだったと思うのですが。
VBとやらはインストールの段階で知らない専門用語だらけです。
これはいったいどういうことなのでしょう?えらい人教えてください。



919 名前:デフォルトの名無しさん [2009/06/07(日) 13:04:28 ]
ヴァージョンは2003
OSのバージョンはWindows2000です

920 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:04:32 ]
気にせずインストールを続ければOK

921 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:40:47 ]
そのFrontPageはOfficeのFrontPageではなく、FrontPage 2000 Server Extensionsの方だな

ASP.netをやらないなら入れる必要なし

IISとFrontPage 2000 Server Extensionsを入れるなら
コントロールパネル→プログラムの追加と削除→Windowsコンポーネントの追加と削除
から、インストールが出来る

VB6スレだから、誘導が間違ってたんだろうけど
質問する場合は最初からバージョンは書いておいた方がいいよ

922 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:22 ]
FrontPage 2000 Server Extensions
てそもそも何のために導入しなきゃいけないんだ?
いまいちよくわからずに入れていたんだが気になってきた

923 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:59:25 ]
WebDAV ではないんだけど、あんな感じで Web サイト上の
コンテンツを更新するのに必要なんじゃなかったかな。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef