小编Rom*_* R.的帖子

在NTFS卷上快速查找一组文件名,最好通过其MFT

我正在编写一个工具,可以找到适用于Mac和Windows的iTunes资料库的丢失文件.在Mac上,我可以通过使用精彩的"CatalogSearch"功能命名来快速查找文件.

但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?).

经过一些谷歌搜索,我了解到有一些工具(如TFind,Everything)直接读取NTFS目录并扫描它以按名称查找文件.

我想做同样的事情,但不必从头开始(虽然我过去写了很多磁盘工具,但我从来没有精力去挖掘NTFS).

我想知道是否有现成的库,可能是.dll,它会给我这个搜索功能:传入一个文件名,回到它的路径.

或者,Windows索引服务怎么样?至少当我在最近安装的XP Home系统上尝试此操作时," 开始"菜单下的" 搜索"操作实际上会扫描所有目录,这表明它没有完整的数据库.由于我根本不是Windows用户,我想知道为什么这不起作用.

最后,我需要的完整解决方案是:我有一个要查找的文件名列表,我需要搜索整个磁盘的代码(或者使用数据库)来一次性获取所有结果.例如,搜索不应该为我正在查找的每个文件启动新的完整扫描.这就是为什么我认为MFT方式是最优的,因为它可以快速迭代所有名称,将每个名称与我的列表进行比较.

windows filesystems ntfs ntfs-mft

5
推荐指数
1
解决办法
2663
查看次数

转储 $mft 文件的内容

对于我正在做的一些商业项目,我需要能够读取 $mft 文件中存储的实际数据。

我找到了一个可以提供帮助的gpl 库,但由于它是 gpl,我无法将其集成到我的代码中。

有人可以向我指出一个我可以使用的项目/或者向我指出相关的 Windows API(不需要 1000 行代码来实现的东西)

顺便说一句,为什么 Windows 不允许我直接读取 mft 文件?(通过创建文件和读取方法,如果我想毁掉我的驱动器,那是我的事而不是女士的事)。

谢谢。

windows kernel ntfs ntfs-mft

5
推荐指数
1
解决办法
6014
查看次数

DirectShow:网络摄像头预览和图像捕获

在查看一个非常相似的问题并看到几乎相同的代码后,我决定分别提出这个问题.我想在DirectShow使用的默认窗口中显示网络摄像头视频流的视频预览,并且我还希望能够在任何给定时刻"拍摄"视频流.

我从MSDN上的DirectShow示例以及AMCap示例代码开始,并且我认为应该预览部分,但不是.我没有找到从视频流中抓取图像的例子,除了使用SampleGrabber,它已被弃用,因此我试图不使用它.

下面是我的代码,换行.请注意,EnumerateCameras中的大多数代码都已注释掉.该代码将用于附加到另一个窗口,我不想这样做.在MSDN文档中,它明确指出VMR_7创建自己的窗口来显示视频流.我的应用程序中没有错误,但此窗口永远不会出现.

我的问题是:我做错了什么?或者,如果您知道我想要做的一个简单示例,请将我链接到它.AMCap不是一个简单的例子,仅供参考.

注意:InitalizeVMR用于在无窗口状态下运行,这是我的最终目标(集成到DirectX游戏中).但是现在,我只想让它以最简单的方式运行.

编辑:此问题的第一部分,即预览相机流,已解决.我现在只是在寻找已弃用的SampleGrabber类的替代品,以便我可以随时拍摄照片并将其保存到文件中.

编辑:在谷歌搜索了近一个小时后,一般的共识似乎是你必须使用ISampleGrabber.如果您发现任何不同,请告诉我.

测试代码(main.cpp):

CWebcam* camera = new CWebcam();    
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);    
MessageBox(NULL, L"text", L"caption", NULL);    
if (SUCCEEDED(hr))
{       
camera->Create();       
camera->EnumerateCameras();     
camera->StartCamera();  
}   
int d;  
cin >> d;
Run Code Online (Sandbox Code Playgroud)

Webcam.cpp:

#include "Webcam.h"

CWebcam::CWebcam() {
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    //m_pTexInst = nullptr;
    //m_pTexRes = nullptr;
}

CWebcam::~CWebcam() {
    CoUninitialize();
    m_pDeviceMonikers->Release();
    m_pMediaController->Release();
}

BOOL CWebcam::Create() {
    InitCaptureGraphBuilder(&m_pFilterGraph, &m_pCaptureGraph);
    hr = m_pFilterGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaController);
    return TRUE;
}

void CWebcam::Destroy() {
}

void CWebcam::EnumerateCameras() {  
    HRESULT hr = …
Run Code Online (Sandbox Code Playgroud)

c++ windows video webcam directshow

5
推荐指数
1
解决办法
1万
查看次数

使用waveInOpen保存wave文件

我正在尝试使用waveInOpen和co将声音录制到.wave文件中(请参阅此处)

这是我的代码记录到缓冲区,它似乎工作:

#include <Windows.h>
#include <MMSystem.h>
#include <iostream>

using namespace std;

int main(){

    HWAVEIN microHandle;
    WAVEHDR waveHeader;

    const int NUMPTS = 22050 * 10;   // 10 seconds
    int sampleRate = 22050;
    short int waveIn[NUMPTS];   // 'short int' is a 16-bit type; I request 16-bit samples below
                                // for 8-bit capture, you'd use 'unsigned char' or 'BYTE' 8-bit types

    MMRESULT result = 0;

    WAVEFORMATEX format;
    format.wFormatTag=WAVE_FORMAT_PCM;      // simple, uncompressed format
    format.wBitsPerSample=8;                //  16 for high quality, 8 for telephone-grade …
Run Code Online (Sandbox Code Playgroud)

c++ audio winapi wav

5
推荐指数
1
解决办法
1万
查看次数

使用 Media Foundation 进行视频合成

我正在尝试将 2 个视频合成为一个(也是音频)并另存为文件。比如说,在最终视频的左半部分显示源视频,在右侧显示其他源。任何编码都可以。不适用于 DirectShow。

我怀疑 IMFVideoMixerControl 可能与此有关,但不幸的是,我对 MF 太陌生,无法确定要采取的正确步骤来实现这一目标。如果您能给我一些指导,或者网络上有任何示例,请告诉我。感谢您的帮助。

c++ windows video winapi ms-media-foundation

5
推荐指数
1
解决办法
2137
查看次数

CreateFile返回错误INVALID_HANDLE_VALUE(对于COM端口),并且GetLastError返回"找不到指定的文件"

我打开一个端口与设备通信并控制设备,但CreateFile()函数返回INVALID_HANDLE_VALUE.

GetLastError()返回2表示找不到指定的文件.

我的代码如下所示:

wsprintf( szPort, "COM%d", nPort );
m_hIDComDev = CreateFile(szPort,
                         GENERIC_READ | GENERIC_WRITE, 
                         0, 
                         NULL, 
                         OPEN_EXISTING, 
                         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 
                         NULL);
if (m_hIDComDev == INVALID_HANDLE_VALUE)
{
    DWORD err=GetLastError();
}
Run Code Online (Sandbox Code Playgroud)

为什么会出现这个问题?

c++ winapi serial-port

5
推荐指数
1
解决办法
1万
查看次数

ffmpeg sws_scale从YUV420P到RGB24的图像失真

尝试使用sws_scale将YUV420p转换为RGB24时,图像失真。

码:

ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
if (ret < 0) {
    fprintf(stderr, "Error decoding video frame\n");
    return ret;
}
if (*got_frame) 
{
    printf("video_frame%s n:%d coded_n:%d pts:%s\n",
               cached ? "(cached)" : "",
               video_frame_count++, frame->coded_picture_number,
               "#"/*av_ts2timestr(frame->pts, &video_dec_ctx->time_base)*/);
    /* copy decoded frame to destination buffer:
     * this is required since rawvideo expects non aligned data */
    av_image_copy(video_dst_data, video_dst_linesize,
                  (const uint8_t **)(frame->data), frame->linesize,
                  video_dec_ctx->pix_fmt, video_dec_ctx->width, video_dec_ctx->height);
    /* write to rawvideo file */
    fwrite(video_dst_data[0], 1, video_dst_bufsize, video_dst_file);

    AVPicture pic;
    avpicture_alloc( &pic, AV_PIX_FMT_RGB24, frame->width, …
Run Code Online (Sandbox Code Playgroud)

c++ ffmpeg

5
推荐指数
1
解决办法
3184
查看次数

如何在没有 AVISaveOptions 对话框的情况下获取 AVICOMPRESSOPTIONS?

我正在尝试使用我在网上找到的示例(不记得确切的来源)以编程方式从位图生成 AVI 文件。

这是我获取选项的代码

    unsafe private void SetOptions() {

        AVICOMPRESSOPTIONS opts = new AVICOMPRESSOPTIONS();
        opts.fccType           = 0; //fccType_;
        opts.fccHandler        = 541215044;//0;//fccHandler_;
        opts.dwKeyFrameEvery   = 0;
        opts.dwQuality         = 0;  // 0 .. 10000
        opts.dwFlags           = 8;//0;  // AVICOMRPESSF_KEYFRAMES = 4
        opts.dwBytesPerSecond  = 0;
        opts.lpFormat          = (System.IntPtr)0; //new IntPtr(0);
        opts.cbFormat          = 0;
        opts.lpParms           = (System.IntPtr)0; //new IntPtr(0);
        opts.cbParms           = 3232;//0;
        opts.dwInterleaveEvery = 0;


        AVICOMPRESSOPTIONS* p = &opts;
        AVICOMPRESSOPTIONS** pp = &p;

        IntPtr x       = ps_;
        IntPtr* ptr_ps = &x;

        AVISaveOptions(0,0,1,ptr_ps,pp);

        // TODO: AVISaveOptionsFree(...) …
Run Code Online (Sandbox Code Playgroud)

.net c# vfw avi

5
推荐指数
1
解决办法
2283
查看次数

为什么MediaElement有时会无声地失败,我该如何纠正呢?

在我的WPF项目中,我创建了一个包含多个MediaElements播放视频的视图.有时,在一个或所有MediaElements之间的任何地方都将无法播放分配给它们的视频,而是显示黑色矩形,或根本不显示.发生这种情况时不会发生MediaFailed事件.MediaOpened事件会在所有MediaElements上出现,即使他们不播放视频也是如此.

我已经为我的显卡安装了最新的驱动程序,这对此问题没有任何影响.

是否有一个程序可用于确保每个MediaElement始终如一地播放?

示例源代码如下.包含视频文件的完整示例项目位于github,网址https://github.com/duggulous/MediaElementIssueExample

MainWindow.xaml

<Window x:Class="VideoDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="1920" Width="1080">
<Grid Name="rootContainer" Background="Pink">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="404" />
            <ColumnDefinition Width="136" />
            <ColumnDefinition Width="136" />
            <ColumnDefinition Width="134" />
            <ColumnDefinition Width="270" />
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="270" />
            <RowDefinition Height="30" />
            <RowDefinition Height="412" />
            <RowDefinition Height="416"/>
            <RowDefinition Height="526"/>
            <RowDefinition Height="264"/>
        </Grid.RowDefinitions>

    <MediaElement x:Name="panel1" Margin="-1" 
                Grid.Column="0" Grid.Row="0"
                Grid.ColumnSpan="2" Grid.RowSpan="2" 
                Source="media/1-ekg.mp4"
                MediaOpened="panel1_MediaOpened"
                MediaFailed="panel1_MediaFailed"
                MediaEnded="panel1_MediaEnded"/>

    <MediaElement x:Name="panel2" Margin="-1"
                Grid.Column="2" Grid.Row="0" 
                Grid.ColumnSpan="3" Grid.RowSpan="1"
                Source="media/2-star.mp4"
                MediaOpened="panel1_MediaOpened"
                MediaFailed="panel1_MediaFailed"
                MediaEnded="panel1_MediaEnded"/>

    <MediaElement x:Name="panel3" Margin="-1"
                Grid.Column="0" Grid.Row="2" 
                Grid.ColumnSpan="2" …
Run Code Online (Sandbox Code Playgroud)

c# wpf video mediaelement ms-media-foundation

5
推荐指数
1
解决办法
1411
查看次数

MediaFoundation,位图数组为mp4

我把位图作为BYTE数组保存,它以微软CBitmap类的非常相似和可互换的格式保存每个像素的RGB值.所以让我们考虑一下我有一个CBitmaps数组,我想用MediaFoundation Transcode Api将它们转换为mp4,如下例所示:toMp4.但是在此示例中,它们从URL流式传输.

 // Use the source resolver to create the media source
  hr = pResolver->CreateObjectFromURL(pszURL, MF_RESOLUTION_MEDIASOURCE, NULL, &ObjectType, &pSource);
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我的记忆中有我的位图.所以我相信我可以使用这个功能.IMFSourceResolver :: CreateObjectFromByteStream

我不确定这是否可行.总结如何使用转码api将我的CBitmap数组转换为mp4?

c++ video mp4 bitmap ms-media-foundation

5
推荐指数
1
解决办法
698
查看次数