VB6.0で、ファイル選択のWinAPI:GetOpenFileNameを使って、利用者に指定させた
ディレクトリー情報("c:\temp"等のホルダー情報)を取得したいのですが、うまくいきません。

このAPIは、ファイルの選択しかできないのでしょうか?
ディレクトリー情報を取得するには、他のWinAPI関数があるのでしょうか?

お教え下さい。

A 回答 (1件)

こんにちは。

maruru01です。

フォルダ選択のAPI
SHBrowseForFolder
を使用します。
フォルダ名を返す関数を参考までに。

標準モジュールに、

Public Type BROWSEINFO
  hwndOwner As Long
  pidlRoot As Long
  pszDisplayName As String
  lpszTitle As String
  ulFlags As Long
  lpfn As Long
  lParam As Long
  iImage As Long
End Type

Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long

Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pIDL As Long, ByVal pszPath As String) As Long

'API使用のフォルダー指定ダイアログ
'Msg:ダイアログのタイトル
'Frm:使用するフォーム(通常はMeを指定)
Public Function GetFolder(Msg As String, Frm As Form) As String

  Const MAX_PATH = 260
  Dim lngRetValue As Long
  Dim strBuffer As String * MAX_PATH
  Dim strPathBuffer As String * MAX_PATH
  Dim udtBrowseInfo As BROWSEINFO
  Dim ReturnPath As String
  Dim rt As String

  strBuffer = String(Len(strBuffer), vbNullChar)
  strBuffer = App.Path & vbNullChar

  If Msg = "" Then
    Msg = "フォルダーを指定してください。"
  End If

  With udtBrowseInfo
    .hwndOwner = Frm.hWnd
    .pidlRoot = &H0
    .pszDisplayName = strBuffer
    .lpszTitle = Msg & vbNullChar
    .ulFlags = &H1
    .lpfn = 0
    .lParam = 0
    .iImage = 0
  End With

  lngRetValue = SHBrowseForFolder(udtBrowseInfo)
  If lngRetValue <> 0& Then
    lngRetValue = SHGetPathFromIDList(lngRetValue, strPathBuffer)
    If lngRetValue = 0 Then
      rt = ""
    Else
      ReturnPath = Left(strPathBuffer, InStr(strPathBuffer, vbNullChar) - 1)
      rt = ReturnPath
    End If
  Else
    rt = ""
  End If
  GetFolder = rt

End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。お蔭様で、解決致しました。

お礼日時:2002/02/06 16:58

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

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

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

Q和太鼓のライブ情報ありませんか?

和太鼓に興味がわいてきました。
和太鼓の生の演奏を見に行きたいと思っています。
腹の底にズドンと響き、魂を揺さぶるライブを期待しています。
横浜近辺(日帰りの範囲内)であれば教えてください。

Aベストアンサー

こちらのページに色々あります。

火の太鼓→http://www.kuni-net.com/event/ensoukai.html

こちらの中ではヒダノ修一さんが12/18・19に横浜青葉公会堂でライブやるようですね。
ヒダノ修一さんは以前、NHKの「日本語であそぼ!」にも出演されていたプロ和太鼓奏者です。
結構、和太鼓情報はふんだんにあるサイトですので、教室探しやワークショップなど探すのに便利ですよ♪

Qエクセルvba:自己セルの情報取得方法について

エクセルマクロで関数を作成しておりますが、自分のセルの情報を得るにはどうしたらよいかご存知の方、ご教授頂けないでしょうか。
例えば既存の用意されている関数で例を挙げると、row()やcolumn()などの関数の様に、関数が書き込まれた該当セルの位置情報を取得したいのです。実際のユーザ関数では得た情報でいろいろな作業をしたいと考えております。
よろしくお願いします。

Aベストアンサー

質問だけでは、どうしたいのかいまひとつ解らないところがあるので、自分の関数が入力されたセルのアドレスを返す関数を上げましょう。
目的によって工夫してください。



Function ThisCell_Address()

ThisCell_Address = Application.ThisCell.Address

End Function

Q4才児で和太鼓を習わせたい!!情報お願いします!!!

来春幼稚園入園をやめ、親子でゆっくり過ごそうと思っていますが、4歳になるし習い事を・・・と考えております。

息子は和太鼓に大変興味があり、やってみたいというのですが、。調べても大人対象の物ばかりで見つかりません。

情報をお持ちの方いらっしゃいましたらよろしくお願いします。

住まいは神奈川県川崎市です。

Aベストアンサー

東京まで足をのばせばありそうですね。
http://www.kuni-net.com/event/youji.html

私の甥と姪の園では授業のひとつとして和太鼓を習いますが、小さいなりに一生懸命でカワイかった~
良い教室がみつかるといいですね。

QExcelVBA:セキュリティレベル情報の取得、及び設定をOLEで行いたい

いつもお世話になっております。

Delphi6.0からOLEでExcel2000、またはExcel2002を起動し、
シートへの出力、.basファイルからモジュールをインポートするプログラムを作成しております。

動作する環境によってExcelのセキュリティレベルがまちまちとなっており、
「高」である場合は「中」に変更し、
Excel2002の場合はさらに"Visual Basic プロジェクトへのアクセスを信頼する"
にチェックをつけるよう、運用で対応しております。

今回、お伺いしたいのは
・OLEで起動されたExcelのセキュリティレベルの情報を取得したい
・可能であれば、セキュリティレベルをOLEで変更したい
というものです。

なにか良い方法はございませんでしょうか。
ご教示の程、何卒宜しくお願い致します。

Aベストアンサー

excel起動前にレジストリの書き換えとか・・・。

HKEY_CURRENT_USER\Software\Microsoft \Office\<MS Office version>\Excel\Security

http://www.trendmicro.co.jp/vinfo/virusencyclo/default5.asp?VName=O97M_TORAJA.F&VSect=T

Q夏祭りで和太鼓だけ生演奏なのは何故

近所の夏祭りでは炭坑節やジンギスカンが流れますが、
すべて録音された音楽に合わせて和太鼓の演奏をする形をとっています
しかし、毎年必ず和太鼓が入るのなら和太鼓も生演奏ではなく録音にしてしまっても良いと思います
和太鼓の音を特に大きくしたい場合も今のオーディオ機器なら編集できるだろうし
それともすでに和太鼓を使わない録音だけの地域もあるのでしょうかね
とにかく理由が知りたいので情報宜しくお願いします。

Aベストアンサー

 もちろん本来は全て生演奏です。現在でも生演奏の盆踊り大会はあちこちであるはずです。
太鼓・ギター・ベースというのが基本だと思います。これももちろん今ではエレキギターってことでしょうが。
しかし一般的にはプロのバンドを招聘する以外は町内のおっちゃんがするわけで、演奏するメンバーの減少や、技量の問題などでせめて太鼓だけは生演奏ってことになってます。カセットテープが普及する1970年代なかば以前はレコードでしたし、レコードが普及する以前は生演奏だったのでしょう。
 
 我町の盆踊りも数年前にカセットテープからやっとCDとなりました。そういうレベルの小さな村社会での盆踊りで質問者さんがおっしゃる「今のオーディオ機器なら編集」できるような機器を購入するお金や、それを使える人がいないのも事実ですし、なんといってもやはり演奏するメンバーが素人とはいえ生太鼓演奏の迫力はすごいと思います。

QAPIで作成したコモンコントロールのイベント取得方法

こんにちは。

http://www.mitene.or.jp/~sugisita/vb6_cmctl.html
にある、ツリービューコントロールの
カテゴリーのサンプルを参考にして
APIで、コントロールを使えるように苦戦しております。

表示はできるのですが、表示させたコントロールのイベント(click等)を取得する方法が分かりません。

ご存知の方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

コントロールを作成したフォームをサブクラス化して、コントロールから送られてくるメッセージを処理してください。
Cのプログラムのように。

Q和太鼓の音色をデータ化する

文化祭に和太鼓演奏をします。
その為の練習用に、和太鼓の音色(和太鼓の音色じゃなくてもいいんですが、とりあえずリズムや強弱など)をデータ化し、配りたいと思っています。
その元となる音?は完全に創作なので、打ち込んで作るしかないと思っているのですが、データ化するいい方法はないでしょうか?

宜しくお願いします。

Aベストアンサー

MIDI作成ソフトではだめですか?

フリーのソフトの中にも和太鼓に似た音源はあると思います。
直接録音するなら録音ソフトを使いPCにマイクをつけて実際叩いて音を録音し
MP3に圧縮して使うのも手ですが難しいと思います。

参考URL:http://search.yahoo.co.jp/bin/query?p=MIDI+%ba%ee%c0%ae%a5%bd%a5%d5%a5%c8%a1%a1free&hc=0&hs=0

QExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法

●やりたいこと
ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている
エディットテキストを取得して、セルに出力したい

使用する関数・宣言、できればコードを教えていただけませんでしょうか。

イメージはこちらをご参考いただけると幸いです。
​http://situmon-img.blogspot.com/2008/08/1.html​

変数hwindowに親ウィンドウのハンドルが取得されています。
エディットボックスのハンドル、IDは分かりません。


エディットボックスのハンドルを取得し、
分かっているクラス・ハンドルの文字列を取得
といった流れになるのではと思っております。

変数にさえ文字列が取得できれば、
当然ですが、Range("B2")=変数 で大丈夫です。
変数は、ひとつを使いまわしで構いません。
変数をエディットテキストの数だけ用意しても構いません。

Aベストアンサー

あの QNo.4256138の質問でも、同じ様な事を質問されていたと思います。
出来たらそちらで質問された方がよかったのではと思います。

テキストボックスの取得も、私の回答した全く同じ方法で
取得出来ると思います。クラス名が Edit になるだけです。

 EnumChildWindows(hWnd,lpEnumFunc,0&) は、親ウィンドウに含まれる

子ウィンドウがすべて返ってきます。ボタンもテキストボックスも、その他の
子ウィンドウがすべて、何個あっても、取得できます。

ただ EnumChildWindows(hWnd,lpEnumFunc,0&) で与える子ウィンドウを
受け取る関数は、コールバック関数なので、1回のコールで1個の子ウィンドウ
しか返ってきません。ただ、子ウィンドウがある分だけ何度も同じ関数が
呼び出されます。よび出される度に

 GetClassName(hWnd,lpClassName,nMaxCount) でクラス名を取得し

クラス名が Edit ならテキストボックスになります。

SendMessage(テキストボックスハンドル, &HD, 240, ByVal cbuf)

で cbuf にテキストボックスの文字が取得出来ます。

尚、cbuf は文字長を多い目に事前に確保しておきましょう。

cbufのNULL値までが実際の文字となります。

また、コールバック関数はデバッグモードで、ブレークさすと、
フリーズするので注意して下さい。通常はデバッグしにくいので、
コールバック関数内では、配列変数にハンドルをためこんでいきます。
その後で、配列にためこんでいるハンドルを順番にクラス名を取得し
テキストがボタンか判断していきます。

あの QNo.4256138の質問でも、同じ様な事を質問されていたと思います。
出来たらそちらで質問された方がよかったのではと思います。

テキストボックスの取得も、私の回答した全く同じ方法で
取得出来ると思います。クラス名が Edit になるだけです。

 EnumChildWindows(hWnd,lpEnumFunc,0&) は、親ウィンドウに含まれる

子ウィンドウがすべて返ってきます。ボタンもテキストボックスも、その他の
子ウィンドウがすべて、何個あっても、取得できます。

ただ EnumChildWindows(hWnd,lpEnumFunc,0...続きを読む

Q和太鼓!!

福岡県春日市在住の小学2年生の母親です。
子供が和太鼓を習いたいと言うので、探しているのですが、なかなか見つかりません。
福岡県春日市で和太鼓を教えているところをご存じないでしょうか。
よろしくお願いします!

Aベストアンサー

大木町や飯塚市では遠いでしょうね。
http://kuni-net.com/event/kouza.html

下記ページで「福岡県」を入力して検索すれば
和太鼓集団の一覧がでるので
お近くの団体にたずねてはどうでしょうか。
http://www.kuni-net.com/search.html

QAPI32 コントロールのEditテキストの文字列の取得・出力について

外部アプリケーションの子ウィンドウ(Edit)のテキストが取得できません。
ご指導お願いいたします。

■やりたいこと
外部アプリケーションのEditの文字列を取得(変数に代入まで)
取得したい文字列数は、半角8桁程度です。

開発環境 BVA

●取得済みの情報
外部アプリケーションの親ウィンドウのハンドルを取得済み。
特定の子ウィンドウのコントロールIDを取得済み。

lpStringの使い方が全く分かっていません。
nMaxCountも分かりません。

hDlgには親ウィンドウのハンドルが入っています。

<関数の宣言>
Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" _
(ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long

Sub GetTextTest()

nIDDlgItem = "000514F6" 'EditのコントロールID
lpString = Space(10) '分かっていないのですが調べてみてなんとなく

GetText1 = GetDlgItemText(hDlg, nIDDlgItem, lpString, 256)

End Sub

これで、GetText1にEditのテキストが取得できると思っているのですが、
根本的に間違っている気もします。

実行以前に、型が一致しませんと出てしまいます。
型を修正しても、GetText1にはエラーの0が出力されるのではと思っております。


また、別件なのですが、
親ウィンドウの中に子ウィンドウ1があって、
子ウィンドウ1の中に子ウィンドウ2(Edit)があった場合
親ウィンドウのハンドルと、子ウィンドウ2のコントロールIDが
分かっていれば、Editの文字列は取得できるのでしょうか?

外部アプリケーションの子ウィンドウ(Edit)のテキストが取得できません。
ご指導お願いいたします。

■やりたいこと
外部アプリケーションのEditの文字列を取得(変数に代入まで)
取得したい文字列数は、半角8桁程度です。

開発環境 BVA

●取得済みの情報
外部アプリケーションの親ウィンドウのハンドルを取得済み。
特定の子ウィンドウのコントロールIDを取得済み。

lpStringの使い方が全く分かっていません。
nMaxCountも分かりません。

hDlgには親ウィンドウのハンドルが入っています。

...続きを読む

Aベストアンサー

まずはGoogleでGetDlgItemTextを検索しましょう。
http://www.activebasic.com/help_center/Pages/API/Window/DialogBox/GetDlgItemText.htm

えー違ってる箇所を指摘します。
nIDDlgItemの型はLongなのに、なんで
nIDDlgItem = "000514F6" 'EditのコントロールID
と文字列を入れているのですか?
16進数で入れるには、VBであれば&H000514F6です。
あとGetDlgItemText関数が返す値は取得した文字数です。
なので当然、GetText1に入れるのは間違ってます。lpStringに取得した文字列が入るのですよ。

とりあえずサンプル
Dim bufStr As String
Dim retStr As String
Dim nIDDlgItem As Long
' コントロールID
nIDDlgItem = &H000514F6
' バッファの用意
bufStr = String(255, vbNullChar)
' エディットボックスの文字列を取得する
If GetDlgItemText(hWnd, nIDDlgItem, bufStr, Len(bufStr)) > 0 Then
 retStr = Left$(bufStr, InStr(bufStr, vbNullChar) - 1)
End If
' retStrが目的の文字列。

まずはGoogleでGetDlgItemTextを検索しましょう。
http://www.activebasic.com/help_center/Pages/API/Window/DialogBox/GetDlgItemText.htm

えー違ってる箇所を指摘します。
nIDDlgItemの型はLongなのに、なんで
nIDDlgItem = "000514F6" 'EditのコントロールID
と文字列を入れているのですか?
16進数で入れるには、VBであれば&H000514F6です。
あとGetDlgItemText関数が返す値は取得した文字数です。
なので当然、GetText1に入れるのは間違ってます。lpStringに取得した文字列が入るのですよ。

と...続きを読む


人気Q&Aランキング

おすすめ情報