象按下Ctrl+Alt+Del得到的"应用程序"列表,包括得到程序的标题等信息?有相应的API吗

解决方案 »

  1.   

    {转zswang伴水清清代码:}uses CommCtrl;procedure TForm1.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
      vCount: Integer;
      vProcessId: Longword;
      vProcess: THandle;
      vPointer: Pointer;
      vBuffer: array[0..255] of Char;
      vNumberOfBytesRead: Longword;
      I: Integer;
      vTBBUTTON: TTBButton;
      vWindow: THandle;
    begin
      vHandle := FindWindow('Shell_TrayWnd', nil);
      vHandle := FindWindowEx(vHandle, 0, 'ReBarWindow32', nil);
      vHandle := FindWindowEx(vHandle, 0, 'MSTaskSwWClass', nil);
      vHandle := FindWindowEx(vHandle, 0, 'ToolbarWindow32', nil);
      if vHandle = 0 then Exit;
      vCount := SendMessage(vHandle, TB_BUTTONCOUNT, 0, 0);
      GetWindowThreadProcessId(vHandle, vProcessId);
      vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
        PROCESS_VM_WRITE, False, vProcessId);
      vPointer := VirtualAllocEx(vProcess, nil, $1000, MEM_RESERVE or MEM_COMMIT,
        PAGE_READWRITE);
      try
        for i := 0 to vCount - 1 do
        begin
          SendMessage(vHandle, TB_GETBUTTON, i, Integer(vPointer));
          ReadProcessMemory(vProcess, vPointer, @vTBBUTTON,
            SizeOf(TTBButton), vNumberOfBytesRead);
          if vTBBUTTON.fsStyle = 170 then Continue; // 组按钮
          ReadProcessMemory(vProcess, Pointer(vTBBUTTON.dwData), @vWindow,
            SizeOf(Integer), vNumberOfBytesRead);
          SendMessage(vHandle, TB_GETBUTTONTEXT, i, Integer(vPointer));
          ReadProcessMemory(vProcess, vPointer,
            @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
          Memo1.Lines.Add(Format('Handle=%d,Title=%s', [vWindow, vBuffer]));
        end;
      finally
        VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
        CloseHandle(vProcess);
      end;
    end;
      

  2.   

    枚举所有进程
    http://download.csdn.net/source/286525