VB6でプログラムをつくりました(OS:WINDOWS98)が、EXEファイルを他のPC(OS:WINDOWS2000/WINDOWS95等)で実行させるのですが、うまくうごきません。API関数を使用しているのでこのためかと思いますが、どのように対処したらよいかわかりません。
"SLEEP"
"RegCloseKey/RegOpenKeyEx"
"RegQueryValueExstr"
"Keybd_event"
を使用しています。
他のPCにはソフトの干渉からVBをインストールすることはできません。
DLLをシステムに入れることなら問題ないのですが、どなたか教えていただけませんか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

他のPCには、VB6 の環境が全く入っていないということですよね。


そうであれば、EXE ファイルだけを単体で持っていっても、動きません。ランタイムライブラリが必要です。

ランタイムライブラリは、パッケージになったものがネットからでもDLできると思いますが、それよりも、No.1 の方がおっしゃるように、セットアップパッケージを作成した方がベターです。

セットアップパッケージは、VB6 の「ディストリビューション ウィザード」で簡単に作成できます。
このプログラムを立ち上げて、質問に答えていくだけで、配布用のパッケージを作ることができます。
完成したパッケージには、そのプログラムを動かすのに必要なランタイムライブラリがすべて含まれていますので、全く何もない環境に持っていっても、正しくインストールすることができます。

これを実際にやってみて、わからないことがあれば、補足して下さい。
    • good
    • 0
この回答へのお礼

わかりやすくどうもありがとうございました。

お礼日時:2001/12/21 17:25

Win98で動いてWinNT/Win2000で動かない場合は「APIのせい?」っていう疑問が発生しますが、Win95でも動かないとなると、APIの理由という考え以前に「VBのDLLが入っていないため」と理由を考えるべきです。



VBで作成したEXEにはフォームなども含まれてませんか?フォームを使用したならば、VBのDLLが必要となります。
下記のアドバイス通り、EXEを単にコピーして実行するのではなく、セットアップを作成して、EXEに付随するDLL郡をインストールする必要があります。

APIの使用で注意しなければならないのは、レジストリエントリ名の長さの最大長さが、95系であれば255文字までであることぐらいなのですが、98で動いているのであれば問題なさそうです。
各APIは95系/NT系のどちらでも使用可能なAPIですので、API関数というわけではないと思うのですが。。。
    • good
    • 0
この回答へのお礼

わかりました。
セットアップをつくってみます。
どうもありがとうございました。

お礼日時:2001/12/21 17:27

こんにちは、honiyonです。



 具体的に、「うまくうごかない」とはどのような状態でしょうか?
 その症状により、原因は複数考えられます。
 「起動出来ない」のであれば、VB製ソフトに必要なDLLがインストールされていない可能性があり、それをてっとり早く解決するには zerosixさんの方法がよいと思います。
 もし、起動はするが不具合が生じる、というのであればそのプログラムにバグがある可能性も考えられます。 Win98で正常動作しても、OSを変えると今まで発見できなかったバグに遭遇する、ということはよくあるものです。

 参考になれば幸いです(..
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/21 17:26

>他のPCにはソフトの干渉からVBをインストールすることはできません。


開発環境をインストールすることはできないということでしょうか?

セットアップ用のパッケージを作成して、そのパッケージから
インストールすればいいと思います。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
素人なので理解に苦しいです。
すみません。

お礼日時:2001/12/21 17:24

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「古い圧縮ファイル」の確認方法

Dドライブのディスクのクリーンアップをしたいのですが、実行できるものが、「古い圧縮ファイル」の削除しかありません。

「古い圧縮ファイル」がどのプログラムかを確認する方法を教えてください。

また、圧縮されたファイルの名前は青くなるらしいのですが、見つかりません。どうしてでしょうか
圧縮ファイルは1G弱あります。

Aベストアンサー

http://www.atmarkit.co.jp/fwin2k/win2ktips/106cleanup/106cleanup.html

初期設定では、50日以上アクセスの無かったファイルに対して、圧縮が行われます。
当然、圧縮してからでないと、ファイル名は青色にはなりませんので、ディスク・クリーンアップでの候補段階では、黒色のままです。


尚、設定によっては青色表示にならない場合も有りますけど。

http://121ware.com/qasearch/1007/app/nec.jsp?005084

Q【keybd_event】について

VB6,Windows XPにて動作するAPを作成しています。

現在【半角カナ入力】を行うAPを作っています。
フォーム上に、カナが表示されたイメージコントロールとテキストボックスがあり、
イメージコントロールをクリックされた時に、対応するカナをテキストボックスに表示したいのですが、【SendKeys】は使用したくありません。
調べた結果、【keybd_event】を使用すれば実現出来そうだと思ったのですが、keybd_eventで半角カナを表示するにはどうすればいいのでしょうか?
数字の表示は問題なく出来ています。

ご存知の方教えて頂けると幸いです。
よろしくお願いします。

Aベストアンサー

普通に文字列操作するのもなんら変わりはないですが。

Text1 = Left(Text1, Text1.SelStart) & "カ" & Mid(Text1, Text1.SelStart + Text1.SelLength + 1)


>その動きを実現するには、文字列連結での制御より、
>SendKeysやkeybd_eventを使用する方が簡単だと思ったからなのです。

入力対象のコントロールにフォーカスを当てたりIMEをいじったりするほうが、よっぽど動きがあいまいで面倒かと思いますけど。

Qファイルの圧縮方法

AVIやMPGの画像ファイルを圧縮する方法を教えてください。900mb位のファイルをCD-Rに落とし込める700mbまで圧縮したいんですが。できれば、zipやlzhなどの後で解凍しなくてはいけないような圧縮方法ではなく、多少画像が荒くなってもファイルを単純に縮小させるような方法を教えていただけると有り難いのですが。。
因みに、TMPGEncを試してみたんですが、どうもうまくいかなくて。。ファイルサイズが元のファイルより逆に大きくなってしまうんです。
すいませんが、宜しくお願いします。

Aベストアンサー

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450 450 くらいでカット。
対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331
ではでは!

追伸
カンタンにならrmファイルに変更かなあ
でも画質は落ちますよ
ネット配信 ストリーミング形式でどぞ!
RealplusG2とかRealEncoderで変換
でもaviでもないしmpegでもないですけど、どお?

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450...続きを読む

QAPI Sleep関数について

Sleep()で指定できる最大値はいくつになりますか?

Aベストアンサー

ミリ秒(1/1000)で指定し、引数はas Longだから、長整数型で2,147,483,647(2^31)ミリ秒と、定義どおり考えて良いのではないでしょうか。
だだこのAPIの作用の性格から限度が自ずとあるでしょう。
大きい数字を与えてしまったばあい、Ctrl+Pause(Break)では、止めれないので注意との事です。

Qファイルの圧縮方法が解りません

窓の杜やベクター等に置かれている、フリーの圧縮、解凍ソフトをダウンロードしていますが、テキストファイルや、画像ファイルの圧縮方法が解りません。何方か教えて頂けませんか?

Aベストアンサー

ソフトの開発者のサイトで質問することをお奨めします。

ソフトごとに操作方法が異なりますので、使用しているソフト名すらない状態では誰も必要とする回答を出せません。

窓の杜やベクターでは開発者のサイトへのリンクがありますから、そこからアクセスできますよ。

QVB.NETとVB6.0でAPIを使う場合、書き方は違いますか?

VB.NETで使うAPIというものを勉強してみたいと思って
本を探しているのですが、.NET用の本が少ないようです。

APIを使う部分のコードの書き方は.NETと6.0では大きく違うでしょうか?

Aベストアンサー

BLUEPIXYさんが言われているように、使用するための引き込みの宣言が微妙に異なります。

大きく違う部分としては、メモリを意識する方法だと思います。
何かと
Imports System.Runtime.InteropServices.Marshal
クラスを多用することになります。


例えばVB6時代に
・VarPtrを使用しなければならない場合
・APIの引数に構造体を利用し、構造体内部のメンバに配列が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバに固定長の文字列型が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバのIN/OUTなどの属性を細かく設定しなければならない場合
・APIの引数に、構造体の領域サイズ長を渡す必要がある場合
・API関数実行後、取得したポインタから、特定の型にキャストする場合
などなど、、、

http://okwave.jp/kotaeru.php3?q=2092957
に、Marshalクラスを多用しているサンプルを書いてますので、よろしければどうぞです。



ちなみに私の場合は、.NETの書籍は一冊も購入しておりません。
VB6時代に購入した、APIの書籍
「Visual Basic Tips 1000」
http://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-ISBN=4883371980
を愛用しております。
ガリバーさんが出している書籍で、今は亡き[vbvbvb.com]のAPIサンプルが出ております。
HTMLで一覧が出ているので、秀丸などでGREPして、使用したい目的のAPIが素早く検索できます。

さらに
http://www.microsoft.com/japan/msdn/net/general/win32map.asp
で、本当にAPIを使用しなければならないかを調べた後、どうしてもAPIならば、サンプルソースをEXCELのVBAなどに張って、変換を行っております。


APIで使用するDLLは「VB6用」でもないし「.NET用」でもないですよね。
わたしは最近本屋さんに行っておりませんので、.NET用で多くのサンプルがある本が出版されているのか知らないのですが、、、
「.NET用の本」として固執せずに、多くのサンプルが出ている本を求めた方が、何かと便利だと思います。
「どのようなAPI関数が存在するか」「API関数で可能なこと」
が見えます。


VB6用の本を購入した場合、どうしても変換がわからない場合は、ここのような掲示板や、メーリングリストに投稿してはいかがでしょうか?
変換は「慣れ」です。繰り返し行うことで、自然と身につきます。変換のパターンは、経験上、それほど多いとも思いません。

そうすることにより、「このAPIは、、、」という技術ではなく「このタイプのAPIは、、、」という、参考文献の存在しないAPI関数にも強くなれると思います。
機会があれば、自分でCで呼び出される側のDLLを作成してみるのも、スキルアップだと思いますよー
http://okwave.jp/kotaeru.php3?q=235547

BLUEPIXYさんが言われているように、使用するための引き込みの宣言が微妙に異なります。

大きく違う部分としては、メモリを意識する方法だと思います。
何かと
Imports System.Runtime.InteropServices.Marshal
クラスを多用することになります。


例えばVB6時代に
・VarPtrを使用しなければならない場合
・APIの引数に構造体を利用し、構造体内部のメンバに配列が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバに固定長の文字列型が存在する場合
・APIの引数に構造体を利用し、構...続きを読む

Qpsdファイルの圧縮方法

psdファイルの圧縮方法を教えてください。(基本的質問で恐縮ですが)
win98です。なお、ファイルは9MB程度ですが、圧縮したものを解凍する際、鮮明度が落ちずに元通りの画像で開けますでしょうか?

Aベストアンサー

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (デフォルトでは 1.2MB を上限として分割される。)
   (このサイズは +Lhaca で変更できる。)
 5. (4)のファイル全てを、容量を超えないようにメールに添付して送信
   する。
   (添付ファイル総数を本文に明記すること。)
 6. 受け取った側は、全ての添付ファイルを一箇所に集めて、バッチファ
   イルを実行する。
   (操作手順は、本文に明記すること。)
 7. 分割されたファイルが結合されるので、結合された圧縮ファイルを解
   凍する。
 8. 9MBのファイルが解凍されるので、作業する。


これでどうかな!?

※他の圧縮ソフトも分割機能が備わっていると思うが・・・

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (...続きを読む

QVB.NET 2008 Eventステートメント

VB.NET 2008
以下の実装で実行したところ、GC強制実行後のメモリ状態に疑問を持ち質問しました。
Eventを所持したクラスの生成、削除を繰り返し、GCを強制実行したところ、
16バイトごと増加していきます。
Class1で定義したm_eventをイベントから別のタイプ、例えばIntegerやString型に変更して、
同様に実行したところ、メモリの増加は見受けられません。
なぜでしょうか?
またこの現象はメモリリークといえるのでしょうか?

Public Class Class1
Public Sub New()
End Sub
Private Event m_event()
End Class

Sub Main()
GC.Collect()
Debug.Print("####")
Debug.Print(GC.GetTotalMemory(False))
Dim cls As Class1
For i As Integer = 0 To 1000
cls = New Class1
cls = Nothing
If i = 0 Then
GC.Collect()
Debug.Print(GC.GetTotalMemory(False))

End If
Next
GC.Collect()
Debug.Print(GC.GetTotalMemory(False))
Debug.Print("@@@@")
End Sub

VB.NET 2008
以下の実装で実行したところ、GC強制実行後のメモリ状態に疑問を持ち質問しました。
Eventを所持したクラスの生成、削除を繰り返し、GCを強制実行したところ、
16バイトごと増加していきます。
Class1で定義したm_eventをイベントから別のタイプ、例えばIntegerやString型に変更して、
同様に実行したところ、メモリの増加は見受けられません。
なぜでしょうか?
またこの現象はメモリリークといえるのでしょうか?

Public Class Class1
Public Sub New()
End Sub
Private Event m_eve...続きを読む

Aベストアンサー

クラスに未使用のイベントが多数含まれると、メモリが不必要に消費するということですから、リークとまではいえないのでないでしょうか。(今回の場合は未使用のイベントひとつのクラスが多数でしょうが)
ただ、イベントに紐づけたハンドラを解除しないで放っておいたりすると発生するのはリークになるでしょうね。

参考
http://msdn.microsoft.com/ja-jp/library/yt1k2w4e(v=vs.90).aspx

QNTFS圧縮したファイルを全部まとめて戻す方法

NTFS圧縮したファイルをプロパティからひとつひとつチェックをはずして戻すのではなく、圧縮されたファイルを全部まとめて元に戻す方法ってあるのでしょうか?

Aベストアンサー

圧縮を解除したいファイルを全て選択した状態で
→プロパティ→NTFS圧縮のチェックを外す→OK

それらのファイルがフォルダに入っているなら
フォルダのプロパティからやってもいい。
(サブフォルダにも適用するか尋ねられるからOKにする)

QVBのEVENT発生とCONTROLの有効範囲

visual basicのeventとcontrolについての質問です。
 初心者で苦労しています。以下のようなcodeingをしましたが上手く行きません。宜しくお願いします。

1.下記のcall updatefileによりupdatefile内でcombobox内のdataを設定します。これは次のdialogで
  設定どおりに出ています。しかし元のsub startdialog1に帰ってdialogを表示してみるとcombobox
  内は空となっています。  subroutineが変わるとformの controlは消えるのでしょうか。
  もしそうならどの様にすれば良いのでしょうか。
  (pushdata変数等をpublicとして再度comboに入れることもやりましたがNG)

2.STARTDIALOG1の初めに RADIO BUTTONの変更のCODEが有りますが、此処でEVENTが
   発生しUPDATEFILEに行きます。
   DIALOGを出すまでは初期値を設定しDIALOG上でCLICK等して変更をするCODEなので
   不具合です。 (ほかにもいろいろ同じCODEが入っていますので)
   CODE上の設定変更はEVENTが発生しないように、DIALOGからの変更はEVENT発生としたい
   のですがどの様にしたら良いでしょうか。(普通そうなので何か勘違いしてるかも)
  INTERNETで見るとAddHandler,AddressOf,REmoveHandlerなどが記載されていますが、
   書き方と何処に書くのか判りません。(本当に必要かも?)
   よろしくお願いします。
   (以下のcodeは読みやすいように簡略化しています、code errorは大目に見て下さい。


---------------------Form1.vbに記載---------------------------------------   
Sub STARTDIALOG1()    '此処から処理が始まる
with cform2 as Fform2
.Radio_btn1.Checked = True  ’ここへくるとbuttonのeventが発生,routineにいき,updatefileへいく
Call UpdatePfile(1) 'ここはcomboboxの初期値を設定する(UPDATEPFILEを使う)
.ShowDialog()     ’UpdatateFileでは入っていたがCOMOBOXの中は空になっている
              この後comboboxのdataの選択などをdialogue上で設定値を変更する。
end with
end sub

-----------------------form1.vbに記載----------------------------------
sub UpdatePfile(ByVal cntlNO)
'PushDataはこの前にREADして設定している、keがそのDATAの個数

For k = 1 To ke
cForm2.Combo_P.Items.Add(pushdata(k)) ’COMBOBOX Comb_Pに一覧として入れる
Next k

cForm2.ShowDialog()   'ここではCOMBOBOXにPUSHDATAが入ったLISTがでる

end sub
---------------------------------------------------------------------------

DisalogはForm2に作成
   radioボタン Radio_btn1とRadio_btn2,combobox combo_P等をsetしている


'---------------------------Form2.vbに記載------------------------------------
Private Sub push_button(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Radio_BTN1.CheckedChanged,Radio_BTN2.CheckChanged

Dim cls As Form1
RDBTN = 1
If RDBTN > 0 Then Call cls.UpdatePfile(RDBTN)
end Sub

visual basicのeventとcontrolについての質問です。
 初心者で苦労しています。以下のようなcodeingをしましたが上手く行きません。宜しくお願いします。

1.下記のcall updatefileによりupdatefile内でcombobox内のdataを設定します。これは次のdialogで
  設定どおりに出ています。しかし元のsub startdialog1に帰ってdialogを表示してみるとcombobox
  内は空となっています。  subroutineが変わるとformの controlは消えるのでしょうか。
  もしそうならどの様にすれば良いのでしょうか。
  (pu...続きを読む

Aベストアンサー

ちょっと確認していませんが
> .Radio_btn1.Checked = True  ’ここへくるとbuttonのeventが発生,

イベントは節制しますが、実際に対応するルーチンが実行されるのは、このSubを抜けた後だったように思います。
デバッガでステップ実行したらどうなってますか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング