以下のソースの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