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

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



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