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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0301
★☆創造神☆★exec命令のプロパティ8解決


★☆創造神☆★

リンク

2018/3/1(Thu) 16:40:49|NO.82580


exec"C:\\Users\\"+sysinfo(1)+"\\",,"properties"

パスはあっているはずなのにエラーが出ます
どうすればいいでしょうか



この記事に返信する


あまら

リンク

2018/3/2(Fri) 19:41:47|NO.82597

確認できましたが、これはなんでしょうね……。

管理者権限的な問題とかかと思いましたが、
システムフォルダなんかは普通にプロパティ表示できるのに
ユーザー名フォルダだけできないのがわかりませんね。

おそらくHSP内部でやっているであろうプロパティ表示を
APIでやってみましたが失敗でした。
#include "shell32.as"
#include "kernel32.as" lpFile = "C:\\Users\\"+sysinfo(1)+"\\"; lpVerb = "properties"; dim exinfo, 15; exinfo(0) = 60; // cbSize 構造体サイズ exinfo(1) = 0x0000000c; // fMask SEE_MASK_INVOKEIDLIST exinfo(2) = hwnd; // hwnd ウィンドウハンドル exinfo(3) = varptr(lpVerb); // lpVerb コマンド exinfo(4) = varptr(lpFile); // lpFile ファイル・フォルダのパス exinfo(7) = 1; // nShow SW_SHOWNORMAL ShellExecuteEx varptr(exinfo); rc1 = stat; if( rc1 != 0 ) { mes "プロパティ表示成功"; } else { GetLastError; rc2 = stat; mes "プロパティ表示失敗"; // エラーコードを文字列で取得。 sdim errstr, 1024; FormatMessage 0x00001000, 0, rc2, 0, varptr(errstr), 1024, 0; mes "エラーコード: "+rc2+""; mes errstr; } stop;
「エラーを特定できません」というダイアログと
「この操作はユーザーによって取り消されました。」というエラーメッセージ。

取り消した覚えなんて無いんですけどね。。。



みじゅくもの

リンク

2018/3/4(Sun) 17:16:50|NO.82616

ShellExecuteEx varptr(exinfo);
rc1 = stat;
if( rc1 != 0 ) {

ShellExecuteEx varptr(exinfo);
rc1 = stat;
wait 500
if( rc1 != 0 ) {
にすると、
「この操作はユーザーによって取り消されました」

「この操作を正しく終了しました。」
になりますた
waitを入れたらいいのかも?(-_-)



みじゅくもの

リンク

2018/3/4(Sun) 17:17:46|NO.82617

ShellExecuteEx varptr(exinfo);
rc1 = stat;
if( rc1 != 0 ) {

ShellExecuteEx varptr(exinfo);
rc1 = stat;
wait 500
if( rc1 != 0 ) {
にすると、
「この操作はユーザーによって取り消されました」

「この操作を正しく終了しました。」
になりますた
waitを入れたらいいのかも?(-_-)



みじゅくもの

リンク

2018/3/4(Sun) 17:18:49|NO.82618

ShellExecuteEx varptr(exinfo);
rc1 = stat;
if( rc1 != 0 ) {

ShellExecuteEx varptr(exinfo);
rc1 = stat;
wait 500
if( rc1 != 0 ) {
にすると、
「この操作はユーザーによって取り消されました」

「この操作を正しく終了しました。」
になりますた
waitを入れたらいいのかも?(-_-)



みじゅくもの

リンク

2018/3/4(Sun) 17:19:38|NO.82619

なぜか3かいも送信してしまった
すまない



あまら

リンク

2018/3/4(Sun) 23:46:27|NO.82624

GetLastErrorは直前の処理で発生したエラーの状況を調べるためのAPIなので

ShellExecuteEx
wait
GetLastError
とすると、ShellExecuteExのエラーではなくて
wait処理のエラーを調べてしまうのではないかと。。。

waitは正常に動作しているでしょうから
それは「この操作を正しく終了しました。」になるでしょう。。。



いののて

リンク

2018/3/5(Mon) 09:50:16|NO.82629

Shell32のSHObjectProperties関数を使えばうまく表示させることができました。


#uselib "shell32.dll"
#func SHObjectProperties "SHObjectProperties" int, int, wptr, wptr #define SHOP_FILEPATH 0x00000002 szObjectName = "C:\\Users\\"+sysinfo(1)+"\\" SHObjectProperties hwnd, SHOP_FILEPATH, szObjectName, 0 if stat{ mes "成功" }else{ mes "失敗" }



★☆創造神☆★

リンク

2018/3/5(Mon) 20:18:07|NO.82634

おお!感激!
やっと解決しました
ありがとうございました!



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