Page 319 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼趣味の世界ですが・・・。 ぴかる 02/11/4(月) 12:48 ┣Re:趣味の世界ですが・・・。 ぴぎゃ!!(反省中) 02/11/4(月) 17:26 ┃ ┗Re:趣味の世界ですが・・・。 ぴかる(感動中) 02/11/5(火) 8:58 ┃ ┗Re:趣味の世界ですが・・・。 ぴぎゃ!!(反省中) 02/11/6(水) 1:01 ┣Re:趣味の世界ですが・・・。 JuJu 02/11/6(水) 19:43 ┃ ┗そういえば…(^^; ぴぎゃ!!(反省中) 02/11/7(木) 1:20 ┣ありがとうございました。 ぴかる 02/11/8(金) 16:31 ┃ ┗ちょっとだけ補足 JuJu 02/11/8(金) 18:06 ┃ ┗Re:ちょっとだけ補足 ぴかる 02/11/8(金) 18:51 ┃ ┗さらにちょっとだけ補足 JuJu 02/11/8(金) 19:39 ┃ ┗勉強します。ありがとうございました。 ぴかる 02/11/8(金) 21:06 ┗ウィンドウ上に登場って出来ます?。 ぴかる 02/11/10(日) 11:21 ┗Re:ウィンドウ上に登場って出来ます?。 Kein 02/11/10(日) 17:42 ┗Re:ウィンドウ上に登場って出来ます?。 ぴかる 02/11/10(日) 18:57 ─────────────────────────────────────── ■題名 : 趣味の世界ですが・・・。 ■名前 : ぴかる ■日付 : 02/11/4(月) 12:48 -------------------------------------------------------------------------
みなさん、こんにちは。 ユーザー設定のコマンドの中に電卓とソリティアがあり、それを使うとエクセルからでも簡単に起動しますよね。これについて疑問をもってます。どうやってそのパスを所得しているかです。OSによってそのパスは異なってるのにサーチなど必要なくすぐ開きます。不思議です。 何がしたいかといいますとメモ帳・フリーセル・マインスイーパの.exeファイルのパスを即座に所得したいんです。多分マクロでは時間が掛かるんでしょうね。このパスがOSによって違っても同OS時は必ず同パスとなるのでしたら、OS別にそのパスを教えて頂けないでしょうか?。完全な趣味の世界ですみません。 確認は明日させていただきます。どうぞよろしくお願いいたします。 |
ぴかるさん、こんにちは。 >どうやってそのパスを所得しているかです。 「スタートメニュー」の「ファイル名を指定して実行」でファイル名だけを入力した場合は、「Windows」・「System」フォルダを検索後、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths」(Millenniumで確認)に登録されている場合起動させていたような気がします(記憶が…申し訳ありません)。 それでは。 |
ぴぎゃ!!さん、おはようございます。 >「スタートメニュー」の「ファイル名を指定して実行」でファイル名だけを入力 この操作、初めて知りました。感動・感激しました。ありがとうございました。 こんなに簡単に起動できるのはGOODですね。 ところでこの操作をマクロ化する事は可能でしょうか?。 可能でありましたらよろしくお願いいたします。 |
ぴかるさんこんばんは。 >ところでこの操作をマクロ化する事は可能でしょうか?。 ファイル名を入力後に起動させる、ということでしょうか? アプリケーションであれば、下の「test1」でOK(…であれば良いの)ですが、フォルダやドキュメントまで面倒を見るとなると大変ですね… 「WIN32API.TXT」を拾いましたので、(適当に、ですが)フォルダなどを取得するコードを作成してみました。 '[Standard module] '(General - Declarations) 'Windows フォルダを取得 Private Declare Function GetWindowsDirectoryA Lib "kernel32" ( _ ByVal lpBuffer As String, _ ByVal nSize As Long) As Long 'System フォルダを取得 Private Declare Function GetSystemDirectoryA Lib "kernel32" ( _ ByVal lpBuffer As String, _ ByVal nSize As Long) As Long 'ファイルに関連付けられたアプリケーションのフルパスを取得 Private Declare Function FindExecutableA Lib "shell32.dll" ( _ ByVal lpFile As String, _ ByVal lpDirectory As String, _ ByVal lpResult As String) As Long '(General) 'メモ帳を起動 Sub test1() Dim Dbl As Double Dbl = Shell("Notepad", vbNormalFocus) End Sub 'Windows フォルダを取得 Sub test2() Dim lpBuf As String * 256 Dim nSz As Long Dim LngRet As Long Dim StrPath As String LngRet = GetWindowsDirectoryA(lpBuf, 256) If (LngRet = 0) Or (LngRet > 256) Then StrPath = "???" Else StrPath = Left(lpBuf, LngRet) End If MsgBox StrPath, vbInformation + vbOKOnly, "Windows フォルダ" End Sub 'System フォルダ取得 Sub test3() Dim lpBuf As String * 256 Dim nSz As Long Dim LngRet As Long Dim StrPath As String LngRet = GetSystemDirectoryA(lpBuf, 256) If (LngRet = 0) Or (LngRet > 256) Then StrPath = "???" Else StrPath = Left(lpBuf, LngRet) End If MsgBox StrPath, vbInformation + vbOKOnly, "System フォルダ" End Sub 'ファイルに関連付けられたアプリケーションのフルパスを取得 Sub test4() Dim lpFile As String Dim lpRslt As String * 256 Dim LngRet As Long Dim StrPath As String lpFile = "C:\Faultlog.txt" '適当に変更してください(Ex:"Notepad.exe")。 LngRet = FindExecutableA(lpFile, 0, lpRslt) If LngRet < 32 Then StrPath = "???" Else StrPath = lpRslt End If MsgBox StrPath, vbInformation + vbOKOnly, lpFile End Sub 思いっきり外してそうですね…申し訳ありません。 |
ぴかるさん、ぴぎゃ!!さん、こんにちはぁ >ユーザー設定のコマンドの中に電卓とソリティアがあり、それを使うとエクセルからでも簡単に起動しますよね。これについて疑問をもってます。どうやってそのパスを所得しているかです。OSによってそのパスは異なってるのにサーチなど必要なくすぐ開きます。不思議です。 Pathの通っているフォルダを見ているだけですよ。 Pathが通ってれば、格納フォルダは省略できます(実行ファイルのみ) 例えば、 Shell "notepad" でメモ帳起動。 どのフォルダにPathが通っているかは、 ActiveCell = Environ$("PATH") で見てみてね。 はずしでたら、ごめんね。 ではではぁ |
ぴかるさん、JuJuさんこんばんは。 4時間ほど前に送信に失敗していることに気づかず仕事してました(種別を選択していないという単純な…あぁ、お間抜け…)。 ▼JuJuさん >Pathの通っているフォルダを見ているだけですよ。 すっかり忘れていました、ありがとうございます。 あと、Systemフォルダも自動的に検索してくれるようですね(DLLとか存在しているから当然なのでしょうか?)。 ▼ぴかるさん 1時間ほど前に解放されたのですが、まだ何も… 今から少し実験してみます。 それでは。 |
ぴぎゃさん、JuJuさん、こんにちは。 申し訳ございませんでした。非常におそくなってしまいました。 ぴぎゃさん サンプルまで作って頂きましてありがとうございました。色々と勉強になりました。 JuJuさん >例えば、 > Shell "notepad" >でメモ帳起動。 まさしくこれです。私のやりたかったことです。Shellを使ってみてたんですがこんなに さっぱりしてるなんて感激です。ありがとうございました。誠に勝手となってしまいますが、ピカつーるに使わさせてください。よろしくお願いいたします。 以前にみなさんにファイル検索について勉強させて頂きました。その節は誠にありがとうございました。 そして色々やってたら超高速サーチを見つけました。よろしかったら参考にして下さい。 れいぞーさんサイトAPI (れいぞーさん勝手に紹介してごめんなさい。リンクフリーだからOK?) http://www2.yi-web.com/~Excel/ExcelVBATips/api/api_3.htm |
ぴかるさん、こんにちはぁ >そして色々やってたら超高速サーチを見つけました。よろしかったら参考にして下さい。 SearchPath APIは指定したフォルダか、特殊用途のフォルダのみを検索する関数です。 notepadのようなWindowsフォルダに入っているファイルは検索できますが、普段使っているようなフォルダ内のファイルをそのまま検索することはできません。 本来は実行可能なファイル(EXE、DLL、etc.)等を検索するために使用します。 (この関数で検索できるファイルはパスを指定せずに実行できます) Excelファイル等を検索するのにはあまり使用できないのでお気をつけて。 ではではぁ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/searchpath.asp |
JuJu さん、こんにちは。 >SearchPath APIは指定したフォルダか、特殊用途のフォルダのみを検索する関数です。 >notepadのようなWindowsフォルダに入っているファイルは検索できますが、普段使っているようなフォルダ内のファイルをそのまま検索することはできません。 > >本来は実行可能なファイル(EXE、DLL、etc.)等を検索するために使用します。 >(この関数で検索できるファイルはパスを指定せずに実行できます) > >Excelファイル等を検索するのにはあまり使用できないのでお気をつけて。 ありがとうございます。勉強になります。なんでもご存じですね。すんごいです。 >http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/searchpath.asp ダメでした。V3時代に教えていただいた翻訳サイトに行かないと全く分かりません。 翻訳したら、結構おもしろそうです。 そんじゃぁ!(^^)v 先程、コロスケさんのところでも・・・。失礼しました。今日だけにしときます。 |
>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/searchpath.asp >ダメでした。V3時代に教えていただいた翻訳サイトに行かないと全く分かりません。 >翻訳したら、結構おもしろそうです。 一応日本語版もあります。 http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_searchpath.htm 旧ライブラリに移ってからちょっと探しづらい(>_<) (私はCD版のMSDNを使ってます) ガリバーさん(http://www.galliver.co.jp/index.html)のとこに詳しい説明がありました。 http://www.galliver.co.jp/writing/bsr/bsr04/comment.html ではではぁ |
JuJuさん、こんばんは。 サイトご紹介、ありがとうございました。時間をとって後ほど勉強させていただきます。 ほなネ! これまた失礼いたしました。 |
JuJuさん、こんにちは。 いい天気ですね。今日もお仕事のわたくしです。 >例えば、 > Shell "notepad" >でメモ帳起動。 すんごくワガママなんですげど、その起動したメモ帳をウィンドウに表示させたいと思ってます。 最小化の状態での登場は少し分かりにくいので、ウィンドウにパッと登場する様な起動は無理でしょうか?。 可能でありましたら、よろしくお願いいたします。 |
Shell関数のヘルプを、コピペしておきます。 ------------------------------------------------------------------------- 機能 指定した実行可能プログラムを起動する関数です。 構文 Shell(pathName[,windowstyle]) 構成 Shell 関数は次の名前付き引数から構成されます。 指定項目 内容 pathName 実行するプログラム名、必要な引数名またはコマンド ラインの スイッチには、ディレクトリ、フォルダまたはドライブを含むことがあります。 実行可能なプログラムと関連するドキュメント名も含まれることがあります。 windowstyle プログラムを実行するウィンドウの形式番号を指定します。Microsoft Windows では、windowstyle を指定しないと、プログラムはフォーカスを 持ったアイコン化ウィンドウで開かれています。 名前付き引数 windowstyle の値とウィンドウの形式を次の表に示します。 値 ウィンドウの形式 1、5、9 フォーカスを持った通常のウィンドウ 2 フォーカスを持ち、アイコン化されているウィンドウ (既定値) 3 フォーカスを持ち、最大表示されているウィンドウ 4、8 フォーカスを持たない、通常のウィンドウ 6、7 フォーカスを持たない、アイコン化されているウィンドウ 解説 Shell 関数が指定されたプログラムの実行に成功すると、プログラムのタスク IDが 返されます。 タスク IDは、実行中のプログラムを識別する重複しない番号です。 指定されたプログラムが実行できないと、エラーが発生します。 注 Shell 関数はプログラムを非同期的に実行します。Shell 関数で起動した プログラムが終了するまで、次のコードが実行されないわけではありません。 Shell 関数が実行された後は、起動されたプログラムが終了したかどうかにかかわらず、 次のコードに制御が移ります。 ----------------------------------------------------------------------- つまり Shell "Notepad", 1 で、ウィンドウを開いた状態になります。 蛇足になりますが、"注"のところで指摘しているように、このコードの以降に書いた コードは、メモ帳を閉じないまま走ってしまう可能性があります。それを防ぐ(同期 をとる)なら、WSHのRunメソッドを使うのが簡単です。 Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") WshShell.Run "Notepad", 1, True などとします。最後の引数をTrueにしていれば同期処理になり、False だと Shell関数 と同様に非同期となります。 あとFSOを使うと、特殊フォルダーをオブジェクトとして取得できます。 例えばWindowsフォルダーなら Dim FSO As Object, SFol As Object Set FSO = CreateObject("Scripting.FileSystemObject") Set SFol = FSO.GetSpecialFolder(WindowsFolder) と、なります。では。 |
Keinさん、こんにちは。 >Shell "Notepad", 1 > >で、ウィンドウを開いた状態になります。 ありがとうございました。バッチリ、登場してくれました。 初めてShell関数を使った時、", 1"は何を意味してるのだろうと思ってました。こういう事だったんですね。勉強になりました。反省すべき点は、ヘルプの活用です。これからは、もっとじゃんじゃんヘルプにお出かけしようと思います。でもヘルプの使い方もまだまだなんですけどね。(^^;) >蛇足になりますが、"注"のところで指摘しているように、このコードの以降に書いた >コードは、メモ帳を閉じないまま走ってしまう可能性があります。それを防ぐ(同期 >をとる)なら、WSHのRunメソッドを使うのが簡単です。 > >Dim WshShell As Object >Set WshShell = CreateObject("WScript.Shell") >WshShell.Run "Notepad", 1, True > >などとします。最後の引数をTrueにしていれば同期処理になり、False だと Shell関数 >と同様に非同期となります。 >あとFSOを使うと、特殊フォルダーをオブジェクトとして取得できます。 >例えばWindowsフォルダーなら > >Dim FSO As Object, SFol As Object >Set FSO = CreateObject("Scripting.FileSystemObject") >Set SFol = FSO.GetSpecialFolder(WindowsFolder) > >と、なります。では。 こちらの方もご丁寧にありがとうございます。じっくり見させていただきます。 Keinさん、今後もよろしくお願いします。また、こちらにも来て下さいネ。(^^)/ |