1 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 20:07:21 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ! 過去スレ、関連リンクは>>2-10 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build84 pc12.2ch.net/test/read.cgi/tech/1259478896/
469 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 13:44:21 ] 某アプリとか書かずにちゃんと名前書いたら?
470 名前:467 mailto:sage [2010/01/12(火) 14:10:07 ] >>468 ありがとうございます 漁ってみます >>469 どうせ誰も知らないだろうと思って具体的な名前は出しませんでした カノープスのアナログキャプチャカードMTVX2005のソフト Feather2005 Ver8.17.002の操作パネル(リモコンウインドウ)の再生位置の時刻表示です ちなみに再生ファイル名は取れていました
471 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 15:21:18 ] メッセージボックス(OKボタンのみのやつ)のOKボタンのコントロール識別子の値を教えてください 0x0400だと思ってGetDlgItemしたらNULLが返ってきました
472 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 15:30:42 ] それぐらいSpy++で調べろよ・・・
473 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 17:20:30 ] >>470 UIAかMSAAで取得してるんじゃね?
474 名前:467 mailto:sage [2010/01/12(火) 18:22:35 ] ふと思い立ち、 SendMessageAとSendMessageWとで、それぞれ余計な文字コード変換をしないようにbyte配列を渡して受け取ってみたところ SendMessageAでそれらしき値が返ってくるのを確認しました。 SendMessageWだと4文字で切られている雰囲気です。 [DllImport("user32.dll", CharSet = CharSet.Ansi)] public static extern int SendMessageA(IntPtr hWnd, int Msg, int wParam, StringBuilder lParam); StringBuilder sb = new StringBuilder(256); int r = SendMessageA(hnd, WM_GETTEXT, 100, sb); のようにしてみたところ、sbにきちんと8文字取れるようになりました。 ただrに入る値は4です。 これは対象アプリかOS(XP SP3です)のバグと思って良いのでしょうか? お騒がせしました。ありがとうございました。
475 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:27:13 ] ふと思い立ちって、、、>>467 読んだ瞬間にそう思ったよ。 まあ問題なのは、不具合は全部自分以外のバグと思っちゃうところじゃないのかな。
476 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:33:50 ] WM_GETTEXTはA/W関係ないと思うが・・・?
477 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:43:01 ] 8文字が全て全角文字で、ANSIで8バイト、Unicodeで4文字って事だろ。 マルチバイト文字とワイド文字の違いを分かってないだけなのに OSのせいにするその脳細胞がバグってる。
478 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 18:49:51 ] XP以降のEM_SETSEL等はSendMessageAでもUnicode扱いするバグがあるんだが・・・
479 名前:467 mailto:sage [2010/01/12(火) 19:04:42 ] 対象アプリの表示「 0:37:15」 確認コード byte[] buff = new byte[256]; int r = SendMessageA(hnd, WM_GETTEXT, 100, buff); int r = SendMessageW(hnd, WM_GETTEXT, 100, buff); [DllImport("user32.dll")] public static extern int SendMessageA(IntPtr hWnd, int Msg, int wParam, byte[] lParam); [DllImport("user32.dll")] public static extern int SendMessageW(IntPtr hWnd, int Msg, int wParam, byte[] lParam); SendMessageAの結果 r=4 buff= 0x20,0x30,0x3a,0x33,0x37,0x3a,0x31,0x35,0x00以降全て0 SendMessageWの結果 r=4 buff= 0x20,0x00,0x30,0x00,0x3a,0x00,0x33,0x00,0x00以降全て0 どちらの結果もwParamの値と、戻り値の整合性がとれていないと思うのですが。 試しにWM_GETTEXTLENGTHを送ってもAもWもどちらも4が返ってきました。
480 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 19:20:45 ] そもそもSendMessageの宣言は合ってるのか?
481 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 19:28:29 ] OSのバグじゃなくて.NETかお前の書いたソースの問題。 とりあえずC#スレで聞いて来い。
482 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 20:16:09 ] >VS2010β2付属のSpy++も4文字しか認識しません。
483 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:55:22 ] >>479 正しく機能しないと思うなら、正しく機能するようにむりやり書いておけばいいと思うよ APIにバグなんて意外とあるし、バグでなければどうせそのうち矛盾して直す羽目になるから
484 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:59:14 ] 宣言が間違ってる。ref が足らない。
485 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:59:48 ] IntPtr で受けて、Masharl.PtrToStringAnsi() とかで文字列に変換しろ。
486 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 22:09:45 ] バッファ確保しとかないとダメだろ。
487 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 22:32:19 ] 相手側の実装の問題かも
488 名前:467 mailto:sage [2010/01/12(火) 22:50:04 ] 自己解決しました
489 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 22:57:01 ] マーシャリングの問題なのでAPIスレの範疇ではない
490 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 23:11:51 ] XP VC6 SDK _MBCSビルドで正常に表示されている仮想リストビューが _UNICODEビルドに変更すると LVN_GETDISPINFO(W)が来ず、なぜか LVN_GETDISPINFO(A)が来るのでそれに対し WCHAR文字列のポインタを与えると それを charと解釈し正常に文字が表示されません。 試しに LVS_OWNERDATAを外して InsertItemで WCHARの文字列を挿入すると 3カラム中 1カラム目は正常に表示され、2,3カラム目はデータが無いので LVN_GETDISPINFO(A) が 発生し、前述と同じ表示になります。 LVN_GETDISPINFO(A)に対し、WCHAR文字列ではなくchar文字列のポインタを与えると 2,3カラム目も正常に表示され、1カラム目は WCHAR、2,3カラム目は charという おかしな状態になります。 何か LVN_GETDISPINFO(W)が来ない原因が思い当たりますでしょうか。
491 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 23:52:31 ] >>490 ウィンドウクラスは WC_LISTVIEWW になっているかい?
492 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 23:57:50 ] はい。念のため、CreateWindowExW、WC_LISTVIEWW としても実行してみましたが 同じでした
493 名前:490 mailto:sage [2010/01/13(水) 00:56:40 ] 原因が分かりました。 他の言語の GUIに リストビューを貼り付ける形で 何の言語からも手軽に 仮想リストビュー や表示するデータを利用できるように作った DLLなのですが、その親となる相手方のコントロ ールやウィンドウをサブクラスしていて、親(相手方)が ANSIだった為 リストビューが親に ANSI のメッセージ(WM_NOTIFY)を送っていたようです。 間に1枚 UNICODEのコントロールを作成することで解決しました。 >>491 ありがとうございました
494 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:31:03 ] BitBltでソースの画像より大きいサイズを指定すると 余った部分が真っ黒になるようだけど、 その部分の色を指定することは出来ないの?
495 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 02:51:59 ] >>494 背景とソースを合成したビットマップを動的に作成してBitBltするか ソースの画像サイズでBitBltしてから描画した画像の範囲をExcludeClipRectして最後にソースよりも大きいサイズの矩形を塗りつぶす。
496 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 02:57:51 ] 入力先はソースより大きくする理由はない 出力先が大きいなら塗り潰す
497 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 03:05:55 ] >>496 StretchBltと間違えていませんか? BitBltは入力元のサイズは指定できませんよ。
498 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 03:14:59 ] 指定できなくても元サイズはあるだろう destをそれと同じサイズにすればいいだけ
499 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 03:23:43 ] 真っ黒になる(=ゼロクリアする)かどうかって不定じゃなかったか? ちゃんと正しいサイズを指定しろ。
500 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 03:32:19 ] >>498 じゃあこれはどういう意味ですか? > 入力先はソースより大きくする理由はない
501 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 03:40:52 ] 絵を絵より大きなサイズ指定して出力しても仕方がないだろう
502 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 03:56:24 ] >>500 そんなん俺に聞かれたって知るかよ
503 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 05:42:34 ] 知らないならレスしないで下さい。ウザイだけです。
504 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 10:28:10 ] そもそもBitBltにソースのサイズを超える指定をした場合の言及がないので、 動作は未定義と考えるべき。 ドライバの実装など環境に依存する可能性があるので、そもそも使うべきではない。
505 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 10:59:23 ] Vista以降はドライバに依存しないでしょ
506 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 13:02:16 ] だれがVista以降専用だと書いているんだ? なんで脳内妄想で書いてもいない前提条件を付けるの?
507 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 13:56:45 ] 質問する際に対象OSを書かない場合は質問時点での最新OSとみなします。
508 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 14:12:45 ] SDK的解釈かよw
509 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 18:03:45 ] >>496 ダブルバッファとやらだと 画面全体のサイズに描画するものじゃないの?
510 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 18:22:08 ] 画面全体のサイズのバッファを用意してるからな
511 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 12:37:57 ] [Mainウィンドウ]→→→※[TreeViewウィンドウ(Mainのowned)] ↓ [Mainダイアログ(Mainの子)] ※印のTreeViewウィンドウは、CreateWindow()でなければ実現できない 機能を持たせているので、独自にメッセージループをもっています。 ここで、その※印のTreeViewウィンドウを開いたまま Mainウィンドウを 閉じてアプリを終了すると、”ゾンビ状態?”になり、タスクマネージャーに プロセスが残ります… どうも PostQuitMessage() が実行されてないようなんですが、 なにが悪いのか、ヒントだけでもお願いいたします。 m(。。)m
512 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 12:51:47 ] PostQuitMessageで独自のメッセージループは抜けるけど、 元のメッセージループはそのまま走っているからじゃないかな もう一回PostQuitMessageしてみたらどうだろう
513 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 14:27:28 ] > CreateWindow()でなければ実現できない機能 意味不明 たぶんTreeViewをサブクラスすれば済む話のような気がする
514 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 17:25:29 ] 設計思想が悪い
515 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 17:42:35 ] 頭が悪い
516 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 17:50:04 ] >CreateWindow()でなければ実現できない >機能を持たせているので、独自にメッセージループをもっています。 CreateWindowの利用と、独自にメッセージループを持つという内容が繋がらない。 この独自というのがTreeViewを完全に再実装しているのか、 メッセージループの中でさらにメッセージループを使っているということなのか、 別スレッドで回しているということなのか全く伝わらない。
517 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:09:18 ] 全く伝わらない奴がなぜレスするの?
518 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:14:47 ] 独自のモーダルループを用意してるんだろ。 そんな事も分からない連中は黙っとけ。
519 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:26:01 ] 俺も全く意味が分からなくてレスしなかったけど、意味が分からないということも 伝えないとダメだなw 同じスレッドで作成したウインドウなら、普通は全て1つのメッセージループで 処理するものだしね。 別のものを「メッセージループ」と間違って呼んでいるのか、それとも別スレッドなのか、 あるいはPeekMessageでhWndを限定しながら回してるのか。 CreateWindowでなければ実現できない機能というのもよく分からない。 Dialogだとできないって意味なのかな? >>518 TreeViewウインドウを開いたままMainウインドウを操作できるようだから、 モーダルではないと思う。
520 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:35:30 ] IEのプロキシ設定を行った場合、 そのアドレス、ポートの情報を win32api で取得することは可能でしょうか?
521 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:48:57 ] >>519 モーダルダイアログとモーダルループの違いも分からないの?馬鹿なの?
522 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:54:07 ] モーダルダイアログとモーダルループが分からない人ってまだ居たのか。 まあ、回答者のレベルが低すぎるのがこのスレ最大の欠点だが。
523 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:59:59 ] どこのスレにも一人ぐらいいるでしょw ろくに知識無いくせにやたらと回答したがる奴
524 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:39:42 ] オレオレ
525 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:40:25 ] エンドレスループですね
526 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 20:44:29 ] 知識ある人はレスしないで下さい。ウザイだけです。
527 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 21:17:37 ] もし、※ループのGetMessageでWM_QUITを拾うと、WM_QUITがMSGキューから消えてる Mainループでは、WM_QUITが拾えないので無限ループ
528 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 21:19:26 ] 正しくは、WM_QUITは、内部フラグをONにしているだけとか書くなよ>知識あるやつ
529 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 22:02:55 ] >>512 で答え出てるのにここまで引っ張るあたりさすがだな しかも知識無い馬鹿まで混じってるしw
530 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 22:07:57 ] Win32 の基礎知識を理解してない馬鹿の回答は禁止します。
531 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 22:26:29 ] >>520 InternetQueryOption
532 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 22:31:15 ] >>529 >>512 の現象分析は正しいが、解決法は間違っとる。
533 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 22:58:45 ] 間違ってないよ そんな事さえ分からんのか
534 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:00:41 ] 知識無い馬鹿はスルーしろ。
535 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:03:11 ] >>532 間違っているというのなら、何が間違っていて正解は何なのかを提示しろ。 煽るだけのどこかの馬鹿と一緒になるぞ。
536 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:17:45 ] どこかの馬鹿(笑) お前だよwww
537 名前:デフォルトの名無しさん [2010/01/14(木) 23:21:34 ] msdnに検索機能が無いとかほざいた馬鹿?
538 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:23:44 ] 正解
539 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:31:48 ] どうでもいい
540 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:35:19 ] ▄▄ ▄▄▄ █ ▄█ ▄██▄▄ ▄▄▄▄▄ ▀▀▀▀▀▀█▄▄▄▄▄ █ ▄█▄▄▄▄ ▀ █ ▀▀▀▀▀▀ █ █ █▄ █ ▀▀▀▀ ▀▀▀█▀▀▀ █ █▄ █ ▄█ █▀▀█ █ █▄ ▀▀▀ ▀▀▀ ▀▀▀▀ ▀ ▀▀ ▄▄▄▄▄▄ ▄▄▄ ▀▀▀▀ █▀▀ ▀▀▀▀▀█▀ █ █▀ █ ▀▀█▀ ▀▄ █ █▀▀▀ █ █▄ ▀ █▄▄▄ █ ▄▄▄ ▀▀ ▀ ▀▀▀
541 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:48:14 ] 許しを請うなら二度と来るな。
542 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:53:34 ] 許しを請いに来い
543 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:57:32 ] ねえ、Win32の知識に乏しいのになぜスレに居るの? 正直に答えてよ。
544 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 23:59:58 ] 質問スレだからだよ
545 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:04:53 ] 理由になってない。 少なくとも回答する立場では無いだろう。
546 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:05:44 ] 元の質問者ほったらかしで雑談するのもうやめようぜ。
547 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:07:44 ] 質問は>>512 で解決してるだろ
548 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:09:31 ] 現時点で未解決の質問は>>543 だけです 当事者は早く答えなさい
549 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:15:07 ] >>535 > 質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
550 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 00:24:42 ] >>549 MSDNに検索機能なんてないだろ いったいどれだけホラ吹けば気が済むんだ?
551 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 02:42:05 ] ホント、学生レベルの回答者が多いな。
552 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 07:15:44 ] どこかの馬鹿という言葉にすぐさま反応しているのは、 自分にその認識があるのを認めてしまったことを示すわけだけどね。
553 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:14:08 ] ちょっとAPIの質問と違うのですが、CreateWindowでコマンドボタンを作成した場合 戻り値のHWNDはどこに置くのがスタンダードなんでしょうか? メッセージで呼び出されるウィンドウプロシージャ内にstatic宣言かグローバル宣言かに ナルト思うのですが。
554 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 10:02:43 ] GWL_USERDATAにオク。
555 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 10:12:14 ] ウインドウ自体をclassで管理して、親ウインドウのメンバ内に置く。
556 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 10:52:58 ] ボタンくらいならID振って、戻り値は関数の成否判定のみ
557 名前:デフォルトの名無しさん [2010/01/15(金) 13:55:41 ] レジストリファイル(.reg)を プログラム上から読込み、レジストリ登録を行いたいのですが、 間単に行えるAPIはないでしょうか? また、逆に指定したレジストリのキー配下を.reg形式で出力するAPIも あれば教えていただきたいです。
558 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 14:01:08 ] regedit使え
559 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 14:02:35 ] むしろreg.exe使え
560 名前:557 [2010/01/15(金) 14:08:25 ] >>558 ,559 外部のモジュールが使えないので、悩んでいます。 APIがなければ、自作で.regファイルを読み込み、 1個ずつ登録して行きます。
561 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 14:09:58 ] 外部て、OSに標準で備わってるファイルだろ
562 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 14:16:47 ] APIだってある意味外部のモジュールでしょうが
563 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 14:50:11 ] 557は頭が悪いからその辺理解できないのね
564 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 15:18:47 ] >>557 そういう用途は恐らくVB-Scriptを使うのが最善ではないかと
565 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 15:38:38 ] "VB-Script"?
566 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:02:46 ] VBScriptなりJavaScriptなり場合によってはPerlScriptを 使ってWSHでも使えば?Windows Scripting Host. メモ帳でコード作ってファイルのアイコン、マウスク リック一発で一発起動。 Windowx9xの頃からあるんでそこそこ安定しているし 最近のマシンだったら十分早い。 Windows power shellのほうが良いという人はそっち 使えばいいし... C++でレジストリ環境のAPIを使うやり方は恐らく とりあえずは知らなくてもよいことまで いちいち勉強しなければならなくなる可能性大
567 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:24:51 ] そんな事しなくてもバッチファイルでregコマンドを呼べばいいじゃん
568 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:29:58 ] >>566 はreg.exeで.regファイルが読み書き出来るのを知らないんでしょ
569 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:40:22 ] プロシージャ呼び出しじゃなきゃいや。という理由であったとしても、 もRPCの仕組み知っていれば意味無い事がわかるし。