アプリ版:「スタンプのみでお礼する」機能のリリースについて

ドラッグしたファイル名を取得するCプログラムはWindowsでは、

#include <stdio.h>
int main(int argn, char *argv[])
{
 if(argn != 2) {
  printf("本プログラムにファイルをドラッグしてください\n");
  return -1;
  }
 printf("ドラッグしたファイルは%sです\n",argv[1]);
 return 0;
}

で動作しますが、これと同じことがLINUX MINT でできる、プログラムの書き方がわかりません。

<症状>
このプログラムをgcc でコンパイルしてできた a.out をターミナルから
./a.out hoge.dat
すると
ドラッグしたファイルはhoge.datです
とwindows版と同じように表示されますが、
hoge.dat をa.out にドラッグしても何も起こりません。

C言語の問題というより、OSのインタフェースの違いということも承知していますが、こちらのカテに質問してみました。
よろしくお願いします。

A 回答 (4件)

元々、Linuxはコマンドラインで使うのが主流だったと思います。


ですから、ドラッグ&ドロップなんて使えないのが普通だと思います。
もし、使えるようにするのであれば、Cのソースを修正するのではなく、GUIをサポートする環境のドラッグ&ドロップを強化して、argvにファイル名が渡るようにするしかないと思います。

昔、質問者さんと同じように、Linux系の環境をWindowsの操作性に近づけようと努力したGUIの商品があったと思いますが、それは、まともに使えるものじゃあありませんでしたね。
    • good
    • 0
この回答へのお礼

応答ありがとうございます。

>もし、使えるようにするのであれば、Cのソースを修正するのではなく、GUIをサポートする環境のドラッグ&ドロップを強化して、argvにファイル名が渡るようにするしかないと思います。

そのような解決策でもOKです。
実際、a.out を「マウスクリックで起動」させるために.desktopファイルを用意していますので、
ドラッグ&ドロップで起動させるための.desktopファイルのような仕掛けがありそうな気がしますが、ご存知ありませんか?

カテ変更して質問したほうがよさそうな展開になってきましたが、
>昔、質問者さんと同じように、Linux系の環境をWindowsの操作性に近づけようと努力したGUIの商品があったと思いますが、それは、まともに使えるものじゃあありませんでしたね。
なるほど。でもその後、進展はないのでしょうかね。

お礼日時:2021/02/10 11:03

>>GUIの商品があったと思いますが、それは、まともに使えるものじゃあありませんでしたね。


>>>なるほど。でもその後、進展はないのでしょうかね。

現在のMacOSが、その開発者がめざしたものを実現したってことではないでしょうか?
    • good
    • 0

> ドラッグしたファイル名を取得する


これのWindows GUIでの操作がイマイチ分かりませんが……
a.outのアイコン上にhoge.datのアイコンをドラッグする?

上記のような動作なら、それはあなたが書いたCプログラムではなくデスクトップを作っているエクスプローラーの機能なので、そういう機能を持ったデスクトップシェルを使えという話ですね。
自分のCプログラムでドラッグされたファイルを処理するなら最低でも自分でウィンドウを開いてマウス操作イベントを処理しないといけません。当然ですがWindowsとLinuxでは全然別のプログラムになります。
    • good
    • 0

>>C言語の問題というより、OSのインタフェースの違いということも承知しています



それが原因でしょうね。

>>これと同じことがLINUX MINT でできる、プログラムの書き方がわかりません。

OSのインターフェースの違いが原因ですから、WindowsのOSと同様の動作をする環境を作ってプログラムを動作させればいいのでは?
    • good
    • 0
この回答へのお礼

応答ありがとうございます。
>OSのインターフェースの違いが原因ですから、WindowsのOSと同様の動作
をする環境を作ってプログラムを動作させればいいのでは?

そうなんですよ。つたない私の質問文を翻訳いただき恐縮です。
質問は、
 WindowsのOSと同様の動作をする環境となるCのプログラム方法
です

例えば、 #include <XXX.h>
してWindowsのOSと同様の動作をさせるライブラリをリンクして
その中の、xxxという関数でドラッグしたファイル名を読みだして
argv[1] に代入する

等の具体的な解決策の回答を期待して質問しています。
よろしくお願いします

お礼日時:2021/02/10 09:28

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