• ベストアンサー

Cで他のソフトを操作して多数のファイルの格式を変更する

Cで他のソフトを操作して多数のファイルの格式を変更する 問題:試験データA1.kdlをA1.csvに変更しようとする場合、あるソフト(例えばBB.exe)を使う。 このソフトは主に二つの作業、一つは変更前のファイルの読み取り「参照」というボッタン、もう一つは ファイル式変換用の「変更」というボッタン。一回は一つファイルしか変更できない。今は手元にたくさん 用変更のファイルがあって、A1.kdl~A100.kdl、Cコードで一回で全部自動的に変更できるような プログラムを作れませんかと考えてます。何方か分かれば教えてくださいませんか

  • enli
  • お礼率54% (40/73)

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

変換ソフトですが、GUIしかないのでしょうか? COMオブジェクトを提供しているとか、コマンドラインでの 指定が可能とか、あるいはエンジン部のDLLを解放してる ような話は無いのでしょうか? あれば、それを使う方がよいでしょう。但し、CでCOMを扱う のはとても難しいので、Scriptにした方が賢明です。 仮にGUIしかないとします。 ファイル名を指定するテキストボックス、指令用のボタンは 普通はウィンドウです。(そうでないのもあります) そこで、これらのウィンドウを操作して、処理します。 (1)プログラムの起動  CreateProcess  http://msdn.microsoft.com/ja-jp/library/cc429066.aspx (2)親ウィンドウの検索  FindWindowExまたはEnumWindows  http://msdn.microsoft.com/ja-jp/library/cc410853.aspx  http://msdn.microsoft.com/ja-jp/library/cc410851.aspx (3)子ウィンドウ(ボタンやテキストボックス)  EnumChildWindows  http://msdn.microsoft.com/ja-jp/library/cc410802.aspx (4)ウィンドウへのテキスト受け渡し  SetWindowText、GetWindowText  http://msdn.microsoft.com/ja-jp/library/cc411207.aspx  http://msdn.microsoft.com/ja-jp/library/cc364815.aspx (5)ウィンドウへのメッセージ送信(クリックを演出)  SendMessage  http://msdn.microsoft.com/ja-jp/library/cc411022.aspx 以上のAPIを駆使すればGUIを操作したのと同じ効果を与えることが できるでしょう。一番大変なのはウィンドウを見つけるところですね。 ボタンやテキストボックスが親ウィンドウの直下(子)ではなく、 孫、ひ孫、…のように階層が深いところにある可能性も高いです。 ボタン表面(GetWindowTextで得られる)を見ながら探しましょう。 テキストボックスは探すのが難しいので、テストで見つけたら、その 階層とクラスを記録しておきましょう。

enli
質問者

お礼

丁寧にお答えいただき、有難うございます。APIはあまり良く分からない、一応試してみます。

その他の回答 (1)

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.1

一番良いのはその BB.exe のソースを修正して連続のファイルを扱える様にする事ですけどね。 シェアウェアですが、そういうWindowsの操作を自動化するソフトがあり、以前の回答で紹介した事があります。 http://oshiete1.watch.impress.co.jp/qa5920797.html 私がこの「Triple-9」を使って操作を自動化するとしたら、このように操作の手順をプログラムしたらできそうです。 1.BB.exe を実行する。 2.ワイルドカード"A*.kdl"でファイル検索する 3.検索されたファイルを BB.exe のファイル名を選択する部分に入力する 4. BB.exe の[変更]ボタンを押す。 5.変換が終了するまで待つ(時間を固定にする,ソフトやファイルの挙動を監視する,など方法は色々) 6.次に見つかったファイルを探す 7.ファイルが見つかれば3.から繰り返し 8.ファイルが見つからなければ終了

enli
質問者

お礼

迅速なご回答いただき、有難うございます。仰ったソフトはタダではないですね。

関連するQ&A

  • HSP ファイル名の変更の仕方

    hspで、例えばC:\\aa.exeというファイルがあった場合、このファイルの名前をbb.exeに変更したいのですが、どうやればいいかわかりません 。ご教授お願いします!

  • ある特定のファイルのアイコンを別の物を変更したい

    ある特定のファイルのアイコンを別の物を変更したい お世話になります。 ある特定のファイルのアイコンを別の物を変更したいのですが、 例えば、 A.exe と B.exe と C.exe の三つがあります。 今は、三つとも同じアイコンなのですが、 B.exeだけ違うアイコンに変更したいのですが、 そのようなフリーソフトご存じでしたら教えてください。

  • (C#)ファイルに書き込みできるかの判定

    C#2.0を使って書き込みができるファイルかどうかを判定する方法を探しております。書き込み可能ファイルであっても、以下のパターン2のような場合には書き込みができないわけですが、パターン1なのかパターン2なのかをC#のコードにより判別したいと考えています。 (パターン1) テキストエディタ1でファイル1を開き、その状態でテキストエディタ2で同じファイル1を開く。エディタ2でファイルを変更・保存してエディタ1をアクティブにすると、他のソフトで変更された旨の表示が出て、変更を反映することができる。 (パターン2) 例えばexcelでCSVファイルを開き、同じCSVファイルをテキストエディタで開く。その状態ではエディタによりファイルを変更・保存することができない。 ご存じの方がいらっしゃいましたらご教授お願いします。

  • ファイル名変更ソフト

    ファイル名の一括変更ソフトで以下のような変更が可能なものを探しています。 1a 2a 3a 4a 5a 6a 頭に数字が連番で付き、後ろに同じアルファベットが付くという形式です。このような変更が可能なソフトをご存知の方がいましたら教えて下さい。

  • ファイルの拡張子の関連付けが変更できません

    環境はwindows7です。 今まで、ある拡張子のファイルをあるフリーソフトの.exeに関連付けで使用していました。 フリーソフトのバージョンが新しくなり、新しい.exeに拡張子のを関連付けを変更しようとして、当該拡張子のファイルを右クリック>「プログラムから開く」>「既定のプログラムの選択」の「参照」から新しいバージョンの.exeを参照して「OK」をクリックしました。 しかし、関連付け先の.exeが変わっていないようで、ファイルをクリックで開くと古いバージョンの.exeを使用して起動してしまいます。 どうすれば、こういう症状のときに正常に関連付けを変更できるのでしょうか。 教えてください、よろしくお願いします。 古いバージョンの.exeなどを新しいバージョンのもので上書きすれば良いのかもしれませんが、古いバージョンも使用することがあり、また.exeのパスにソフトのバージョンが含まれているため上書きや古いバージョンの場所を移動するようなことはしない方法でお願いします。 また、レジストリを直接変更するという方法もあると思いますが、もっと簡単な方法があれば教えてください。

  • CSVファイルを読み込み、ファイル名を変更。

    CSVファイルを読み込み、ファイル名を変更。 使用言語はperlです。perlは初心者です。 アルゴリズムが、 CSVファイルを読み込み→2次元配列に格納→ファイル名変更 という流れになっているプログラムを作成中です。 CSVファイルの中身は あ.txt , a.txt い.txt , b.txt う.txt , c.txt です。 CSVファイルを読み込み2次元配列に格納するプログラムは以下のようにしました。 ----------------------------------- $i= 0; open IN, "sample.csv"; while (<IN>) { my @data = (); @data = split (/,/); for (0..@data) {$jdata[$i][$_] = "$data[$_]";} $i++; } close IN; ---------------------------------------- 「あ.txt」を「a.txt」に変更しようとして、この中に rename $jdata[0][0] , $jdata[0][1] ; と書いてみましたが、変換されません。 どう書けばよいのでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルアドレスの間接的な変更について

    ファイルアドレスの間接的な変更について エクセル上のあるセルが\C\●●●●\○○○○\△△△△\2007-09[\あいうえお.xls]かきくけ!$A$2を参照していて、これを\C\●●●●\○○○○\△△△△\2008-12\[\あいうえお.xls]かきくけ!$A$2に変更したい。(フォルダが異なるが同一名のファイルの同一セルを参照) 2007-09、2008-12とおいているところは年月を表しており、更新したいファイルには他に2006-05、2004-03を参照しているなど、参照先が混在しているため範囲を一括して置換することはできない。 ただこの年月には一定の法則があるため基準となる年月を入力すればどの月に変更するべきなのかは=EDATE( )を使って表示することができる。 私はそれらのセルを&INDIRECT( )&を使って参照式と結び、基準月を入力することによりファイルの置換まで一括でできないかを試みたところエラーになってしまった。 置換をしたりセル内の参照式を直接いじらずに変更する数式をご存じありませんか?

  • 再起動しないとcsvファイルの変更ができない…

    デスクトップにcsvファイルがあり、 その内容を変更し、上書き保存しようとすると "ファイルC:Document and Setting\山田太郎\a.csvを作成できません。パスおよびファイル名が正しいか確認してください" というエラーが出てきて変更内容を上書きできないという現象が多々あります このような状況はPCを再起動すると問題なく上書きできるようになります 何故このような現象が起きるのでしょうか? また、解決法はあるのでしょうか? よろしくお願いします

  • ウィルスソフトによる不正変更の拒否

    ウィルスソフトにより、次の変更が不正変更として毎日、何回も拒否されています。どんな変更でしょうか?拒否されてますが、心配です。 ファイル名: C:\Program Files\SetPoint\SetPoint.exe 種類: ファイル入出力 該当ポリシー: ユーザ定義例外ルール

  • C言語のファイル入出力について教えて下さい

    C言語初めて1ヶ月の超初心者です。 本を読んでもネットで調べても、ファイル入出力の意味がいまいちよく分かりません。 プログラムはCPadで書いています。 書き終わったプログラムを.cのファイル名で保存し、それをコンパイル。 読み込みたいファイルを.csvで作る。書いたプログラムの実行ボタンを押し、 .exe .csv .c の3つのファイルを打ち込んだ後、また.cを打ち込む。 これで一応実行はできるのですが、csvファイルで作ったもの (例をだして言うと ------------------------------------------------------------------ 名前     番号      給与   残業代    所得税 ○○  0001     200000   20000     10000 ------------------------------------------------------------------ というものをcsvで作るとします)  は、プログラムでも、名前 番号 給与 残業代 所得税 と書いてある部分はまったく同じように作らないと csvファイルから読むことはできないのでしょうか? csvファイルとプログラムを実行した結果の役割が、理解出来なくて困っています。ずっとプログラムの文法(?)ばかり勉強してきて、いざファイル入出力をしたら、どういう意味があるのかどう役立つのか分かりません。 後、上のような表で20人分をまとめて出力したいのですが、ファイル入出力するにあたって、条件式はfprintfなどを書く前に書くのでしょうか? お勧めの分かりやすい本などの情報も、教えて頂けると嬉しいです。   長々申し訳ありませんが、宿題の納期が近いので困っています。 よろしくお願いします。

専門家に質問してみよう