• 締切済み

VBで壁紙を取得し保存する方法

現在VB2008でプログラムを組んでいるのですが、(VB初心者です) 現在の壁紙を取得し、そのファイルをコピーしてCドライブ直下に保存する方法がわかりません。 壁紙の取得はできました(sPathにアドレスが出る) ただそれをコピーできません。 以下のようなエラーが出ます。 パスに無効な文字が含まれています。 ソースコードは以下の通りです。 Dim sPath As New System.String(" ", MAX_PATH + 1) SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, sPath, 0) My.Computer.FileSystem.CopyFile(sPath, "C:\Test.bmp", True) 原因不明でよくわかりません。 教えてくださいお願いします。

みんなの回答

  • nishito24
  • ベストアンサー率90% (10/11)
回答No.1

>My.Computer.FileSystem.CopyFile(sPath, "C:\Test.bmp", True) sPathに取得された文字列の次がNULL文字になっています。 NULL直前までの文字列を使います。 My.Computer.FileSystem.CopyFile(Microsoft.VisualBasic.Left(sPath, sPath.IndexOf(vbNullChar)), "C:\Test.bmp", True)

関連するQ&A

  • VBで現在の壁紙を取得、フルパスを取得する方法

    VB初心者です。 VBで現在の壁紙を取得、フルパスを取得する方法を教えてください。 VBで壁紙を変更することはできたのですが現在のフルパスを取得する方法がわかりません。 お願いします。

  • 壁紙変更について

    APIで壁紙を変更させようと思ったのですが、なにやらbmp形式しかAPIでは操作できないようです。JPG形式のファイルを壁紙にするにはどうしたらよいでしょうか?C:\WINDOWS\Web\Wallpaperの中にあるファイルがAPIで壁紙にできないのです。具体的にはSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)path, SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);関数を使用しています。これを実行してもbmp形式は壁紙に現れるのですが、jpg形式は現れず、青画面になってしまいます。しかし、これらのファイルを右クリックして「デスクトップの背景に設定」を指定すると壁紙になるのでAPIで操作して壁紙にする方法があると思います。ご存知の方、どうかよろしくお願いします。

  • VC++「コピーしています...」ダイアログ

    ファイルをコピー中に、 「コピーしています...」というWindows標準のダイアログを 出したいと思ってます。 VBでは FileSystem.CopyFile というメソッドでファイルをコピーすれば可能なのですが、 VC++2005 CLR環境ではどのようにすれば良いでしょうか? ご教示お願いいたします

  • VBでWin32APIを使う方法

    VB2010を触っていて、Webで情報を拾いながらコードを作成しています。 .NetFrameWorkではクラスで対応できない時にWin32APIを使うとありました。 この記述はVB2005の時のもので、やや旧いです。 VBの版が進むと使えるクラスも多くなって、APIの出番はますますなくなっているのでしょうか? 取り敢えず現在使いたいAPIはVB6からのコピーでSHGetSpecialFolderLocationと GetSystemDirectoryの2つです。これはクラスで代用可能ですか。 それともAPIでやるべきなのでしょうか。 現在APIで記述しています。リビルドでパラメータのエラーが出て止まっています。 ちょっと手探り状態で作業を進めているため、的が外れていたら済みません。 ソースは以下のようになっています。   ws = GetSystemDirectory(sysDir, MAX_PATH)   GetSystemDir = Left$(sysDir, InStr(sysDir, vbNullChar) - 1)

  • カレントディレクトリの取得について

    ゲームを作るのに、実行ファイルのフルパスが必要となりました。 「GetCurrentDirectory」を使ってパスを取得したのですが、 取得できたパスは、 「sers\NewChallenger\~(中略)~\GameData」 となってしまいます。 あたまの「sers」は「Users」で、本来なら、 「C:\Users\NewChallenger\~(中略)~\GameData」 となるはずなのですが。 取得に際しては、 char path[_MAX_PATH]; GetCurrentDirectory( _MAX_PATH, path ); というごく単純なことしかしていません。 このあと、バッファのサイズが小さすぎてところてん式に前の方が消えているのかと思い、 「_MAX_PATH」を「1000」として試してみたのですが、結果は変わらず。 いったい何が起こっているのでしょうか? どうすれば正しく取得できるのでしょうか?

  • ファイル名の取得について

    以下のサンプルで、選択したファイル名を任意の変数に取得したいのですが、どこに手を加えると取得できますでしょうか。 void OpenImgFiles(HWND hWnd) {   OPENFILENAME ofn;   memset(&ofn, 0, sizeof(OPENFILENAME));   ofn.lStructSize = sizeof(OPENFILENAME);   ofn.hwndOwner = hWnd;   ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0All Files(*.*)\0*.*\0\0";   ofn.lpstrFile = FileName;   ofn.nMaxFile = MAX_PATH;   ofn.Flags = OFN_FILEMUSTEXIST;   ofn.lpstrDefExt = "bmp";   ofn.nMaxFileTitle = 64;   ofn.lpstrFileTitle = FileTitle;   ofn.lpstrTitle = "ファイルを開く";   if (GetOpenFileName(&ofn)) {     show = 1;     InvalidateRect(hWnd, NULL, TRUE);   }   return; } ひょっとして簡単すぎるのかも知れませんが・・・ どうかよろしくお願いします。

  • VB6.0で現在参照しているエクセルファイルの絶対パスを取得したい

    VB6.0で現在参照しているエクセルファイルの絶対パスを取得したい 環境:VB6.0/Excel2003/WindowsXP VB初心者です。 現在プログラム内で参照しているexcelファイルの絶対パスと、フォームのテキストボックスに入力された絶対パスを比較して、 それらが同一だった場合エラーを表示するというプログラムを作成しています。 プログラム内では、現在開かれているエクセルファイルの内容をチェックして、対象となるデータを持っているエクセルファイルを1つ選択し、データを取り込むという動きをしています。 現在開かれているファイルのパスと入力されたパスを比較する事は出来たのですが、 そうではなくデータを取り込んでいるエクセルファイルのみ比較したいのです。 (複数のファイルが開かれている場合、データを取り込んでいるファイルとは別のファイルのパスが入力されたファイルパスと同一だったときもエラーとなってしまうので..) データを取得しているところからはフルパスは取れそうにないので、ほかの方法を模索しています。 どうぞ宜しくお願い致します。

  • VBでメールを起動させるには・・・

    VBでメールを起動させたいのですが、現在のところShellを使って絶対パスで指定して起動させているのですが、それでは他の人が使った時にエラーがでてしまうので、相対パスの取得の仕方をおしえていただけないでしょうか?よろしくお願いします。

  • フルパスからファイル名取得の方法

    指定したフォルダのフルパスを「bmpFiles」に入れているのですが、表示する時はファイル名のみの表示にしたくて「Path.GetFileName」を使用してファイル名を取得しようとしたのですが、「型'stringの1次元配列'の値を'string'に変換できません」というエラーが出てしまいます。 VBを始めたばかりでよく分からないのでアドバイスをお願いします。 Dim imageDir As String = fbd.SelectedPath ' 指定フォルダまでのディレクトリ Dim bmpFiles As String() = _ System.IO.Directory.GetFiles(imageDir, "*.bmp") 'フルパス Dim bmpFileName As String = _ Path.GetFileName(bmpFiles)  ←bmpFilesで上記エラー

  • ファイルの一覧を取得して配列に入れるには(VB2005)

    VisualBasic2005でプログラミングの勉強を始めましたが、配列のところで躓いてしまいました。 現在やりたいことは、ListBoxとDataGridViewにそれぞれ取得したファイルのファイル名を一覧を表示し、項目クリックでそのファイルを開くことです。(DataGridViewのほうは、ファイルの一覧だけでなく、項目を分けてパスやファイルサイズなども表示させたいと思います)。 まずListBoxのほうですが、検索して次のような方法が見つかりました。 ListBox1.DataSource = _ My.Computer.FileSystem.GetFiles("パス",FileIO.SearchOption.SearchTopLevelOnly,"*.拡張子") そのままコピーして利用してみたのですが、直接リストボックスに一覧を取得し、パスも含めた文字列が表示されてしまいました。リストボックスにはパスと拡張子を除いたファイル名だけを一覧表示したいです。それで、各文字列を操作するためにはまず取得したファイル一覧を配列かコレクションに格納しなければならないと思うのですが、この方法がどうしてもわかりません(また、配列とコレクションではどちらが相応しいでしょうか)。 また、DataGridViewでもパスやサイズも含めた一覧を表示し、同様にクリックで開けるようにしたいと思います。この場合も、まず多次元配列に検索結果を入れると思うのですが、データを入れた配列から、DataGridViewに表示させる方法も合わせて教えていただきたく思います。 以上のことについて、アドバイスまたは方法をご教授ください<(_ _)> 検索していると、 DataGridView1.datasource = DataTable ListBox1.datasource = ~~~ などという例が多いのですが、DataTableやdatasourceと配列はどのような関係にあるのでしょうか?DataTableのデータを配列に入れたり、またその逆だったりは簡単に出来ないものでしょうか。 このあたりがどうも理解不足で、応用力もつけたいので、どのあたりを勉強すればよいのかも教えて頂けると助かります。初心者用の参考書と、逆引き大全500は一通り読んでみました。

専門家に質問してみよう