HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0516
窓口WIN32でクリップボードの操作9解決


窓口

リンク

2009/5/16(Sat) 07:12:12|NO.25164

現在クリップボードにテキストを送るスクリプトを作っているのですが
GlobalUnlock関数が失敗してしまいます。
何か対策は無いでしょうか?


#include "user32.as" #include "kernel32.as" ;定数 #define CF_TEXT $00000001 #define GMEM_MOVEABLE $00000002 #define GMEM_ZEROINIT $00000040 ;システム変数stat が0(NULL)だった場合行番号とstat、コメントを表示する ;if_stat %1 #define if_stat(%1) if stat = 0 : dialog "LINE "+str( __LINE__ )+"\nSTAT "+str(stat)+"\nMSG "+str(%1),1,"エラー、システム変数statがNULLです" : goto *endr ;クリップボードビューアのセット clip_add_XXX = "< クリップボードに送る文字列を入力してください >" gsel 0,2 SetClipboardViewer hwnd : hwnd_clip = stat : if_stat "SetClipboardViewer!" onexit goto *endr mesbox clip_add_XXX,500,200 button gosub "clipset",*clipset stop ;クリップボードにデータを保存 *clipset dat_size = strlen(clip_add_XXX)+1 ;転送するデータのサイズを取得 GlobalAlloc GMEM_MOVEABLE | GMEM_ZEROINIT,dat_size : Gmem_hwnd_add = stat : if_stat "GlobalAlloc!" ;領域の確保 GlobalLock Gmem_hwnd_add : GLLK_ = stat : if_stat "GlobalLock!" ;領域のロック RtlMoveMemory Gmem_hwnd_add,varptr(clip_add_XXX),dat_size : if_stat "RtlMoveMemory!" ;メモリーのコピー GlobalUnlock Gmem_hwnd_add : if_stat "GlobalUnlock!" ;領域のアンロック f___ = 1 ;終了処理の際にclipboardを破棄するためのフラグ OpenClipboard hwnd : if_stat "OpenClipboard!" ;clipboardを開く EmptyClipboard : if_stat "EmptyClipboard!" ;clipboardの中身をクリア SetClipboardData CF_TEXT , Gmem_hwnd_add : if_stat "EmptyClipboard!" ;clipboardに送る CloseClipboard : if_stat "CloseClipboard!" ;clipboardを閉じる f___ = 0 return ;終了処理 *endr if cunt_endr = 5 : end if f___ = 1 : f___ = 0 : CloseClipboard : cunt_endr++ : if_stat "CloseClipboard!"+" \n エラーカウント"+str(cunt_endr) ChangeClipboardChain hwnd , hwnd_clip : cunt_endr++ : if_stat "ChangeClipboardChain!"+" \n エラーカウント"+str(cunt_endr) end </per>



この記事に返信する


hatter

リンク

2009/5/16(Sat) 16:42:59|NO.25172

よくソースは解読できないのですが、
クリップボードにテキストを保存するだけなら
以下のプログラムでできます(対策ではなく別案)。
的外れな回答でしたらすみません。

#include "hspext.as" mes "クリップボードへ送るテキストは?" age="TEST" input age button "決定",*enter stop *enter clipset age



窓口

リンク

2009/5/16(Sat) 22:29:54|NO.25186

回答ありがとうございます。
勉強も兼ねて、あえてwin32で作っております。



inovia

リンク

2009/5/16(Sat) 22:49:10|NO.25190

GlobalUnlock
ってアンロックされたとき0が返り血に入るのでは?
http://www.winapi-database.com/System/Memory/GlobalUnlock.html



inovia

リンク

2009/5/16(Sat) 22:50:00|NO.25191

×返り血
○戻り値



ANTARES

リンク

2009/5/17(Sun) 02:56:01|NO.25198

誤:RtlMoveMemory Gmem_hwnd_add,varptr(clip_add_XXX),dat_size : if_stat "RtlMoveMemory!"
正:RtlMoveMemory GLLK_,varptr(clip_add_XXX),dat_size : if_stat "RtlMoveMemory!"

>inoviaさん
 ありがとうございます。長年の疑問が氷解しました。



荒河 軒持

リンク

2009/5/17(Sun) 06:26:43|NO.25205

返り血怖いwww



窓口

リンク

2009/5/18(Mon) 03:20:45|NO.25228

inovia さん
ANTARES さん
ありがとうございます。


エラーが起こった場合、常に返り値に0が返るものだと思っていました。
おかげで、onexit先で、時たま起こる
ChangeClipboardChain関数に0が返る問題も解決しました。

ほんとに返り値怖いです。



abast

リンク

2009/5/18(Mon) 21:29:15|NO.25238

俺は「戻り値」で勉強したぞ。

ボケもツッコミもベタすぎ



窓口

リンク

2009/5/19(Tue) 02:54:25|NO.25246

べたな突っ込みして
すみません。

不要だと思いますが修正します

×ほんとに返り値怖いです
○ほんとに戻り値怖いです

自分たちどうやら気が合わないみたいですね。
そこで提案ですが、友達になりませんか?(笑)



ONION software Copyright 1997-2023(c) All rights reserved.