• ベストアンサー

グローバルメモリについて

SetClipboardData関数を使いたいのですが,「データが入っているグローバルメモリのハンドルを指定します。」というヘルプ内の文章の意味がわかりません。 クリップボードに文字列をコピーしたいのですが,どうすればよろしいでしょうか?

  • tomo5
  • お礼率61% (37/60)

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

単にGlobalAlloc(グローバルメモリを確保する関数)が返すメモリハンドルを指定すればよいのでは? 手順としては 1.GlobalAllocでメモリを確保 2.メモリをロックし、文字列を移す 3.メモリをアンロックする 4.SetClipboardDataにメモリハンドルを渡す のようになると思います。 だいぶ昔にやった記憶しかないので、うまくいくか分かりませんが。

tomo5
質問者

お礼

迅速な解答ありがとうございます。 メモリのロックということがまだ理解できていませんが, 調べつつやってみます。 ありがとうございました。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

簡単に流れを書くと、こんな感じ。   LPCSTR pszSrc; /* これがクリップボードに複写する文字列を指す */   LPCSTR pszDest;   HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, lstrlen(pszSrc) + 1);   pszDest = GlobalLock(hGlobal);   lstrcpy(pszDest, pszSrc);   GlobalUnlock(hGlobal);   OpenClipboard();   EmptyClipboard();   SetClipboardData(CF_TEXT, hGlobal);   CloseClipboard(); エラーチェックなんかを全然やってないので、適宜追加してね。 あと、hGlobal が指すグローバルメモリは SetClipboardData() が成功した 後は、システムが管理することになるので、勝手に GlobalFree() しちゃ 駄目ですよ。

関連するQ&A

  • Wordのクリップボード

    Wordで文字列をコピー(メニュー「編集」-コピー や Control+C)を行うと、 クリップボードに入ります。 しかし、コピーしてすぐ貼り付けを行うときでもクリップボードに入ります。 クリップボードにたくさんアイテム(文字列)が入っていると うざったいので、 できればコピー後すぐ貼り付けるものはクリップボードに入れたくないのですが、 クリップボードに入れるものとそうでないものを分けるにはどうすればよいですか。 また、クリップボードに入っているアイテムのうちの一部のみを消去する(選んだものだけクリア)にはどうすればよいですか。 Word2000です。

  • 二つ前にメモリに残っている内容は完全に消えるのか

    たとえば、適当な文章などを、コピーやカットして、それをどこかにペーストしますが、 必ず直前の1つ前の内容しかペーストできませんよね?。 これを例えば、2つ前や3つ前にコピーやカットした内容って、 もうメモリ(クリップボード?)には残ってないのでしょうか? これを取り出す事ってできないのでしょうか? 完全に、コンピューターから消されてるのでしょうか? 昔から思っていた素朴な疑問ですが、よろしくお願いします。

  • Excelでセル内の文字列のみをコピーする方法

    Excelでセル内の文字列のみをクリップボードにコピーする方法を教えてください。 ※クリップボードにコピーをする方法であり、他のセルに値のみをペーストする方法ではありません。 満たしたい点は2つです。 ・表示している文字列のみを取得 ・複数のセルを同時にコピー 一つのセルに以下の文字列が入っていた場合(#以外) #123 #"abc" コピーするとクリップボードを文字列として取得すると以下の文字列が得られます #"123 #""abc""" これを以下の文字列が得られるようにしたいのです。 #123 #"abc" 1つのセルだけでいい場合は、セルを編集状態にしてコピーしたり アクティブセルの数式バーをコピーすればいいのですが、 これは当然、複数のセルを同時に選択する場合には使えません。 VBAを使う方法でもそうでなくてもかまいません。 (VBAの場合はコードもお願いしたいです) よろしくお願いします。

  • 【VBA】クリップボードに格納したデータの操作

    こんにちは。ExcelVBAについての質問です。 HP等の文字列をコピーして、テキストデータを取得するところまではできるのですが、 その内部にあるURLをどうやって取得したらよいのかで困っております。 例えば、HP上に【あいうえお】といったリンクがあるとします。 これをドラッグコピーしてクリップボードに格納しその テキストは New DataObjectのGetTextで取得できますが その場合、ただの「あいうえお」といったテキストデータになってしまいます。 その内部にあるhttp//・・・・・・・・ といったデータが取得できません。 ドラッグコピーでクリップボードに格納するだけではURLは取得できないのでしょうか? ドラッグコピーしたデータをセルをアクティブにしないで貼り付けると 文字が青色になりハイパーリンクになって張り付きます。 ということは内部のURL情報もクリップボードに格納されているということだと思いました。 説明下手で申し訳ありませんが、よろしくお願い致します。

  • INDIRECT 関数

    エクセルのINDIRECT 関数とは具体的に何する為の関数ですか? ヘルプを見ると「指定される文字列への参照を返します。」と書いてあるのですが 意味が分かりません。 「sum関数は数値の合計を出す関数」 のように、一言で簡単に教えていただけませんか?

  • クリップボードとのデータのやりとり

    ジャバスクリプトやまたはvb、jスクリプトで、 クリップボードへ任意の文字がコピーされたら アラートを出すってできますか? また、その逆でボタンを押したらクリップボートに データを送ることはできますか? 例えば 「クリック」というボタンをおしたら http://www.aaa.com という文字列を 送るとか。 もしあるようでしたら、コマンド名を教えてください。

  • 秀丸で、文字列+改行をコピーしたときに

    秀丸で、文字列+改行をコピーしたときに 改行だけクリップボードから削除する方法はないでしょうか。 たとえば りんご\n をコピーした際は、 りんご をコピーしたことにしたいです。 意味不明でしたら加筆修正しますのでよろしくお願いします。

  • 数値ではない連続データを関数で(excel)

    excelにて、あらかじめ関数をいれておいて最初のセルに 入力すると、連続データになるようにしたいのです。 数値なら二行目に =A1+1 とでもいれておけばいいのですが、今回入れたいものは MM0001のような文字列?です。 フィルハンドルでの手動の操作ではできるので なにか関数があるのではないかと思ったのですが・・・。 検索しても、ヘルプみても見つけることが できませんでした。どなたかアドバイスお願いします。

  • html表示での色文字のコピーと同義にするには?

    お世話になります。 AutoHotkeyを用いて 色文字をクリップボードに入れ込むという簡易スクリプトを作ろうと思っています。 それをWordのような、書式も反映するものに貼り付けるつもりです。 しかし、クリップボードにテキストのみなら分かるのですが HTMLファイルにて表示されているような色文字を入れるには、 クリップボードにどんな情報を入れたら良いのか分かりません。 単純に clipboard= <div><font color="#66ccff">貼り付ける文字</font></div> としても駄目でした。(これだと当然かもしれませんがそのまま貼り付きます。 『HTML表示にて、色文字をコピー』と同義にするにはどう記述すればよいのでしょうか。 コピーする際、クリップボードにはどう記述されているのでしょうか。 それともクリップボードに入る文字列をいじるだけでは無理なのでしょうか。 ご回答よろしくお願いいたします。

  • 順々に置換してくれるアプリやソフトはありませんか?

    クリップボードにコピーしたいくつかの文字を、順々に置換してくれるアプリやソフトはありませんか? たとえば、クリップボードに「あ」「い」「う」「え」「お」という5文字を順々にコピーし、 「●」が表示されている文中に「あ」「い」「う」「え」「お」を順々に置換貼り付けしていってくれるソフトは ありませんか? たとえば、 「~ので、●は、~で●は、●したので、●が●になった。」 という文章を、 「~ので、あは、~でいは、うしたので、えがおになった。」 という風に自動でできるソフトやアプリはありませんでしょうか? 宜しくお願いします。

専門家に質問してみよう