冥界3大法王 发表于 2024-3-6 16:51

我的try一板,削中反攻技能咋不起作用呢?

本帖最后由 冥界3大法王 于 2024-3-6 17:36 编辑


procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
if POS('.rvf', sShellListView1.Selected.Caption) > 0 then
begin
    try
      RichViewEdit2.LoadRVF(sShellListView1.SelectedFolder.PathName);
      RichViewEdit2.Format;
    finally
      ShowMessage(sShellListView1.Selected.Caption + #13#10 + '请按回车键打开文件夹!');
    end;
end;
end;


有个用鼠标双击打开文件夹时触发的bug。。。当然,我也可以用反汇编的方法消除掉!

但是我加了判断是否文件扩展名是 .rvf了啊。。
再有我也加了 tr ...finally...end捕获异常了啊。但咋没有捕获到呢?是不是我的用法不够火候?{:301_974:}

Kls673M 发表于 2024-3-6 17:42

菜百只能来看图了,

你图带书签的软件是什么

冥界3大法王 发表于 2024-3-6 17:49

Kls673M 发表于 2024-3-6 17:42
菜百只能来看图了,

你图带书签的软件是什么

多功能高配火力全开大佬专用x64dg贴心汇编天使

爱飞的猫 发表于 2024-3-6 18:05

信息不足,需要看 0000000064183AE1 这个地址附近的代码:

https://imgsrc.baidu.com/forum/pic/item/0bd162d9f2d3572c7d57dce6cc13632762d0c357.png

冥界3大法王 发表于 2024-3-6 18:54

爱飞的猫 发表于 2024-3-6 18:05
信息不足,需要看 0000000064183AE1 这个地址附近的代码:

0000000064183AA0   | 55                        | push rbp                           |
0000000064183AA1   | 53                        | push rbx                           |
0000000064183AA2   | 48:83EC 78                | sub rsp,78                         |
0000000064183AA6   | 48:8BEC                   | mov rbp,rsp                        |
0000000064183AA9   | 48:C745 40 00000000       | mov qword ptr ss:,0      |
0000000064183AB1   | 48:C745 38 00000000       | mov qword ptr ss:,0      |
0000000064183AB9   | 48:C745 48 00000000       | mov qword ptr ss:,0      |
0000000064183AC1   | 48:C745 50 00000000       | mov qword ptr ss:,0      |
0000000064183AC9   | 48:896D 58                | mov qword ptr ss:,rbp      |
0000000064183ACD   | 48:898D 90000000          | mov qword ptr ss:,rcx      |
0000000064183AD4   | 90                        | nop                              |
0000000064183AD5   | 48:8B85 90000000          | mov rax,qword ptr ss:      |
0000000064183ADC   | 48:8B88 B00A0000          | mov rcx,qword ptr ds:   |
0000000064183AE3   | E8 087782FF               | call moretool.639AB1F0             |
0000000064183AE8   | 48:89C1                   | mov rcx,rax                        |
0000000064183AEB   | 48:8D55 50                | lea rdx,qword ptr ss:      |
0000000064183AEF   | 48:8B18                   | mov rbx,qword ptr ds:         |
0000000064183AF2   | FF53 30                   | call qword ptr ds:         |
0000000064183AF5   | 48:8B45 50                | mov rax,qword ptr ss:      |
0000000064183AF9   | 48:8945 60                | mov qword ptr ss:,rax      |
0000000064183AFD   | 48:8D0D 84010000          | lea rcx,qword ptr ds:    | 0000000064183C88:L".rvf"
0000000064183B04   | 48:8B55 60                | mov rdx,qword ptr ss:      |
0000000064183B08   | 41:B8 01000000            | mov r8d,1                        |
0000000064183B0E   | E8 3DF85EFF               | call moretool.63773350             |
0000000064183B13   | 85C0                      | test eax,eax                     |
0000000064183B15   | 0F8E A8000000             | jle moretool.64183BC3            |
0000000064183B1B   | 90                        | nop                              |
0000000064183B1C   | 48:8B85 90000000          | mov rax,qword ptr ss:      |
0000000064183B23   | 48:8B88 B00A0000          | mov rcx,qword ptr ds:   |
0000000064183B2A   | E8 51E8A3FF               | call moretool.63BC2380             |
0000000064183B2F   | 48:89C1                   | mov rcx,rax                        |
0000000064183B32   | 48:8D55 48                | lea rdx,qword ptr ss:      |
0000000064183B36   | E8 B582A3FF               | call moretool.63BBBDF0             |
0000000064183B3B   | 48:8B85 90000000          | mov rax,qword ptr ss:      |
0000000064183B42   | 48:8B88 A80A0000          | mov rcx,qword ptr ds:   |
0000000064183B49   | 48:8B55 48                | mov rdx,qword ptr ss:      |
0000000064183B4D   | E8 8E50F3FF               | call moretool.640B8BE0             |
0000000064183B52   | 48:8B85 90000000          | mov rax,qword ptr ss:      |
0000000064183B59   | 48:8B88 A80A0000          | mov rcx,qword ptr ds:   |
0000000064183B60   | E8 7B2AF3FF               | call moretool.640B65E0             |
0000000064183B65   | 90                        | nop                              |
0000000064183B66   | 48:8B85 90000000          | mov rax,qword ptr ss:      |
0000000064183B6D   | 48:8B88 B00A0000          | mov rcx,qword ptr ds:   |
0000000064183B74   | E8 777682FF               | call moretool.639AB1F0             |
0000000064183B79   | 48:89C1                   | mov rcx,rax                        |
0000000064183B7C   | 48:8D55 38                | lea rdx,qword ptr ss:      |
0000000064183B80   | 48:8B18                   | mov rbx,qword ptr ds:         |
0000000064183B83   | FF53 30                   | call qword ptr ds:         |
0000000064183B86   | 48:8D4D 40                | lea rcx,qword ptr ss:      |
0000000064183B8A   | BA 03000000               | mov edx,3                        |
0000000064183B8F   | 4C:8B45 38                | mov r8,qword ptr ss:       |
0000000064183B93   | 4C:8D0D 06010000          | lea r9,qword ptr ds:   | 0000000064183CA0:L"\r\n"
0000000064183B9A   | 48:8D05 13010000          | lea rax,qword ptr ds:    | 0000000064183CB4:L"请按回车键打开文件夹!"

爱飞的猫 发表于 2024-3-6 19:26

冥界3大法王 发表于 2024-3-6 18:54
0000000064183AA0   | 55                        | push rbp                           |
00000000641 ...

0000000064183AE1 这个地址在一个指令的中间,有点不对劲哦。

sShellListView1.Selected 这个地方有没有可能在失败的时候给你空指针(表示没有选中)?试试检查一下?

冥界3大法王 发表于 2024-3-6 19:55

爱飞的猫 发表于 2024-3-6 19:26
0000000064183AE1 这个地址在一个指令的中间,有点不对劲哦。

sShellListView1.Selected 这个地方有没 ...

procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
ShowMessage(sShellListView1.Selected.Caption);
end;

@爱飞的猫我就在这个控件的列表双击事件里啥也不写,就一个弹框得到选中的名称。。
都照样异常,你说灵异不灵异?

按道理来讲:
RichViewEdit2.LoadRVF(sShellListView1.SelectedFolder.PathName);
RichViewEdit2.Format;
加载一个选中的.rvf文件,因为鼠标双击的是文件夹,没有初始化所以该异常啊。
但是也异常说有点说不过去了。

爱飞的猫 发表于 2024-3-6 20:19

冥界3大法王 发表于 2024-3-6 19:55
procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
ShowMessage(sShellListView ...

不灵异,selected 可能是空值。对空值访问就是无法读取地址 0 的错误。

你可以参考下属代码,看看能不能用(来源):

function GetSelectedFiles(ShellListView : TShellListView) : TStringList;
var
Index : Integer;
begin
Result:=TStringList.Create;
if not ShellListView.MultiSelect then
    Result.Add(ShellListView.SelectedFolder.PathName)
else
for Index := 0 to ShellListView.Items.Count-1 do
    if ShellListView.Items.Selected AND (not ShellListView.Folders.IsFolder) then
      Result.Add(ShellListView.Folders.PathName);
end;

冥界3大法王 发表于 2024-3-6 20:57

爱飞的猫 发表于 2024-3-6 20:19
不灵异,selected 可能是空值。对空值访问就是无法读取地址 0 的错误。

你可以参考下属代码,看看能不 ...

我这么修改的:

function GetSelectedFiles(ShellListView: TsShellListView): TStringList;
var
Index: Integer;
begin
Result := TStringList.Create;
if not ShellListView.MultiSelect then
    Result.Add(ShellListView.SelectedFolder.PathName)
else
    for Index := 0 to ShellListView.Items.Count - 1 do
      if ShellListView.Items.Selected and (not ShellListView.Folders.IsFolder) then
      Result.Add(ShellListView.Folders.PathName);
end;

procedure TMainForm.sShellListView1DblClick(Sender: TObject);
begin
GetSelectedFiles(sShellListView1);
ShowMessage('11111111111111111111111');

if not sShellListView1.MultiSelect then
begin
    if POS('.rvf', sShellListView1.Selected.Caption) > 0 then
    begin
      try
      RichViewEdit2.LoadRVF(sShellListView1.SelectedFolder.PathName);
      RichViewEdit2.Format;
      finally
      ShowMessage(sShellListView1.Selected.Caption + #13#10 + '请按回车键打开文件夹!');
      end;
    end;
end;
//RunError(200);
end;
还异常,并不能得到弹框1111111111

爱飞的猫 发表于 2024-3-6 21:05

冥界3大法王 发表于 2024-3-6 20:57
我这么修改的:

function GetSelectedFiles(ShellListView: TsShellListView): TStringList;


方便整个最小重现的代码项目吗(整个只有 ShellListView 控件的窗口)?另外还需要你使用的 IDE 名称/版本方便我本地测试…

如果可以最好是直接编译到 EXE 的窗口而不是 DLL…
页: [1] 2
查看完整版本: 我的try一板,削中反攻技能咋不起作用呢?