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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1026
UNGAclipsetが働かないことがある7未解決


UNGA

リンク

2016/10/26(Wed) 16:41:07|NO.77243

clipset 文字変数

と記述しても、文字変数の中身がクリップボードにセットされません。

原因として考えられることを教えていただけるとうれしいです。



この記事に返信する


さか

リンク

2016/10/26(Wed) 21:07:35|NO.77247

それだけの情報だとアドバイスが難しいと思います。
文字列変数に値が入っていないか、確認の仕方が悪いかですかね。

ちなみに以下のスクリプトだとうまく行きますか?
#include "hspext.as"
a="あいうえお"
clipset a
b=""
clipget b
mes b



UNGA

リンク

2016/10/26(Wed) 21:35:19|NO.77248

お返事ありがとうございます。ちょっと長くなってしまいますが、実際のルーチンを書いてみる
と以下のようになります。


screen WID_TOOL2,320,320,screen_hide oncmd gosub *OnCommand, WM_COMMAND fusen_list="" listbox dummy,100,fusen_str(id) //① listbox dummy,1,"" //② button gosub "閉じる",*close_listbox gsel WID_TOOL2,2 return *OnCommand windID=ginfo(2) hListbox = objinfo(0,2) if lparam==hListbox { sendmsg hListbox, $188 } selected_id=stat gosub *line_copy return *line_copy notesel fusen_str(id) noteget selected_line,selected_id clipset selected_line objprm 1,selected_line return

ルーチンの目的は、①のlistboxのマウスクリックで選択された行をクリップボードに送る
ことです。下から2行目のobjprm 1,selected_lineで②のlistboxにはちゃんと選択行が表示
されますが、メモ帳などにコピーしてみると、クリップボード内には①のlistboxの最上行
が常に入ってしまっています。



さか

リンク

2016/10/26(Wed) 22:13:24|NO.77249

実際に動くものを貼ってもらえると手間がないです。
以下のように少し直して動かしたら②の文字がちゃんとクリップボートに
入り、Ctrl+Vで出てきましたよ。
clipgetしてタイトルにも表示するようにしてみました。
このあとの処理でクリップボード内を消してるのではないですか?
clipgetをあちこちに埋め込んで動かしてみるかstopで確認してみたらどう
でしょうか。
あとは、気になったのがfusen_str(id)と配列にしてますが配列であってますか?
配列にする必要ありますか?

#include "hspext.as" fusen_str="111\n222\n333" screen WID_TOOL2,320,320,screen_hide oncmd gosub *OnCommand, $111//WM_COMMAND fusen_list="" listbox dummy,100,fusen_str(id) //① listbox dummy,1,"" //② ;button gosub "閉じる",*close_listbox gsel WID_TOOL2,2 stop *OnCommand windID=ginfo(2) hListbox = objinfo(0,2) if lparam==hListbox { sendmsg hListbox, $188 } selected_id=stat gosub *line_copy b="":clipget b:title b return *line_copy notesel fusen_str(id) noteget selected_line,selected_id clipset selected_line objprm 1,selected_line return



UNGA

リンク

2016/10/26(Wed) 23:03:45|NO.77250

お手を煩わせて申し訳ありません。
確かにうまくいくときもあるのですが、全く同じプログラムで上記の症状が出る
ことがあるのです。どういうときに症状が出るのか、条件が特定できていないの
で今のところお伝えできないのですが、OS側の何らかの不都合ということもあり
うるのでしょうか?ちなみに、実際にはメインのプログラムが上にあってそこか
ら読んでいるルーチンでしてfusen_str(id)は配列でないと困る事情があります。



さか

リンク

2016/10/27(Thu) 22:22:29|NO.77258

fusen_str(id)の配列については必要とのこと失礼しました。

OSの不具合でクリップボードが消えると言うのは聞いたことないです。
普段も仕事でクリップボードは頻繁に使いますがおかしいと思ったとこはないです。
まあたまに起きても押し間違いかなと思ってしまうと思いますが。
あとは他に動いてるアプリがあればそこでクリアしてるとかないでしょうか。

原因特定になるかわからないですが、別にリアルタイムでクリップボードの内容を
表示するhspスクリプトを作ってみて動かしながら、当スクリプトを動かしてみたら
どうでしょう。
どういうタイミングで消えるのかわかると手がかりとなるかもしれないですよね。


#include "hspext.as" *@ a="": clipget a: title "["+a+"]" wait 10 goto *@b



MillkeyStars

リンク

2016/10/27(Thu) 23:54:55|NO.77260

クリップボード監視用スクリプト


#uselib "user32.dll" #func SetClipboardViewer "SetClipboardViewer" int #func ChangeClipboardChain "ChangeClipboardChain" int,int #cfunc GetClipboardOwner "GetClipboardOwner" #define WM_DRAWCLIPBOARD 0x0308 #define WM_CHANGECBCHAIN 0x030D gsel 0,2 onexit *p_end Main_HWND = hwnd hNextChain = hwnd oncmd gosub *ClipAlert,WM_DRAWCLIPBOARD oncmd gosub *ClipCBAlert,WM_CHANGECBCHAIN mes "自分自身ウィンドウハンドル(hWnd) : "+hwnd SetClipboardViewer hNextChain //←を実行すると、最初に一回目の通知が発生します。 stop *ClipCBAlert mes "クリップボードチェイン : 通知" if wParam == hNextChain { hNextChain = lParam } else { if hNextChain { Sendmsg hNextChain,WM_CHANGECBCHAIN,wparam,lparam } } mes "クリップボードチェイン : 結果 "+wparam+" / "+lparam return 0 *ClipAlert DateTime = ""+strf("%04d/%02d/%02d %02d:%02d:%02d",GetTime(0),GetTime(1),GetTime(3),GetTime(4),GetTime(5),GetTime(6)) mes "クリップボード最終更新日時 : "+DateTime+" / 最終所有者(hWnd) : "+GetClipboardOwner() return 0 *p_end ChangeClipboardChain Main_HWND,hNextChain end



UNGA

リンク

2016/10/29(Sat) 14:55:41|NO.77264

返事が遅れてすみません。
お二方とも、アドバイスありがとうございます。
まだ解決には至っていませんが、もう少し研究してみます。



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