トップページ > 記事閲覧
クリップボードの文字列取得
名前:Oomimi 日時: 2018/07/25 13:05

GetClipboardTextについて質問です。 クリップボードにコピーされている文字を取得する機能が使いたいと思い、そのような関数を探していたところ int GetClipboardText( TCHAR *DestBuffer ) ; // クリップボードに格納されているテキストデータを読み出す( DestBuffer:文字列を格納するバッファの先頭アドレス 戻り値 -1:クリップボードにテキストデータが無い -1以外:クリップボードに格納されている文字列データのサイズ( 単位:byte ) ) という関数を見つけたので使ってみたところ、文字数(戻り値)は取得できましたが 文字列を格納するバッファの先頭アドレスは取得できませんでした。 ソースコード #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; int b; char* a = NULL; b=GetClipboardText(a); if (b != -1 && a != NULL) { for (int i = 0; i < b; ++i) { printfDx("%c", a[b]); } } else { printfDx("Error:%d",b); } printfDx("\n"); WaitKey(); DxLib_End(); return 0; } 使い方を間違えているかもしれません……。 文字列を取得できない原因がわかりません。 ご教授お願い致します。
メンテ

Page: 1 |

Re: クリップボードの文字列取得 ( No.1 )
名前:8127 日時:2018/07/25 13:42

こんにちは。 お察しの通り使い方が違います。 "文字列を格納するバッファの先頭アドレスを取得"のではなく、こちら側で確保したメモリを渡してそこに文字を代入してもらいます。 意図通り動くコード↓↓↓↓↓ #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if (DxLib_Init() == -1) return -1; int b; //まず、NULLを指定して文字数を得る b = GetClipboardText(NULL); if (b == -1)return -1; //文字数を格納できるだけのメモリを確保(0終端の分だけ+1必要) char *a = (char*)malloc(b + 1); //クリップボードの中身をaに入れてもらう GetClipboardText(a); // if (b != -1 && a != NULL) { printfDx("%s", a); //%sを使うと一文字ずつやらなくても文字をまとめて出力できる } else { printfDx("Error:%d", b); } printfDx("\n"); free(a); a = NULL; //解放は忘れずに、あと解放後のポインタはアクセスできないようにNULLを入れるのがふつう WaitKey(); DxLib_End(); return 0; } ※7/25 13:42 誤字修正
メンテ
Re: クリップボードの文字列取得 ( No.2 )
名前:Oomimi (解決) 日時:2018/07/25 20:52

8127さん、ありがとうございます。 正常に動作することが確認できました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存