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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0711
ungaご教授ください。2未解決


unga

リンク

2021/7/11(Sun) 18:10:43|NO.93211

 ご教授、よろしくお願いいたします。
 以下のソースの95行目(〇の行)で「外部オブジェクトの呼び出しに失敗しました」となります。
 ところが、不思議なことに、試しに別のPCで実行してみるとエラーが出ませんでした。
 因みにエラーになったPCのHSPバージョンは3.5、エラーが出なかったPCのHSPバージョンは3.32です。


#uselib "user32.dll" #cfunc global GetForegroundWindow "GetForegroundWindow" #func global GetWindowText "GetWindowTextA" int,sptr,int title "フォルダ監視" screen 0,640,480 datalist = "" OpendFolder = "" OpendFolder_old = "" font msgothic,24 objmode 2 pos 0,32 mesbox datalist,ginfo_winx,ginfo_winy-32,0 repeat wait 5 sdim datalist,32 ;文字列変数OpendFolder ;今開かれてるフォルダを取得する ;今開かれてるのがフォルダでない場合は ;空の文字列が返る gosub *GetOpenedFolder ;前と比べて変わってたら更新処理 if ( OpendFolder != "" ) & ( OpendFolder != OpendFolder_old ) { OpendFolder_old = OpendFolder datalist = "開いているフォルダ:\n"+OpendFolder+"\n" dlist="" dirlist dlist,OpendFolder+"\\*",1 if (stat) { datalist+="\nファイル("+stat+")\n"+dlist } dlist="" dirlist dlist,OpendFolder+"\\*",5 if (stat) { datalist+="\nフォルダ("+stat+")\n"+dlist } objprm 0,datalist } loop end *GetOpenedFolder ;いま最前面になっているウインドウが ;エクスプローラである、 ;つまりフォルダが開かれている状態なら、 ;そのフォルダパスをOpendFolderに代入する。 ;それ以外の場合、OpendFolder="" OpendFolder="" ;最前面ウインドウのタイトルを取る sdim FgwinTitle,1024 GetWindowText GetForegroundWindow(), varptr(FgwinTitle), 1024 newcom com_sa, "Shell.Application" ;COMオブジェクトの作成 ;シェル(=エクスプローラ)の機能を呼び出す comres com_sa_wins ;戻り値の代入先を指定 com_sa->"Windows" ;今開かれているフォルダ全部を取得 ;comresで戻り値に設定した変数にセットされる ;「Windows」オブジェクトとして返る。 opendFoldersCount = com_sa_wins("Count") ;何個のフォルダが開かれてるかを取得 repeat opendFoldersCount sdim stmp,1024 com_sa_IEobj=0 comres com_sa_IEobj com_sa_wins->"Item" cnt ;項目(Item)のそれぞれは ;「InternetExplorer」オブジェクト ;になっている。これを取得。 ;そいつの開いてるフォルダパスを取る 〇com_Document = com_sa_IEobj( "Document" ) com_Folder = com_Document( "Folder" ) com_Self = com_Folder( "Self" ) stmp = com_Self("Path") if ( instr(stmp,0,FgwinTitle) != -1 ){ OpendFolder = stmp } delcom com_sa_IEobj loop delcom com_sa delcom com_sa_wins return



この記事に返信する


kou

リンク

2021/7/13(Tue) 16:18:43|NO.93214

環境が詳しく分からないので想像でしかないのですが、
COMを使っているので、PCの方が問題かと思いまして(別PCで確認とのことなので)
以下、調査してみてはいかがでしょうか?

・Shell32.dll のバージョン、サポート範囲の確認
・メソッド実行やプロパティ取得の前にオブジェクトが返ってきているか(varuseなどで調べる)


また、直接URLのプロパティを取得するのでは、やりたい事としては問題ございますか?
84秒目あたりのループを置き換えたらどうでしょうか。

repeat opendFoldersCount com_sa_IEobj=0 comres com_sa_IEobj com_sa_wins->"Item" cnt if varuse(com_sa_IEobj)!=0 { com_URL = com_sa_IEobj("LocationURL") strrep com_URL, "file:///","" strrep com_URL, "%20"," " OpendFolder = com_URL } delcom com_sa_IEobj loop



unga

リンク

2021/7/13(Tue) 21:50:52|NO.93218

ご教授、ありがとうございます。
教えていただきましたコードに置き換えてみましたところ、うまくいきました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.93211への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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